From 6927bde2c6eb364b3aef1e24e37ffe261da6232a Mon Sep 17 00:00:00 2001 From: actions-user Date: Sat, 23 Aug 2025 09:17:17 +0800 Subject: [PATCH] update 2025-08-23 09:17:17 --- chinadns-ng/Makefile | 8 +- dns2socks-rust/Makefile | 8 +- luci-app-homeproxy/Makefile | 3 +- .../resources/view/homeproxy/client.js | 315 ++- .../resources/view/homeproxy/node.js | 75 +- .../resources/view/homeproxy/server.js | 39 +- luci-app-homeproxy/po/templates/homeproxy.pot | 1888 +++++++++------- luci-app-homeproxy/po/zh_Hans/homeproxy.po | 1900 ++++++++++------- .../etc/homeproxy/resources/china_ip4.txt | 269 ++- .../etc/homeproxy/resources/china_ip4.ver | 2 +- .../etc/homeproxy/resources/china_ip6.txt | 65 +- .../etc/homeproxy/resources/china_ip6.ver | 2 +- .../etc/homeproxy/resources/china_list.txt | 10 +- .../etc/homeproxy/resources/china_list.ver | 2 +- .../root/etc/homeproxy/resources/gfw_list.txt | 22 +- .../root/etc/homeproxy/resources/gfw_list.ver | 2 +- .../etc/homeproxy/scripts/generate_client.uc | 251 ++- .../etc/homeproxy/scripts/generate_server.uc | 27 +- .../root/etc/homeproxy/scripts/homeproxy.uc | 12 +- .../etc/homeproxy/scripts/migrate_config.uc | 123 +- .../homeproxy/scripts/update_subscriptions.uc | 31 +- luci-app-homeproxy/root/etc/init.d/homeproxy | 2 +- .../usr/share/rpcd/acl.d/luci-app-nikki.json | 4 - .../luasrc/controller/passwall.lua | 36 +- .../model/cbi/passwall/client/node_list.lua | 10 + .../passwall/client/node_subscribe_config.lua | 37 + .../luasrc/view/passwall/global/backup.htm | 13 +- luci-app-passwall/po/zh-cn/passwall.po | 9 + .../root/usr/share/passwall/subscribe.lua | 27 + luci-app-passwall2/Makefile | 2 +- .../cbi/passwall2/client/type/hysteria2.lua | 8 +- .../model/cbi/passwall2/client/type/ray.lua | 13 +- .../cbi/passwall2/client/type/sing-box.lua | 40 +- .../luasrc/passwall2/util_sing-box.lua | 12 +- .../luasrc/passwall2/util_xray.lua | 5 +- .../passwall2/node_list/link_share_man.htm | 24 +- luci-app-passwall2/po/zh-cn/passwall2.po | 6 + .../root/usr/share/passwall2/app.sh | 18 +- .../root/usr/share/passwall2/iptables.sh | 12 +- .../root/usr/share/passwall2/nftables.sh | 12 +- .../root/usr/share/passwall2/subscribe.lua | 7 +- .../model/cbi/shadowsocksr/client-config.lua | 16 +- .../luasrc/view/shadowsocksr/ssrurl.htm | 16 +- luci-app-ssr-plus/po/templates/ssr-plus.pot | 455 ++-- luci-app-ssr-plus/po/zh_Hans/ssr-plus.po | 455 ++-- .../usr/share/shadowsocksr/gen_config.lua | 28 +- nikki/files/nikki.upgrade | 2 - nikki/files/ucode/hijack.ut | 4 +- 48 files changed, 3750 insertions(+), 2577 deletions(-) diff --git a/chinadns-ng/Makefile b/chinadns-ng/Makefile index 26b32ce..8aa68d5 100644 --- a/chinadns-ng/Makefile +++ b/chinadns-ng/Makefile @@ -48,17 +48,17 @@ else ifeq ($(ARCH),mips64el) else ifeq ($(ARCH),i386) ifneq ($(CONFIG_TARGET_x86_geode)$(CONFIG_TARGET_x86_legacy),) PKG_ARCH:=chinadns-ng+wolfssl@i386-linux-musl@i686@fast+lto - PKG_HASH:=25a215e1b5c18f8b4f0e7f0a0925fd1c959bbfdfeb3383830d2b645a94077fc6 + PKG_HASH:=85e057dd0a0e8913b30471737436ab8b71834c494ed9f9e53544261b1ffdc8d6 else PKG_ARCH:=chinadns-ng+wolfssl@i386-linux-musl@pentium4@fast+lto - PKG_HASH:=e78feedf8fafc60749dfca576acd05b3df8e4b99912aa77a320971011ca77b1d + PKG_HASH:=2d0f1a05c82f2e21e71a6618c7f1d2e7f46aa6a21535d774d517e87ec00c989b endif else ifeq ($(ARCH),x86_64) PKG_ARCH:=chinadns-ng+wolfssl@x86_64-linux-musl@x86_64@fast+lto - PKG_HASH:=9ad100ef18f7acaecad1aaa07b07029e9e50679fc8f119977878211b1ceb96f0 + PKG_HASH:=842ea4e9816efd91d39bc76ead5c4a42e79011757e37c521b4270b675cfcb30c else ifeq ($(ARCH),riscv64) PKG_ARCH:=chinadns-ng+wolfssl@riscv64-linux-musl@baseline_rv64@fast+lto - PKG_HASH:=ed4d2cf72c2d48f19dd7678f419ce726bc2a793afc62afd6345e735dd262ca96 + PKG_HASH:=7056f47f4d6b20109e007792694dc83e5eac44c9265d7be20f6dc10375b35a9b else PKG_HASH:=dummy endif diff --git a/dns2socks-rust/Makefile b/dns2socks-rust/Makefile index 68ee706..43c3ea0 100644 --- a/dns2socks-rust/Makefile +++ b/dns2socks-rust/Makefile @@ -6,15 +6,15 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dns2socks-rust -PKG_VERSION:=0.2.0 +PKG_VERSION:=0.2.1 PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/tun2proxy/dns2socks.git -PKG_SOURCE_DATE:=2025-03-19 -PKG_SOURCE_VERSION:=5f5805bc5eba6530cec27f76860db1e19c1f2382 -PKG_MIRROR_HASH:=f45ff9bff184f6eddbc444fc9a0611a47043e3b3422b7c33459bf7e03f37c37e +PKG_SOURCE_DATE:=2025-08-18 +PKG_SOURCE_VERSION:=a23fe67ff4e2a218fcd4726055514c8c2b5299c9 +PKG_MIRROR_HASH:=7d2829cc0da6e9eacc5ed97f51f37ee0ce1ea1a10f38f1e4d2a30ae80d237289 PKG_MAINTAINER:=Zxlhhyccc PKG_LICENSE:=MIT diff --git a/luci-app-homeproxy/Makefile b/luci-app-homeproxy/Makefile index ad13e02..1416658 100644 --- a/luci-app-homeproxy/Makefile +++ b/luci-app-homeproxy/Makefile @@ -9,7 +9,8 @@ LUCI_PKGARCH:=all LUCI_DEPENDS:= \ +sing-box \ +firewall4 \ - +kmod-nft-tproxy + +kmod-nft-tproxy \ + +ucode-mod-digest PKG_NAME:=luci-app-homeproxy diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js index e5adb69..90c5085 100644 --- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js +++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js @@ -333,13 +333,12 @@ return view.extend({ so.rmempty = false; so = ss.option(form.Value, 'udp_timeout', _('UDP NAT expiration time'), - _('In seconds. 300 is used by default.')); + _('In seconds.')); so.datatype = 'uinteger'; - so.default = '300'; + so.placeholder = '300'; so.depends('homeproxy.config.proxy_mode', 'redirect_tproxy'); so.depends('homeproxy.config.proxy_mode', 'redirect_tun'); so.depends('homeproxy.config.proxy_mode', 'tun'); - so.rmempty = false; so = ss.option(form.Flag, 'bypass_cn_traffic', _('Bypass CN traffic'), _('Bypass mainland China traffic via firewall rules by default.')); @@ -348,19 +347,20 @@ return view.extend({ so = ss.option(form.ListValue, 'domain_strategy', _('Domain strategy'), _('If set, the requested domain name will be resolved to IP before routing.')); for (let i in hp.dns_strategy) - so.value(i, hp.dns_strategy[i]) + so.value(i, hp.dns_strategy[i]); so = ss.option(form.Flag, 'sniff_override', _('Override destination'), _('Override the connection destination address with the sniffed domain.')); so.default = so.enabled; so.rmempty = false; - so = ss.option(form.ListValue, 'default_outbound', _('Default outbound')); + so = ss.option(form.ListValue, 'default_outbound', _('Default outbound'), + _('Default outbound for connections not matched by any routing rules.')); so.load = function(section_id) { delete this.keylist; delete this.vallist; - this.value('nil', _('Disable')); + this.value('nil', _('Disable (the service)')); this.value('direct-out', _('Direct')); this.value('block-out', _('Block')); uci.sections(data[0], 'routing_node', (res) => { @@ -372,6 +372,24 @@ return view.extend({ } so.default = 'nil'; so.rmempty = false; + + so = ss.option(form.ListValue, 'default_outbound_dns', _('Default outbound DNS'), + _('Default DNS server for resolving domain name in the server address.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('default-dns', _('Default DNS (issued by WAN)')); + this.value('system-dns', _('System DNS')); + uci.sections(data[0], 'dns_server', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.default = 'default-dns'; + so.rmempty = false; /* Routing settings end */ /* Routing nodes start */ @@ -406,8 +424,27 @@ return view.extend({ so.validate = L.bind(hp.validateUniqueValue, this, data[0], 'routing_node', 'node'); so.editable = true; + so = ss.option(form.ListValue, 'domain_resolver', _('Domain resolver'), + _('For resolving domain name in the server address.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('', _('Default')); + this.value('default-dns', _('Default DNS (issued by WAN)')); + this.value('system-dns', _('System DNS')); + uci.sections(data[0], 'dns_server', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.depends({'node': 'urltest', '!reverse': true}); + so.modalonly = true; + so = ss.option(form.ListValue, 'domain_strategy', _('Domain strategy'), - _('If set, the server domain name will be resolved to IP before connecting.
')); + _('The domain strategy for resolving the domain name in the address.')); for (let i in hp.dns_strategy) so.value(i, hp.dns_strategy[i]); so.depends({'node': 'urltest', '!reverse': true}); @@ -629,6 +666,15 @@ return view.extend({ _('Invert match result.')); so.modalonly = true; + so = ss.taboption('field_other', form.ListValue, 'action', _('Action')); + so.value('route', _('Route')); + so.value('route-options', _('Route options')); + so.value('reject', _('Reject')); + so.value('resolve', _('Resolve')); + so.default = 'route'; + so.rmempty = false; + so.editable = true; + so = ss.taboption('field_other', form.ListValue, 'outbound', _('Outbound'), _('Tag of the target outbound.')); so.load = function(section_id) { @@ -636,7 +682,6 @@ return view.extend({ delete this.vallist; this.value('direct-out', _('Direct')); - this.value('block-out', _('Block')); uci.sections(data[0], 'routing_node', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); @@ -645,16 +690,116 @@ return view.extend({ return this.super('load', section_id); } so.rmempty = false; + so.depends('action', 'route'); so.editable = true; so = ss.taboption('field_other', form.Value, 'override_address', _('Override address'), _('Override the connection destination address.')); so.datatype = 'ipaddr'; + so.depends('action', 'route'); + so.depends('action', 'route-options'); so.modalonly = true; so = ss.taboption('field_other', form.Value, 'override_port', _('Override port'), _('Override the connection destination port.')); so.datatype = 'port'; + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'udp_disable_domain_unmapping', _('Disable UDP domain unmapping'), + _('If enabled, for UDP proxy requests addressed to a domain, the original packet address will be sent in the response instead of the mapped domain.')); + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'udp_connect', _('connect UDP connections'), + _('If enabled, attempts to connect UDP connection to the destination instead of listen.')); + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Value, 'udp_timeout', _('UDP timeout'), + _('Timeout for UDP connections.
Setting a larger value than the UDP timeout in inbounds will have no effect.')); + so.datatype = 'uinteger'; + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'tls_record_fragment', _('TLS record fragment'), + _('Fragment TLS handshake into multiple TLS records.')); + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'tls_fragment', _('TLS fragment'), + _('Fragment TLS handshakes. Due to poor performance, try %s first.').format( + _('TLS record fragment'))); + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Value, 'tls_fragment_fallback_delay', _('Fragment fallback delay'), + _('The fallback value in milliseconds used when TLS segmentation cannot automatically determine the wait time.')); + so.datatype = 'uinteger'; + so.placeholder = '500'; + so.depends('tls_fragment', '1'); + so.modalonly = true; + + so = ss.taboption('field_other', form.ListValue, 'resolve_server', _('DNS server'), + _('Specifies DNS server tag to use instead of selecting through DNS routing.')); + so.load = function(section_id) { + delete this.keylist; + delete this.vallist; + + this.value('', _('Default')); + this.value('default-dns', _('Default DNS (issued by WAN)')); + this.value('system-dns', _('System DNS')); + uci.sections(data[0], 'dns_server', (res) => { + if (res.enabled === '1') + this.value(res['.name'], res.label); + }); + + return this.super('load', section_id); + } + so.depends('action', 'resolve'); + so.modalonly = true; + + so = ss.taboption('field_other', form.ListValue, 'reject_method', _('Method')); + so.value('default', _('Reply with TCP RST / ICMP port unreachable')); + so.value('drop', _('Drop packets')); + so.depends('action', 'reject'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'reject_no_drop', _('Don\'t drop packets'), + _('%s will be temporarily overwritten to %s after 50 triggers in 30s if not enabled.').format( + _('Method'), _('Drop packets'))); + so.depends('reject_method', 'default'); + so.modalonly = true; + + so = ss.taboption('field_other', form.ListValue, 'resolve_strategy', _('Resolve strategy'), + _('Domain strategy for resolving the domain names.')); + for (let i in hp.dns_strategy) + so.value(i, hp.dns_strategy[i]); + so.depends('action', 'resolve'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'resolve_disable_cache', _('Disable DNS cache'), + _('Disable DNS cache in this query.')); + so.depends('action', 'resolve'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Value, 'resolve_rewrite_ttl', _('Rewrite TTL'), + _('Rewrite TTL in DNS responses.')); + so.datatype = 'uinteger'; + so.depends('action', 'resolve'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Value, 'resolve_client_subnet', _('EDNS Client subnet'), + _('Append a edns0-subnet OPT extra record with the specified IP prefix to every query by default.
' + + 'If value is an IP address instead of prefix, /32 or /128 will be appended automatically.')); + so.datatype = 'or(cidr, ipaddr)'; + so.depends('action', 'resolve'); so.modalonly = true; so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'), @@ -741,7 +886,6 @@ return view.extend({ this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - this.value('block-dns', _('Block DNS queries')); uci.sections(data[0], 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); @@ -800,32 +944,45 @@ return view.extend({ so.rmempty = false; so.editable = true; - so = ss.option(form.Value, 'address', _('Address'), - _('The address of the dns server. Support UDP, TCP, DoH, DoQ, DoT and RCode.')); + so = ss.option(form.ListValue, 'type', _('Type')); + so.value('udp', _('UDP')); + so.value('tcp', _('TCP')); + so.value('tls', _('TLS')); + so.value('https', _('HTTPS')); + so.value('http3', _('HTTP3')); + so.value('quic', _('QUIC')); + so.default = 'udp'; so.rmempty = false; - so.validate = function(section_id, value) { - if (section_id) { - if (!value) - return _('Expecting: %s').format(_('non-empty value')); - try { - let url = new URL(value.replace(/^.*:\/\//, 'http://')); - if (stubValidator.apply('hostname', url.hostname)) - return true; - else if (stubValidator.apply('ip4addr', url.hostname)) - return true; - else if (stubValidator.apply('ip6addr', url.hostname.match(/^\[(.+)\]$/)?.[1])) - return true; - else - return _('Expecting: %s').format(_('valid DNS server address')); - } catch(e) {} + so = ss.option(form.Value, 'server', _('Address'), + _('The address of the dns server.')); + so.datatype = 'or(hostname, ipaddr)'; + so.rmempty = false; - if (!stubValidator.apply('ipaddr', value)) - return _('Expecting: %s').format(_('valid DNS server address')); - } + so = ss.option(form.Value, 'server_port', _('Port'), + _('The port of the DNS server.')); + so.datatype = 'port'; - return true; - } + so = ss.option(form.Value, 'path', _('Path'), + _('The path of the DNS server.')); + so.placeholder = '/dns-query'; + so.depends('type', 'https'); + so.depends('type', 'http3'); + so.modalonly = true; + + so = ss.option(form.DynamicList, 'headers', _('Headers'), + _('Additional headers to be sent to the DNS server.')); + so.depends('type', 'https'); + so.depends('type', 'http3'); + so.modalonly = true; + + so = ss.option(form.Value, 'tls_sni', _('TLS SNI'), + _('Used to verify the hostname on the returned certificates.')); + so.depends('type', 'tls'); + so.depends('type', 'https'); + so.depends('type', 'http3'); + so.depends('type', 'quic'); + so.modalonly = true; so = ss.option(form.ListValue, 'address_resolver', _('Address resolver'), _('Tag of a another server to resolve the domain name in the address. Required if address contains domain.')); @@ -865,12 +1022,6 @@ return view.extend({ so.value(i, hp.dns_strategy[i]); so.modalonly = true; - so = ss.option(form.ListValue, 'resolve_strategy', _('Resolve strategy'), - _('Default domain strategy for resolving the domain names.')); - for (let i in hp.dns_strategy) - so.value(i, hp.dns_strategy[i]); - so.editable = true; - so = ss.option(form.ListValue, 'outbound', _('Outbound'), _('Tag of an outbound for connecting to the dns server.')); so.load = function(section_id) { @@ -888,11 +1039,6 @@ return view.extend({ so.default = 'direct-out'; so.rmempty = false; so.editable = true; - - so = ss.option(form.Value, 'client_subnet', _('EDNS Client subnet'), - _('Append a edns0-subnet OPT extra record with the specified IP prefix to every query by default.
' + - 'If value is an IP address instead of prefix, /32 or /128 will be appended automatically.')); - so.datatype = 'or(cidr, ipaddr)'; /* DNS servers end */ /* DNS rules start */ @@ -936,6 +1082,7 @@ return view.extend({ so.default = 'default'; so.rmempty = false; so.readonly = true; + so.modalonly = true; so = ss.taboption('field_other', form.ListValue, 'ip_version', _('IP version')); so.value('4', _('IPv4')); @@ -994,23 +1141,14 @@ return view.extend({ _('Invert match result.')); so.modalonly = true; - so = ss.taboption('field_other', form.MultiValue, 'outbound', _('Outbound'), - _('Match the server name of outbound.')); - so.load = function(section_id) { - delete this.keylist; - delete this.vallist; - - this.value('any-out', _('Any')); - this.value('direct-out', _('Direct')); - this.value('block-out', _('Block')); - uci.sections(data[0], 'routing_node', (res) => { - if (res.enabled === '1') - this.value(res['.name'], res.label); - }); - - return this.super('load', section_id); - } - so.modalonly = true; + so = ss.taboption('field_other', form.ListValue, 'action', _('Action')); + so.value('route', _('Route')); + so.value('route-options', _('Route options')); + so.value('reject', _('Reject')); + so.value('predefined', _('Predefined')); + so.default = 'route'; + so.rmempty = false; + so.editable = true; so = ss.taboption('field_other', form.ListValue, 'server', _('Server'), _('Tag of the target dns server.')); @@ -1020,7 +1158,6 @@ return view.extend({ this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - this.value('block-dns', _('Block DNS queries')); uci.sections(data[0], 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); @@ -1030,23 +1167,75 @@ return view.extend({ } so.rmempty = false; so.editable = true; + so.depends('action', 'route'); + + so = ss.taboption('field_other', form.ListValue, 'domain_strategy', _('Domain strategy'), + _('Set domain strategy for this query.')); + for (let i in hp.dns_strategy) + so.value(i, hp.dns_strategy[i]); + so.depends('action', 'route'); + so.modalonly = true; so = ss.taboption('field_other', form.Flag, 'dns_disable_cache', _('Disable dns cache'), _('Disable cache and save cache in this query.')); - so.depends({'server': 'block-dns', '!reverse': true}); + so.depends('action', 'route'); + so.depends('action', 'route-options'); so.modalonly = true; so = ss.taboption('field_other', form.Value, 'rewrite_ttl', _('Rewrite TTL'), _('Rewrite TTL in DNS responses.')); so.datatype = 'uinteger'; - so.depends({'server': 'block-dns', '!reverse': true}); + so.depends('action', 'route'); + so.depends('action', 'route-options'); so.modalonly = true; so = ss.taboption('field_other', form.Value, 'client_subnet', _('EDNS Client subnet'), _('Append a edns0-subnet OPT extra record with the specified IP prefix to every query by default.
' + 'If value is an IP address instead of prefix, /32 or /128 will be appended automatically.')); so.datatype = 'or(cidr, ipaddr)'; - so.depends({'server': 'block-dns', '!reverse': true}); + so.depends('action', 'route'); + so.depends('action', 'route-options'); + so.modalonly = true; + + so = ss.taboption('field_other', form.ListValue, 'reject_method', _('Method')); + so.value('default', _('Reply with REFUSED')); + so.value('drop', _('Drop requests')); + so.default = 'default'; + so.depends('action', 'reject'); + so.modalonly = true; + + so = ss.taboption('field_other', form.Flag, 'reject_no_drop', _('Don\'t drop requests'), + _('%s will be temporarily overwritten to %s after 50 triggers in 30s if not enabled.').format( + _('Method'), _('Drop requests'))); + so.depends('reject_method', 'default'); + so.modalonly = true; + + so = ss.taboption('field_other', form.ListValue, 'predefined_rcode', _('RCode'), + _('The response code.')); + so.value('NOERROR'); + so.value('FORMERR'); + so.value('SERVFAIL'); + so.value('NXDOMAIN'); + so.value('NOTIMP'); + so.value('REFUSED'); + so.default = 'NOERROR'; + so.depends('action', 'predefined'); + so.modalonly = true; + + so = ss.taboption('field_other', form.DynamicList, 'predefined_answer', _('Answer'), + _('List of text DNS record to respond as answers.')); + so.depends('action', 'predefined'); + so.modalonly = true; + + so = ss.taboption('field_other', form.DynamicList, 'predefined_ns', _('NS'), + _('List of text DNS record to respond as name servers.')); + so.depends('action', 'predefined'); + so.modalonly = true; + + so = ss.taboption('field_other', form.DynamicList, 'predefined_extra', _('Extra records'), + _('List of text DNS record to respond as extra records.')); + so.depends('action', 'predefined'); + so.modalonly = true; so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'), _('Match full domain.')); diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js index 166866a..6de7fe2 100644 --- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js +++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js @@ -25,6 +25,27 @@ function parseShareLink(uri, features) { uri = uri.split('://'); if (uri[0] && uri[1]) { switch (uri[0]) { + case 'anytls': + /* https://github.com/anytls/anytls-go/blob/v0.0.8/docs/uri_scheme.md */ + url = new URL('http://' + uri[1]); + params = url.searchParams; + + /* Check if password exists */ + if (!url.username) + return null; + + config = { + label: url.hash ? decodeURIComponent(url.hash.slice(1)) : null, + type: 'anytls', + address: url.hostname, + port: url.port || '80', + password: url.username ? decodeURIComponent(url.username) : null, + tls: '1', + tls_sni: params.get('sni'), + tls_insecure: (params.get('insecure') === '1') ? '1' : '0' + }; + + break; case 'http': case 'https': url = new URL('http://' + uri[1]); @@ -404,6 +425,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.ListValue, 'type', _('Type')); o.value('direct', _('Direct')); + o.value('anytls', _('AnyTLS')); o.value('http', _('HTTP')); if (features.with_quic) { o.value('hysteria', _('Hysteria')); @@ -440,6 +462,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Value, 'password', _('Password')); o.password = true; + o.depends('type', 'anytls'); o.depends('type', 'http'); o.depends('type', 'hysteria2'); o.depends('type', 'shadowsocks'); @@ -452,7 +475,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.validate = function(section_id, value) { if (section_id) { let type = this.section.formvalue(section_id, 'type'); - let required_type = [ 'shadowsocks', 'shadowtls', 'trojan' ]; + let required_type = [ 'anytls', 'shadowsocks', 'shadowtls', 'trojan' ]; if (required_type.includes(type)) { if (type === 'shadowsocks') { @@ -478,6 +501,29 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.depends('type', 'direct'); o.modalonly = true; + /* AnyTLS config start */ + o = s.option(form.Value, 'anytls_idle_session_check_interval', _('Idle session check interval'), + _('Interval checking for idle sessions, in seconds.')); + o.datatype = 'uinteger'; + o.placeholder = '30'; + o.depends('type', 'anytls'); + o.modalonly = true; + + o = s.option(form.Value, 'anytls_idle_session_timeout', _('Idle session check timeout'), + _('In the check, close sessions that have been idle for longer than this, in seconds.')); + o.datatype = 'uinteger'; + o.placeholder = '30'; + o.depends('type', 'anytls'); + o.modalonly = true; + + o = s.option(form.Value, 'anytls_min_idle_session', _('Minimum idle sessions'), + _('In the check, at least the first n idle sessions are kept open.')); + o.datatype = 'uinteger'; + o.placeholder = '0'; + o.depends('type', 'anytls'); + o.modalonly = true; + /* AnyTLS config end */ + /* Hysteria (2) config start */ o = s.option(form.DynamicList, 'hysteria_hopping_port', _('Hopping port')); o.depends('type', 'hysteria'); @@ -555,7 +601,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Flag, 'hysteria_disable_mtu_discovery', _('Disable Path MTU discovery'), _('Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 (IPv4) / 1232 (IPv6) bytes in size.')); - o.default = o.disabled; o.depends('type', 'hysteria'); o.modalonly = true; /* Hysteria (2) config end */ @@ -666,14 +711,12 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Flag, 'tuic_udp_over_stream', _('UDP over stream'), _('This is the TUIC port of the UDP over TCP protocol, designed to provide a QUIC stream based UDP relay mode that TUIC does not provide.')); - o.default = o.disabled; o.depends({'type': 'tuic','tuic_udp_relay_mode': ''}); o.modalonly = true; o = s.option(form.Flag, 'tuic_enable_zero_rtt', _('Enable 0-RTT handshake'), _('Enable 0-RTT QUIC connection handshake on the client side. This is not impacting much on the performance, as the protocol is fully multiplexed.
' + 'Disabling this is highly recommended, as it is vulnerable to replay attacks.')); - o.default = o.disabled; o.depends('type', 'tuic'); o.modalonly = true; @@ -718,7 +761,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Flag, 'vmess_authenticated_length', _('Authenticated length'), _('Protocol parameter. Enable length block encryption.')); - o.default = o.disabled; o.depends('type', 'vmess'); o.modalonly = true; /* VMess config end */ @@ -771,7 +813,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { if (features.with_grpc) { o = s.option(form.Flag, 'grpc_permit_without_stream', _('gRPC permit without stream'), _('If enabled, the client transport sends keepalive pings even with no active connections.')); - o.default = o.disabled; o.depends('transport', 'grpc'); o.modalonly = true; } @@ -897,7 +938,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { /* Mux config start */ o = s.option(form.Flag, 'multiplex', _('Multiplex')); - o.default = o.disabled; o.depends('type', 'shadowsocks'); o.depends('type', 'trojan'); o.depends('type', 'vless'); @@ -927,19 +967,18 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Value, 'multiplex_max_streams', _('Maximum streams'), _('Maximum multiplexed streams in a connection before opening a new connection.
' + - 'Conflict with Maximum connections and Minimum streams.')); + 'Conflict with %s and %s.').format( + _('Maximum connections'), _('Minimum streams'))); o.datatype = 'uinteger'; o.depends({'multiplex': '1', 'multiplex_max_connections': '', 'multiplex_min_streams': ''}); o.modalonly = true; o = s.option(form.Flag, 'multiplex_padding', _('Enable padding')); - o.default = o.disabled; o.depends('multiplex', '1'); o.modalonly = true; o = s.option(form.Flag, 'multiplex_brutal', _('Enable TCP Brutal'), _('Enable TCP Brutal congestion control algorithm')); - o.default = o.disabled; o.depends('multiplex', '1'); o.modalonly = true; @@ -958,7 +997,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { /* TLS config start */ o = s.option(form.Flag, 'tls', _('TLS')); - o.default = o.disabled; + o.depends('type', 'anytls'); o.depends('type', 'http'); o.depends('type', 'hysteria'); o.depends('type', 'hysteria2'); @@ -972,7 +1011,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id); let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild; - if (['hysteria', 'hysteria2', 'shadowtls', 'tuic'].includes(type)) { + if (['anytls', 'hysteria', 'hysteria2', 'shadowtls', 'tuic'].includes(type)) { tls.checked = true; tls.disabled = true; } else { @@ -998,7 +1037,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { _('Allow insecure connection at TLS client.') + '
' + _('This is DANGEROUS, your traffic is almost like PLAIN TEXT! Use at your own risk!')); - o.default = o.disabled; o.depends('tls', '1'); o.onchange = allowInsecureConfirm; o.modalonly = true; @@ -1029,7 +1067,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Flag, 'tls_self_sign', _('Append self-signed certificate'), _('If you have the root certificate, use this option instead of allowing insecure.')); - o.default = o.disabled; o.depends('tls_insecure', '0'); o.modalonly = true; @@ -1053,12 +1090,10 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Flag, 'tls_ech', _('Enable ECH'), _('ECH (Encrypted Client Hello) is a TLS extension that allows a client to encrypt the first part of its ClientHello message.')); o.depends('tls', '1'); - o.default = o.disabled; o.modalonly = true; o = s.option(form.Flag, 'tls_ech_enable_pqss', _('Enable PQ signature schemes')); o.depends('tls_ech', '1'); - o.default = o.disabled; o.modalonly = true; o = s.option(form.Value, 'tls_ech_config_path', _('ECH config path'), @@ -1107,7 +1142,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.modalonly = true; o = s.option(form.Flag, 'tls_reality', _('REALITY')); - o.default = o.disabled; o.depends({'tls': '1', 'type': 'vless'}); o.modalonly = true; @@ -1124,21 +1158,17 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { /* Extra settings start */ o = s.option(form.Flag, 'tcp_fast_open', _('TCP fast open')); - o.default = o.disabled; o.modalonly = true; o = s.option(form.Flag, 'tcp_multi_path', _('MultiPath TCP')); - o.default = o.disabled; o.modalonly = true; o = s.option(form.Flag, 'udp_fragment', _('UDP Fragment'), _('Enable UDP fragmentation.')); - o.default = o.disabled; o.modalonly = true; o = s.option(form.Flag, 'udp_over_tcp', _('UDP over TCP'), _('Enable the SUoT protocol, requires server support. Conflict with multiplex.')); - o.default = o.disabled; o.depends('type', 'socks'); o.depends({'type': 'shadowsocks', 'multiplex': '0'}); o.modalonly = true; @@ -1303,7 +1333,6 @@ return view.extend({ o = s.taboption('subscription', form.Flag, 'auto_update', _('Auto update'), _('Auto update subscriptions and geodata.')); - o.default = o.disabled; o.rmempty = false; o = s.taboption('subscription', form.ListValue, 'auto_update_time', _('Update time')); @@ -1314,7 +1343,6 @@ return view.extend({ o = s.taboption('subscription', form.Flag, 'update_via_proxy', _('Update via proxy'), _('Update subscriptions via proxy.')); - o.default = o.disabled; o.rmempty = false; o = s.taboption('subscription', form.DynamicList, 'subscription_url', _('Subscription URL-s'), @@ -1354,7 +1382,6 @@ return view.extend({ _('Allow insecure connection by default when add nodes from subscriptions.') + '
' + _('This is DANGEROUS, your traffic is almost like PLAIN TEXT! Use at your own risk!')); - o.default = o.disabled; o.rmempty = false; o.onchange = allowInsecureConfirm; diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js index 98c08fd..5e63e19 100644 --- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js +++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js @@ -13,6 +13,7 @@ 'require view'; 'require homeproxy as hp'; +'require tools.widgets as widgets'; const callServiceList = rpc.declare({ object: 'service', @@ -125,7 +126,6 @@ return view.extend({ s = m.section(form.NamedSection, 'server', 'homeproxy', _('Global settings')); o = s.option(form.Flag, 'enabled', _('Enable')); - o.default = o.disabled; o.rmempty = false; s = m.section(form.GridSection, 'server', _('Server settings')); @@ -153,6 +153,7 @@ return view.extend({ o.editable = true; o = s.option(form.ListValue, 'type', _('Type')); + o.value('anytls', _('AnyTLS')); o.value('http', _('HTTP')); if (features.with_quic) { o.value('hysteria', _('Hysteria')); @@ -188,6 +189,7 @@ return view.extend({ o = s.option(form.Value, 'password', _('Password')); o.password = true; + o.depends('type', 'anytls'); o.depends({'type': /^(http|mixed|naive|socks)$/, 'username': /[\s\S]/}); o.depends('type', 'hysteria2'); o.depends('type', 'shadowsocks'); @@ -207,7 +209,7 @@ return view.extend({ o.validate = function(section_id, value) { if (section_id) { let type = this.section.formvalue(section_id, 'type'); - let required_type = [ 'http', 'mixed', 'naive', 'socks', 'shadowsocks' ]; + let required_type = [ 'anytls', 'http', 'mixed', 'naive', 'socks', 'shadowsocks', 'trojan' ]; if (required_type.includes(type)) { if (type === 'shadowsocks') { @@ -229,6 +231,12 @@ return view.extend({ } o.modalonly = true; + /* AnyTLS config */ + o = s.option(form.DynamicList, 'anytls_padding_scheme', _('Padding scheme'), + _('AnyTLS padding scheme in array.')); + o.depends('type', 'anytls'); + o.modalonly = true; + /* Hysteria (2) config start */ o = s.option(form.ListValue, 'hysteria_protocol', _('Protocol')); o.value('udp'); @@ -312,13 +320,11 @@ return view.extend({ o = s.option(form.Flag, 'hysteria_disable_mtu_discovery', _('Disable Path MTU discovery'), _('Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 (IPv4) / 1232 (IPv6) bytes in size.')); - o.default = o.disabled; o.depends('type', 'hysteria'); o.modalonly = true; o = s.option(form.Flag, 'hysteria_ignore_client_bandwidth', _('Ignore client bandwidth'), _('Tell the client to use the BBR flow control algorithm instead of Hysteria CC.')); - o.default = o.disabled; o.depends({'type': 'hysteria2', 'hysteria_down_mbps': '', 'hysteria_up_mbps': ''}); o.modalonly = true; @@ -374,7 +380,6 @@ return view.extend({ o = s.option(form.Flag, 'tuic_enable_zero_rtt', _('Enable 0-RTT handshake'), _('Enable 0-RTT QUIC connection handshake on the client side. This is not impacting much on the performance, as the protocol is fully multiplexed.
' + 'Disabling this is highly recommended, as it is vulnerable to replay attacks.')); - o.default = o.disabled; o.depends('type', 'tuic'); o.modalonly = true; @@ -503,7 +508,6 @@ return view.extend({ /* Mux config start */ o = s.option(form.Flag, 'multiplex', _('Multiplex')); - o.default = o.disabled; o.depends('type', 'shadowsocks'); o.depends('type', 'trojan'); o.depends('type', 'vless'); @@ -511,14 +515,12 @@ return view.extend({ o.modalonly = true; o = s.option(form.Flag, 'multiplex_padding', _('Enable padding')); - o.default = o.disabled; o.depends('multiplex', '1'); o.modalonly = true; if (features.hp_has_tcp_brutal) { o = s.option(form.Flag, 'multiplex_brutal', _('Enable TCP Brutal'), _('Enable TCP Brutal congestion control algorithm')); - o.default = o.disabled; o.depends('multiplex', '1'); o.modalonly = true; @@ -538,7 +540,7 @@ return view.extend({ /* TLS config start */ o = s.option(form.Flag, 'tls', _('TLS')); - o.default = o.disabled; + o.depends('type', 'anytls'); o.depends('type', 'http'); o.depends('type', 'hysteria'); o.depends('type', 'hysteria2'); @@ -602,7 +604,6 @@ return view.extend({ if (features.with_acme) { o = s.option(form.Flag, 'tls_acme', _('Enable ACME'), _('Use ACME TLS certificate issuer.')); - o.default = o.disabled; o.depends('tls', '1'); o.modalonly = true; @@ -642,7 +643,6 @@ return view.extend({ o.modalonly = true; o = s.option(form.Flag, 'tls_dns01_challenge', _('DNS01 challenge')) - o.default = o.disabled; o.depends('tls_acme', '1'); o.modalonly = true; @@ -675,12 +675,10 @@ return view.extend({ o.modalonly = true; o = s.option(form.Flag, 'tls_acme_dhc', _('Disable HTTP challenge')); - o.default = o.disabled; o.depends('tls_dns01_challenge', '0'); o.modalonly = true; o = s.option(form.Flag, 'tls_acme_dtac', _('Disable TLS ALPN challenge')); - o.default = o.disabled; o.depends('tls_dns01_challenge', '0'); o.modalonly = true; @@ -699,7 +697,6 @@ return view.extend({ o = s.option(form.Flag, 'tls_acme_external_account', _('External Account Binding'), _('EAB (External Account Binding) contains information necessary to bind or map an ACME account to some other account known by the CA.' + '
External account bindings are "used to associate an ACME account with an existing account in a non-ACME system, such as a CA customer database.')); - o.default = o.disabled; o.depends('tls_acme', '1'); o.modalonly = true; @@ -716,7 +713,6 @@ return view.extend({ if (features.with_reality_server) { o = s.option(form.Flag, 'tls_reality', _('REALITY')); - o.default = o.disabled; o.depends({'tls': '1', 'tls_acme': '0', 'type': 'vless'}); o.depends({'tls': '1', 'tls_acme': null, 'type': 'vless'}); o.modalonly = true; @@ -838,18 +834,15 @@ return view.extend({ /* Extra settings start */ o = s.option(form.Flag, 'tcp_fast_open', _('TCP fast open'), _('Enable tcp fast open for listener.')); - o.default = o.disabled; o.depends({'network': 'udp', '!reverse': true}); o.modalonly = true; o = s.option(form.Flag, 'tcp_multi_path', _('MultiPath TCP')); - o.default = o.disabled; o.depends({'network': 'udp', '!reverse': true}); o.modalonly = true; o = s.option(form.Flag, 'udp_fragment', _('UDP Fragment'), _('Enable UDP fragmentation.')); - o.default = o.disabled; o.depends({'network': 'tcp', '!reverse': true}); o.modalonly = true; @@ -867,6 +860,16 @@ return view.extend({ o.depends('type', 'naive'); o.depends('type', 'shadowsocks'); o.modalonly = true; + + o = s.option(widgets.DeviceSelect, 'bind_interface', _('Bind interface'), + _('The network interface to bind to.')); + o.multiple = false; + o.noaliases = true; + o.modalonly = true; + + o = s.option(form.Flag, 'reuse_addr', _('Reuse address'), + _('Reuse listener address.')); + o.modalonly = true; /* Extra settings end */ return m.render(); diff --git a/luci-app-homeproxy/po/templates/homeproxy.pot b/luci-app-homeproxy/po/templates/homeproxy.pot index 059c742..77cc4ae 100644 --- a/luci-app-homeproxy/po/templates/homeproxy.pot +++ b/luci-app-homeproxy/po/templates/homeproxy.pot @@ -5,22 +5,29 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "%s log" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1424 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1454 msgid "%s nodes removed" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:286 +#: htdocs/luci-static/resources/homeproxy.js:279 msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:577 +#: htdocs/luci-static/resources/view/homeproxy/client.js:609 msgid "4 or 6. Not limited if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1042 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 -#: htdocs/luci-static/resources/view/homeproxy/server.js:764 -#: htdocs/luci-static/resources/view/homeproxy/server.js:783 +#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1208 +msgid "" +"%s will be temporarily overwritten to %s after 50 " +"triggers in 30s if not enabled." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/server.js:760 +#: htdocs/luci-static/resources/view/homeproxy/server.js:779 msgid "Save your configuration before uploading files!" msgstr "" @@ -28,15 +35,15 @@ msgstr "" msgid "API token" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:619 +#: htdocs/luci-static/resources/view/homeproxy/node.js:667 msgid "Accept any if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:994 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 msgid "Accept empty query response" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1213 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1397 msgid "Access Control" msgstr "" @@ -48,27 +55,32 @@ msgstr "" msgid "Access key secret" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:913 +#: htdocs/luci-static/resources/view/homeproxy/client.js:669 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1144 +msgid "Action" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "Add a DNS rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:933 msgid "Add a DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:372 +#: htdocs/luci-static/resources/view/homeproxy/node.js:396 msgid "Add a node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:392 +#: htdocs/luci-static/resources/view/homeproxy/client.js:405 msgid "Add a routing node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 +#: htdocs/luci-static/resources/view/homeproxy/client.js:576 msgid "Add a routing rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Add a rule set" msgstr "" @@ -76,16 +88,20 @@ msgstr "" msgid "Add a server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:808 -#: htdocs/luci-static/resources/view/homeproxy/node.js:422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:974 +msgid "Additional headers to be sent to the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:957 +#: htdocs/luci-static/resources/view/homeproxy/node.js:447 msgid "Address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:987 msgid "Address resolver" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:867 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 msgid "Address strategy" msgstr "" @@ -106,21 +122,21 @@ msgstr "" msgid "Allow access from the Internet." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:994 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1350 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1381 msgid "Allow insecure" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:995 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1037 msgid "Allow insecure connection at TLS client." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1351 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:826 -#: htdocs/luci-static/resources/view/homeproxy/server.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:870 +#: htdocs/luci-static/resources/view/homeproxy/server.js:492 msgid "Allowed payload size is in the request." msgstr "" @@ -132,46 +148,55 @@ msgstr "" msgid "Already in updating." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:692 -#: htdocs/luci-static/resources/view/homeproxy/server.js:396 +#: htdocs/luci-static/resources/view/homeproxy/node.js:738 +#: htdocs/luci-static/resources/view/homeproxy/server.js:401 msgid "Alter ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:685 msgid "Alternative HTTP port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:693 +#: htdocs/luci-static/resources/view/homeproxy/server.js:691 msgid "Alternative TLS port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1387 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1417 msgid "An error occurred during updating subscriptions: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1008 -msgid "Any" +#: htdocs/luci-static/resources/view/homeproxy/client.js:1225 +msgid "Answer" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:770 -#: htdocs/luci-static/resources/view/homeproxy/client.js:898 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/node.js:428 +#: htdocs/luci-static/resources/view/homeproxy/server.js:156 +msgid "AnyTLS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:236 +msgid "AnyTLS padding scheme in array." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:909 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1193 msgid "" "Append a edns0-subnet OPT extra record with the specified IP " "prefix to every query by default.
If value is an IP address instead of " "prefix, /32 or /128 will be appended automatically." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 msgid "Append self-signed certificate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:383 +#: htdocs/luci-static/resources/view/homeproxy/node.js:407 msgid "Applied" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:376 -#: htdocs/luci-static/resources/view/homeproxy/node.js:386 +#: htdocs/luci-static/resources/view/homeproxy/node.js:400 +#: htdocs/luci-static/resources/view/homeproxy/node.js:410 msgid "Apply" msgstr "" @@ -179,33 +204,33 @@ msgstr "" msgid "Are you sure to allow insecure?" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:367 +#: htdocs/luci-static/resources/view/homeproxy/server.js:373 msgid "Auth timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:716 +#: htdocs/luci-static/resources/view/homeproxy/node.js:762 msgid "Authenticated length" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:511 -#: htdocs/luci-static/resources/view/homeproxy/server.js:265 +#: htdocs/luci-static/resources/view/homeproxy/node.js:560 +#: htdocs/luci-static/resources/view/homeproxy/server.js:273 msgid "Authentication payload" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:504 -#: htdocs/luci-static/resources/view/homeproxy/server.js:258 +#: htdocs/luci-static/resources/view/homeproxy/node.js:553 +#: htdocs/luci-static/resources/view/homeproxy/server.js:266 msgid "Authentication type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 msgid "Auto update" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1302 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1335 msgid "Auto update subscriptions and geodata." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:650 +#: htdocs/luci-static/resources/view/homeproxy/node.js:698 msgid "BBR" msgstr "" @@ -213,58 +238,52 @@ msgstr "" msgid "BaiDu" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:506 -#: htdocs/luci-static/resources/view/homeproxy/server.js:260 +#: htdocs/luci-static/resources/view/homeproxy/node.js:555 +#: htdocs/luci-static/resources/view/homeproxy/server.js:268 msgid "Base64" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:323 msgid "Based on google/gvisor." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1155 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1339 msgid "Binary file" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:421 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +#: htdocs/luci-static/resources/view/homeproxy/client.js:453 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1410 +#: htdocs/luci-static/resources/view/homeproxy/server.js:864 msgid "Bind interface" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1411 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:585 -#: htdocs/luci-static/resources/view/homeproxy/client.js:962 +#: htdocs/luci-static/resources/view/homeproxy/client.js:617 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1104 msgid "BitTorrent" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1337 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1368 msgid "Blacklist mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:370 -#: htdocs/luci-static/resources/view/homeproxy/client.js:644 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1010 +#: htdocs/luci-static/resources/view/homeproxy/client.js:365 msgid "Block" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:749 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1028 -msgid "Block DNS queries" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:580 -#: htdocs/luci-static/resources/view/homeproxy/client.js:608 -#: htdocs/luci-static/resources/view/homeproxy/client.js:948 -#: htdocs/luci-static/resources/view/homeproxy/client.js:958 -#: htdocs/luci-static/resources/view/homeproxy/server.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:612 +#: htdocs/luci-static/resources/view/homeproxy/client.js:640 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1090 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/server.js:859 msgid "Both" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:349 +#: htdocs/luci-static/resources/view/homeproxy/client.js:343 msgid "Bypass CN traffic" msgstr "" @@ -272,11 +291,11 @@ msgstr "" msgid "Bypass mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:350 +#: htdocs/luci-static/resources/view/homeproxy/client.js:344 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:637 msgid "CA provider" msgstr "" @@ -284,16 +303,16 @@ msgstr "" msgid "CNNIC Public DNS (210.2.4.8)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:648 +#: htdocs/luci-static/resources/view/homeproxy/node.js:696 msgid "CUBIC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1238 msgid "Cancel" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1033 -#: htdocs/luci-static/resources/view/homeproxy/server.js:752 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1073 +#: htdocs/luci-static/resources/view/homeproxy/server.js:748 msgid "Certificate path" msgstr "" @@ -321,12 +340,12 @@ msgstr "" msgid "China list version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:597 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "Chromium / Cronet" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1019 -#: htdocs/luci-static/resources/view/homeproxy/server.js:594 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1060 +#: htdocs/luci-static/resources/view/homeproxy/server.js:596 msgid "Cipher suites" msgstr "" @@ -338,7 +357,7 @@ msgstr "" msgid "Clean log" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:627 msgid "Client" msgstr "" @@ -346,7 +365,7 @@ msgstr "" msgid "Client Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:613 +#: htdocs/luci-static/resources/view/homeproxy/node.js:661 msgid "Client version" msgstr "" @@ -359,7 +378,7 @@ msgid "Cloudflare" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:114 -#: htdocs/luci-static/resources/view/homeproxy/server.js:121 +#: htdocs/luci-static/resources/view/homeproxy/server.js:122 #: htdocs/luci-static/resources/view/homeproxy/status.js:129 msgid "Collecting data..." msgstr "" @@ -368,8 +387,8 @@ msgstr "" msgid "Common ports only (bypass P2P traffic)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:646 -#: htdocs/luci-static/resources/view/homeproxy/server.js:358 +#: htdocs/luci-static/resources/view/homeproxy/node.js:694 +#: htdocs/luci-static/resources/view/homeproxy/server.js:364 msgid "Congestion control algorithm" msgstr "" @@ -381,19 +400,19 @@ msgstr "" msgid "Custom routing" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:586 +#: htdocs/luci-static/resources/view/homeproxy/client.js:618 msgid "DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:904 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 msgid "DNS Rules" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:785 +#: htdocs/luci-static/resources/view/homeproxy/client.js:924 msgid "DNS Servers" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:732 +#: htdocs/luci-static/resources/view/homeproxy/client.js:872 msgid "DNS Settings" msgstr "" @@ -401,191 +420,243 @@ msgstr "" msgid "DNS provider" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:913 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "DNS rule" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:179 -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:749 +#: htdocs/luci-static/resources/view/homeproxy/client.js:933 msgid "DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:644 +#: htdocs/luci-static/resources/view/homeproxy/server.js:645 msgid "DNS01 challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:587 -#: htdocs/luci-static/resources/view/homeproxy/client.js:963 +#: htdocs/luci-static/resources/view/homeproxy/client.js:619 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1105 msgid "DTLS" msgstr "" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:571 -#: htdocs/luci-static/resources/view/homeproxy/client.js:940 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1195 -#: htdocs/luci-static/resources/view/homeproxy/node.js:658 +#: htdocs/luci-static/resources/view/homeproxy/client.js:433 +#: htdocs/luci-static/resources/view/homeproxy/client.js:603 +#: htdocs/luci-static/resources/view/homeproxy/client.js:755 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/node.js:706 msgid "Default" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:747 -#: htdocs/luci-static/resources/view/homeproxy/client.js:842 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1026 +#: htdocs/luci-static/resources/view/homeproxy/client.js:382 +#: htdocs/luci-static/resources/view/homeproxy/client.js:434 +#: htdocs/luci-static/resources/view/homeproxy/client.js:756 +#: htdocs/luci-static/resources/view/homeproxy/client.js:887 +#: htdocs/luci-static/resources/view/homeproxy/client.js:994 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1159 msgid "Default DNS (issued by WAN)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +#: htdocs/luci-static/resources/view/homeproxy/client.js:882 msgid "Default DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +#: htdocs/luci-static/resources/view/homeproxy/client.js:377 +msgid "Default DNS server for resolving domain name in the server address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:877 msgid "Default DNS strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:874 -msgid "Default domain strategy for resolving the domain names." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:357 msgid "Default outbound" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +msgid "Default outbound DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +msgid "Default outbound for connections not matched by any routing rules." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1388 msgid "Default packet encoding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:615 +#: htdocs/luci-static/resources/view/homeproxy/server.js:616 msgid "Default server name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:369 -#: htdocs/luci-static/resources/view/homeproxy/client.js:434 -#: htdocs/luci-static/resources/view/homeproxy/client.js:643 -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1009 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1196 -#: htdocs/luci-static/resources/view/homeproxy/node.js:403 +#: htdocs/luci-static/resources/view/homeproxy/client.js:364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:684 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1031 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/node.js:427 msgid "Direct" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1512 msgid "Direct Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1242 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1426 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 msgid "Direct IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 msgid "Direct IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1248 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1432 msgid "Direct MAC-s" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:123 #: htdocs/luci-static/resources/view/homeproxy/client.js:151 -#: htdocs/luci-static/resources/view/homeproxy/client.js:368 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1236 -#: htdocs/luci-static/resources/view/homeproxy/node.js:472 -#: htdocs/luci-static/resources/view/homeproxy/node.js:505 -#: htdocs/luci-static/resources/view/homeproxy/node.js:517 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1079 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1336 -#: htdocs/luci-static/resources/view/homeproxy/server.js:259 -#: htdocs/luci-static/resources/view/homeproxy/server.js:271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:498 +#: htdocs/luci-static/resources/view/homeproxy/node.js:554 +#: htdocs/luci-static/resources/view/homeproxy/node.js:566 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1117 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1367 +#: htdocs/luci-static/resources/view/homeproxy/server.js:267 +#: htdocs/luci-static/resources/view/homeproxy/server.js:279 msgid "Disable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:760 +#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +msgid "Disable (the service)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:787 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 msgid "Disable DNS cache" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:788 +msgid "Disable DNS cache in this query." +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/server.js:677 msgid "Disable HTTP challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:553 -#: htdocs/luci-static/resources/view/homeproxy/server.js:313 +#: htdocs/luci-static/resources/view/homeproxy/node.js:602 +#: htdocs/luci-static/resources/view/homeproxy/server.js:321 msgid "Disable Path MTU discovery" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:682 +#: htdocs/luci-static/resources/view/homeproxy/server.js:681 msgid "Disable TLS ALPN challenge" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1040 +#: htdocs/luci-static/resources/view/homeproxy/client.js:710 +msgid "Disable UDP domain unmapping" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1180 msgid "Disable cache and save cache in this query." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:762 +#: htdocs/luci-static/resources/view/homeproxy/client.js:901 msgid "Disable cache expire" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1039 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 msgid "Disable dns cache" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:554 -#: htdocs/luci-static/resources/view/homeproxy/server.js:314 +#: htdocs/luci-static/resources/view/homeproxy/node.js:603 +#: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " "(IPv4) / 1232 (IPv6) bytes in size." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:674 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1065 +#: htdocs/luci-static/resources/view/homeproxy/client.js:814 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1249 msgid "Domain keyword" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1056 +#: htdocs/luci-static/resources/view/homeproxy/client.js:805 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1240 msgid "Domain name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:678 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1069 +#: htdocs/luci-static/resources/view/homeproxy/client.js:818 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1253 msgid "Domain regex" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:353 -#: htdocs/luci-static/resources/view/homeproxy/client.js:414 +#: htdocs/luci-static/resources/view/homeproxy/client.js:427 +msgid "Domain resolver" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:347 +#: htdocs/luci-static/resources/view/homeproxy/client.js:446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 msgid "Domain strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/client.js:781 +msgid "Domain strategy for resolving the domain names." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 msgid "Domain suffix" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:609 +#: htdocs/luci-static/resources/view/homeproxy/server.js:610 msgid "Domains" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:943 -#: htdocs/luci-static/resources/view/homeproxy/server.js:525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +msgid "Don't drop packets" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1207 +msgid "Don't drop requests" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:985 +#: htdocs/luci-static/resources/view/homeproxy/server.js:527 msgid "Download bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:944 -#: htdocs/luci-static/resources/view/homeproxy/server.js:526 +#: htdocs/luci-static/resources/view/homeproxy/node.js:986 +#: htdocs/luci-static/resources/view/homeproxy/server.js:528 msgid "Download bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:776 +msgid "Drop packets" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1202 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1209 +msgid "Drop requests" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1374 msgid "" "Drop/keep nodes that contain the specific keywords. Regex is supported." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1335 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 msgid "Drop/keep specific nodes from subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:700 +#: htdocs/luci-static/resources/view/homeproxy/server.js:698 msgid "" "EAB (External Account Binding) contains information necessary to bind or map " "an ACME account to some other account known by the CA.
External account " @@ -593,135 +664,135 @@ msgid "" "a non-ACME system, such as a CA customer database." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1091 msgid "" "ECH (Encrypted Client Hello) is a TLS extension that allows a client to " "encrypt the first part of its ClientHello message." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1072 -#: htdocs/luci-static/resources/view/homeproxy/server.js:829 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1110 +#: htdocs/luci-static/resources/view/homeproxy/server.js:825 msgid "ECH config" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 msgid "ECH config path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:790 +#: htdocs/luci-static/resources/view/homeproxy/server.js:786 msgid "ECH key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:769 -#: htdocs/luci-static/resources/view/homeproxy/client.js:897 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/client.js:798 +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1192 msgid "EDNS Client subnet" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:825 -#: htdocs/luci-static/resources/view/homeproxy/server.js:486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:869 +#: htdocs/luci-static/resources/view/homeproxy/server.js:491 msgid "Early data" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:832 -#: htdocs/luci-static/resources/view/homeproxy/server.js:493 +#: htdocs/luci-static/resources/view/homeproxy/node.js:876 +#: htdocs/luci-static/resources/view/homeproxy/server.js:498 msgid "Early data header name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:494 +#: htdocs/luci-static/resources/view/homeproxy/server.js:499 msgid "Early data is sent in path instead of header by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1177 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 msgid "Edit nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:621 +#: htdocs/luci-static/resources/view/homeproxy/server.js:622 msgid "Email" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:401 -#: htdocs/luci-static/resources/view/homeproxy/client.js:558 -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 -#: htdocs/luci-static/resources/view/homeproxy/client.js:927 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1143 -#: htdocs/luci-static/resources/view/homeproxy/server.js:127 +#: htdocs/luci-static/resources/view/homeproxy/client.js:414 +#: htdocs/luci-static/resources/view/homeproxy/client.js:590 +#: htdocs/luci-static/resources/view/homeproxy/client.js:942 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1068 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/server.js:128 #: htdocs/luci-static/resources/view/homeproxy/server.js:146 msgid "Enable" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:671 -#: htdocs/luci-static/resources/view/homeproxy/server.js:375 +#: htdocs/luci-static/resources/view/homeproxy/node.js:718 +#: htdocs/luci-static/resources/view/homeproxy/server.js:381 msgid "" "Enable 0-RTT QUIC connection handshake on the client side. This is not " "impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:670 -#: htdocs/luci-static/resources/view/homeproxy/server.js:374 +#: htdocs/luci-static/resources/view/homeproxy/node.js:717 +#: htdocs/luci-static/resources/view/homeproxy/server.js:380 msgid "Enable 0-RTT handshake" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:603 +#: htdocs/luci-static/resources/view/homeproxy/server.js:605 msgid "Enable ACME" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1090 msgid "Enable ECH" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1056 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 msgid "Enable PQ signature schemes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:937 -#: htdocs/luci-static/resources/view/homeproxy/server.js:519 +#: htdocs/luci-static/resources/view/homeproxy/node.js:980 +#: htdocs/luci-static/resources/view/homeproxy/server.js:522 msgid "Enable TCP Brutal" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:938 -#: htdocs/luci-static/resources/view/homeproxy/server.js:520 +#: htdocs/luci-static/resources/view/homeproxy/node.js:981 +#: htdocs/luci-static/resources/view/homeproxy/server.js:523 msgid "Enable TCP Brutal congestion control algorithm" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 -#: htdocs/luci-static/resources/view/homeproxy/server.js:851 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1167 +#: htdocs/luci-static/resources/view/homeproxy/server.js:845 msgid "Enable UDP fragmentation." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:333 +#: htdocs/luci-static/resources/view/homeproxy/client.js:328 msgid "Enable endpoint-independent NAT" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:932 -#: htdocs/luci-static/resources/view/homeproxy/server.js:513 +#: htdocs/luci-static/resources/view/homeproxy/node.js:976 +#: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Enable padding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:840 +#: htdocs/luci-static/resources/view/homeproxy/server.js:836 msgid "Enable tcp fast open for listener." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1171 msgid "" "Enable the SUoT protocol, requires server support. Conflict with multiplex." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:561 -#: htdocs/luci-static/resources/view/homeproxy/node.js:698 -#: htdocs/luci-static/resources/view/homeproxy/server.js:332 +#: htdocs/luci-static/resources/view/homeproxy/node.js:609 +#: htdocs/luci-static/resources/view/homeproxy/node.js:744 +#: htdocs/luci-static/resources/view/homeproxy/server.js:338 msgid "Encrypt method" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:244 -#: htdocs/luci-static/resources/homeproxy.js:278 -#: htdocs/luci-static/resources/homeproxy.js:286 -#: htdocs/luci-static/resources/homeproxy.js:304 -#: htdocs/luci-static/resources/homeproxy.js:313 -#: htdocs/luci-static/resources/homeproxy.js:324 -#: htdocs/luci-static/resources/homeproxy.js:333 -#: htdocs/luci-static/resources/homeproxy.js:335 +#: htdocs/luci-static/resources/homeproxy.js:237 +#: htdocs/luci-static/resources/homeproxy.js:271 +#: htdocs/luci-static/resources/homeproxy.js:279 +#: htdocs/luci-static/resources/homeproxy.js:297 +#: htdocs/luci-static/resources/homeproxy.js:306 +#: htdocs/luci-static/resources/homeproxy.js:317 +#: htdocs/luci-static/resources/homeproxy.js:326 +#: htdocs/luci-static/resources/homeproxy.js:328 #: htdocs/luci-static/resources/view/homeproxy/client.js:195 #: htdocs/luci-static/resources/view/homeproxy/client.js:207 #: htdocs/luci-static/resources/view/homeproxy/client.js:211 @@ -729,57 +800,58 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:241 #: htdocs/luci-static/resources/view/homeproxy/client.js:245 #: htdocs/luci-static/resources/view/homeproxy/client.js:274 -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:486 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:814 -#: htdocs/luci-static/resources/view/homeproxy/client.js:825 -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 -#: htdocs/luci-static/resources/view/homeproxy/node.js:461 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 -#: htdocs/luci-static/resources/view/homeproxy/server.js:224 -#: htdocs/luci-static/resources/view/homeproxy/server.js:627 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:518 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/node.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/server.js:226 +#: htdocs/luci-static/resources/view/homeproxy/server.js:628 +#: htdocs/luci-static/resources/view/homeproxy/server.js:630 msgid "Expecting: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:699 +#: htdocs/luci-static/resources/view/homeproxy/server.js:697 msgid "External Account Binding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:711 +#: htdocs/luci-static/resources/view/homeproxy/server.js:708 msgid "External account MAC key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:706 +#: htdocs/luci-static/resources/view/homeproxy/server.js:703 msgid "External account key ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:65 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1235 +msgid "Extra records" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:66 msgid "Failed to generate %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:268 +#: htdocs/luci-static/resources/homeproxy.js:261 msgid "Failed to upload %s, error: %s." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1342 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1373 msgid "Filter keywords" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1365 msgid "Filter nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:598 +#: htdocs/luci-static/resources/view/homeproxy/client.js:630 msgid "Firefox / uquic firefox" msgstr "" @@ -787,16 +859,33 @@ msgstr "" msgid "Firewall" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:686 -#: htdocs/luci-static/resources/view/homeproxy/server.js:390 +#: htdocs/luci-static/resources/view/homeproxy/node.js:732 +#: htdocs/luci-static/resources/view/homeproxy/server.js:395 msgid "Flow" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1154 +#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +msgid "For resolving domain name in the server address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1338 msgid "Format" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:730 +msgid "Fragment TLS handshake into multiple TLS records." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:736 +msgid "" +"Fragment TLS handshakes. Due to poor performance, try %s first." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +msgid "Fragment fallback delay" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:838 msgid "GET" msgstr "" @@ -808,32 +897,28 @@ msgstr "" msgid "GFWList" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1444 msgid "Gaming mode IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1262 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 msgid "Gaming mode IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1449 msgid "Gaming mode MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 #: htdocs/luci-static/resources/view/homeproxy/server.js:203 -#: htdocs/luci-static/resources/view/homeproxy/server.js:284 -#: htdocs/luci-static/resources/view/homeproxy/server.js:286 -#: htdocs/luci-static/resources/view/homeproxy/server.js:349 -#: htdocs/luci-static/resources/view/homeproxy/server.js:351 -#: htdocs/luci-static/resources/view/homeproxy/server.js:821 +#: htdocs/luci-static/resources/view/homeproxy/server.js:205 +#: htdocs/luci-static/resources/view/homeproxy/server.js:292 +#: htdocs/luci-static/resources/view/homeproxy/server.js:294 +#: htdocs/luci-static/resources/view/homeproxy/server.js:355 +#: htdocs/luci-static/resources/view/homeproxy/server.js:357 +#: htdocs/luci-static/resources/view/homeproxy/server.js:817 msgid "Generate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 -msgid "Generic segmentation offload" -msgstr "" - #: htdocs/luci-static/resources/view/homeproxy/status.js:213 msgid "GitHub token" msgstr "" @@ -842,23 +927,23 @@ msgstr "" msgid "Global" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:709 +#: htdocs/luci-static/resources/view/homeproxy/node.js:755 msgid "Global padding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1267 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1451 msgid "Global proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1454 msgid "Global proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1273 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1457 msgid "Global proxy MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:125 +#: htdocs/luci-static/resources/view/homeproxy/server.js:126 msgid "Global settings" msgstr "" @@ -874,36 +959,48 @@ msgstr "" msgid "Grant access to homeproxy configuration" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:588 -#: htdocs/luci-static/resources/view/homeproxy/client.js:964 -#: htdocs/luci-static/resources/view/homeproxy/node.js:404 -#: htdocs/luci-static/resources/view/homeproxy/node.js:728 -#: htdocs/luci-static/resources/view/homeproxy/server.js:156 -#: htdocs/luci-static/resources/view/homeproxy/server.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/node.js:429 +#: htdocs/luci-static/resources/view/homeproxy/node.js:773 +#: htdocs/luci-static/resources/view/homeproxy/server.js:157 +#: htdocs/luci-static/resources/view/homeproxy/server.js:413 msgid "HTTP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:326 +#: htdocs/luci-static/resources/view/homeproxy/client.js:952 +msgid "HTTP3" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:332 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:729 -#: htdocs/luci-static/resources/view/homeproxy/server.js:409 +#: htdocs/luci-static/resources/view/homeproxy/client.js:951 +msgid "HTTPS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:774 +#: htdocs/luci-static/resources/view/homeproxy/server.js:414 msgid "HTTPUpgrade" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:739 +#: htdocs/luci-static/resources/view/homeproxy/server.js:735 msgid "Handshake server address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:745 +#: htdocs/luci-static/resources/view/homeproxy/server.js:741 msgid "Handshake server port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:677 -#: htdocs/luci-static/resources/view/homeproxy/server.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:973 +msgid "Headers" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:723 +#: htdocs/luci-static/resources/view/homeproxy/server.js:386 msgid "Heartbeat interval" msgstr "" @@ -915,70 +1012,70 @@ msgstr "" msgid "HomeProxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:38 -#: htdocs/luci-static/resources/view/homeproxy/server.js:40 -#: htdocs/luci-static/resources/view/homeproxy/server.js:108 +#: htdocs/luci-static/resources/view/homeproxy/server.js:39 +#: htdocs/luci-static/resources/view/homeproxy/server.js:41 +#: htdocs/luci-static/resources/view/homeproxy/server.js:109 msgid "HomeProxy Server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:485 +#: htdocs/luci-static/resources/view/homeproxy/node.js:534 msgid "Hop interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:479 +#: htdocs/luci-static/resources/view/homeproxy/node.js:528 msgid "Hopping port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:778 -#: htdocs/luci-static/resources/view/homeproxy/node.js:783 -#: htdocs/luci-static/resources/view/homeproxy/node.js:817 -#: htdocs/luci-static/resources/view/homeproxy/server.js:442 +#: htdocs/luci-static/resources/view/homeproxy/node.js:822 +#: htdocs/luci-static/resources/view/homeproxy/node.js:827 +#: htdocs/luci-static/resources/view/homeproxy/node.js:861 #: htdocs/luci-static/resources/view/homeproxy/server.js:447 -#: htdocs/luci-static/resources/view/homeproxy/server.js:478 +#: htdocs/luci-static/resources/view/homeproxy/server.js:452 +#: htdocs/luci-static/resources/view/homeproxy/server.js:483 msgid "Host" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:618 +#: htdocs/luci-static/resources/view/homeproxy/node.js:666 msgid "Host key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:623 +#: htdocs/luci-static/resources/view/homeproxy/node.js:671 msgid "Host key algorithms" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:549 -#: htdocs/luci-static/resources/view/homeproxy/client.js:918 +#: htdocs/luci-static/resources/view/homeproxy/client.js:581 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1059 msgid "Host/IP fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:368 +#: htdocs/luci-static/resources/view/homeproxy/server.js:374 msgid "" "How long the server should wait for the client to send the authentication " "command (in seconds)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:406 -#: htdocs/luci-static/resources/view/homeproxy/server.js:158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:431 +#: htdocs/luci-static/resources/view/homeproxy/server.js:159 msgid "Hysteria" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:407 -#: htdocs/luci-static/resources/view/homeproxy/server.js:159 +#: htdocs/luci-static/resources/view/homeproxy/node.js:432 +#: htdocs/luci-static/resources/view/homeproxy/server.js:160 msgid "Hysteria2" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:690 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/client.js:830 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 msgid "IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:576 -#: htdocs/luci-static/resources/view/homeproxy/client.js:945 +#: htdocs/luci-static/resources/view/homeproxy/client.js:608 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 msgid "IP version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:578 -#: htdocs/luci-static/resources/view/homeproxy/client.js:946 +#: htdocs/luci-static/resources/view/homeproxy/client.js:610 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1088 msgid "IPv4" msgstr "" @@ -986,8 +1083,8 @@ msgstr "" msgid "IPv4 only" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:579 -#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:611 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1089 msgid "IPv6" msgstr "" @@ -999,158 +1096,197 @@ msgstr "" msgid "IPv6 support" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:521 -#: htdocs/luci-static/resources/view/homeproxy/node.js:799 -#: htdocs/luci-static/resources/view/homeproxy/server.js:461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:505 +msgid "Idle session check interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:512 +msgid "Idle session check timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/node.js:843 +#: htdocs/luci-static/resources/view/homeproxy/server.js:466 msgid "Idle timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:717 +msgid "" +"If enabled, attempts to connect UDP connection to the destination instead of " +"listen." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:711 +msgid "" +"If enabled, for UDP proxy requests addressed to a domain, the original " +"packet address will be sent in the response instead of the mapped domain." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:815 msgid "" "If enabled, the client transport sends keepalive pings even with no active " "connections." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:354 +#: htdocs/luci-static/resources/view/homeproxy/client.js:348 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:415 -msgid "" -"If set, the server domain name will be resolved to IP before connecting.
" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:755 -#: htdocs/luci-static/resources/view/homeproxy/server.js:430 +#: htdocs/luci-static/resources/view/homeproxy/node.js:800 +#: htdocs/luci-static/resources/view/homeproxy/server.js:435 msgid "" "If the transport doesn't see any activity after a duration of this time (in " "seconds), it pings the client to check if the connection is still active." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1028 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1069 msgid "" "If you have the root certificate, use this option instead of allowing " "insecure." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:319 +#: htdocs/luci-static/resources/view/homeproxy/server.js:326 msgid "Ignore client bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1251 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1284 msgid "Import" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1198 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1279 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1231 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1312 msgid "Import share links" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:857 +#: htdocs/luci-static/resources/view/homeproxy/client.js:336 +#: htdocs/luci-static/resources/view/homeproxy/server.js:850 msgid "In seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 -msgid "In seconds. 300 is used by default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:889 +#: htdocs/luci-static/resources/view/homeproxy/node.js:933 msgid "In seconds. Disabled by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 +#: htdocs/luci-static/resources/view/homeproxy/node.js:520 +msgid "" +"In the check, at least the first n idle sessions are kept open." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:513 +msgid "" +"In the check, close sessions that have been idle for longer than this, in " +"seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:904 msgid "Independent cache per server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1403 msgid "Interface Control" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:528 +#: htdocs/luci-static/resources/view/homeproxy/client.js:560 msgid "Interrupt existing connections" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:529 +#: htdocs/luci-static/resources/view/homeproxy/client.js:561 msgid "Interrupt existing connections when the selected outbound has changed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:678 -#: htdocs/luci-static/resources/view/homeproxy/server.js:382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:506 +msgid "Interval checking for idle sessions, in seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:724 +#: htdocs/luci-static/resources/view/homeproxy/server.js:387 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 -#: htdocs/luci-static/resources/view/homeproxy/client.js:998 +#: htdocs/luci-static/resources/view/homeproxy/client.js:665 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1140 msgid "Invert" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:666 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1141 msgid "Invert match result." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:771 +#: htdocs/luci-static/resources/view/homeproxy/server.js:767 msgid "Key path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1417 msgid "LAN IP Policy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:396 -#: htdocs/luci-static/resources/view/homeproxy/client.js:553 -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1138 -#: htdocs/luci-static/resources/view/homeproxy/node.js:397 +#: htdocs/luci-static/resources/view/homeproxy/client.js:409 +#: htdocs/luci-static/resources/view/homeproxy/client.js:585 +#: htdocs/luci-static/resources/view/homeproxy/client.js:937 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1063 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1322 +#: htdocs/luci-static/resources/view/homeproxy/node.js:421 #: htdocs/luci-static/resources/view/homeproxy/server.js:140 msgid "Label" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:693 -#: htdocs/luci-static/resources/view/homeproxy/server.js:397 +#: htdocs/luci-static/resources/view/homeproxy/node.js:739 +#: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:330 +#: htdocs/luci-static/resources/view/homeproxy/client.js:325 msgid "Less compatibility and sometimes better performance." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:638 +#: htdocs/luci-static/resources/view/homeproxy/server.js:639 msgid "Let's Encrypt" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:849 +#: htdocs/luci-static/resources/view/homeproxy/node.js:893 msgid "" "List of IP (v4 or v6) addresses prefixes to be assigned to the interface." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:132 #: htdocs/luci-static/resources/view/homeproxy/client.js:161 -#: htdocs/luci-static/resources/view/homeproxy/client.js:465 +#: htdocs/luci-static/resources/view/homeproxy/client.js:497 msgid "List of nodes to test." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:990 -#: htdocs/luci-static/resources/view/homeproxy/server.js:574 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1032 +#: htdocs/luci-static/resources/view/homeproxy/server.js:576 msgid "List of supported application level protocols, in order of preference." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:172 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +msgid "List of text DNS record to respond as answers." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1236 +msgid "List of text DNS record to respond as extra records." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1231 +msgid "List of text DNS record to respond as name servers." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:173 msgid "Listen address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1405 msgid "Listen interfaces" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:177 +#: htdocs/luci-static/resources/view/homeproxy/server.js:178 msgid "Listen port" msgstr "" @@ -1158,11 +1294,11 @@ msgstr "" msgid "Loading" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1149 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1333 msgid "Local" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:848 +#: htdocs/luci-static/resources/view/homeproxy/node.js:892 msgid "Local address" msgstr "" @@ -1174,7 +1310,7 @@ msgstr "" msgid "Log is empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:882 +#: htdocs/luci-static/resources/view/homeproxy/node.js:926 msgid "MTU" msgstr "" @@ -1186,273 +1322,282 @@ msgstr "" msgid "Main node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:630 +#: htdocs/luci-static/resources/view/homeproxy/client.js:662 msgid "Make IP CIDR in rule set used to match the source IP." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:991 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 msgid "Make IP CIDR in rule sets match the source IP." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:995 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1137 msgid "Make IP CIDR in rule-sets accept empty query response." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:905 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:325 +#: htdocs/luci-static/resources/view/homeproxy/server.js:331 msgid "Masquerade" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1266 msgid "" "Match IP CIDR with query response. Current rule will be skipped if not match." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:691 +#: htdocs/luci-static/resources/view/homeproxy/client.js:831 msgid "Match IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:671 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1062 +#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1246 msgid "Match domain suffix." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:675 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1066 +#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 msgid "Match domain using keyword." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:679 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 +#: htdocs/luci-static/resources/view/homeproxy/client.js:819 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 msgid "Match domain using regular expression." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1057 +#: htdocs/luci-static/resources/view/homeproxy/client.js:806 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1241 msgid "Match full domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:714 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/client.js:854 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 msgid "Match port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:709 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1101 +#: htdocs/luci-static/resources/view/homeproxy/client.js:849 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1285 msgid "Match port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:695 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 msgid "Match private IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1271 msgid "Match private IP with query response." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:687 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1078 +#: htdocs/luci-static/resources/view/homeproxy/client.js:827 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1262 msgid "Match private source IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:719 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/client.js:859 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1295 msgid "Match process name." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 +#: htdocs/luci-static/resources/view/homeproxy/client.js:867 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1303 msgid "Match process path using regular expression." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:723 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1115 +#: htdocs/luci-static/resources/view/homeproxy/client.js:863 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 msgid "Match process path." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:952 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1094 msgid "Match query type." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:615 -#: htdocs/luci-static/resources/view/homeproxy/client.js:976 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 msgid "Match rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:683 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1074 +#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1258 msgid "Match source IP CIDR." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:704 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1096 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1280 msgid "Match source port range. Format as START:/:END/START:END." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1091 +#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1275 msgid "Match source port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1003 -msgid "Match the server name of outbound." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:611 -#: htdocs/luci-static/resources/view/homeproxy/client.js:972 +#: htdocs/luci-static/resources/view/homeproxy/client.js:643 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 msgid "Match user name." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:527 -#: htdocs/luci-static/resources/view/homeproxy/server.js:244 +#: htdocs/luci-static/resources/view/homeproxy/node.js:576 +#: htdocs/luci-static/resources/view/homeproxy/server.js:252 msgid "Max download speed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:528 -#: htdocs/luci-static/resources/view/homeproxy/server.js:245 +#: htdocs/luci-static/resources/view/homeproxy/node.js:577 +#: htdocs/luci-static/resources/view/homeproxy/server.js:253 msgid "Max download speed in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:734 +#: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "Max time difference" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:534 -#: htdocs/luci-static/resources/view/homeproxy/server.js:251 +#: htdocs/luci-static/resources/view/homeproxy/node.js:583 +#: htdocs/luci-static/resources/view/homeproxy/server.js:259 msgid "Max upload speed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:535 -#: htdocs/luci-static/resources/view/homeproxy/server.js:252 +#: htdocs/luci-static/resources/view/homeproxy/node.js:584 +#: htdocs/luci-static/resources/view/homeproxy/server.js:260 msgid "Max upload speed in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1011 -#: htdocs/luci-static/resources/view/homeproxy/server.js:586 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1052 +#: htdocs/luci-static/resources/view/homeproxy/server.js:588 msgid "Maximum TLS version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:914 +#: htdocs/luci-static/resources/view/homeproxy/node.js:957 +#: htdocs/luci-static/resources/view/homeproxy/node.js:971 msgid "Maximum connections" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:926 +#: htdocs/luci-static/resources/view/homeproxy/node.js:969 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." -"
Conflict with Maximum connections and Minimum " -"streams." +"
Conflict with %s and %s." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:925 +#: htdocs/luci-static/resources/view/homeproxy/node.js:968 msgid "Maximum streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:793 -#: htdocs/luci-static/resources/view/homeproxy/server.js:457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:768 +#: htdocs/luci-static/resources/view/homeproxy/client.js:776 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1200 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1209 +#: htdocs/luci-static/resources/view/homeproxy/node.js:837 +#: htdocs/luci-static/resources/view/homeproxy/server.js:462 msgid "Method" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1003 -#: htdocs/luci-static/resources/view/homeproxy/server.js:578 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/server.js:580 msgid "Minimum TLS version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:920 +#: htdocs/luci-static/resources/view/homeproxy/node.js:519 +msgid "Minimum idle sessions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:963 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:919 +#: htdocs/luci-static/resources/view/homeproxy/node.js:962 +#: htdocs/luci-static/resources/view/homeproxy/node.js:971 msgid "Minimum streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:315 -#: htdocs/luci-static/resources/view/homeproxy/server.js:162 +#: htdocs/luci-static/resources/view/homeproxy/client.js:310 +#: htdocs/luci-static/resources/view/homeproxy/server.js:163 msgid "Mixed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:326 +#: htdocs/luci-static/resources/view/homeproxy/client.js:321 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:563 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 +#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "Mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1127 -#: htdocs/luci-static/resources/view/homeproxy/server.js:845 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1163 +#: htdocs/luci-static/resources/view/homeproxy/server.js:840 msgid "MultiPath TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:896 -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 +#: htdocs/luci-static/resources/view/homeproxy/node.js:940 +#: htdocs/luci-static/resources/view/homeproxy/server.js:510 msgid "Multiplex" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:905 +#: htdocs/luci-static/resources/view/homeproxy/node.js:948 msgid "Multiplex protocol." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:57 -#: htdocs/luci-static/resources/view/homeproxy/server.js:40 +#: htdocs/luci-static/resources/view/homeproxy/server.js:41 msgid "NOT RUNNING" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1364 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1394 msgid "NOTE: Save current settings before updating subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1230 +msgid "NS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:707 msgid "Native" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:160 +#: htdocs/luci-static/resources/view/homeproxy/server.js:161 msgid "NaïveProxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:605 -#: htdocs/luci-static/resources/view/homeproxy/client.js:955 -#: htdocs/luci-static/resources/view/homeproxy/server.js:863 +#: htdocs/luci-static/resources/view/homeproxy/client.js:637 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1097 +#: htdocs/luci-static/resources/view/homeproxy/server.js:856 msgid "Network" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:649 +#: htdocs/luci-static/resources/view/homeproxy/node.js:697 msgid "New Reno" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:725 -#: htdocs/luci-static/resources/view/homeproxy/node.js:742 -#: htdocs/luci-static/resources/view/homeproxy/server.js:405 -#: htdocs/luci-static/resources/view/homeproxy/server.js:422 +#: htdocs/luci-static/resources/view/homeproxy/node.js:770 +#: htdocs/luci-static/resources/view/homeproxy/node.js:787 +#: htdocs/luci-static/resources/view/homeproxy/server.js:410 +#: htdocs/luci-static/resources/view/homeproxy/server.js:427 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:740 -#: htdocs/luci-static/resources/view/homeproxy/server.js:420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:785 +#: htdocs/luci-static/resources/view/homeproxy/server.js:425 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 msgid "No subscription available" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1435 msgid "No subscription node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1270 msgid "No valid share link found." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:406 -#: htdocs/luci-static/resources/view/homeproxy/node.js:372 +#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/node.js:396 msgid "Node" msgstr "" @@ -1460,29 +1605,29 @@ msgstr "" msgid "Node Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1183 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1216 msgid "Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 -#: htdocs/luci-static/resources/view/homeproxy/node.js:687 -#: htdocs/luci-static/resources/view/homeproxy/node.js:726 -#: htdocs/luci-static/resources/view/homeproxy/server.js:391 -#: htdocs/luci-static/resources/view/homeproxy/server.js:406 +#: htdocs/luci-static/resources/view/homeproxy/client.js:993 +#: htdocs/luci-static/resources/view/homeproxy/node.js:733 +#: htdocs/luci-static/resources/view/homeproxy/node.js:771 +#: htdocs/luci-static/resources/view/homeproxy/server.js:396 +#: htdocs/luci-static/resources/view/homeproxy/server.js:411 msgid "None" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:522 -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 +#: htdocs/luci-static/resources/view/homeproxy/node.js:571 +#: htdocs/luci-static/resources/view/homeproxy/server.js:284 msgid "Obfuscate password" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:516 -#: htdocs/luci-static/resources/view/homeproxy/server.js:270 +#: htdocs/luci-static/resources/view/homeproxy/node.js:565 +#: htdocs/luci-static/resources/view/homeproxy/server.js:278 msgid "Obfuscate type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1222 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1406 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "" @@ -1490,98 +1635,103 @@ msgstr "" msgid "Only proxy mainland China" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:548 -#: htdocs/luci-static/resources/view/homeproxy/client.js:917 +#: htdocs/luci-static/resources/view/homeproxy/client.js:580 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1058 msgid "Other fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 -#: htdocs/luci-static/resources/view/homeproxy/client.js:637 -#: htdocs/luci-static/resources/view/homeproxy/client.js:879 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1002 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1189 +#: htdocs/luci-static/resources/view/homeproxy/client.js:460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:678 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1025 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1373 msgid "Outbound" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:407 +#: htdocs/luci-static/resources/view/homeproxy/client.js:420 msgid "Outbound node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 msgid "Override address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:352 msgid "Override destination" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:703 msgid "Override port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 msgid "Override the connection destination address with the sniffed domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:656 +#: htdocs/luci-static/resources/view/homeproxy/client.js:697 msgid "Override the connection destination address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:661 +#: htdocs/luci-static/resources/view/homeproxy/client.js:704 msgid "Override the connection destination port." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:795 +#: htdocs/luci-static/resources/view/homeproxy/node.js:839 msgid "PUT" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:838 +#: htdocs/luci-static/resources/view/homeproxy/node.js:882 msgid "Packet encoding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:438 -#: htdocs/luci-static/resources/view/homeproxy/server.js:189 +#: htdocs/luci-static/resources/view/homeproxy/server.js:235 +msgid "Padding scheme" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:463 +#: htdocs/luci-static/resources/view/homeproxy/server.js:190 msgid "Password" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 -#: htdocs/luci-static/resources/view/homeproxy/node.js:788 -#: htdocs/luci-static/resources/view/homeproxy/node.js:821 -#: htdocs/luci-static/resources/view/homeproxy/server.js:452 -#: htdocs/luci-static/resources/view/homeproxy/server.js:482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1344 +#: htdocs/luci-static/resources/view/homeproxy/node.js:832 +#: htdocs/luci-static/resources/view/homeproxy/node.js:865 +#: htdocs/luci-static/resources/view/homeproxy/server.js:457 +#: htdocs/luci-static/resources/view/homeproxy/server.js:487 msgid "Path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:863 +#: htdocs/luci-static/resources/view/homeproxy/node.js:907 msgid "Peer pubkic key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:329 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:888 +#: htdocs/luci-static/resources/view/homeproxy/node.js:932 msgid "Persistent keepalive interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:807 -#: htdocs/luci-static/resources/view/homeproxy/server.js:469 +#: htdocs/luci-static/resources/view/homeproxy/node.js:851 +#: htdocs/luci-static/resources/view/homeproxy/server.js:474 msgid "Ping timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:579 +#: htdocs/luci-static/resources/view/homeproxy/node.js:627 msgid "Plugin" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:586 +#: htdocs/luci-static/resources/view/homeproxy/node.js:634 msgid "Plugin opts" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:708 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 -#: htdocs/luci-static/resources/view/homeproxy/node.js:427 +#: htdocs/luci-static/resources/view/homeproxy/client.js:848 +#: htdocs/luci-static/resources/view/homeproxy/client.js:962 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1284 +#: htdocs/luci-static/resources/view/homeproxy/node.js:452 msgid "Port" msgstr "" @@ -1589,24 +1739,28 @@ msgstr "" msgid "Port %s alrealy exists!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:550 -#: htdocs/luci-static/resources/view/homeproxy/client.js:919 +#: htdocs/luci-static/resources/view/homeproxy/client.js:582 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1060 msgid "Port fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:535 msgid "Port hopping interval in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:713 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1105 +#: htdocs/luci-static/resources/view/homeproxy/client.js:853 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1289 msgid "Port range" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:870 +#: htdocs/luci-static/resources/view/homeproxy/node.js:914 msgid "Pre-shared key" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:1148 +msgid "Predefined" +msgstr "" + #: htdocs/luci-static/resources/homeproxy.js:18 msgid "Prefer IPv4" msgstr "" @@ -1615,80 +1769,80 @@ msgstr "" msgid "Prefer IPv6" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:627 -#: htdocs/luci-static/resources/view/homeproxy/node.js:855 +#: htdocs/luci-static/resources/view/homeproxy/node.js:675 +#: htdocs/luci-static/resources/view/homeproxy/node.js:899 msgid "Private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:632 +#: htdocs/luci-static/resources/view/homeproxy/node.js:680 msgid "Private key passphrase" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:551 -#: htdocs/luci-static/resources/view/homeproxy/client.js:920 +#: htdocs/luci-static/resources/view/homeproxy/client.js:583 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 msgid "Process fields" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:718 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1110 +#: htdocs/luci-static/resources/view/homeproxy/client.js:858 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1294 msgid "Process name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:722 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 +#: htdocs/luci-static/resources/view/homeproxy/client.js:862 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1298 msgid "Process path" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 +#: htdocs/luci-static/resources/view/homeproxy/client.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1302 msgid "Process path (regex)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:583 -#: htdocs/luci-static/resources/view/homeproxy/client.js:960 -#: htdocs/luci-static/resources/view/homeproxy/node.js:493 -#: htdocs/luci-static/resources/view/homeproxy/node.js:904 -#: htdocs/luci-static/resources/view/homeproxy/server.js:233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:615 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1102 +#: htdocs/luci-static/resources/view/homeproxy/node.js:542 +#: htdocs/luci-static/resources/view/homeproxy/node.js:947 +#: htdocs/luci-static/resources/view/homeproxy/server.js:241 msgid "Protocol" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:717 +#: htdocs/luci-static/resources/view/homeproxy/node.js:763 msgid "Protocol parameter. Enable length block encryption." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:710 +#: htdocs/luci-static/resources/view/homeproxy/node.js:756 msgid "" "Protocol parameter. Will waste traffic randomly if enabled (enabled by " "default in v2ray and cannot be disabled)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1480 msgid "Proxy Domain List" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1251 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1280 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1464 msgid "Proxy IPv4 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1283 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1438 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1467 msgid "Proxy IPv6 IP-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1257 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1441 msgid "Proxy MAC-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1238 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1422 msgid "Proxy all except listed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1235 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1419 msgid "Proxy filter mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1421 msgid "Proxy listed only" msgstr "" @@ -1696,82 +1850,87 @@ msgstr "" msgid "Proxy mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:470 +#: htdocs/luci-static/resources/view/homeproxy/node.js:496 msgid "Proxy protocol" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:589 -#: htdocs/luci-static/resources/view/homeproxy/client.js:965 -#: htdocs/luci-static/resources/view/homeproxy/node.js:660 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 -#: htdocs/luci-static/resources/view/homeproxy/server.js:410 +#: htdocs/luci-static/resources/view/homeproxy/client.js:621 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1107 +#: htdocs/luci-static/resources/view/homeproxy/node.js:708 +#: htdocs/luci-static/resources/view/homeproxy/node.js:775 +#: htdocs/luci-static/resources/view/homeproxy/server.js:415 msgid "QUIC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:647 -#: htdocs/luci-static/resources/view/homeproxy/server.js:359 +#: htdocs/luci-static/resources/view/homeproxy/node.js:695 +#: htdocs/luci-static/resources/view/homeproxy/server.js:365 msgid "QUIC congestion control algorithm." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:547 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 +#: htdocs/luci-static/resources/view/homeproxy/node.js:596 +#: htdocs/luci-static/resources/view/homeproxy/server.js:307 msgid "QUIC connection receive window" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:306 +#: htdocs/luci-static/resources/view/homeproxy/server.js:314 msgid "QUIC maximum concurrent bidirectional streams" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:541 -#: htdocs/luci-static/resources/view/homeproxy/server.js:292 +#: htdocs/luci-static/resources/view/homeproxy/node.js:590 +#: htdocs/luci-static/resources/view/homeproxy/server.js:300 msgid "QUIC stream receive window" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:951 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 msgid "Query type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:590 -#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1213 +msgid "RCode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:622 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1108 msgid "RDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:778 +#: htdocs/luci-static/resources/view/homeproxy/client.js:917 msgid "RDRC timeout" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1106 -#: htdocs/luci-static/resources/view/homeproxy/server.js:718 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1144 +#: htdocs/luci-static/resources/view/homeproxy/server.js:715 msgid "REALITY" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:724 +#: htdocs/luci-static/resources/view/homeproxy/server.js:720 msgid "REALITY private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1148 msgid "REALITY public key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1116 -#: htdocs/luci-static/resources/view/homeproxy/server.js:729 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1153 +#: htdocs/luci-static/resources/view/homeproxy/server.js:725 msgid "REALITY short ID" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:55 -#: htdocs/luci-static/resources/view/homeproxy/server.js:38 +#: htdocs/luci-static/resources/view/homeproxy/server.js:39 msgid "RUNNING" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:614 +#: htdocs/luci-static/resources/view/homeproxy/node.js:662 msgid "Random version will be used if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:456 +#: htdocs/luci-static/resources/view/homeproxy/client.js:488 msgid "Recursive outbound detected!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:860 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 msgid "Recursive resolver detected!" msgstr "" @@ -1795,23 +1954,40 @@ msgstr "" msgid "Region ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1150 +#: htdocs/luci-static/resources/view/homeproxy/client.js:672 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1147 +msgid "Reject" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1334 msgid "Remote" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1432 msgid "Remove %s nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1392 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1422 msgid "Remove all nodes from subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:877 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1201 +msgid "Reply with REFUSED" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:769 +msgid "Reply with TCP RST / ICMP port unreachable" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:921 msgid "Reserved field bytes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:873 +#: htdocs/luci-static/resources/view/homeproxy/client.js:673 +msgid "Resolve" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:780 msgid "Resolve strategy" msgstr "" @@ -1819,19 +1995,39 @@ msgstr "" msgid "Resources management" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/server.js:870 +msgid "Reuse address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:871 +msgid "Reuse listener address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1185 msgid "Rewrite TTL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 +#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1186 msgid "Rewrite TTL in DNS responses." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:383 +#: htdocs/luci-static/resources/view/homeproxy/client.js:670 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1145 +msgid "Route" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:671 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1146 +msgid "Route options" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:396 msgid "Routing Nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:567 msgid "Routing Rules" msgstr "" @@ -1843,7 +2039,7 @@ msgstr "" msgid "Routing mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:392 +#: htdocs/luci-static/resources/view/homeproxy/client.js:405 msgid "Routing node" msgstr "" @@ -1851,50 +2047,50 @@ msgstr "" msgid "Routing ports" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 +#: htdocs/luci-static/resources/view/homeproxy/client.js:576 msgid "Routing rule" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 msgid "Rule Set" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:614 -#: htdocs/luci-static/resources/view/homeproxy/client.js:975 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:646 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1117 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Rule set" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:629 -#: htdocs/luci-static/resources/view/homeproxy/client.js:990 +#: htdocs/luci-static/resources/view/homeproxy/client.js:661 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 msgid "Rule set IP CIDR as source IP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1167 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1351 msgid "Rule set URL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:591 -#: htdocs/luci-static/resources/view/homeproxy/client.js:967 -#: htdocs/luci-static/resources/view/homeproxy/node.js:412 +#: htdocs/luci-static/resources/view/homeproxy/client.js:623 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1109 +#: htdocs/luci-static/resources/view/homeproxy/node.js:437 msgid "SSH" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:592 -#: htdocs/luci-static/resources/view/homeproxy/client.js:968 +#: htdocs/luci-static/resources/view/homeproxy/client.js:624 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1110 msgid "STUN" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1143 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1176 msgid "SUoT version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:632 msgid "Safari / Apple Network API" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:518 -#: htdocs/luci-static/resources/view/homeproxy/server.js:272 +#: htdocs/luci-static/resources/view/homeproxy/node.js:567 +#: htdocs/luci-static/resources/view/homeproxy/server.js:280 msgid "Salamander" msgstr "" @@ -1907,15 +2103,15 @@ msgstr "" msgid "Save" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1396 msgid "Save current settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1393 msgid "Save subscriptions settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1020 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1153 #: htdocs/luci-static/resources/view/homeproxy/server.js:136 msgid "Server" msgstr "" @@ -1924,7 +2120,7 @@ msgstr "" msgid "Server Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:616 +#: htdocs/luci-static/resources/view/homeproxy/server.js:617 msgid "" "Server name to use when choosing a certificate if the ClientHello's " "ServerName field is empty." @@ -1938,72 +2134,81 @@ msgstr "" msgid "Service Status" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:410 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 +msgid "Set domain strategy for this query." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:435 msgid "ShadowTLS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:593 +#: htdocs/luci-static/resources/view/homeproxy/node.js:641 msgid "ShadowTLS version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:409 -#: htdocs/luci-static/resources/view/homeproxy/server.js:163 +#: htdocs/luci-static/resources/view/homeproxy/node.js:434 +#: htdocs/luci-static/resources/view/homeproxy/server.js:164 msgid "Shadowsocks" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:596 +#: htdocs/luci-static/resources/view/homeproxy/client.js:628 msgid "Sniffed client type (QUIC client type or SSH client name)." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:584 -#: htdocs/luci-static/resources/view/homeproxy/client.js:961 +#: htdocs/luci-static/resources/view/homeproxy/client.js:616 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1103 msgid "" "Sniffed protocol, see Sniff for details." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:411 -#: htdocs/luci-static/resources/view/homeproxy/server.js:164 +#: htdocs/luci-static/resources/view/homeproxy/node.js:436 +#: htdocs/luci-static/resources/view/homeproxy/server.js:165 msgid "Socks" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:603 +#: htdocs/luci-static/resources/view/homeproxy/node.js:651 msgid "Socks version" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:604 +#: htdocs/luci-static/resources/view/homeproxy/node.js:652 msgid "Socks4" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:605 +#: htdocs/luci-static/resources/view/homeproxy/node.js:653 msgid "Socks4A" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:606 +#: htdocs/luci-static/resources/view/homeproxy/node.js:654 msgid "Socks5" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:682 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 +#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1257 msgid "Source IP CIDR" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1156 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1340 msgid "Source file" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:698 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1090 +#: htdocs/luci-static/resources/view/homeproxy/client.js:838 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1274 msgid "Source port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:703 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1095 +#: htdocs/luci-static/resources/view/homeproxy/client.js:843 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1279 msgid "Source port range" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:747 -#: htdocs/luci-static/resources/view/homeproxy/node.js:800 +#: htdocs/luci-static/resources/view/homeproxy/client.js:750 +msgid "" +"Specifies DNS server tag to use instead of selecting through DNS routing." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:792 +#: htdocs/luci-static/resources/view/homeproxy/node.js:844 msgid "" "Specifies the period of time (in seconds) after which a health check will be " "performed using a ping frame if no frames have been received on the " @@ -2012,15 +2217,15 @@ msgid "" "will be executed every interval." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:427 -#: htdocs/luci-static/resources/view/homeproxy/server.js:462 +#: htdocs/luci-static/resources/view/homeproxy/server.js:432 +#: htdocs/luci-static/resources/view/homeproxy/server.js:467 msgid "" "Specifies the time (in seconds) until idle clients should be closed with a " "GOAWAY frame. PING frames are not considered as activity." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:751 -#: htdocs/luci-static/resources/view/homeproxy/node.js:808 +#: htdocs/luci-static/resources/view/homeproxy/node.js:796 +#: htdocs/luci-static/resources/view/homeproxy/node.js:852 msgid "" "Specifies the timeout duration (in seconds) after sending a PING frame, " "within which a response must be received.
If a response to the PING " @@ -2034,34 +2239,34 @@ msgid "" "commas." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:913 msgid "Store RDRC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:914 msgid "" "Store rejected DNS response cache.
The check results of Address " "filter DNS rule items will be cached until expiration." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:507 -#: htdocs/luci-static/resources/view/homeproxy/server.js:261 +#: htdocs/luci-static/resources/view/homeproxy/node.js:556 +#: htdocs/luci-static/resources/view/homeproxy/server.js:269 msgid "String" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1288 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1321 msgid "Sub (%s)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1348 msgid "Subscription URL-s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1332 msgid "Subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1239 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1272 msgid "Successfully imported %s nodes of total %s." msgstr "" @@ -2069,8 +2274,8 @@ msgstr "" msgid "Successfully updated." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1199 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1232 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1349 msgid "" "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " "online configuration delivery standard." @@ -2081,80 +2286,95 @@ msgid "" "Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:318 +#: htdocs/luci-static/resources/view/homeproxy/client.js:313 msgid "System" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:748 -#: htdocs/luci-static/resources/view/homeproxy/client.js:843 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/client.js:383 +#: htdocs/luci-static/resources/view/homeproxy/client.js:435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:757 +#: htdocs/luci-static/resources/view/homeproxy/client.js:888 +#: htdocs/luci-static/resources/view/homeproxy/client.js:995 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 msgid "System DNS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:606 -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 -#: htdocs/luci-static/resources/view/homeproxy/server.js:864 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:949 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1098 +#: htdocs/luci-static/resources/view/homeproxy/server.js:857 msgid "TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1123 -#: htdocs/luci-static/resources/view/homeproxy/server.js:839 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1160 +#: htdocs/luci-static/resources/view/homeproxy/server.js:835 msgid "TCP fast open" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:307 msgid "TCP/IP stack" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:313 +#: htdocs/luci-static/resources/view/homeproxy/client.js:308 msgid "TCP/IP stack." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:593 -#: htdocs/luci-static/resources/view/homeproxy/client.js:969 -#: htdocs/luci-static/resources/view/homeproxy/node.js:957 -#: htdocs/luci-static/resources/view/homeproxy/server.js:540 +#: htdocs/luci-static/resources/view/homeproxy/client.js:625 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/node.js:999 +#: htdocs/luci-static/resources/view/homeproxy/server.js:542 msgid "TLS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:989 -#: htdocs/luci-static/resources/view/homeproxy/server.js:573 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1031 +#: htdocs/luci-static/resources/view/homeproxy/server.js:575 msgid "TLS ALPN" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:984 -#: htdocs/luci-static/resources/view/homeproxy/server.js:568 +#: htdocs/luci-static/resources/view/homeproxy/client.js:979 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1026 +#: htdocs/luci-static/resources/view/homeproxy/server.js:570 msgid "TLS SNI" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:738 -#: htdocs/luci-static/resources/view/homeproxy/server.js:418 +#: htdocs/luci-static/resources/view/homeproxy/client.js:735 +msgid "TLS fragment" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:783 +#: htdocs/luci-static/resources/view/homeproxy/server.js:423 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:836 +#: htdocs/luci-static/resources/view/homeproxy/client.js:729 +#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +msgid "TLS record fragment" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:988 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:880 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1026 msgid "Tag of an outbound for connecting to the dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1190 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 msgid "Tag of the outbound to download rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1021 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1154 msgid "Tag of the target dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Tag of the target outbound." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:320 +#: htdocs/luci-static/resources/view/homeproxy/server.js:327 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "" @@ -2164,66 +2384,65 @@ msgstr "" msgid "Tencent Public DNS (119.29.29.29)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:478 +#: htdocs/luci-static/resources/view/homeproxy/client.js:510 msgid "Test URL" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:138 #: htdocs/luci-static/resources/view/homeproxy/client.js:167 -#: htdocs/luci-static/resources/view/homeproxy/client.js:498 +#: htdocs/luci-static/resources/view/homeproxy/client.js:530 msgid "Test interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:506 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 msgid "Test interval must be less or equal than idle timeout." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:144 #: htdocs/luci-static/resources/view/homeproxy/client.js:173 -#: htdocs/luci-static/resources/view/homeproxy/client.js:514 +#: htdocs/luci-static/resources/view/homeproxy/client.js:546 msgid "Test tolerance" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:637 +#: htdocs/luci-static/resources/view/homeproxy/server.js:638 msgid "The ACME CA provider to use." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:738 +#: htdocs/luci-static/resources/view/homeproxy/client.js:878 msgid "The DNS strategy for resolving the domain name in the address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:548 -#: htdocs/luci-static/resources/view/homeproxy/server.js:300 +#: htdocs/luci-static/resources/view/homeproxy/node.js:597 +#: htdocs/luci-static/resources/view/homeproxy/server.js:308 msgid "The QUIC connection-level flow control window for receiving data." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:542 -#: htdocs/luci-static/resources/view/homeproxy/server.js:293 +#: htdocs/luci-static/resources/view/homeproxy/node.js:591 +#: htdocs/luci-static/resources/view/homeproxy/server.js:301 msgid "The QUIC stream-level flow control window for receiving data." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:479 +#: htdocs/luci-static/resources/view/homeproxy/client.js:511 msgid "The URL to test." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:809 -msgid "" -"The address of the dns server. Support UDP, TCP, DoH, DoQ, DoT and RCode." +#: htdocs/luci-static/resources/view/homeproxy/client.js:958 +msgid "The address of the dns server." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:688 +#: htdocs/luci-static/resources/view/homeproxy/server.js:686 msgid "" "The alternate port to use for the ACME HTTP challenge; if non-empty, this " "port will be used instead of 80 to spin up a listener for the HTTP challenge." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:694 +#: htdocs/luci-static/resources/view/homeproxy/server.js:692 msgid "" "The alternate port to use for the ACME TLS-ALPN challenge; the system must " "forward 443 to this port for challenge to succeed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:596 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex || ip_cidr || " @@ -2234,7 +2453,7 @@ msgid "" "than as a single rule sub-item." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:933 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1074 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex) &&
(port " @@ -2249,79 +2468,99 @@ msgid "" "The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:868 +#: htdocs/luci-static/resources/view/homeproxy/client.js:447 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1020 msgid "The domain strategy for resolving the domain name in the address." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1020 -#: htdocs/luci-static/resources/view/homeproxy/server.js:595 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/server.js:597 msgid "" "The elliptic curves that will be used in an ECDHE handshake, in preference " "order. If empty, the default will be used." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:622 +#: htdocs/luci-static/resources/view/homeproxy/server.js:623 msgid "" "The email address to use when creating or selecting an existing ACME server " "account." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:522 +#: htdocs/luci-static/resources/view/homeproxy/client.js:743 +msgid "" +"The fallback value in milliseconds used when TLS segmentation cannot " +"automatically determine the wait time." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:554 msgid "The idle timeout in seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1012 -#: htdocs/luci-static/resources/view/homeproxy/server.js:587 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1053 +#: htdocs/luci-static/resources/view/homeproxy/server.js:589 msgid "The maximum TLS version that is acceptable." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:307 +#: htdocs/luci-static/resources/view/homeproxy/server.js:315 msgid "" "The maximum number of QUIC concurrent bidirectional streams that a peer is " "allowed to open." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:735 +#: htdocs/luci-static/resources/view/homeproxy/server.js:731 msgid "The maximum time difference between the server and the client." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1004 -#: htdocs/luci-static/resources/view/homeproxy/server.js:579 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1045 +#: htdocs/luci-static/resources/view/homeproxy/server.js:581 msgid "The minimum TLS version that is acceptable." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:102 -#: htdocs/luci-static/resources/view/homeproxy/server.js:109 +#: htdocs/luci-static/resources/view/homeproxy/server.js:110 msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:454 +#: htdocs/luci-static/resources/view/homeproxy/server.js:865 msgid "The network interface to bind to." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1062 +#: htdocs/luci-static/resources/view/homeproxy/client.js:967 +msgid "The path of the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1100 msgid "" "The path to the ECH config, in PEM format. If empty, load from DNS will be " "attempted." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1034 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1074 msgid "The path to the server certificate, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:178 +#: htdocs/luci-static/resources/view/homeproxy/server.js:179 msgid "The port must be unique." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:772 +#: htdocs/luci-static/resources/view/homeproxy/client.js:963 +msgid "The port of the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1214 +msgid "The response code." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:768 msgid "The server private key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:753 +#: htdocs/luci-static/resources/view/homeproxy/server.js:749 msgid "The server public key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:461 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." @@ -2329,32 +2568,32 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:139 #: htdocs/luci-static/resources/view/homeproxy/client.js:168 -#: htdocs/luci-static/resources/view/homeproxy/client.js:499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:531 msgid "The test interval in seconds." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:145 #: htdocs/luci-static/resources/view/homeproxy/client.js:174 -#: htdocs/luci-static/resources/view/homeproxy/client.js:515 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 msgid "The test tolerance in milliseconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:758 -#: htdocs/luci-static/resources/view/homeproxy/server.js:470 +#: htdocs/luci-static/resources/view/homeproxy/node.js:803 +#: htdocs/luci-static/resources/view/homeproxy/server.js:475 msgid "" "The timeout (in seconds) that after performing a keepalive check, the client " "will wait for activity. If no activity is detected, the connection will be " "closed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:997 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1353 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1039 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1384 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:665 +#: htdocs/luci-static/resources/view/homeproxy/node.js:713 msgid "" "This is the TUIC port of the UDP over TCP protocol, designed to provide a " "QUIC stream based UDP relay mode that TUIC does not provide." @@ -2365,13 +2604,19 @@ msgstr "" msgid "ThreatBook Public DNS (117.50.10.10)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 +#: htdocs/luci-static/resources/view/homeproxy/client.js:723 +msgid "" +"Timeout for UDP connections.
Setting a larger value than the UDP timeout " +"in inbounds will have no effect." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:918 msgid "" "Timeout of rejected DNS response cache in seconds. 604800 (7d) " "is used by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:496 +#: htdocs/luci-static/resources/view/homeproxy/server.js:501 msgid "" "To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." @@ -2383,18 +2628,18 @@ msgid "" "kmod-tun" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:724 -#: htdocs/luci-static/resources/view/homeproxy/server.js:404 +#: htdocs/luci-static/resources/view/homeproxy/node.js:769 +#: htdocs/luci-static/resources/view/homeproxy/server.js:409 msgid "Transport" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:413 -#: htdocs/luci-static/resources/view/homeproxy/server.js:165 +#: htdocs/luci-static/resources/view/homeproxy/node.js:438 +#: htdocs/luci-static/resources/view/homeproxy/server.js:166 msgid "Trojan" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:415 -#: htdocs/luci-static/resources/view/homeproxy/server.js:167 +#: htdocs/luci-static/resources/view/homeproxy/node.js:440 +#: htdocs/luci-static/resources/view/homeproxy/server.js:168 msgid "Tuic" msgstr "" @@ -2402,58 +2647,64 @@ msgstr "" msgid "Tun TCP/UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1148 -#: htdocs/luci-static/resources/view/homeproxy/node.js:402 +#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1332 +#: htdocs/luci-static/resources/view/homeproxy/node.js:426 #: htdocs/luci-static/resources/view/homeproxy/server.js:155 msgid "Type" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:607 -#: htdocs/luci-static/resources/view/homeproxy/client.js:957 -#: htdocs/luci-static/resources/view/homeproxy/server.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:639 +#: htdocs/luci-static/resources/view/homeproxy/client.js:948 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/server.js:858 msgid "UDP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 -#: htdocs/luci-static/resources/view/homeproxy/server.js:850 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/server.js:844 msgid "UDP Fragment" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:340 -#: htdocs/luci-static/resources/view/homeproxy/server.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:335 +#: htdocs/luci-static/resources/view/homeproxy/server.js:849 msgid "UDP NAT expiration time" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1136 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1170 msgid "UDP over TCP" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:664 +#: htdocs/luci-static/resources/view/homeproxy/node.js:712 msgid "UDP over stream" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:657 +#: htdocs/luci-static/resources/view/homeproxy/node.js:705 msgid "UDP packet relay mode." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:656 +#: htdocs/luci-static/resources/view/homeproxy/node.js:704 msgid "UDP relay mode" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/client.js:722 +msgid "UDP timeout" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/client.js:124 #: htdocs/luci-static/resources/view/homeproxy/client.js:153 -#: htdocs/luci-static/resources/view/homeproxy/client.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:421 msgid "URLTest" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:131 #: htdocs/luci-static/resources/view/homeproxy/client.js:160 -#: htdocs/luci-static/resources/view/homeproxy/client.js:464 +#: htdocs/luci-static/resources/view/homeproxy/client.js:496 msgid "URLTest nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:639 -#: htdocs/luci-static/resources/view/homeproxy/server.js:340 +#: htdocs/luci-static/resources/view/homeproxy/node.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:346 msgid "UUID" msgstr "" @@ -2465,11 +2716,11 @@ msgstr "" msgid "Unknown error: %s" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 msgid "Unsupported fingerprint!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1377 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1407 msgid "Update %s subscriptions" msgstr "" @@ -2477,92 +2728,96 @@ msgstr "" msgid "Update failed." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1206 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1390 msgid "Update interval" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1391 msgid "Update interval of rule set." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1372 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 msgid "Update nodes from subscriptions" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1313 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1345 msgid "Update subscriptions via proxy." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1306 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1338 msgid "Update time" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1312 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1344 msgid "Update via proxy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1105 msgid "Upload ECH config" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:949 -#: htdocs/luci-static/resources/view/homeproxy/server.js:531 +#: htdocs/luci-static/resources/view/homeproxy/node.js:991 +#: htdocs/luci-static/resources/view/homeproxy/server.js:533 msgid "Upload bandwidth" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:950 -#: htdocs/luci-static/resources/view/homeproxy/server.js:532 +#: htdocs/luci-static/resources/view/homeproxy/node.js:992 +#: htdocs/luci-static/resources/view/homeproxy/server.js:534 msgid "Upload bandwidth in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1041 -#: htdocs/luci-static/resources/view/homeproxy/server.js:763 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/server.js:759 msgid "Upload certificate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:782 +#: htdocs/luci-static/resources/view/homeproxy/server.js:778 msgid "Upload key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1044 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1070 -#: htdocs/luci-static/resources/view/homeproxy/server.js:766 -#: htdocs/luci-static/resources/view/homeproxy/server.js:785 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1108 +#: htdocs/luci-static/resources/view/homeproxy/server.js:762 +#: htdocs/luci-static/resources/view/homeproxy/server.js:781 msgid "Upload..." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:604 +#: htdocs/luci-static/resources/view/homeproxy/server.js:606 msgid "Use ACME TLS certificate issuer." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:985 -#: htdocs/luci-static/resources/view/homeproxy/server.js:569 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/server.js:571 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:610 -#: htdocs/luci-static/resources/view/homeproxy/client.js:971 +#: htdocs/luci-static/resources/view/homeproxy/client.js:980 +msgid "Used to verify the hostname on the returned certificates." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:642 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 msgid "User" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1347 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1378 msgid "User-Agent" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:432 -#: htdocs/luci-static/resources/view/homeproxy/server.js:182 +#: htdocs/luci-static/resources/view/homeproxy/node.js:457 +#: htdocs/luci-static/resources/view/homeproxy/server.js:183 msgid "Username" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:418 -#: htdocs/luci-static/resources/view/homeproxy/server.js:168 +#: htdocs/luci-static/resources/view/homeproxy/node.js:443 +#: htdocs/luci-static/resources/view/homeproxy/server.js:169 msgid "VLESS" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:419 -#: htdocs/luci-static/resources/view/homeproxy/server.js:169 +#: htdocs/luci-static/resources/view/homeproxy/node.js:444 +#: htdocs/luci-static/resources/view/homeproxy/server.js:170 msgid "VMess" msgstr "" @@ -2571,61 +2826,65 @@ msgstr "" msgid "WAN DNS (read from interface)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1462 msgid "WAN IP Policy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:731 -#: htdocs/luci-static/resources/view/homeproxy/server.js:411 +#: htdocs/luci-static/resources/view/homeproxy/node.js:776 +#: htdocs/luci-static/resources/view/homeproxy/server.js:416 msgid "WebSocket" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1338 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1369 msgid "Whitelist mode" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:417 +#: htdocs/luci-static/resources/view/homeproxy/node.js:442 msgid "WireGuard" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:864 +#: htdocs/luci-static/resources/view/homeproxy/node.js:908 msgid "WireGuard peer public key." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:871 +#: htdocs/luci-static/resources/view/homeproxy/node.js:915 msgid "WireGuard pre-shared key." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:856 +#: htdocs/luci-static/resources/view/homeproxy/node.js:900 msgid "WireGuard requires base64-encoded private keys." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:497 msgid "Write proxy protocol in the connection header." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:841 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1361 +#: htdocs/luci-static/resources/view/homeproxy/node.js:885 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1391 msgid "Xudp (Xray-core)" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:266 +#: htdocs/luci-static/resources/homeproxy.js:259 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:639 +#: htdocs/luci-static/resources/view/homeproxy/server.js:640 msgid "ZeroSSL" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1046 -#: htdocs/luci-static/resources/view/homeproxy/server.js:768 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/server.js:764 msgid "certificate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1005 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1013 -#: htdocs/luci-static/resources/view/homeproxy/server.js:580 -#: htdocs/luci-static/resources/view/homeproxy/server.js:588 +#: htdocs/luci-static/resources/view/homeproxy/client.js:716 +msgid "connect UDP connections" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1046 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1054 +#: htdocs/luci-static/resources/view/homeproxy/server.js:582 +#: htdocs/luci-static/resources/view/homeproxy/server.js:590 msgid "default" msgstr "" @@ -2633,45 +2892,44 @@ msgstr "" msgid "failed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/server.js:407 +#: htdocs/luci-static/resources/view/homeproxy/node.js:772 +#: htdocs/luci-static/resources/view/homeproxy/server.js:412 msgid "gRPC" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:769 +#: htdocs/luci-static/resources/view/homeproxy/node.js:814 msgid "gRPC permit without stream" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:764 -#: htdocs/luci-static/resources/view/homeproxy/server.js:435 +#: htdocs/luci-static/resources/view/homeproxy/node.js:809 +#: htdocs/luci-static/resources/view/homeproxy/server.js:440 msgid "gRPC service name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:316 +#: htdocs/luci-static/resources/view/homeproxy/client.js:311 msgid "gVisor" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:313 -#: htdocs/luci-static/resources/homeproxy.js:333 +#: htdocs/luci-static/resources/homeproxy.js:306 +#: htdocs/luci-static/resources/homeproxy.js:326 #: htdocs/luci-static/resources/view/homeproxy/client.js:195 #: htdocs/luci-static/resources/view/homeproxy/client.js:230 -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:814 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 -#: htdocs/luci-static/resources/view/homeproxy/node.js:461 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 -#: htdocs/luci-static/resources/view/homeproxy/server.js:224 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/server.js:226 msgid "non-empty value" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:580 -#: htdocs/luci-static/resources/view/homeproxy/node.js:839 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1359 +#: htdocs/luci-static/resources/view/homeproxy/node.js:628 +#: htdocs/luci-static/resources/view/homeproxy/node.js:883 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1389 msgid "none" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:840 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/node.js:884 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1390 msgid "packet addr (v2ray-core v5+)" msgstr "" @@ -2679,11 +2937,11 @@ msgstr "" msgid "passed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:787 +#: htdocs/luci-static/resources/view/homeproxy/server.js:783 msgid "private key" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:631 msgid "quic-go / uquic chrome" msgstr "" @@ -2695,11 +2953,11 @@ msgstr "" msgid "sing-box server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1115 msgid "uTLS fingerprint" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1078 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1116 msgid "" "uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " "resistance." @@ -2709,28 +2967,28 @@ msgstr "" msgid "unchecked" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:244 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 +#: htdocs/luci-static/resources/homeproxy.js:237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 msgid "unique UCI identifier" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:324 +#: htdocs/luci-static/resources/homeproxy.js:317 msgid "unique value" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:473 -#: htdocs/luci-static/resources/view/homeproxy/node.js:594 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1144 +#: htdocs/luci-static/resources/view/homeproxy/node.js:499 +#: htdocs/luci-static/resources/view/homeproxy/node.js:642 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1177 msgid "v1" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:474 -#: htdocs/luci-static/resources/view/homeproxy/node.js:595 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1145 +#: htdocs/luci-static/resources/view/homeproxy/node.js:500 +#: htdocs/luci-static/resources/view/homeproxy/node.js:643 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1178 msgid "v2" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:596 +#: htdocs/luci-static/resources/view/homeproxy/node.js:644 msgid "v3" msgstr "" @@ -2738,30 +2996,28 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:211 #: htdocs/luci-static/resources/view/homeproxy/client.js:241 #: htdocs/luci-static/resources/view/homeproxy/client.js:245 -#: htdocs/luci-static/resources/view/homeproxy/client.js:825 -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 msgid "valid DNS server address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:486 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/client.js:518 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 msgid "valid URL" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:278 +#: htdocs/luci-static/resources/homeproxy.js:271 msgid "valid base64 key with %d characters" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 msgid "valid hostname" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:304 +#: htdocs/luci-static/resources/homeproxy.js:297 msgid "valid port range (port1:port2)" msgstr "" @@ -2769,6 +3025,6 @@ msgstr "" msgid "valid port value" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:335 +#: htdocs/luci-static/resources/homeproxy.js:328 msgid "valid uuid" msgstr "" diff --git a/luci-app-homeproxy/po/zh_Hans/homeproxy.po b/luci-app-homeproxy/po/zh_Hans/homeproxy.po index 5bdd300..9b00302 100644 --- a/luci-app-homeproxy/po/zh_Hans/homeproxy.po +++ b/luci-app-homeproxy/po/zh_Hans/homeproxy.po @@ -12,22 +12,31 @@ msgstr "" msgid "%s log" msgstr "%s 日志" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1424 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1454 msgid "%s nodes removed" msgstr "移除了 %s 个节点" -#: htdocs/luci-static/resources/homeproxy.js:286 +#: htdocs/luci-static/resources/homeproxy.js:279 msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..." -#: htdocs/luci-static/resources/view/homeproxy/client.js:577 +#: htdocs/luci-static/resources/view/homeproxy/client.js:609 msgid "4 or 6. Not limited if empty." msgstr "4 或 6。留空不限制。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1042 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 -#: htdocs/luci-static/resources/view/homeproxy/server.js:764 -#: htdocs/luci-static/resources/view/homeproxy/server.js:783 +#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1208 +msgid "" +"%s will be temporarily overwritten to %s after 50 " +"triggers in 30s if not enabled." +msgstr "" +"%s 在未启用的情况下,50 次触发后会在 30 秒内临时覆盖为 " +"%s。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/server.js:760 +#: htdocs/luci-static/resources/view/homeproxy/server.js:779 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" @@ -35,15 +44,15 @@ msgstr "上传文件前请先保存配置!" msgid "API token" msgstr "API 令牌" -#: htdocs/luci-static/resources/view/homeproxy/node.js:619 +#: htdocs/luci-static/resources/view/homeproxy/node.js:667 msgid "Accept any if empty." msgstr "留空则不校验。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:994 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1136 msgid "Accept empty query response" msgstr "接受空查询响应" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1213 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1397 msgid "Access Control" msgstr "访问控制" @@ -55,27 +64,32 @@ msgstr "访问密钥 ID" msgid "Access key secret" msgstr "访问密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:913 +#: htdocs/luci-static/resources/view/homeproxy/client.js:669 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1144 +msgid "Action" +msgstr "操作" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "Add a DNS rule" msgstr "新增 DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:933 msgid "Add a DNS server" msgstr "新增 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/node.js:372 +#: htdocs/luci-static/resources/view/homeproxy/node.js:396 msgid "Add a node" msgstr "新增节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:392 +#: htdocs/luci-static/resources/view/homeproxy/client.js:405 msgid "Add a routing node" msgstr "新增路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 +#: htdocs/luci-static/resources/view/homeproxy/client.js:576 msgid "Add a routing rule" msgstr "新增路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Add a rule set" msgstr "新增规则集" @@ -83,16 +97,20 @@ msgstr "新增规则集" msgid "Add a server" msgstr "新增服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:808 -#: htdocs/luci-static/resources/view/homeproxy/node.js:422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:974 +msgid "Additional headers to be sent to the DNS server." +msgstr "发送到 DNS 服务器的附加标头。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:957 +#: htdocs/luci-static/resources/view/homeproxy/node.js:447 msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:987 msgid "Address resolver" msgstr "地址解析器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:867 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1019 msgid "Address strategy" msgstr "地址解析策略" @@ -113,21 +131,21 @@ msgstr "所有端口" msgid "Allow access from the Internet." msgstr "允许来自互联网的访问。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:994 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1350 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1036 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1381 msgid "Allow insecure" msgstr "允许不安全连接" -#: htdocs/luci-static/resources/view/homeproxy/node.js:995 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1037 msgid "Allow insecure connection at TLS client." msgstr "允许 TLS 客户端侧的不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1351 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1382 msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "从订阅获取节点时,默认允许不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:826 -#: htdocs/luci-static/resources/view/homeproxy/server.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:870 +#: htdocs/luci-static/resources/view/homeproxy/server.js:492 msgid "Allowed payload size is in the request." msgstr "请求中允许的载荷大小。" @@ -139,30 +157,39 @@ msgstr "已是最新版本。" msgid "Already in updating." msgstr "已在更新中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:692 -#: htdocs/luci-static/resources/view/homeproxy/server.js:396 +#: htdocs/luci-static/resources/view/homeproxy/node.js:738 +#: htdocs/luci-static/resources/view/homeproxy/server.js:401 msgid "Alter ID" msgstr "额外 ID" -#: htdocs/luci-static/resources/view/homeproxy/server.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:685 msgid "Alternative HTTP port" msgstr "替代 HTTP 端口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:693 +#: htdocs/luci-static/resources/view/homeproxy/server.js:691 msgid "Alternative TLS port" msgstr "替代 HTTPS 端口" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1387 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1417 msgid "An error occurred during updating subscriptions: %s" msgstr "更新订阅时发生错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1008 -msgid "Any" -msgstr "任何" +#: htdocs/luci-static/resources/view/homeproxy/client.js:1225 +msgid "Answer" +msgstr "回答" -#: htdocs/luci-static/resources/view/homeproxy/client.js:770 -#: htdocs/luci-static/resources/view/homeproxy/client.js:898 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/node.js:428 +#: htdocs/luci-static/resources/view/homeproxy/server.js:156 +msgid "AnyTLS" +msgstr "AnyTLS" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:236 +msgid "AnyTLS padding scheme in array." +msgstr "AnyTLS 填充方案。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:799 +#: htdocs/luci-static/resources/view/homeproxy/client.js:909 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1193 msgid "" "Append a edns0-subnet OPT extra record with the specified IP " "prefix to every query by default.
If value is an IP address instead of " @@ -171,16 +198,16 @@ msgstr "" "将带有指定 IP 前缀的 edns0-subnet OPT 记录附加到每个查询。如果值" "是 IP 地址而不是前缀,则会自动添加 /32/128。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1068 msgid "Append self-signed certificate" msgstr "追加自签名证书" -#: htdocs/luci-static/resources/view/homeproxy/node.js:383 +#: htdocs/luci-static/resources/view/homeproxy/node.js:407 msgid "Applied" msgstr "已应用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:376 -#: htdocs/luci-static/resources/view/homeproxy/node.js:386 +#: htdocs/luci-static/resources/view/homeproxy/node.js:400 +#: htdocs/luci-static/resources/view/homeproxy/node.js:410 msgid "Apply" msgstr "应用" @@ -188,33 +215,33 @@ msgstr "应用" msgid "Are you sure to allow insecure?" msgstr "确定要允许不安全连接吗?" -#: htdocs/luci-static/resources/view/homeproxy/server.js:367 +#: htdocs/luci-static/resources/view/homeproxy/server.js:373 msgid "Auth timeout" msgstr "认证超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:716 +#: htdocs/luci-static/resources/view/homeproxy/node.js:762 msgid "Authenticated length" msgstr "认证长度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:511 -#: htdocs/luci-static/resources/view/homeproxy/server.js:265 +#: htdocs/luci-static/resources/view/homeproxy/node.js:560 +#: htdocs/luci-static/resources/view/homeproxy/server.js:273 msgid "Authentication payload" msgstr "认证载荷" -#: htdocs/luci-static/resources/view/homeproxy/node.js:504 -#: htdocs/luci-static/resources/view/homeproxy/server.js:258 +#: htdocs/luci-static/resources/view/homeproxy/node.js:553 +#: htdocs/luci-static/resources/view/homeproxy/server.js:266 msgid "Authentication type" msgstr "认证类型" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 msgid "Auto update" msgstr "自动更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1302 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1335 msgid "Auto update subscriptions and geodata." msgstr "自动更新订阅和地理数据。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:650 +#: htdocs/luci-static/resources/view/homeproxy/node.js:698 msgid "BBR" msgstr "BBR" @@ -222,58 +249,52 @@ msgstr "BBR" msgid "BaiDu" msgstr "百度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:506 -#: htdocs/luci-static/resources/view/homeproxy/server.js:260 +#: htdocs/luci-static/resources/view/homeproxy/node.js:555 +#: htdocs/luci-static/resources/view/homeproxy/server.js:268 msgid "Base64" msgstr "Base64" -#: htdocs/luci-static/resources/view/homeproxy/client.js:328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:323 msgid "Based on google/gvisor." msgstr "基于 google/gvisor。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1155 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1339 msgid "Binary file" msgstr "二进制文件" -#: htdocs/luci-static/resources/view/homeproxy/client.js:421 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +#: htdocs/luci-static/resources/view/homeproxy/client.js:453 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1410 +#: htdocs/luci-static/resources/view/homeproxy/server.js:864 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1227 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1411 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "绑定出站流量至指定端口。留空自动检测。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:585 -#: htdocs/luci-static/resources/view/homeproxy/client.js:962 +#: htdocs/luci-static/resources/view/homeproxy/client.js:617 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1104 msgid "BitTorrent" msgstr "BitTorrent" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1337 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1368 msgid "Blacklist mode" msgstr "黑名单模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:370 -#: htdocs/luci-static/resources/view/homeproxy/client.js:644 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1010 +#: htdocs/luci-static/resources/view/homeproxy/client.js:365 msgid "Block" msgstr "封锁" -#: htdocs/luci-static/resources/view/homeproxy/client.js:749 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1028 -msgid "Block DNS queries" -msgstr "封锁 DNS 请求" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:580 -#: htdocs/luci-static/resources/view/homeproxy/client.js:608 -#: htdocs/luci-static/resources/view/homeproxy/client.js:948 -#: htdocs/luci-static/resources/view/homeproxy/client.js:958 -#: htdocs/luci-static/resources/view/homeproxy/server.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:612 +#: htdocs/luci-static/resources/view/homeproxy/client.js:640 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1090 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 +#: htdocs/luci-static/resources/view/homeproxy/server.js:859 msgid "Both" msgstr "全部" -#: htdocs/luci-static/resources/view/homeproxy/client.js:349 +#: htdocs/luci-static/resources/view/homeproxy/client.js:343 msgid "Bypass CN traffic" msgstr "绕过中国流量" @@ -281,11 +302,11 @@ msgstr "绕过中国流量" msgid "Bypass mainland China" msgstr "大陆白名单" -#: htdocs/luci-static/resources/view/homeproxy/client.js:350 +#: htdocs/luci-static/resources/view/homeproxy/client.js:344 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "默认使用防火墙规则绕过中国大陆流量。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:637 msgid "CA provider" msgstr "CA 颁发机构" @@ -293,16 +314,16 @@ msgstr "CA 颁发机构" msgid "CNNIC Public DNS (210.2.4.8)" msgstr "CNNIC 公共 DNS(210.2.4.8)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:648 +#: htdocs/luci-static/resources/view/homeproxy/node.js:696 msgid "CUBIC" msgstr "CUBIC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1205 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1238 msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1033 -#: htdocs/luci-static/resources/view/homeproxy/server.js:752 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1073 +#: htdocs/luci-static/resources/view/homeproxy/server.js:748 msgid "Certificate path" msgstr "证书路径" @@ -330,12 +351,12 @@ msgstr "国内 IPv6 库版本" msgid "China list version" msgstr "国内域名列表版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:597 +#: htdocs/luci-static/resources/view/homeproxy/client.js:629 msgid "Chromium / Cronet" msgstr "Chromium / Cronet" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1019 -#: htdocs/luci-static/resources/view/homeproxy/server.js:594 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1060 +#: htdocs/luci-static/resources/view/homeproxy/server.js:596 msgid "Cipher suites" msgstr "密码套件" @@ -347,7 +368,7 @@ msgstr "思科公共 DNS(208.67.222.222)" msgid "Clean log" msgstr "清空日志" -#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:627 msgid "Client" msgstr "客户端" @@ -355,7 +376,7 @@ msgstr "客户端" msgid "Client Settings" msgstr "客户端设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:613 +#: htdocs/luci-static/resources/view/homeproxy/node.js:661 msgid "Client version" msgstr "客户端版本" @@ -368,7 +389,7 @@ msgid "Cloudflare" msgstr "Cloudflare" #: htdocs/luci-static/resources/view/homeproxy/client.js:114 -#: htdocs/luci-static/resources/view/homeproxy/server.js:121 +#: htdocs/luci-static/resources/view/homeproxy/server.js:122 #: htdocs/luci-static/resources/view/homeproxy/status.js:129 msgid "Collecting data..." msgstr "正在收集数据中..." @@ -377,8 +398,8 @@ msgstr "正在收集数据中..." msgid "Common ports only (bypass P2P traffic)" msgstr "仅常用端口(绕过 P2P 流量)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:646 -#: htdocs/luci-static/resources/view/homeproxy/server.js:358 +#: htdocs/luci-static/resources/view/homeproxy/node.js:694 +#: htdocs/luci-static/resources/view/homeproxy/server.js:364 msgid "Congestion control algorithm" msgstr "拥塞控制算法" @@ -390,19 +411,19 @@ msgstr "连接检查" msgid "Custom routing" msgstr "自定义路由" -#: htdocs/luci-static/resources/view/homeproxy/client.js:586 +#: htdocs/luci-static/resources/view/homeproxy/client.js:618 msgid "DNS" msgstr "DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:904 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 msgid "DNS Rules" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:785 +#: htdocs/luci-static/resources/view/homeproxy/client.js:924 msgid "DNS Servers" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:732 +#: htdocs/luci-static/resources/view/homeproxy/client.js:872 msgid "DNS Settings" msgstr "DNS 设置" @@ -410,135 +431,160 @@ msgstr "DNS 设置" msgid "DNS provider" msgstr "DNS 提供商" -#: htdocs/luci-static/resources/view/homeproxy/client.js:913 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1054 msgid "DNS rule" msgstr "DNS 规则" #: htdocs/luci-static/resources/view/homeproxy/client.js:179 -#: htdocs/luci-static/resources/view/homeproxy/client.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:749 +#: htdocs/luci-static/resources/view/homeproxy/client.js:933 msgid "DNS server" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/server.js:644 +#: htdocs/luci-static/resources/view/homeproxy/server.js:645 msgid "DNS01 challenge" msgstr "DNS01 验证" -#: htdocs/luci-static/resources/view/homeproxy/client.js:587 -#: htdocs/luci-static/resources/view/homeproxy/client.js:963 +#: htdocs/luci-static/resources/view/homeproxy/client.js:619 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1105 msgid "DTLS" msgstr "DTLS" #: htdocs/luci-static/resources/homeproxy.js:17 -#: htdocs/luci-static/resources/view/homeproxy/client.js:571 -#: htdocs/luci-static/resources/view/homeproxy/client.js:940 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1195 -#: htdocs/luci-static/resources/view/homeproxy/node.js:658 +#: htdocs/luci-static/resources/view/homeproxy/client.js:433 +#: htdocs/luci-static/resources/view/homeproxy/client.js:603 +#: htdocs/luci-static/resources/view/homeproxy/client.js:755 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1379 +#: htdocs/luci-static/resources/view/homeproxy/node.js:706 msgid "Default" msgstr "默认" -#: htdocs/luci-static/resources/view/homeproxy/client.js:747 -#: htdocs/luci-static/resources/view/homeproxy/client.js:842 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1026 +#: htdocs/luci-static/resources/view/homeproxy/client.js:382 +#: htdocs/luci-static/resources/view/homeproxy/client.js:434 +#: htdocs/luci-static/resources/view/homeproxy/client.js:756 +#: htdocs/luci-static/resources/view/homeproxy/client.js:887 +#: htdocs/luci-static/resources/view/homeproxy/client.js:994 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1159 msgid "Default DNS (issued by WAN)" msgstr "默认 DNS(由 WAN 下发)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +#: htdocs/luci-static/resources/view/homeproxy/client.js:882 msgid "Default DNS server" msgstr "默认 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +#: htdocs/luci-static/resources/view/homeproxy/client.js:377 +msgid "Default DNS server for resolving domain name in the server address." +msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:877 msgid "Default DNS strategy" msgstr "默认 DNS 解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:874 -msgid "Default domain strategy for resolving the domain names." -msgstr "默认域名解析策略。" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:357 msgid "Default outbound" msgstr "默认出站" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:376 +msgid "Default outbound DNS" +msgstr "默认出站 DNS" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +msgid "Default outbound for connections not matched by any routing rules." +msgstr "用于未被任何路由规则匹配的连接的默认出站。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1388 msgid "Default packet encoding" msgstr "默认包封装格式" -#: htdocs/luci-static/resources/view/homeproxy/server.js:615 +#: htdocs/luci-static/resources/view/homeproxy/server.js:616 msgid "Default server name" msgstr "默认服务器名称" -#: htdocs/luci-static/resources/view/homeproxy/client.js:369 -#: htdocs/luci-static/resources/view/homeproxy/client.js:434 -#: htdocs/luci-static/resources/view/homeproxy/client.js:643 -#: htdocs/luci-static/resources/view/homeproxy/client.js:885 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1009 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1196 -#: htdocs/luci-static/resources/view/homeproxy/node.js:403 +#: htdocs/luci-static/resources/view/homeproxy/client.js:364 +#: htdocs/luci-static/resources/view/homeproxy/client.js:466 +#: htdocs/luci-static/resources/view/homeproxy/client.js:684 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1031 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/node.js:427 msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1328 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1512 msgid "Direct Domain List" msgstr "直连域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1242 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1287 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1426 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1471 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1474 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1248 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1432 msgid "Direct MAC-s" msgstr "直连 MAC 地址" #: htdocs/luci-static/resources/view/homeproxy/client.js:123 #: htdocs/luci-static/resources/view/homeproxy/client.js:151 -#: htdocs/luci-static/resources/view/homeproxy/client.js:368 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1236 -#: htdocs/luci-static/resources/view/homeproxy/node.js:472 -#: htdocs/luci-static/resources/view/homeproxy/node.js:505 -#: htdocs/luci-static/resources/view/homeproxy/node.js:517 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1079 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1336 -#: htdocs/luci-static/resources/view/homeproxy/server.js:259 -#: htdocs/luci-static/resources/view/homeproxy/server.js:271 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:498 +#: htdocs/luci-static/resources/view/homeproxy/node.js:554 +#: htdocs/luci-static/resources/view/homeproxy/node.js:566 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1117 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1367 +#: htdocs/luci-static/resources/view/homeproxy/server.js:267 +#: htdocs/luci-static/resources/view/homeproxy/server.js:279 msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/homeproxy/client.js:760 +#: htdocs/luci-static/resources/view/homeproxy/client.js:363 +msgid "Disable (the service)" +msgstr "禁用(服务)" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:787 +#: htdocs/luci-static/resources/view/homeproxy/client.js:899 msgid "Disable DNS cache" msgstr "禁用 DNS 缓存" +#: htdocs/luci-static/resources/view/homeproxy/client.js:788 +msgid "Disable DNS cache in this query." +msgstr "在本次查询中禁用 DNS 缓存。" + #: htdocs/luci-static/resources/view/homeproxy/server.js:677 msgid "Disable HTTP challenge" msgstr "禁用 HTTP 验证" -#: htdocs/luci-static/resources/view/homeproxy/node.js:553 -#: htdocs/luci-static/resources/view/homeproxy/server.js:313 +#: htdocs/luci-static/resources/view/homeproxy/node.js:602 +#: htdocs/luci-static/resources/view/homeproxy/server.js:321 msgid "Disable Path MTU discovery" msgstr "禁用路径 MTU 探测" -#: htdocs/luci-static/resources/view/homeproxy/server.js:682 +#: htdocs/luci-static/resources/view/homeproxy/server.js:681 msgid "Disable TLS ALPN challenge" msgstr "禁用 TLS ALPN 认证" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1040 +#: htdocs/luci-static/resources/view/homeproxy/client.js:710 +msgid "Disable UDP domain unmapping" +msgstr "禁用 UDP 域名映射" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1180 msgid "Disable cache and save cache in this query." msgstr "在本次查询中禁用缓存。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:762 +#: htdocs/luci-static/resources/view/homeproxy/client.js:901 msgid "Disable cache expire" msgstr "缓存永不过期" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1039 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 msgid "Disable dns cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/node.js:554 -#: htdocs/luci-static/resources/view/homeproxy/server.js:314 +#: htdocs/luci-static/resources/view/homeproxy/node.js:603 +#: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " "(IPv4) / 1232 (IPv6) bytes in size." @@ -546,46 +592,73 @@ msgstr "" "禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) " "字节。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:674 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1065 +#: htdocs/luci-static/resources/view/homeproxy/client.js:814 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1249 msgid "Domain keyword" msgstr "域名关键词" -#: htdocs/luci-static/resources/view/homeproxy/client.js:665 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1056 +#: htdocs/luci-static/resources/view/homeproxy/client.js:805 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1240 msgid "Domain name" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:678 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1069 +#: htdocs/luci-static/resources/view/homeproxy/client.js:818 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1253 msgid "Domain regex" msgstr "域名正则表达式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:353 -#: htdocs/luci-static/resources/view/homeproxy/client.js:414 +#: htdocs/luci-static/resources/view/homeproxy/client.js:427 +msgid "Domain resolver" +msgstr "域名解析器" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:347 +#: htdocs/luci-static/resources/view/homeproxy/client.js:446 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1172 msgid "Domain strategy" msgstr "域名解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:670 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/client.js:781 +msgid "Domain strategy for resolving the domain names." +msgstr "目标域名的解析策略。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:810 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1245 msgid "Domain suffix" msgstr "域名后缀" -#: htdocs/luci-static/resources/view/homeproxy/server.js:609 +#: htdocs/luci-static/resources/view/homeproxy/server.js:610 msgid "Domains" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/node.js:943 -#: htdocs/luci-static/resources/view/homeproxy/server.js:525 +#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +msgid "Don't drop packets" +msgstr "不丢弃数据包" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1207 +msgid "Don't drop requests" +msgstr "不丢弃请求" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:985 +#: htdocs/luci-static/resources/view/homeproxy/server.js:527 msgid "Download bandwidth" msgstr "下载带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:944 -#: htdocs/luci-static/resources/view/homeproxy/server.js:526 +#: htdocs/luci-static/resources/view/homeproxy/node.js:986 +#: htdocs/luci-static/resources/view/homeproxy/server.js:528 msgid "Download bandwidth in Mbps." msgstr "下载带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1343 +#: htdocs/luci-static/resources/view/homeproxy/client.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:776 +msgid "Drop packets" +msgstr "丢弃数据包" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1202 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1209 +msgid "Drop requests" +msgstr "丢弃请求" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1374 msgid "" "Drop/keep nodes that contain the specific keywords. " "正则表达式。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1335 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 msgid "Drop/keep specific nodes from subscriptions." msgstr "从订阅中 丢弃/保留 指定节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:700 +#: htdocs/luci-static/resources/view/homeproxy/server.js:698 msgid "" "EAB (External Account Binding) contains information necessary to bind or map " "an ACME account to some other account known by the CA.
External account " @@ -610,7 +683,7 @@ msgstr "" "
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有帐户相关联,例如 CA " "客户数据库。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1051 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1091 msgid "" "ECH (Encrypted Client Hello) is a TLS extension that allows a client to " "encrypt the first part of its ClientHello message." @@ -618,59 +691,59 @@ msgstr "" "ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 ClientHello " "信息的第一部分。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1072 -#: htdocs/luci-static/resources/view/homeproxy/server.js:829 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1110 +#: htdocs/luci-static/resources/view/homeproxy/server.js:825 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 msgid "ECH config path" msgstr "ECH 配置路径" -#: htdocs/luci-static/resources/view/homeproxy/server.js:790 +#: htdocs/luci-static/resources/view/homeproxy/server.js:786 msgid "ECH key" msgstr "ECH 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:769 -#: htdocs/luci-static/resources/view/homeproxy/client.js:897 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/client.js:798 +#: htdocs/luci-static/resources/view/homeproxy/client.js:908 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1192 msgid "EDNS Client subnet" msgstr "ENDS 客户端子网" -#: htdocs/luci-static/resources/view/homeproxy/node.js:825 -#: htdocs/luci-static/resources/view/homeproxy/server.js:486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:869 +#: htdocs/luci-static/resources/view/homeproxy/server.js:491 msgid "Early data" msgstr "前置数据" -#: htdocs/luci-static/resources/view/homeproxy/node.js:832 -#: htdocs/luci-static/resources/view/homeproxy/server.js:493 +#: htdocs/luci-static/resources/view/homeproxy/node.js:876 +#: htdocs/luci-static/resources/view/homeproxy/server.js:498 msgid "Early data header name" msgstr "前置数据标头" -#: htdocs/luci-static/resources/view/homeproxy/server.js:494 +#: htdocs/luci-static/resources/view/homeproxy/server.js:499 msgid "Early data is sent in path instead of header by default." msgstr "前置数据默认发送在路径而不是标头中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1177 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1210 msgid "Edit nodes" msgstr "修改节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:621 +#: htdocs/luci-static/resources/view/homeproxy/server.js:622 msgid "Email" msgstr "Email" -#: htdocs/luci-static/resources/view/homeproxy/client.js:401 -#: htdocs/luci-static/resources/view/homeproxy/client.js:558 -#: htdocs/luci-static/resources/view/homeproxy/client.js:803 -#: htdocs/luci-static/resources/view/homeproxy/client.js:927 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1143 -#: htdocs/luci-static/resources/view/homeproxy/server.js:127 +#: htdocs/luci-static/resources/view/homeproxy/client.js:414 +#: htdocs/luci-static/resources/view/homeproxy/client.js:590 +#: htdocs/luci-static/resources/view/homeproxy/client.js:942 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1068 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/server.js:128 #: htdocs/luci-static/resources/view/homeproxy/server.js:146 msgid "Enable" msgstr "启用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:671 -#: htdocs/luci-static/resources/view/homeproxy/server.js:375 +#: htdocs/luci-static/resources/view/homeproxy/node.js:718 +#: htdocs/luci-static/resources/view/homeproxy/server.js:381 msgid "" "Enable 0-RTT QUIC connection handshake on the client side. This is not " "impacting much on the performance, as the protocol is fully multiplexed.
强烈建议禁用此功能,因为它容易受到重放攻击。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:670 -#: htdocs/luci-static/resources/view/homeproxy/server.js:374 +#: htdocs/luci-static/resources/view/homeproxy/node.js:717 +#: htdocs/luci-static/resources/view/homeproxy/server.js:380 msgid "Enable 0-RTT handshake" msgstr "启用 0-RTT 握手" -#: htdocs/luci-static/resources/view/homeproxy/server.js:603 +#: htdocs/luci-static/resources/view/homeproxy/server.js:605 msgid "Enable ACME" msgstr "启用 ACME" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1050 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1090 msgid "Enable ECH" msgstr "启用 ECH" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1056 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 msgid "Enable PQ signature schemes" msgstr "启用 PQ 签名方案" -#: htdocs/luci-static/resources/view/homeproxy/node.js:937 -#: htdocs/luci-static/resources/view/homeproxy/server.js:519 +#: htdocs/luci-static/resources/view/homeproxy/node.js:980 +#: htdocs/luci-static/resources/view/homeproxy/server.js:522 msgid "Enable TCP Brutal" msgstr "启用 TCP Brutal" -#: htdocs/luci-static/resources/view/homeproxy/node.js:938 -#: htdocs/luci-static/resources/view/homeproxy/server.js:520 +#: htdocs/luci-static/resources/view/homeproxy/node.js:981 +#: htdocs/luci-static/resources/view/homeproxy/server.js:523 msgid "Enable TCP Brutal congestion control algorithm" msgstr "启用 TCP Brutal 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1132 -#: htdocs/luci-static/resources/view/homeproxy/server.js:851 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1167 +#: htdocs/luci-static/resources/view/homeproxy/server.js:845 msgid "Enable UDP fragmentation." msgstr "启用 UDP 分片。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:333 +#: htdocs/luci-static/resources/view/homeproxy/client.js:328 msgid "Enable endpoint-independent NAT" msgstr "启用端点独立 NAT" -#: htdocs/luci-static/resources/view/homeproxy/node.js:932 -#: htdocs/luci-static/resources/view/homeproxy/server.js:513 +#: htdocs/luci-static/resources/view/homeproxy/node.js:976 +#: htdocs/luci-static/resources/view/homeproxy/server.js:517 msgid "Enable padding" msgstr "启用填充" -#: htdocs/luci-static/resources/view/homeproxy/server.js:840 +#: htdocs/luci-static/resources/view/homeproxy/server.js:836 msgid "Enable tcp fast open for listener." msgstr "为监听器启用 TCP 快速打开。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1171 msgid "" "Enable the SUoT protocol, requires server support. Conflict with multiplex." msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:561 -#: htdocs/luci-static/resources/view/homeproxy/node.js:698 -#: htdocs/luci-static/resources/view/homeproxy/server.js:332 +#: htdocs/luci-static/resources/view/homeproxy/node.js:609 +#: htdocs/luci-static/resources/view/homeproxy/node.js:744 +#: htdocs/luci-static/resources/view/homeproxy/server.js:338 msgid "Encrypt method" msgstr "加密方式" -#: htdocs/luci-static/resources/homeproxy.js:244 -#: htdocs/luci-static/resources/homeproxy.js:278 -#: htdocs/luci-static/resources/homeproxy.js:286 -#: htdocs/luci-static/resources/homeproxy.js:304 -#: htdocs/luci-static/resources/homeproxy.js:313 -#: htdocs/luci-static/resources/homeproxy.js:324 -#: htdocs/luci-static/resources/homeproxy.js:333 -#: htdocs/luci-static/resources/homeproxy.js:335 +#: htdocs/luci-static/resources/homeproxy.js:237 +#: htdocs/luci-static/resources/homeproxy.js:271 +#: htdocs/luci-static/resources/homeproxy.js:279 +#: htdocs/luci-static/resources/homeproxy.js:297 +#: htdocs/luci-static/resources/homeproxy.js:306 +#: htdocs/luci-static/resources/homeproxy.js:317 +#: htdocs/luci-static/resources/homeproxy.js:326 +#: htdocs/luci-static/resources/homeproxy.js:328 #: htdocs/luci-static/resources/view/homeproxy/client.js:195 #: htdocs/luci-static/resources/view/homeproxy/client.js:207 #: htdocs/luci-static/resources/view/homeproxy/client.js:211 @@ -750,57 +823,58 @@ msgstr "加密方式" #: htdocs/luci-static/resources/view/homeproxy/client.js:241 #: htdocs/luci-static/resources/view/homeproxy/client.js:245 #: htdocs/luci-static/resources/view/homeproxy/client.js:274 -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:486 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:814 -#: htdocs/luci-static/resources/view/homeproxy/client.js:825 -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 -#: htdocs/luci-static/resources/view/homeproxy/node.js:461 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 -#: htdocs/luci-static/resources/view/homeproxy/server.js:224 -#: htdocs/luci-static/resources/view/homeproxy/server.js:627 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:518 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 +#: htdocs/luci-static/resources/view/homeproxy/node.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 +#: htdocs/luci-static/resources/view/homeproxy/server.js:226 +#: htdocs/luci-static/resources/view/homeproxy/server.js:628 +#: htdocs/luci-static/resources/view/homeproxy/server.js:630 msgid "Expecting: %s" msgstr "请输入:%s" -#: htdocs/luci-static/resources/view/homeproxy/server.js:699 +#: htdocs/luci-static/resources/view/homeproxy/server.js:697 msgid "External Account Binding" msgstr "外部账户绑定" -#: htdocs/luci-static/resources/view/homeproxy/server.js:711 +#: htdocs/luci-static/resources/view/homeproxy/server.js:708 msgid "External account MAC key" msgstr "外部账户 MAC 密钥" -#: htdocs/luci-static/resources/view/homeproxy/server.js:706 +#: htdocs/luci-static/resources/view/homeproxy/server.js:703 msgid "External account key ID" msgstr "外部账户密钥标识符" -#: htdocs/luci-static/resources/view/homeproxy/server.js:65 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1235 +msgid "Extra records" +msgstr "附加记录" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:66 msgid "Failed to generate %s, error: %s." msgstr "生成 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/homeproxy.js:268 +#: htdocs/luci-static/resources/homeproxy.js:261 msgid "Failed to upload %s, error: %s." msgstr "上传 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1342 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1373 msgid "Filter keywords" msgstr "过滤关键词" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1334 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1365 msgid "Filter nodes" msgstr "过滤节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:598 +#: htdocs/luci-static/resources/view/homeproxy/client.js:630 msgid "Firefox / uquic firefox" msgstr "Firefox / uquic firefox" @@ -808,16 +882,33 @@ msgstr "Firefox / uquic firefox" msgid "Firewall" msgstr "防火墙" -#: htdocs/luci-static/resources/view/homeproxy/node.js:686 -#: htdocs/luci-static/resources/view/homeproxy/server.js:390 +#: htdocs/luci-static/resources/view/homeproxy/node.js:732 +#: htdocs/luci-static/resources/view/homeproxy/server.js:395 msgid "Flow" msgstr "流控" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1154 +#: htdocs/luci-static/resources/view/homeproxy/client.js:428 +msgid "For resolving domain name in the server address." +msgstr "用于解析服务器地址中的域名。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1338 msgid "Format" msgstr "格式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:794 +#: htdocs/luci-static/resources/view/homeproxy/client.js:730 +msgid "Fragment TLS handshake into multiple TLS records." +msgstr "将 TLS 握手分片为多个 TLS 记录" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:736 +msgid "" +"Fragment TLS handshakes. Due to poor performance, try %s first." +msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:742 +msgid "Fragment fallback delay" +msgstr "分片回退延迟" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:838 msgid "GET" msgstr "GET" @@ -829,32 +920,28 @@ msgstr "GFW 域名列表版本" msgid "GFWList" msgstr "GFWList" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1260 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1444 msgid "Gaming mode IPv4 IP-s" msgstr "游戏模式 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1262 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1446 msgid "Gaming mode IPv6 IP-s" msgstr "游戏模式 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1449 msgid "Gaming mode MAC-s" msgstr "游戏模式 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 #: htdocs/luci-static/resources/view/homeproxy/server.js:203 -#: htdocs/luci-static/resources/view/homeproxy/server.js:284 -#: htdocs/luci-static/resources/view/homeproxy/server.js:286 -#: htdocs/luci-static/resources/view/homeproxy/server.js:349 -#: htdocs/luci-static/resources/view/homeproxy/server.js:351 -#: htdocs/luci-static/resources/view/homeproxy/server.js:821 +#: htdocs/luci-static/resources/view/homeproxy/server.js:205 +#: htdocs/luci-static/resources/view/homeproxy/server.js:292 +#: htdocs/luci-static/resources/view/homeproxy/server.js:294 +#: htdocs/luci-static/resources/view/homeproxy/server.js:355 +#: htdocs/luci-static/resources/view/homeproxy/server.js:357 +#: htdocs/luci-static/resources/view/homeproxy/server.js:817 msgid "Generate" msgstr "生成" -#: htdocs/luci-static/resources/view/homeproxy/client.js:307 -msgid "Generic segmentation offload" -msgstr "通用分段卸载(GSO)" - #: htdocs/luci-static/resources/view/homeproxy/status.js:213 msgid "GitHub token" msgstr "GitHub 令牌" @@ -863,23 +950,23 @@ msgstr "GitHub 令牌" msgid "Global" msgstr "全局" -#: htdocs/luci-static/resources/view/homeproxy/node.js:709 +#: htdocs/luci-static/resources/view/homeproxy/node.js:755 msgid "Global padding" msgstr "全局填充" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1267 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1451 msgid "Global proxy IPv4 IP-s" msgstr "全局代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1454 msgid "Global proxy IPv6 IP-s" msgstr "全局代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1273 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1457 msgid "Global proxy MAC-s" msgstr "全局代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:125 +#: htdocs/luci-static/resources/view/homeproxy/server.js:126 msgid "Global settings" msgstr "全局设置" @@ -895,36 +982,48 @@ msgstr "谷歌公共 DNS(8.8.8.8)" msgid "Grant access to homeproxy configuration" msgstr "授予 homeproxy 访问 UCI 配置的权限" -#: htdocs/luci-static/resources/view/homeproxy/client.js:588 -#: htdocs/luci-static/resources/view/homeproxy/client.js:964 -#: htdocs/luci-static/resources/view/homeproxy/node.js:404 -#: htdocs/luci-static/resources/view/homeproxy/node.js:728 -#: htdocs/luci-static/resources/view/homeproxy/server.js:156 -#: htdocs/luci-static/resources/view/homeproxy/server.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:620 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/node.js:429 +#: htdocs/luci-static/resources/view/homeproxy/node.js:773 +#: htdocs/luci-static/resources/view/homeproxy/server.js:157 +#: htdocs/luci-static/resources/view/homeproxy/server.js:413 msgid "HTTP" msgstr "HTTP" -#: htdocs/luci-static/resources/view/homeproxy/server.js:326 +#: htdocs/luci-static/resources/view/homeproxy/client.js:952 +msgid "HTTP3" +msgstr "HTTP3" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:332 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:729 -#: htdocs/luci-static/resources/view/homeproxy/server.js:409 +#: htdocs/luci-static/resources/view/homeproxy/client.js:951 +msgid "HTTPS" +msgstr "HTTPS" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:774 +#: htdocs/luci-static/resources/view/homeproxy/server.js:414 msgid "HTTPUpgrade" msgstr "HTTPUpgrade" -#: htdocs/luci-static/resources/view/homeproxy/server.js:739 +#: htdocs/luci-static/resources/view/homeproxy/server.js:735 msgid "Handshake server address" msgstr "握手服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:745 +#: htdocs/luci-static/resources/view/homeproxy/server.js:741 msgid "Handshake server port" msgstr "握手服务器端口" -#: htdocs/luci-static/resources/view/homeproxy/node.js:677 -#: htdocs/luci-static/resources/view/homeproxy/server.js:381 +#: htdocs/luci-static/resources/view/homeproxy/client.js:973 +msgid "Headers" +msgstr "标头" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:723 +#: htdocs/luci-static/resources/view/homeproxy/server.js:386 msgid "Heartbeat interval" msgstr "心跳间隔" @@ -936,70 +1035,70 @@ msgstr "心跳间隔" msgid "HomeProxy" msgstr "HomeProxy" -#: htdocs/luci-static/resources/view/homeproxy/server.js:38 -#: htdocs/luci-static/resources/view/homeproxy/server.js:40 -#: htdocs/luci-static/resources/view/homeproxy/server.js:108 +#: htdocs/luci-static/resources/view/homeproxy/server.js:39 +#: htdocs/luci-static/resources/view/homeproxy/server.js:41 +#: htdocs/luci-static/resources/view/homeproxy/server.js:109 msgid "HomeProxy Server" msgstr "HomeProxy 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:485 +#: htdocs/luci-static/resources/view/homeproxy/node.js:534 msgid "Hop interval" msgstr "跳跃间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:479 +#: htdocs/luci-static/resources/view/homeproxy/node.js:528 msgid "Hopping port" msgstr "跳跃端口" -#: htdocs/luci-static/resources/view/homeproxy/node.js:778 -#: htdocs/luci-static/resources/view/homeproxy/node.js:783 -#: htdocs/luci-static/resources/view/homeproxy/node.js:817 -#: htdocs/luci-static/resources/view/homeproxy/server.js:442 +#: htdocs/luci-static/resources/view/homeproxy/node.js:822 +#: htdocs/luci-static/resources/view/homeproxy/node.js:827 +#: htdocs/luci-static/resources/view/homeproxy/node.js:861 #: htdocs/luci-static/resources/view/homeproxy/server.js:447 -#: htdocs/luci-static/resources/view/homeproxy/server.js:478 +#: htdocs/luci-static/resources/view/homeproxy/server.js:452 +#: htdocs/luci-static/resources/view/homeproxy/server.js:483 msgid "Host" msgstr "主机名" -#: htdocs/luci-static/resources/view/homeproxy/node.js:618 +#: htdocs/luci-static/resources/view/homeproxy/node.js:666 msgid "Host key" msgstr "主机密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:623 +#: htdocs/luci-static/resources/view/homeproxy/node.js:671 msgid "Host key algorithms" msgstr "主机密钥算法" -#: htdocs/luci-static/resources/view/homeproxy/client.js:549 -#: htdocs/luci-static/resources/view/homeproxy/client.js:918 +#: htdocs/luci-static/resources/view/homeproxy/client.js:581 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1059 msgid "Host/IP fields" msgstr "主机/IP 字段" -#: htdocs/luci-static/resources/view/homeproxy/server.js:368 +#: htdocs/luci-static/resources/view/homeproxy/server.js:374 msgid "" "How long the server should wait for the client to send the authentication " "command (in seconds)." msgstr "服务器等待客户端发送认证命令的时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:406 -#: htdocs/luci-static/resources/view/homeproxy/server.js:158 +#: htdocs/luci-static/resources/view/homeproxy/node.js:431 +#: htdocs/luci-static/resources/view/homeproxy/server.js:159 msgid "Hysteria" msgstr "Hysteria" -#: htdocs/luci-static/resources/view/homeproxy/node.js:407 -#: htdocs/luci-static/resources/view/homeproxy/server.js:159 +#: htdocs/luci-static/resources/view/homeproxy/node.js:432 +#: htdocs/luci-static/resources/view/homeproxy/server.js:160 msgid "Hysteria2" msgstr "Hysteria2" -#: htdocs/luci-static/resources/view/homeproxy/client.js:690 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/client.js:830 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1265 msgid "IP CIDR" msgstr "IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:576 -#: htdocs/luci-static/resources/view/homeproxy/client.js:945 +#: htdocs/luci-static/resources/view/homeproxy/client.js:608 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 msgid "IP version" msgstr "IP 版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:578 -#: htdocs/luci-static/resources/view/homeproxy/client.js:946 +#: htdocs/luci-static/resources/view/homeproxy/client.js:610 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1088 msgid "IPv4" msgstr "IPv4" @@ -1007,8 +1106,8 @@ msgstr "IPv4" msgid "IPv4 only" msgstr "仅 IPv4" -#: htdocs/luci-static/resources/view/homeproxy/client.js:579 -#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:611 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1089 msgid "IPv6" msgstr "IPv6" @@ -1020,30 +1119,47 @@ msgstr "仅 IPv6" msgid "IPv6 support" msgstr "IPv6 支持" -#: htdocs/luci-static/resources/view/homeproxy/client.js:521 -#: htdocs/luci-static/resources/view/homeproxy/node.js:799 -#: htdocs/luci-static/resources/view/homeproxy/server.js:461 +#: htdocs/luci-static/resources/view/homeproxy/node.js:505 +msgid "Idle session check interval" +msgstr "空闲会话检查间隔" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:512 +msgid "Idle session check timeout" +msgstr "空闲会话检查超时" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:553 +#: htdocs/luci-static/resources/view/homeproxy/node.js:843 +#: htdocs/luci-static/resources/view/homeproxy/server.js:466 msgid "Idle timeout" msgstr "空闲超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:770 +#: htdocs/luci-static/resources/view/homeproxy/client.js:717 +msgid "" +"If enabled, attempts to connect UDP connection to the destination instead of " +"listen." +msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:711 +msgid "" +"If enabled, for UDP proxy requests addressed to a domain, the original " +"packet address will be sent in the response instead of the mapped domain." +msgstr "" +"如果启用,对于发送到域名的 UDP 代理请求,响应中将发送原始数据包地址而不是映射" +"的域名。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:815 msgid "" "If enabled, the client transport sends keepalive pings even with no active " "connections." msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:354 +#: htdocs/luci-static/resources/view/homeproxy/client.js:348 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:415 -msgid "" -"If set, the server domain name will be resolved to IP before connecting.
" -msgstr "如果设置,服务器域名将在连接前被解析为 IP。" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:755 -#: htdocs/luci-static/resources/view/homeproxy/server.js:430 +#: htdocs/luci-static/resources/view/homeproxy/node.js:800 +#: htdocs/luci-static/resources/view/homeproxy/server.js:435 msgid "" "If the transport doesn't see any activity after a duration of this time (in " "seconds), it pings the client to check if the connection is still active." @@ -1051,91 +1167,103 @@ msgstr "" "如果传输在此时间段(单位:秒)后没有看到任何活动,它会向客户端发送 ping 请求" "以检查连接是否仍然活动。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1028 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1069 msgid "" "If you have the root certificate, use this option instead of allowing " "insecure." msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:319 +#: htdocs/luci-static/resources/view/homeproxy/server.js:326 msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1251 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1284 msgid "Import" msgstr "导入" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1198 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1277 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1279 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1231 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1310 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1312 msgid "Import share links" msgstr "导入分享链接" -#: htdocs/luci-static/resources/view/homeproxy/server.js:857 +#: htdocs/luci-static/resources/view/homeproxy/client.js:336 +#: htdocs/luci-static/resources/view/homeproxy/server.js:850 msgid "In seconds." msgstr "单位:秒。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:341 -msgid "In seconds. 300 is used by default." -msgstr "单位:秒。默认使用 300。" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:889 +#: htdocs/luci-static/resources/view/homeproxy/node.js:933 msgid "In seconds. Disabled by default." msgstr "单位:秒。默认禁用。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:765 +#: htdocs/luci-static/resources/view/homeproxy/node.js:520 +msgid "" +"In the check, at least the first n idle sessions are kept open." +msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:513 +msgid "" +"In the check, close sessions that have been idle for longer than this, in " +"seconds." +msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:904 msgid "Independent cache per server" msgstr "独立缓存" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1219 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1403 msgid "Interface Control" msgstr "接口控制" -#: htdocs/luci-static/resources/view/homeproxy/client.js:528 +#: htdocs/luci-static/resources/view/homeproxy/client.js:560 msgid "Interrupt existing connections" msgstr "中断现有连接" -#: htdocs/luci-static/resources/view/homeproxy/client.js:529 +#: htdocs/luci-static/resources/view/homeproxy/client.js:561 msgid "Interrupt existing connections when the selected outbound has changed." msgstr "当选择的出站发生变化时中断现有连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:678 -#: htdocs/luci-static/resources/view/homeproxy/server.js:382 +#: htdocs/luci-static/resources/view/homeproxy/node.js:506 +msgid "Interval checking for idle sessions, in seconds." +msgstr "空闲会话检查间隔(单位:秒)。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:724 +#: htdocs/luci-static/resources/view/homeproxy/server.js:387 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:633 -#: htdocs/luci-static/resources/view/homeproxy/client.js:998 +#: htdocs/luci-static/resources/view/homeproxy/client.js:665 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1140 msgid "Invert" msgstr "反转" -#: htdocs/luci-static/resources/view/homeproxy/client.js:634 -#: htdocs/luci-static/resources/view/homeproxy/client.js:999 +#: htdocs/luci-static/resources/view/homeproxy/client.js:666 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1141 msgid "Invert match result." msgstr "反转匹配结果" -#: htdocs/luci-static/resources/view/homeproxy/server.js:771 +#: htdocs/luci-static/resources/view/homeproxy/server.js:767 msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1417 msgid "LAN IP Policy" msgstr "LAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/client.js:396 -#: htdocs/luci-static/resources/view/homeproxy/client.js:553 -#: htdocs/luci-static/resources/view/homeproxy/client.js:798 -#: htdocs/luci-static/resources/view/homeproxy/client.js:922 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1138 -#: htdocs/luci-static/resources/view/homeproxy/node.js:397 +#: htdocs/luci-static/resources/view/homeproxy/client.js:409 +#: htdocs/luci-static/resources/view/homeproxy/client.js:585 +#: htdocs/luci-static/resources/view/homeproxy/client.js:937 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1063 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1322 +#: htdocs/luci-static/resources/view/homeproxy/node.js:421 #: htdocs/luci-static/resources/view/homeproxy/server.js:140 msgid "Label" msgstr "标签" -#: htdocs/luci-static/resources/view/homeproxy/node.js:693 -#: htdocs/luci-static/resources/view/homeproxy/server.js:397 +#: htdocs/luci-static/resources/view/homeproxy/node.js:739 +#: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." @@ -1143,39 +1271,51 @@ msgstr "" "提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > " "1。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:330 +#: htdocs/luci-static/resources/view/homeproxy/client.js:325 msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:638 +#: htdocs/luci-static/resources/view/homeproxy/server.js:639 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: htdocs/luci-static/resources/view/homeproxy/node.js:849 +#: htdocs/luci-static/resources/view/homeproxy/node.js:893 msgid "" "List of IP (v4 or v6) addresses prefixes to be assigned to the interface." msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。" #: htdocs/luci-static/resources/view/homeproxy/client.js:132 #: htdocs/luci-static/resources/view/homeproxy/client.js:161 -#: htdocs/luci-static/resources/view/homeproxy/client.js:465 +#: htdocs/luci-static/resources/view/homeproxy/client.js:497 msgid "List of nodes to test." msgstr "要测试的节点列表。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:990 -#: htdocs/luci-static/resources/view/homeproxy/server.js:574 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1032 +#: htdocs/luci-static/resources/view/homeproxy/server.js:576 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:172 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1226 +msgid "List of text DNS record to respond as answers." +msgstr "要响应的 DNS 记录列表。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1236 +msgid "List of text DNS record to respond as extra records." +msgstr "要响应的附加 DNS 记录列表。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1231 +msgid "List of text DNS record to respond as name servers." +msgstr "要响应的域名服务器(NS) DNS 记录列表。" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:173 msgid "Listen address" msgstr "监听地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1221 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1405 msgid "Listen interfaces" msgstr "监听接口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:177 +#: htdocs/luci-static/resources/view/homeproxy/server.js:178 msgid "Listen port" msgstr "监听端口" @@ -1183,11 +1323,11 @@ msgstr "监听端口" msgid "Loading" msgstr "加载中" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1149 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1333 msgid "Local" msgstr "本地" -#: htdocs/luci-static/resources/view/homeproxy/node.js:848 +#: htdocs/luci-static/resources/view/homeproxy/node.js:892 msgid "Local address" msgstr "本地地址" @@ -1199,7 +1339,7 @@ msgstr "日志文件不存在。" msgid "Log is empty." msgstr "日志为空。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:882 +#: htdocs/luci-static/resources/view/homeproxy/node.js:926 msgid "MTU" msgstr "MTU" @@ -1211,275 +1351,284 @@ msgstr "主 UDP 节点" msgid "Main node" msgstr "主节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:630 +#: htdocs/luci-static/resources/view/homeproxy/client.js:662 msgid "Make IP CIDR in rule set used to match the source IP." msgstr "使规则集中的 IP CIDR 用于匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:991 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1133 msgid "Make IP CIDR in rule sets match the source IP." msgstr "使规则集中的 IP CIDR 匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:995 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1137 msgid "Make IP CIDR in rule-sets accept empty query response." msgstr "使规则集中的 IP CIDR 接受空查询响应。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:766 +#: htdocs/luci-static/resources/view/homeproxy/client.js:905 msgid "" "Make each DNS server's cache independent for special purposes. If enabled, " "will slightly degrade performance." msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后会略微降低性能。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:325 +#: htdocs/luci-static/resources/view/homeproxy/server.js:331 msgid "Masquerade" msgstr "伪装" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1082 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1266 msgid "" "Match IP CIDR with query response. Current rule will be skipped if not match." msgstr "使用查询响应匹配 IP CIDR。如果不匹配,则跳过当前规则。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:691 +#: htdocs/luci-static/resources/view/homeproxy/client.js:831 msgid "Match IP CIDR." msgstr "匹配 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:671 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1062 +#: htdocs/luci-static/resources/view/homeproxy/client.js:811 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1246 msgid "Match domain suffix." msgstr "匹配域名后缀。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:675 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1066 +#: htdocs/luci-static/resources/view/homeproxy/client.js:815 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1250 msgid "Match domain using keyword." msgstr "使用关键词匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:679 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1070 +#: htdocs/luci-static/resources/view/homeproxy/client.js:819 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 msgid "Match domain using regular expression." msgstr "使用正则表达式匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:666 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1057 +#: htdocs/luci-static/resources/view/homeproxy/client.js:806 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1241 msgid "Match full domain." msgstr "匹配完整域名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:714 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1106 +#: htdocs/luci-static/resources/view/homeproxy/client.js:854 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1290 msgid "Match port range. Format as START:/:END/START:END." msgstr "匹配端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:709 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1101 +#: htdocs/luci-static/resources/view/homeproxy/client.js:849 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1285 msgid "Match port." msgstr "匹配端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:695 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/client.js:835 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1270 msgid "Match private IP" msgstr "匹配私有 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1087 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1271 msgid "Match private IP with query response." msgstr "使用查询响应匹配私有 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:687 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1078 +#: htdocs/luci-static/resources/view/homeproxy/client.js:827 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1262 msgid "Match private source IP" msgstr "匹配私有源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:719 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/client.js:859 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1295 msgid "Match process name." msgstr "匹配进程名。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:727 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1119 +#: htdocs/luci-static/resources/view/homeproxy/client.js:867 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1303 msgid "Match process path using regular expression." msgstr "使用正则表达式匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:723 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1115 +#: htdocs/luci-static/resources/view/homeproxy/client.js:863 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1299 msgid "Match process path." msgstr "匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:952 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1094 msgid "Match query type." msgstr "匹配请求类型。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:615 -#: htdocs/luci-static/resources/view/homeproxy/client.js:976 +#: htdocs/luci-static/resources/view/homeproxy/client.js:647 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 msgid "Match rule set." msgstr "匹配规则集。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:683 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1074 +#: htdocs/luci-static/resources/view/homeproxy/client.js:823 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1258 msgid "Match source IP CIDR." msgstr "匹配源 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:704 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1096 +#: htdocs/luci-static/resources/view/homeproxy/client.js:844 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1280 msgid "Match source port range. Format as START:/:END/START:END." msgstr "匹配源端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:699 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1091 +#: htdocs/luci-static/resources/view/homeproxy/client.js:839 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1275 msgid "Match source port." msgstr "匹配源端口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1003 -msgid "Match the server name of outbound." -msgstr "匹配出站的服务器名称。" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:611 -#: htdocs/luci-static/resources/view/homeproxy/client.js:972 +#: htdocs/luci-static/resources/view/homeproxy/client.js:643 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 msgid "Match user name." msgstr "匹配用户名。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:527 -#: htdocs/luci-static/resources/view/homeproxy/server.js:244 +#: htdocs/luci-static/resources/view/homeproxy/node.js:576 +#: htdocs/luci-static/resources/view/homeproxy/server.js:252 msgid "Max download speed" msgstr "最大下载速度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:528 -#: htdocs/luci-static/resources/view/homeproxy/server.js:245 +#: htdocs/luci-static/resources/view/homeproxy/node.js:577 +#: htdocs/luci-static/resources/view/homeproxy/server.js:253 msgid "Max download speed in Mbps." msgstr "最大下载速度(Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:734 +#: htdocs/luci-static/resources/view/homeproxy/server.js:730 msgid "Max time difference" msgstr "最大时间差" -#: htdocs/luci-static/resources/view/homeproxy/node.js:534 -#: htdocs/luci-static/resources/view/homeproxy/server.js:251 +#: htdocs/luci-static/resources/view/homeproxy/node.js:583 +#: htdocs/luci-static/resources/view/homeproxy/server.js:259 msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/view/homeproxy/node.js:535 -#: htdocs/luci-static/resources/view/homeproxy/server.js:252 +#: htdocs/luci-static/resources/view/homeproxy/node.js:584 +#: htdocs/luci-static/resources/view/homeproxy/server.js:260 msgid "Max upload speed in Mbps." msgstr "最大上传速度(Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1011 -#: htdocs/luci-static/resources/view/homeproxy/server.js:586 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1052 +#: htdocs/luci-static/resources/view/homeproxy/server.js:588 msgid "Maximum TLS version" msgstr "最大 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:914 +#: htdocs/luci-static/resources/view/homeproxy/node.js:957 +#: htdocs/luci-static/resources/view/homeproxy/node.js:971 msgid "Maximum connections" msgstr "最大连接数" -#: htdocs/luci-static/resources/view/homeproxy/node.js:926 +#: htdocs/luci-static/resources/view/homeproxy/node.js:969 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." -"
Conflict with Maximum connections and Minimum " -"streams." +"
Conflict with %s and %s." msgstr "" -"在打开新连接之前,连接中的最大多路复用流数量。与 Maximum connectionsMinimum streams 冲突。" +"在打开新连接之前,连接中的最大多路复用流数量。与 %s 和 " +"%s 冲突。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:925 +#: htdocs/luci-static/resources/view/homeproxy/node.js:968 msgid "Maximum streams" msgstr "最大流数量" -#: htdocs/luci-static/resources/view/homeproxy/node.js:793 -#: htdocs/luci-static/resources/view/homeproxy/server.js:457 +#: htdocs/luci-static/resources/view/homeproxy/client.js:768 +#: htdocs/luci-static/resources/view/homeproxy/client.js:776 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1200 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1209 +#: htdocs/luci-static/resources/view/homeproxy/node.js:837 +#: htdocs/luci-static/resources/view/homeproxy/server.js:462 msgid "Method" msgstr "方式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1003 -#: htdocs/luci-static/resources/view/homeproxy/server.js:578 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/server.js:580 msgid "Minimum TLS version" msgstr "最低 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:920 +#: htdocs/luci-static/resources/view/homeproxy/node.js:519 +msgid "Minimum idle sessions" +msgstr "最小空闲会话数" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:963 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在打开新连接之前,连接中的最小多路复用流数量。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:919 +#: htdocs/luci-static/resources/view/homeproxy/node.js:962 +#: htdocs/luci-static/resources/view/homeproxy/node.js:971 msgid "Minimum streams" msgstr "最小流数量" -#: htdocs/luci-static/resources/view/homeproxy/client.js:315 -#: htdocs/luci-static/resources/view/homeproxy/server.js:162 +#: htdocs/luci-static/resources/view/homeproxy/client.js:310 +#: htdocs/luci-static/resources/view/homeproxy/server.js:163 msgid "Mixed" msgstr "混合" -#: htdocs/luci-static/resources/view/homeproxy/client.js:326 +#: htdocs/luci-static/resources/view/homeproxy/client.js:321 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "混合系统 TCP 栈和 gVisor UDP 栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:563 -#: htdocs/luci-static/resources/view/homeproxy/client.js:932 +#: htdocs/luci-static/resources/view/homeproxy/client.js:595 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 msgid "Mode" msgstr "模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1127 -#: htdocs/luci-static/resources/view/homeproxy/server.js:845 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1163 +#: htdocs/luci-static/resources/view/homeproxy/server.js:840 msgid "MultiPath TCP" msgstr "多路径 TCP(MPTCP)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:896 -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 +#: htdocs/luci-static/resources/view/homeproxy/node.js:940 +#: htdocs/luci-static/resources/view/homeproxy/server.js:510 msgid "Multiplex" msgstr "多路复用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:905 +#: htdocs/luci-static/resources/view/homeproxy/node.js:948 msgid "Multiplex protocol." msgstr "多路复用协议。" #: htdocs/luci-static/resources/view/homeproxy/client.js:57 -#: htdocs/luci-static/resources/view/homeproxy/server.js:40 +#: htdocs/luci-static/resources/view/homeproxy/server.js:41 msgid "NOT RUNNING" msgstr "未运行" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1364 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1394 msgid "NOTE: Save current settings before updating subscriptions." msgstr "注意:更新订阅前先保存当前配置。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:659 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1230 +msgid "NS" +msgstr "NS" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:707 msgid "Native" msgstr "原生" -#: htdocs/luci-static/resources/view/homeproxy/server.js:160 +#: htdocs/luci-static/resources/view/homeproxy/server.js:161 msgid "NaïveProxy" msgstr "NaïveProxy" -#: htdocs/luci-static/resources/view/homeproxy/client.js:605 -#: htdocs/luci-static/resources/view/homeproxy/client.js:955 -#: htdocs/luci-static/resources/view/homeproxy/server.js:863 +#: htdocs/luci-static/resources/view/homeproxy/client.js:637 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1097 +#: htdocs/luci-static/resources/view/homeproxy/server.js:856 msgid "Network" msgstr "网络" -#: htdocs/luci-static/resources/view/homeproxy/node.js:649 +#: htdocs/luci-static/resources/view/homeproxy/node.js:697 msgid "New Reno" msgstr "New Reno" -#: htdocs/luci-static/resources/view/homeproxy/node.js:725 -#: htdocs/luci-static/resources/view/homeproxy/node.js:742 -#: htdocs/luci-static/resources/view/homeproxy/server.js:405 -#: htdocs/luci-static/resources/view/homeproxy/server.js:422 +#: htdocs/luci-static/resources/view/homeproxy/node.js:770 +#: htdocs/luci-static/resources/view/homeproxy/node.js:787 +#: htdocs/luci-static/resources/view/homeproxy/server.js:410 +#: htdocs/luci-static/resources/view/homeproxy/server.js:427 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:740 -#: htdocs/luci-static/resources/view/homeproxy/server.js:420 +#: htdocs/luci-static/resources/view/homeproxy/node.js:785 +#: htdocs/luci-static/resources/view/homeproxy/server.js:425 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "无额外加密支持:它基本上是重复加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1380 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1410 msgid "No subscription available" msgstr "无可用订阅" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1405 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1435 msgid "No subscription node" msgstr "无订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1270 msgid "No valid share link found." msgstr "找不到有效分享链接。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:406 -#: htdocs/luci-static/resources/view/homeproxy/node.js:372 +#: htdocs/luci-static/resources/view/homeproxy/client.js:419 +#: htdocs/luci-static/resources/view/homeproxy/node.js:396 msgid "Node" msgstr "节点" @@ -1487,29 +1636,29 @@ msgstr "节点" msgid "Node Settings" msgstr "节点设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1183 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1216 msgid "Nodes" msgstr "节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:841 -#: htdocs/luci-static/resources/view/homeproxy/node.js:687 -#: htdocs/luci-static/resources/view/homeproxy/node.js:726 -#: htdocs/luci-static/resources/view/homeproxy/server.js:391 -#: htdocs/luci-static/resources/view/homeproxy/server.js:406 +#: htdocs/luci-static/resources/view/homeproxy/client.js:993 +#: htdocs/luci-static/resources/view/homeproxy/node.js:733 +#: htdocs/luci-static/resources/view/homeproxy/node.js:771 +#: htdocs/luci-static/resources/view/homeproxy/server.js:396 +#: htdocs/luci-static/resources/view/homeproxy/server.js:411 msgid "None" msgstr "无" -#: htdocs/luci-static/resources/view/homeproxy/node.js:522 -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 +#: htdocs/luci-static/resources/view/homeproxy/node.js:571 +#: htdocs/luci-static/resources/view/homeproxy/server.js:284 msgid "Obfuscate password" msgstr "混淆密码" -#: htdocs/luci-static/resources/view/homeproxy/node.js:516 -#: htdocs/luci-static/resources/view/homeproxy/server.js:270 +#: htdocs/luci-static/resources/view/homeproxy/node.js:565 +#: htdocs/luci-static/resources/view/homeproxy/server.js:278 msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1222 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1406 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" @@ -1517,98 +1666,103 @@ msgstr "只处理来自指定接口的流量。留空表示全部。" msgid "Only proxy mainland China" msgstr "仅代理中国大陆" -#: htdocs/luci-static/resources/view/homeproxy/client.js:548 -#: htdocs/luci-static/resources/view/homeproxy/client.js:917 +#: htdocs/luci-static/resources/view/homeproxy/client.js:580 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1058 msgid "Other fields" msgstr "其他字段" -#: htdocs/luci-static/resources/view/homeproxy/client.js:428 -#: htdocs/luci-static/resources/view/homeproxy/client.js:637 -#: htdocs/luci-static/resources/view/homeproxy/client.js:879 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1002 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1189 +#: htdocs/luci-static/resources/view/homeproxy/client.js:460 +#: htdocs/luci-static/resources/view/homeproxy/client.js:678 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1025 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1373 msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/homeproxy/client.js:407 +#: htdocs/luci-static/resources/view/homeproxy/client.js:420 msgid "Outbound node" msgstr "出站节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:655 +#: htdocs/luci-static/resources/view/homeproxy/client.js:696 msgid "Override address" msgstr "覆盖地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:358 +#: htdocs/luci-static/resources/view/homeproxy/client.js:352 msgid "Override destination" msgstr "覆盖目标地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:660 +#: htdocs/luci-static/resources/view/homeproxy/client.js:703 msgid "Override port" msgstr "覆盖端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:359 +#: htdocs/luci-static/resources/view/homeproxy/client.js:353 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:656 +#: htdocs/luci-static/resources/view/homeproxy/client.js:697 msgid "Override the connection destination address." msgstr "覆盖目标连接地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:661 +#: htdocs/luci-static/resources/view/homeproxy/client.js:704 msgid "Override the connection destination port." msgstr "覆盖目标连接端口。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:795 +#: htdocs/luci-static/resources/view/homeproxy/node.js:839 msgid "PUT" msgstr "PUT" -#: htdocs/luci-static/resources/view/homeproxy/node.js:838 +#: htdocs/luci-static/resources/view/homeproxy/node.js:882 msgid "Packet encoding" msgstr "数据包编码" -#: htdocs/luci-static/resources/view/homeproxy/node.js:438 -#: htdocs/luci-static/resources/view/homeproxy/server.js:189 +#: htdocs/luci-static/resources/view/homeproxy/server.js:235 +msgid "Padding scheme" +msgstr "填充方案" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:463 +#: htdocs/luci-static/resources/view/homeproxy/server.js:190 msgid "Password" msgstr "密码" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 -#: htdocs/luci-static/resources/view/homeproxy/node.js:788 -#: htdocs/luci-static/resources/view/homeproxy/node.js:821 -#: htdocs/luci-static/resources/view/homeproxy/server.js:452 -#: htdocs/luci-static/resources/view/homeproxy/server.js:482 +#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1344 +#: htdocs/luci-static/resources/view/homeproxy/node.js:832 +#: htdocs/luci-static/resources/view/homeproxy/node.js:865 +#: htdocs/luci-static/resources/view/homeproxy/server.js:457 +#: htdocs/luci-static/resources/view/homeproxy/server.js:487 msgid "Path" msgstr "路径" -#: htdocs/luci-static/resources/view/homeproxy/node.js:863 +#: htdocs/luci-static/resources/view/homeproxy/node.js:907 msgid "Peer pubkic key" msgstr "对端公钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:334 +#: htdocs/luci-static/resources/view/homeproxy/client.js:329 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." msgstr "性能可能会略有下降,建议仅在需要时开启。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:888 +#: htdocs/luci-static/resources/view/homeproxy/node.js:932 msgid "Persistent keepalive interval" msgstr "持久 keepalive 间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:807 -#: htdocs/luci-static/resources/view/homeproxy/server.js:469 +#: htdocs/luci-static/resources/view/homeproxy/node.js:851 +#: htdocs/luci-static/resources/view/homeproxy/server.js:474 msgid "Ping timeout" msgstr "Ping 超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:579 +#: htdocs/luci-static/resources/view/homeproxy/node.js:627 msgid "Plugin" msgstr "插件" -#: htdocs/luci-static/resources/view/homeproxy/node.js:586 +#: htdocs/luci-static/resources/view/homeproxy/node.js:634 msgid "Plugin opts" msgstr "插件参数" -#: htdocs/luci-static/resources/view/homeproxy/client.js:708 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1100 -#: htdocs/luci-static/resources/view/homeproxy/node.js:427 +#: htdocs/luci-static/resources/view/homeproxy/client.js:848 +#: htdocs/luci-static/resources/view/homeproxy/client.js:962 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1284 +#: htdocs/luci-static/resources/view/homeproxy/node.js:452 msgid "Port" msgstr "端口" @@ -1616,24 +1770,28 @@ msgstr "端口" msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:550 -#: htdocs/luci-static/resources/view/homeproxy/client.js:919 +#: htdocs/luci-static/resources/view/homeproxy/client.js:582 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1060 msgid "Port fields" msgstr "端口字段" -#: htdocs/luci-static/resources/view/homeproxy/node.js:486 +#: htdocs/luci-static/resources/view/homeproxy/node.js:535 msgid "Port hopping interval in seconds." msgstr "端口跳跃间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:713 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1105 +#: htdocs/luci-static/resources/view/homeproxy/client.js:853 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1289 msgid "Port range" msgstr "端口范围" -#: htdocs/luci-static/resources/view/homeproxy/node.js:870 +#: htdocs/luci-static/resources/view/homeproxy/node.js:914 msgid "Pre-shared key" msgstr "预共享密钥" +#: htdocs/luci-static/resources/view/homeproxy/client.js:1148 +msgid "Predefined" +msgstr "预定义" + #: htdocs/luci-static/resources/homeproxy.js:18 msgid "Prefer IPv4" msgstr "优先 IPv4" @@ -1642,80 +1800,80 @@ msgstr "优先 IPv4" msgid "Prefer IPv6" msgstr "优先 IPv6" -#: htdocs/luci-static/resources/view/homeproxy/node.js:627 -#: htdocs/luci-static/resources/view/homeproxy/node.js:855 +#: htdocs/luci-static/resources/view/homeproxy/node.js:675 +#: htdocs/luci-static/resources/view/homeproxy/node.js:899 msgid "Private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:632 +#: htdocs/luci-static/resources/view/homeproxy/node.js:680 msgid "Private key passphrase" msgstr "私钥指纹" -#: htdocs/luci-static/resources/view/homeproxy/client.js:551 -#: htdocs/luci-static/resources/view/homeproxy/client.js:920 +#: htdocs/luci-static/resources/view/homeproxy/client.js:583 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1061 msgid "Process fields" msgstr "进程字段" -#: htdocs/luci-static/resources/view/homeproxy/client.js:718 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1110 +#: htdocs/luci-static/resources/view/homeproxy/client.js:858 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1294 msgid "Process name" msgstr "进程名" -#: htdocs/luci-static/resources/view/homeproxy/client.js:722 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1114 +#: htdocs/luci-static/resources/view/homeproxy/client.js:862 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1298 msgid "Process path" msgstr "进程路径" -#: htdocs/luci-static/resources/view/homeproxy/client.js:726 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1118 +#: htdocs/luci-static/resources/view/homeproxy/client.js:866 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1302 msgid "Process path (regex)" msgstr "进程路径(正则表达式)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:583 -#: htdocs/luci-static/resources/view/homeproxy/client.js:960 -#: htdocs/luci-static/resources/view/homeproxy/node.js:493 -#: htdocs/luci-static/resources/view/homeproxy/node.js:904 -#: htdocs/luci-static/resources/view/homeproxy/server.js:233 +#: htdocs/luci-static/resources/view/homeproxy/client.js:615 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1102 +#: htdocs/luci-static/resources/view/homeproxy/node.js:542 +#: htdocs/luci-static/resources/view/homeproxy/node.js:947 +#: htdocs/luci-static/resources/view/homeproxy/server.js:241 msgid "Protocol" msgstr "协议" -#: htdocs/luci-static/resources/view/homeproxy/node.js:717 +#: htdocs/luci-static/resources/view/homeproxy/node.js:763 msgid "Protocol parameter. Enable length block encryption." msgstr "协议参数。启用长度块加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:710 +#: htdocs/luci-static/resources/view/homeproxy/node.js:756 msgid "" "Protocol parameter. Will waste traffic randomly if enabled (enabled by " "default in v2ray and cannot be disabled)." msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1296 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1480 msgid "Proxy Domain List" msgstr "代理域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1251 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1280 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1464 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1254 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1283 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1438 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1467 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1257 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1441 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1238 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1422 msgid "Proxy all except listed" msgstr "仅允许列表外" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1235 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1419 msgid "Proxy filter mode" msgstr "代理过滤模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1237 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1421 msgid "Proxy listed only" msgstr "仅允许列表内" @@ -1723,82 +1881,87 @@ msgstr "仅允许列表内" msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:470 +#: htdocs/luci-static/resources/view/homeproxy/node.js:496 msgid "Proxy protocol" msgstr "代理协议" -#: htdocs/luci-static/resources/view/homeproxy/client.js:589 -#: htdocs/luci-static/resources/view/homeproxy/client.js:965 -#: htdocs/luci-static/resources/view/homeproxy/node.js:660 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 -#: htdocs/luci-static/resources/view/homeproxy/server.js:410 +#: htdocs/luci-static/resources/view/homeproxy/client.js:621 +#: htdocs/luci-static/resources/view/homeproxy/client.js:953 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1107 +#: htdocs/luci-static/resources/view/homeproxy/node.js:708 +#: htdocs/luci-static/resources/view/homeproxy/node.js:775 +#: htdocs/luci-static/resources/view/homeproxy/server.js:415 msgid "QUIC" msgstr "QUIC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:647 -#: htdocs/luci-static/resources/view/homeproxy/server.js:359 +#: htdocs/luci-static/resources/view/homeproxy/node.js:695 +#: htdocs/luci-static/resources/view/homeproxy/server.js:365 msgid "QUIC congestion control algorithm." msgstr "QUIC 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:547 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 +#: htdocs/luci-static/resources/view/homeproxy/node.js:596 +#: htdocs/luci-static/resources/view/homeproxy/server.js:307 msgid "QUIC connection receive window" msgstr "QUIC 连接窗口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:306 +#: htdocs/luci-static/resources/view/homeproxy/server.js:314 msgid "QUIC maximum concurrent bidirectional streams" msgstr "QUIC 最大双向并发流" -#: htdocs/luci-static/resources/view/homeproxy/node.js:541 -#: htdocs/luci-static/resources/view/homeproxy/server.js:292 +#: htdocs/luci-static/resources/view/homeproxy/node.js:590 +#: htdocs/luci-static/resources/view/homeproxy/server.js:300 msgid "QUIC stream receive window" msgstr "QUIC 流接收窗口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:951 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1093 msgid "Query type" msgstr "请求类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:590 -#: htdocs/luci-static/resources/view/homeproxy/client.js:966 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1213 +msgid "RCode" +msgstr "RCode" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:622 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1108 msgid "RDP" msgstr "RDP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:778 +#: htdocs/luci-static/resources/view/homeproxy/client.js:917 msgid "RDRC timeout" msgstr "RDRC 超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1106 -#: htdocs/luci-static/resources/view/homeproxy/server.js:718 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1144 +#: htdocs/luci-static/resources/view/homeproxy/server.js:715 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/homeproxy/server.js:724 +#: htdocs/luci-static/resources/view/homeproxy/server.js:720 msgid "REALITY private key" msgstr "REALITY 私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1148 msgid "REALITY public key" msgstr "REALITY 公钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1116 -#: htdocs/luci-static/resources/view/homeproxy/server.js:729 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1153 +#: htdocs/luci-static/resources/view/homeproxy/server.js:725 msgid "REALITY short ID" msgstr "REALITY 标识符" #: htdocs/luci-static/resources/view/homeproxy/client.js:55 -#: htdocs/luci-static/resources/view/homeproxy/server.js:38 +#: htdocs/luci-static/resources/view/homeproxy/server.js:39 msgid "RUNNING" msgstr "运行中" -#: htdocs/luci-static/resources/view/homeproxy/node.js:614 +#: htdocs/luci-static/resources/view/homeproxy/node.js:662 msgid "Random version will be used if empty." msgstr "如留空,则使用随机版本。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:456 +#: htdocs/luci-static/resources/view/homeproxy/client.js:488 msgid "Recursive outbound detected!" msgstr "检测到递归出站!" -#: htdocs/luci-static/resources/view/homeproxy/client.js:860 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1012 msgid "Recursive resolver detected!" msgstr "检测到递归解析器!" @@ -1822,23 +1985,40 @@ msgstr "每 %s 秒刷新。" msgid "Region ID" msgstr "区域 ID" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1150 +#: htdocs/luci-static/resources/view/homeproxy/client.js:672 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1147 +msgid "Reject" +msgstr "拒绝" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1334 msgid "Remote" msgstr "远程" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1432 msgid "Remove %s nodes" msgstr "移除 %s 个节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1392 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1422 msgid "Remove all nodes from subscriptions" msgstr "移除所有订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:877 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1201 +msgid "Reply with REFUSED" +msgstr "回复 REFUSED" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:769 +msgid "Reply with TCP RST / ICMP port unreachable" +msgstr "回复 TCP RST / ICMP 端口不可达" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:921 msgid "Reserved field bytes" msgstr "保留字段字节" -#: htdocs/luci-static/resources/view/homeproxy/client.js:873 +#: htdocs/luci-static/resources/view/homeproxy/client.js:673 +msgid "Resolve" +msgstr "解析" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:780 msgid "Resolve strategy" msgstr "解析策略" @@ -1846,19 +2026,39 @@ msgstr "解析策略" msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1044 +#: htdocs/luci-static/resources/view/homeproxy/server.js:870 +msgid "Reuse address" +msgstr "复用地址" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:871 +msgid "Reuse listener address." +msgstr "复用监听地址。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:792 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1185 msgid "Rewrite TTL" msgstr "重写 TTL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1045 +#: htdocs/luci-static/resources/view/homeproxy/client.js:793 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1186 msgid "Rewrite TTL in DNS responses." msgstr "在 DNS 响应中重写 TTL。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:383 +#: htdocs/luci-static/resources/view/homeproxy/client.js:670 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1145 +msgid "Route" +msgstr "路由" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:671 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1146 +msgid "Route options" +msgstr "路由选项" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:396 msgid "Routing Nodes" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client.js:535 +#: htdocs/luci-static/resources/view/homeproxy/client.js:567 msgid "Routing Rules" msgstr "路由规则" @@ -1870,7 +2070,7 @@ msgstr "路由设置" msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/homeproxy/client.js:392 +#: htdocs/luci-static/resources/view/homeproxy/client.js:405 msgid "Routing node" msgstr "路由节点" @@ -1878,50 +2078,50 @@ msgstr "路由节点" msgid "Routing ports" msgstr "路由端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:544 +#: htdocs/luci-static/resources/view/homeproxy/client.js:576 msgid "Routing rule" msgstr "路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1125 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1309 msgid "Rule Set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client.js:614 -#: htdocs/luci-static/resources/view/homeproxy/client.js:975 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1134 +#: htdocs/luci-static/resources/view/homeproxy/client.js:646 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1117 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1318 msgid "Rule set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client.js:629 -#: htdocs/luci-static/resources/view/homeproxy/client.js:990 +#: htdocs/luci-static/resources/view/homeproxy/client.js:661 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1132 msgid "Rule set IP CIDR as source IP" msgstr "规则集 IP CIDR 作为源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1167 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1351 msgid "Rule set URL" msgstr "规则集 URL" -#: htdocs/luci-static/resources/view/homeproxy/client.js:591 -#: htdocs/luci-static/resources/view/homeproxy/client.js:967 -#: htdocs/luci-static/resources/view/homeproxy/node.js:412 +#: htdocs/luci-static/resources/view/homeproxy/client.js:623 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1109 +#: htdocs/luci-static/resources/view/homeproxy/node.js:437 msgid "SSH" msgstr "SSH" -#: htdocs/luci-static/resources/view/homeproxy/client.js:592 -#: htdocs/luci-static/resources/view/homeproxy/client.js:968 +#: htdocs/luci-static/resources/view/homeproxy/client.js:624 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1110 msgid "STUN" msgstr "STUN" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1143 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1176 msgid "SUoT version" msgstr "SUoT 版本" -#: htdocs/luci-static/resources/view/homeproxy/client.js:600 +#: htdocs/luci-static/resources/view/homeproxy/client.js:632 msgid "Safari / Apple Network API" msgstr "Safari / Apple Network API" -#: htdocs/luci-static/resources/view/homeproxy/node.js:518 -#: htdocs/luci-static/resources/view/homeproxy/server.js:272 +#: htdocs/luci-static/resources/view/homeproxy/node.js:567 +#: htdocs/luci-static/resources/view/homeproxy/server.js:280 msgid "Salamander" msgstr "Salamander" @@ -1934,15 +2134,15 @@ msgstr "保持与主节点一致" msgid "Save" msgstr "保存" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1366 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1396 msgid "Save current settings" msgstr "保存当前设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1393 msgid "Save subscriptions settings" msgstr "保存订阅设置" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1020 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1153 #: htdocs/luci-static/resources/view/homeproxy/server.js:136 msgid "Server" msgstr "服务器" @@ -1951,7 +2151,7 @@ msgstr "服务器" msgid "Server Settings" msgstr "服务器设置" -#: htdocs/luci-static/resources/view/homeproxy/server.js:616 +#: htdocs/luci-static/resources/view/homeproxy/server.js:617 msgid "" "Server name to use when choosing a certificate if the ClientHello's " "ServerName field is empty." @@ -1965,25 +2165,29 @@ msgstr "服务器设置" msgid "Service Status" msgstr "服务状态" -#: htdocs/luci-static/resources/view/homeproxy/node.js:410 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1173 +msgid "Set domain strategy for this query." +msgstr "为此查询设置域名策略。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:435 msgid "ShadowTLS" msgstr "ShadowTLS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:593 +#: htdocs/luci-static/resources/view/homeproxy/node.js:641 msgid "ShadowTLS version" msgstr "ShadowTLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:409 -#: htdocs/luci-static/resources/view/homeproxy/server.js:163 +#: htdocs/luci-static/resources/view/homeproxy/node.js:434 +#: htdocs/luci-static/resources/view/homeproxy/server.js:164 msgid "Shadowsocks" msgstr "Shadowsocks" -#: htdocs/luci-static/resources/view/homeproxy/client.js:596 +#: htdocs/luci-static/resources/view/homeproxy/client.js:628 msgid "Sniffed client type (QUIC client type or SSH client name)." msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:584 -#: htdocs/luci-static/resources/view/homeproxy/client.js:961 +#: htdocs/luci-static/resources/view/homeproxy/client.js:616 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1103 msgid "" "Sniffed protocol, see Sniff for details." @@ -1991,48 +2195,53 @@ msgstr "" "嗅探协议,具体参见 Sniff。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:411 -#: htdocs/luci-static/resources/view/homeproxy/server.js:164 +#: htdocs/luci-static/resources/view/homeproxy/node.js:436 +#: htdocs/luci-static/resources/view/homeproxy/server.js:165 msgid "Socks" msgstr "Socks" -#: htdocs/luci-static/resources/view/homeproxy/node.js:603 +#: htdocs/luci-static/resources/view/homeproxy/node.js:651 msgid "Socks version" msgstr "Socks 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:604 +#: htdocs/luci-static/resources/view/homeproxy/node.js:652 msgid "Socks4" msgstr "Socks4" -#: htdocs/luci-static/resources/view/homeproxy/node.js:605 +#: htdocs/luci-static/resources/view/homeproxy/node.js:653 msgid "Socks4A" msgstr "Socks4A" -#: htdocs/luci-static/resources/view/homeproxy/node.js:606 +#: htdocs/luci-static/resources/view/homeproxy/node.js:654 msgid "Socks5" msgstr "Socks5" -#: htdocs/luci-static/resources/view/homeproxy/client.js:682 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1073 +#: htdocs/luci-static/resources/view/homeproxy/client.js:822 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1257 msgid "Source IP CIDR" msgstr "源 IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1156 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1340 msgid "Source file" msgstr "源文件" -#: htdocs/luci-static/resources/view/homeproxy/client.js:698 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1090 +#: htdocs/luci-static/resources/view/homeproxy/client.js:838 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1274 msgid "Source port" msgstr "源端口" -#: htdocs/luci-static/resources/view/homeproxy/client.js:703 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1095 +#: htdocs/luci-static/resources/view/homeproxy/client.js:843 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1279 msgid "Source port range" msgstr "源端口范围" -#: htdocs/luci-static/resources/view/homeproxy/node.js:747 -#: htdocs/luci-static/resources/view/homeproxy/node.js:800 +#: htdocs/luci-static/resources/view/homeproxy/client.js:750 +msgid "" +"Specifies DNS server tag to use instead of selecting through DNS routing." +msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:792 +#: htdocs/luci-static/resources/view/homeproxy/node.js:844 msgid "" "Specifies the period of time (in seconds) after which a health check will be " "performed using a ping frame if no frames have been received on the " @@ -2044,8 +2253,8 @@ msgstr "" "查。
需要注意的是,PING 响应被视为已接收的帧,因此如果连接上没有其他流" "量,则健康检查将在每个间隔执行一次。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:427 -#: htdocs/luci-static/resources/view/homeproxy/server.js:462 +#: htdocs/luci-static/resources/view/homeproxy/server.js:432 +#: htdocs/luci-static/resources/view/homeproxy/server.js:467 msgid "" "Specifies the time (in seconds) until idle clients should be closed with a " "GOAWAY frame. PING frames are not considered as activity." @@ -2053,8 +2262,8 @@ msgstr "" "指定闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活" "动。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:751 -#: htdocs/luci-static/resources/view/homeproxy/node.js:808 +#: htdocs/luci-static/resources/view/homeproxy/node.js:796 +#: htdocs/luci-static/resources/view/homeproxy/node.js:852 msgid "" "Specifies the timeout duration (in seconds) after sending a PING frame, " "within which a response must be received.
If a response to the PING " @@ -2070,11 +2279,11 @@ msgid "" "commas." msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:774 +#: htdocs/luci-static/resources/view/homeproxy/client.js:913 msgid "Store RDRC" msgstr "存储 RDRC" -#: htdocs/luci-static/resources/view/homeproxy/client.js:775 +#: htdocs/luci-static/resources/view/homeproxy/client.js:914 msgid "" "Store rejected DNS response cache.
The check results of Address " "filter DNS rule items will be cached until expiration." @@ -2082,24 +2291,24 @@ msgstr "" "存储被拒绝的 DNS 响应缓存。
地址过滤 DNS 规则 的检查结果将被" "缓存直到过期。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:507 -#: htdocs/luci-static/resources/view/homeproxy/server.js:261 +#: htdocs/luci-static/resources/view/homeproxy/node.js:556 +#: htdocs/luci-static/resources/view/homeproxy/server.js:269 msgid "String" msgstr "字符串" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1288 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1321 msgid "Sub (%s)" msgstr "订阅(%s)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1317 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1348 msgid "Subscription URL-s" msgstr "订阅地址" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1299 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1332 msgid "Subscriptions" msgstr "订阅" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1239 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1272 msgid "Successfully imported %s nodes of total %s." msgstr "成功导入 %s 个节点,共 %s 个。" @@ -2107,8 +2316,8 @@ msgstr "成功导入 %s 个节点,共 %s 个。" msgid "Successfully updated." msgstr "更新成功。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1199 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1318 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1232 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1349 msgid "" "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " "online configuration delivery standard." @@ -2121,58 +2330,73 @@ msgid "" "Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:318 +#: htdocs/luci-static/resources/view/homeproxy/client.js:313 msgid "System" msgstr "系统" -#: htdocs/luci-static/resources/view/homeproxy/client.js:748 -#: htdocs/luci-static/resources/view/homeproxy/client.js:843 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/client.js:383 +#: htdocs/luci-static/resources/view/homeproxy/client.js:435 +#: htdocs/luci-static/resources/view/homeproxy/client.js:757 +#: htdocs/luci-static/resources/view/homeproxy/client.js:888 +#: htdocs/luci-static/resources/view/homeproxy/client.js:995 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1160 msgid "System DNS" msgstr "系统 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client.js:606 -#: htdocs/luci-static/resources/view/homeproxy/client.js:956 -#: htdocs/luci-static/resources/view/homeproxy/server.js:864 +#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:949 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1098 +#: htdocs/luci-static/resources/view/homeproxy/server.js:857 msgid "TCP" msgstr "TCP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1123 -#: htdocs/luci-static/resources/view/homeproxy/server.js:839 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1160 +#: htdocs/luci-static/resources/view/homeproxy/server.js:835 msgid "TCP fast open" msgstr "TCP 快速打开" -#: htdocs/luci-static/resources/view/homeproxy/client.js:312 +#: htdocs/luci-static/resources/view/homeproxy/client.js:307 msgid "TCP/IP stack" msgstr "TCP/IP 协议栈" -#: htdocs/luci-static/resources/view/homeproxy/client.js:313 +#: htdocs/luci-static/resources/view/homeproxy/client.js:308 msgid "TCP/IP stack." msgstr "TCP/IP 协议栈。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:593 -#: htdocs/luci-static/resources/view/homeproxy/client.js:969 -#: htdocs/luci-static/resources/view/homeproxy/node.js:957 -#: htdocs/luci-static/resources/view/homeproxy/server.js:540 +#: htdocs/luci-static/resources/view/homeproxy/client.js:625 +#: htdocs/luci-static/resources/view/homeproxy/client.js:950 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1111 +#: htdocs/luci-static/resources/view/homeproxy/node.js:999 +#: htdocs/luci-static/resources/view/homeproxy/server.js:542 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:989 -#: htdocs/luci-static/resources/view/homeproxy/server.js:573 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1031 +#: htdocs/luci-static/resources/view/homeproxy/server.js:575 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/view/homeproxy/node.js:984 -#: htdocs/luci-static/resources/view/homeproxy/server.js:568 +#: htdocs/luci-static/resources/view/homeproxy/client.js:979 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1026 +#: htdocs/luci-static/resources/view/homeproxy/server.js:570 msgid "TLS SNI" msgstr "TLS SNI" -#: htdocs/luci-static/resources/view/homeproxy/node.js:738 -#: htdocs/luci-static/resources/view/homeproxy/server.js:418 +#: htdocs/luci-static/resources/view/homeproxy/client.js:735 +msgid "TLS fragment" +msgstr "TLS 分片" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:783 +#: htdocs/luci-static/resources/view/homeproxy/server.js:423 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:836 +#: htdocs/luci-static/resources/view/homeproxy/client.js:729 +#: htdocs/luci-static/resources/view/homeproxy/client.js:737 +msgid "TLS record fragment" +msgstr "TLS 记录分片" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:988 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." @@ -2180,23 +2404,23 @@ msgstr "" "用于解析本 DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名" "则必须。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:880 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1026 msgid "Tag of an outbound for connecting to the dns server." msgstr "用于连接到 DNS 服务器的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1190 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1374 msgid "Tag of the outbound to download rule set." msgstr "用于下载规则集的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1021 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1154 msgid "Tag of the target dns server." msgstr "目标 DNS 服务器标签。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:638 +#: htdocs/luci-static/resources/view/homeproxy/client.js:679 msgid "Tag of the target outbound." msgstr "目标出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:320 +#: htdocs/luci-static/resources/view/homeproxy/server.js:327 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "让客户端使用 BBR 流控算法。" @@ -2206,54 +2430,53 @@ msgstr "让客户端使用 BBR 流控算法。" msgid "Tencent Public DNS (119.29.29.29)" msgstr "腾讯公共 DNS(119.29.29.29)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:478 +#: htdocs/luci-static/resources/view/homeproxy/client.js:510 msgid "Test URL" msgstr "测试 URL" #: htdocs/luci-static/resources/view/homeproxy/client.js:138 #: htdocs/luci-static/resources/view/homeproxy/client.js:167 -#: htdocs/luci-static/resources/view/homeproxy/client.js:498 +#: htdocs/luci-static/resources/view/homeproxy/client.js:530 msgid "Test interval" msgstr "测试间隔" -#: htdocs/luci-static/resources/view/homeproxy/client.js:506 +#: htdocs/luci-static/resources/view/homeproxy/client.js:538 msgid "Test interval must be less or equal than idle timeout." msgstr "测试间隔时间必须小于或等于空闲超时时间。" #: htdocs/luci-static/resources/view/homeproxy/client.js:144 #: htdocs/luci-static/resources/view/homeproxy/client.js:173 -#: htdocs/luci-static/resources/view/homeproxy/client.js:514 +#: htdocs/luci-static/resources/view/homeproxy/client.js:546 msgid "Test tolerance" msgstr "测试容差" -#: htdocs/luci-static/resources/view/homeproxy/server.js:637 +#: htdocs/luci-static/resources/view/homeproxy/server.js:638 msgid "The ACME CA provider to use." msgstr "使用的 ACME CA 颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:738 +#: htdocs/luci-static/resources/view/homeproxy/client.js:878 msgid "The DNS strategy for resolving the domain name in the address." msgstr "解析域名的默认策略。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:548 -#: htdocs/luci-static/resources/view/homeproxy/server.js:300 +#: htdocs/luci-static/resources/view/homeproxy/node.js:597 +#: htdocs/luci-static/resources/view/homeproxy/server.js:308 msgid "The QUIC connection-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 连接级流控制窗口。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:542 -#: htdocs/luci-static/resources/view/homeproxy/server.js:293 +#: htdocs/luci-static/resources/view/homeproxy/node.js:591 +#: htdocs/luci-static/resources/view/homeproxy/server.js:301 msgid "The QUIC stream-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 流级流控制窗口。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:479 +#: htdocs/luci-static/resources/view/homeproxy/client.js:511 msgid "The URL to test." msgstr "用于测试的 URL。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:809 -msgid "" -"The address of the dns server. Support UDP, TCP, DoH, DoQ, DoT and RCode." -msgstr "DNS 服务器的地址。支持 UDP、TCP、DoH、DoQ、DoT 和 RCode。" +#: htdocs/luci-static/resources/view/homeproxy/client.js:958 +msgid "The address of the dns server." +msgstr "DNS 服务器的地址。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:688 +#: htdocs/luci-static/resources/view/homeproxy/server.js:686 msgid "" "The alternate port to use for the ACME HTTP challenge; if non-empty, this " "port will be used instead of 80 to spin up a listener for the HTTP challenge." @@ -2261,14 +2484,14 @@ msgstr "" "用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启动 HTTP 质" "询的侦听器。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:694 +#: htdocs/luci-static/resources/view/homeproxy/server.js:692 msgid "" "The alternate port to use for the ACME TLS-ALPN challenge; the system must " "forward 443 to this port for challenge to succeed." msgstr "" "用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:564 +#: htdocs/luci-static/resources/view/homeproxy/client.js:596 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex || ip_cidr || " @@ -2285,7 +2508,7 @@ msgstr "" "source_port_range) &&
其他字段。此外,包含的所有规则" "集会被合并而不是独立生效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:933 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1074 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex) &&
(port " @@ -2305,79 +2528,99 @@ msgid "" "The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:868 +#: htdocs/luci-static/resources/view/homeproxy/client.js:447 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1020 msgid "The domain strategy for resolving the domain name in the address." msgstr "用于解析本 DNS 服务器的域名的策略。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1020 -#: htdocs/luci-static/resources/view/homeproxy/server.js:595 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1061 +#: htdocs/luci-static/resources/view/homeproxy/server.js:597 msgid "" "The elliptic curves that will be used in an ECDHE handshake, in preference " "order. If empty, the default will be used." msgstr "将在 ECDHE 握手中使用的椭圆曲线,按优先顺序排列。留空使用默认值。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:622 +#: htdocs/luci-static/resources/view/homeproxy/server.js:623 msgid "" "The email address to use when creating or selecting an existing ACME server " "account." msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:522 +#: htdocs/luci-static/resources/view/homeproxy/client.js:743 +msgid "" +"The fallback value in milliseconds used when TLS segmentation cannot " +"automatically determine the wait time." +msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:554 msgid "The idle timeout in seconds." msgstr "空闲超时时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1012 -#: htdocs/luci-static/resources/view/homeproxy/server.js:587 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1053 +#: htdocs/luci-static/resources/view/homeproxy/server.js:589 msgid "The maximum TLS version that is acceptable." msgstr "可接受的最高 TLS 版本。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:307 +#: htdocs/luci-static/resources/view/homeproxy/server.js:315 msgid "" "The maximum number of QUIC concurrent bidirectional streams that a peer is " "allowed to open." msgstr "允许对等点打开的 QUIC 并发双向流的最大数量。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:735 +#: htdocs/luci-static/resources/view/homeproxy/server.js:731 msgid "The maximum time difference between the server and the client." msgstr "服务器和客户端之间的最大时间差。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1004 -#: htdocs/luci-static/resources/view/homeproxy/server.js:579 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1045 +#: htdocs/luci-static/resources/view/homeproxy/server.js:581 msgid "The minimum TLS version that is acceptable." msgstr "可接受的最低 TLS 版本。" #: htdocs/luci-static/resources/view/homeproxy/client.js:102 -#: htdocs/luci-static/resources/view/homeproxy/server.js:109 +#: htdocs/luci-static/resources/view/homeproxy/server.js:110 msgid "The modern OpenWrt proxy platform for ARM64/AMD64." msgstr "为 ARM64/AMD64 设计的现代 OpenWrt 代理平台。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:422 +#: htdocs/luci-static/resources/view/homeproxy/client.js:454 +#: htdocs/luci-static/resources/view/homeproxy/server.js:865 msgid "The network interface to bind to." msgstr "绑定到的网络接口。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1062 +#: htdocs/luci-static/resources/view/homeproxy/client.js:967 +msgid "The path of the DNS server." +msgstr "DNS 服务器的路径。" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1100 msgid "" "The path to the ECH config, in PEM format. If empty, load from DNS will be " "attempted." msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1034 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1074 msgid "The path to the server certificate, in PEM format." msgstr "服务端证书路径,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:178 +#: htdocs/luci-static/resources/view/homeproxy/server.js:179 msgid "The port must be unique." msgstr "必须是唯一端口。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:772 +#: htdocs/luci-static/resources/view/homeproxy/client.js:963 +msgid "The port of the DNS server." +msgstr "DNS 服务器的端口。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:1214 +msgid "The response code." +msgstr "响应代码。" + +#: htdocs/luci-static/resources/view/homeproxy/server.js:768 msgid "The server private key, in PEM format." msgstr "服务端私钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:753 +#: htdocs/luci-static/resources/view/homeproxy/server.js:749 msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:429 +#: htdocs/luci-static/resources/view/homeproxy/client.js:461 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." @@ -2385,18 +2628,18 @@ msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略 #: htdocs/luci-static/resources/view/homeproxy/client.js:139 #: htdocs/luci-static/resources/view/homeproxy/client.js:168 -#: htdocs/luci-static/resources/view/homeproxy/client.js:499 +#: htdocs/luci-static/resources/view/homeproxy/client.js:531 msgid "The test interval in seconds." msgstr "测试间隔时间(单位:秒)。" #: htdocs/luci-static/resources/view/homeproxy/client.js:145 #: htdocs/luci-static/resources/view/homeproxy/client.js:174 -#: htdocs/luci-static/resources/view/homeproxy/client.js:515 +#: htdocs/luci-static/resources/view/homeproxy/client.js:547 msgid "The test tolerance in milliseconds." msgstr "测试容差时间(单位:毫秒)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:758 -#: htdocs/luci-static/resources/view/homeproxy/server.js:470 +#: htdocs/luci-static/resources/view/homeproxy/node.js:803 +#: htdocs/luci-static/resources/view/homeproxy/server.js:475 msgid "" "The timeout (in seconds) that after performing a keepalive check, the client " "will wait for activity. If no activity is detected, the connection will be " @@ -2405,15 +2648,15 @@ msgstr "" "经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如果没有" "检测到任何活动,则会关闭连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:997 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1353 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1039 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1384 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" msgstr "" "这是危险行为,您的流量将几乎等同于明文!使用风险自负!" -#: htdocs/luci-static/resources/view/homeproxy/node.js:665 +#: htdocs/luci-static/resources/view/homeproxy/node.js:713 msgid "" "This is the TUIC port of the UDP over TCP protocol, designed to provide a " "QUIC stream based UDP relay mode that TUIC does not provide." @@ -2426,7 +2669,13 @@ msgstr "" msgid "ThreatBook Public DNS (117.50.10.10)" msgstr "微步在线公共 DNS(117.50.10.10)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:779 +#: htdocs/luci-static/resources/view/homeproxy/client.js:723 +msgid "" +"Timeout for UDP connections.
Setting a larger value than the UDP timeout " +"in inbounds will have no effect." +msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:918 msgid "" "Timeout of rejected DNS response cache in seconds. 604800 (7d) " "is used by default." @@ -2434,7 +2683,7 @@ msgstr "" "被拒绝的 DNS 响应缓存超时时间(单位:秒)。默认为 604800(7 天)。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:496 +#: htdocs/luci-static/resources/view/homeproxy/server.js:501 msgid "" "To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." @@ -2448,18 +2697,18 @@ msgid "" msgstr "" "要启用 Tun 支持,您需要安装 ip-fullkmod-tun。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:724 -#: htdocs/luci-static/resources/view/homeproxy/server.js:404 +#: htdocs/luci-static/resources/view/homeproxy/node.js:769 +#: htdocs/luci-static/resources/view/homeproxy/server.js:409 msgid "Transport" msgstr "传输层" -#: htdocs/luci-static/resources/view/homeproxy/node.js:413 -#: htdocs/luci-static/resources/view/homeproxy/server.js:165 +#: htdocs/luci-static/resources/view/homeproxy/node.js:438 +#: htdocs/luci-static/resources/view/homeproxy/server.js:166 msgid "Trojan" msgstr "Trojan" -#: htdocs/luci-static/resources/view/homeproxy/node.js:415 -#: htdocs/luci-static/resources/view/homeproxy/server.js:167 +#: htdocs/luci-static/resources/view/homeproxy/node.js:440 +#: htdocs/luci-static/resources/view/homeproxy/server.js:168 msgid "Tuic" msgstr "Tuic" @@ -2467,58 +2716,64 @@ msgstr "Tuic" msgid "Tun TCP/UDP" msgstr "Tun TCP/UDP" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1148 -#: htdocs/luci-static/resources/view/homeproxy/node.js:402 +#: htdocs/luci-static/resources/view/homeproxy/client.js:947 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1332 +#: htdocs/luci-static/resources/view/homeproxy/node.js:426 #: htdocs/luci-static/resources/view/homeproxy/server.js:155 msgid "Type" msgstr "类型" -#: htdocs/luci-static/resources/view/homeproxy/client.js:607 -#: htdocs/luci-static/resources/view/homeproxy/client.js:957 -#: htdocs/luci-static/resources/view/homeproxy/server.js:865 +#: htdocs/luci-static/resources/view/homeproxy/client.js:639 +#: htdocs/luci-static/resources/view/homeproxy/client.js:948 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/server.js:858 msgid "UDP" msgstr "UDP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1131 -#: htdocs/luci-static/resources/view/homeproxy/server.js:850 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1166 +#: htdocs/luci-static/resources/view/homeproxy/server.js:844 msgid "UDP Fragment" msgstr "UDP 分片" -#: htdocs/luci-static/resources/view/homeproxy/client.js:340 -#: htdocs/luci-static/resources/view/homeproxy/server.js:856 +#: htdocs/luci-static/resources/view/homeproxy/client.js:335 +#: htdocs/luci-static/resources/view/homeproxy/server.js:849 msgid "UDP NAT expiration time" msgstr "UDP NAT 过期时间" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1136 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1170 msgid "UDP over TCP" msgstr "UDP over TCP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:664 +#: htdocs/luci-static/resources/view/homeproxy/node.js:712 msgid "UDP over stream" msgstr "UDP over stream" -#: htdocs/luci-static/resources/view/homeproxy/node.js:657 +#: htdocs/luci-static/resources/view/homeproxy/node.js:705 msgid "UDP packet relay mode." msgstr "UDP 包中继模式。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:656 +#: htdocs/luci-static/resources/view/homeproxy/node.js:704 msgid "UDP relay mode" msgstr "UDP 中继模式" +#: htdocs/luci-static/resources/view/homeproxy/client.js:722 +msgid "UDP timeout" +msgstr "UDP 超时" + #: htdocs/luci-static/resources/view/homeproxy/client.js:124 #: htdocs/luci-static/resources/view/homeproxy/client.js:153 -#: htdocs/luci-static/resources/view/homeproxy/client.js:408 +#: htdocs/luci-static/resources/view/homeproxy/client.js:421 msgid "URLTest" msgstr "URLTest" #: htdocs/luci-static/resources/view/homeproxy/client.js:131 #: htdocs/luci-static/resources/view/homeproxy/client.js:160 -#: htdocs/luci-static/resources/view/homeproxy/client.js:464 +#: htdocs/luci-static/resources/view/homeproxy/client.js:496 msgid "URLTest nodes" msgstr "URLTest 节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:639 -#: htdocs/luci-static/resources/view/homeproxy/server.js:340 +#: htdocs/luci-static/resources/view/homeproxy/node.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:346 msgid "UUID" msgstr "UUID" @@ -2530,11 +2785,11 @@ msgstr "未知错误。" msgid "Unknown error: %s" msgstr "未知错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1099 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1137 msgid "Unsupported fingerprint!" msgstr "不支持的指纹!" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1377 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1407 msgid "Update %s subscriptions" msgstr "更新 %s 个订阅" @@ -2542,92 +2797,96 @@ msgstr "更新 %s 个订阅" msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1206 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1390 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1207 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1391 msgid "Update interval of rule set." msgstr "规则集更新间隔。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1372 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1402 msgid "Update nodes from subscriptions" msgstr "从订阅更新节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1313 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1345 msgid "Update subscriptions via proxy." msgstr "使用代理更新订阅。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1306 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1338 msgid "Update time" msgstr "更新时间" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1312 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1344 msgid "Update via proxy" msgstr "使用代理更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1067 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1105 msgid "Upload ECH config" msgstr "上传 ECH 配置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:949 -#: htdocs/luci-static/resources/view/homeproxy/server.js:531 +#: htdocs/luci-static/resources/view/homeproxy/node.js:991 +#: htdocs/luci-static/resources/view/homeproxy/server.js:533 msgid "Upload bandwidth" msgstr "上传带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:950 -#: htdocs/luci-static/resources/view/homeproxy/server.js:532 +#: htdocs/luci-static/resources/view/homeproxy/node.js:992 +#: htdocs/luci-static/resources/view/homeproxy/server.js:534 msgid "Upload bandwidth in Mbps." msgstr "上传带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1041 -#: htdocs/luci-static/resources/view/homeproxy/server.js:763 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1081 +#: htdocs/luci-static/resources/view/homeproxy/server.js:759 msgid "Upload certificate" msgstr "上传证书" -#: htdocs/luci-static/resources/view/homeproxy/server.js:782 +#: htdocs/luci-static/resources/view/homeproxy/server.js:778 msgid "Upload key" msgstr "上传密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1044 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1070 -#: htdocs/luci-static/resources/view/homeproxy/server.js:766 -#: htdocs/luci-static/resources/view/homeproxy/server.js:785 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1084 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1108 +#: htdocs/luci-static/resources/view/homeproxy/server.js:762 +#: htdocs/luci-static/resources/view/homeproxy/server.js:781 msgid "Upload..." msgstr "上传..." -#: htdocs/luci-static/resources/view/homeproxy/server.js:604 +#: htdocs/luci-static/resources/view/homeproxy/server.js:606 msgid "Use ACME TLS certificate issuer." msgstr "使用 ACME TLS 证书颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:985 -#: htdocs/luci-static/resources/view/homeproxy/server.js:569 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1027 +#: htdocs/luci-static/resources/view/homeproxy/server.js:571 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:610 -#: htdocs/luci-static/resources/view/homeproxy/client.js:971 +#: htdocs/luci-static/resources/view/homeproxy/client.js:980 +msgid "Used to verify the hostname on the returned certificates." +msgstr "用于验证返回证书上的主机名。" + +#: htdocs/luci-static/resources/view/homeproxy/client.js:642 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1113 msgid "User" msgstr "用户" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1347 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1378 msgid "User-Agent" msgstr "用户代理" -#: htdocs/luci-static/resources/view/homeproxy/node.js:432 -#: htdocs/luci-static/resources/view/homeproxy/server.js:182 +#: htdocs/luci-static/resources/view/homeproxy/node.js:457 +#: htdocs/luci-static/resources/view/homeproxy/server.js:183 msgid "Username" msgstr "用户名" -#: htdocs/luci-static/resources/view/homeproxy/node.js:418 -#: htdocs/luci-static/resources/view/homeproxy/server.js:168 +#: htdocs/luci-static/resources/view/homeproxy/node.js:443 +#: htdocs/luci-static/resources/view/homeproxy/server.js:169 msgid "VLESS" msgstr "VLESS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:419 -#: htdocs/luci-static/resources/view/homeproxy/server.js:169 +#: htdocs/luci-static/resources/view/homeproxy/node.js:444 +#: htdocs/luci-static/resources/view/homeproxy/server.js:170 msgid "VMess" msgstr "VMess" @@ -2636,61 +2895,65 @@ msgstr "VMess" msgid "WAN DNS (read from interface)" msgstr "WAN DNS(从接口获取)" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1278 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1462 msgid "WAN IP Policy" msgstr "WAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/node.js:731 -#: htdocs/luci-static/resources/view/homeproxy/server.js:411 +#: htdocs/luci-static/resources/view/homeproxy/node.js:776 +#: htdocs/luci-static/resources/view/homeproxy/server.js:416 msgid "WebSocket" msgstr "WebSocket" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1338 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1369 msgid "Whitelist mode" msgstr "白名单模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:417 +#: htdocs/luci-static/resources/view/homeproxy/node.js:442 msgid "WireGuard" msgstr "WireGuard" -#: htdocs/luci-static/resources/view/homeproxy/node.js:864 +#: htdocs/luci-static/resources/view/homeproxy/node.js:908 msgid "WireGuard peer public key." msgstr "WireGuard 对端公钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:871 +#: htdocs/luci-static/resources/view/homeproxy/node.js:915 msgid "WireGuard pre-shared key." msgstr "WireGuard 预共享密钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:856 +#: htdocs/luci-static/resources/view/homeproxy/node.js:900 msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 编码的私钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:471 +#: htdocs/luci-static/resources/view/homeproxy/node.js:497 msgid "Write proxy protocol in the connection header." msgstr "在连接头中写入代理协议。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:841 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1361 +#: htdocs/luci-static/resources/view/homeproxy/node.js:885 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1391 msgid "Xudp (Xray-core)" msgstr "Xudp (Xray-core)" -#: htdocs/luci-static/resources/homeproxy.js:266 +#: htdocs/luci-static/resources/homeproxy.js:259 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上传。大小:%sB。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:639 +#: htdocs/luci-static/resources/view/homeproxy/server.js:640 msgid "ZeroSSL" msgstr "ZeroSSL" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1046 -#: htdocs/luci-static/resources/view/homeproxy/server.js:768 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1086 +#: htdocs/luci-static/resources/view/homeproxy/server.js:764 msgid "certificate" msgstr "证书" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1005 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1013 -#: htdocs/luci-static/resources/view/homeproxy/server.js:580 -#: htdocs/luci-static/resources/view/homeproxy/server.js:588 +#: htdocs/luci-static/resources/view/homeproxy/client.js:716 +msgid "connect UDP connections" +msgstr "主动连接 UDP" + +#: htdocs/luci-static/resources/view/homeproxy/node.js:1046 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1054 +#: htdocs/luci-static/resources/view/homeproxy/server.js:582 +#: htdocs/luci-static/resources/view/homeproxy/server.js:590 msgid "default" msgstr "默认" @@ -2698,45 +2961,44 @@ msgstr "默认" msgid "failed" msgstr "失败" -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/server.js:407 +#: htdocs/luci-static/resources/view/homeproxy/node.js:772 +#: htdocs/luci-static/resources/view/homeproxy/server.js:412 msgid "gRPC" msgstr "gRPC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:769 +#: htdocs/luci-static/resources/view/homeproxy/node.js:814 msgid "gRPC permit without stream" msgstr "gRPC 允许无活动连接" -#: htdocs/luci-static/resources/view/homeproxy/node.js:764 -#: htdocs/luci-static/resources/view/homeproxy/server.js:435 +#: htdocs/luci-static/resources/view/homeproxy/node.js:809 +#: htdocs/luci-static/resources/view/homeproxy/server.js:440 msgid "gRPC service name" msgstr "gRPC 服务名称" -#: htdocs/luci-static/resources/view/homeproxy/client.js:316 +#: htdocs/luci-static/resources/view/homeproxy/client.js:311 msgid "gVisor" msgstr "gVisor" -#: htdocs/luci-static/resources/homeproxy.js:313 -#: htdocs/luci-static/resources/homeproxy.js:333 +#: htdocs/luci-static/resources/homeproxy.js:306 +#: htdocs/luci-static/resources/homeproxy.js:326 #: htdocs/luci-static/resources/view/homeproxy/client.js:195 #: htdocs/luci-static/resources/view/homeproxy/client.js:230 -#: htdocs/luci-static/resources/view/homeproxy/client.js:472 -#: htdocs/luci-static/resources/view/homeproxy/client.js:814 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1171 -#: htdocs/luci-static/resources/view/homeproxy/node.js:461 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1095 -#: htdocs/luci-static/resources/view/homeproxy/server.js:224 +#: htdocs/luci-static/resources/view/homeproxy/client.js:504 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:487 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1133 +#: htdocs/luci-static/resources/view/homeproxy/server.js:226 msgid "non-empty value" msgstr "非空值" -#: htdocs/luci-static/resources/view/homeproxy/node.js:580 -#: htdocs/luci-static/resources/view/homeproxy/node.js:839 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1359 +#: htdocs/luci-static/resources/view/homeproxy/node.js:628 +#: htdocs/luci-static/resources/view/homeproxy/node.js:883 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1389 msgid "none" msgstr "无" -#: htdocs/luci-static/resources/view/homeproxy/node.js:840 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/node.js:884 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1390 msgid "packet addr (v2ray-core v5+)" msgstr "packet addr (v2ray-core v5+)" @@ -2744,11 +3006,11 @@ msgstr "packet addr (v2ray-core v5+)" msgid "passed" msgstr "通过" -#: htdocs/luci-static/resources/view/homeproxy/server.js:787 +#: htdocs/luci-static/resources/view/homeproxy/server.js:783 msgid "private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:599 +#: htdocs/luci-static/resources/view/homeproxy/client.js:631 msgid "quic-go / uquic chrome" msgstr "quic-go / uquic chrome" @@ -2760,11 +3022,11 @@ msgstr "sing-box 客户端" msgid "sing-box server" msgstr "sing-box 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1077 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1115 msgid "uTLS fingerprint" msgstr "uTLS 指纹" -#: htdocs/luci-static/resources/view/homeproxy/node.js:1078 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1116 msgid "" "uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " "resistance." @@ -2775,28 +3037,28 @@ msgstr "" msgid "unchecked" msgstr "未检查" -#: htdocs/luci-static/resources/homeproxy.js:244 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1268 +#: htdocs/luci-static/resources/homeproxy.js:237 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1301 msgid "unique UCI identifier" msgstr "独立 UCI 标识" -#: htdocs/luci-static/resources/homeproxy.js:324 +#: htdocs/luci-static/resources/homeproxy.js:317 msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/homeproxy/node.js:473 -#: htdocs/luci-static/resources/view/homeproxy/node.js:594 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1144 +#: htdocs/luci-static/resources/view/homeproxy/node.js:499 +#: htdocs/luci-static/resources/view/homeproxy/node.js:642 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1177 msgid "v1" msgstr "v1" -#: htdocs/luci-static/resources/view/homeproxy/node.js:474 -#: htdocs/luci-static/resources/view/homeproxy/node.js:595 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1145 +#: htdocs/luci-static/resources/view/homeproxy/node.js:500 +#: htdocs/luci-static/resources/view/homeproxy/node.js:643 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1178 msgid "v2" msgstr "v2" -#: htdocs/luci-static/resources/view/homeproxy/node.js:596 +#: htdocs/luci-static/resources/view/homeproxy/node.js:644 msgid "v3" msgstr "v3" @@ -2804,30 +3066,28 @@ msgstr "v3" #: htdocs/luci-static/resources/view/homeproxy/client.js:211 #: htdocs/luci-static/resources/view/homeproxy/client.js:241 #: htdocs/luci-static/resources/view/homeproxy/client.js:245 -#: htdocs/luci-static/resources/view/homeproxy/client.js:825 -#: htdocs/luci-static/resources/view/homeproxy/client.js:829 msgid "valid DNS server address" msgstr "有效 DNS 服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/client.js:486 -#: htdocs/luci-static/resources/view/homeproxy/client.js:489 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1176 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1324 -#: htdocs/luci-static/resources/view/homeproxy/node.js:1327 +#: htdocs/luci-static/resources/view/homeproxy/client.js:518 +#: htdocs/luci-static/resources/view/homeproxy/client.js:521 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1360 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1363 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1355 +#: htdocs/luci-static/resources/view/homeproxy/node.js:1358 msgid "valid URL" msgstr "有效网址" -#: htdocs/luci-static/resources/homeproxy.js:278 +#: htdocs/luci-static/resources/homeproxy.js:271 msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client.js:1321 -#: htdocs/luci-static/resources/view/homeproxy/client.js:1353 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1505 +#: htdocs/luci-static/resources/view/homeproxy/client.js:1537 msgid "valid hostname" msgstr "有效主机名" -#: htdocs/luci-static/resources/homeproxy.js:304 +#: htdocs/luci-static/resources/homeproxy.js:297 msgid "valid port range (port1:port2)" msgstr "有效端口范围(port1:port2)" @@ -2835,6 +3095,6 @@ msgstr "有效端口范围(port1:port2)" msgid "valid port value" msgstr "有效端口值" -#: htdocs/luci-static/resources/homeproxy.js:335 +#: htdocs/luci-static/resources/homeproxy.js:328 msgid "valid uuid" msgstr "有效 uuid" diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt index 9ceebe9..2893b14 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt @@ -41,7 +41,8 @@ 8.144.0.0/14 8.148.0.0/19 8.148.36.0/22 -8.148.40.0/22 +8.148.40.0/23 +8.148.43.0/24 8.148.64.0/18 8.148.128.0/17 8.149.0.0/16 @@ -88,7 +89,6 @@ 27.192.0.0/11 27.224.0.0/14 31.56.124.0/24 -31.57.10.0/24 36.1.0.0/16 36.4.0.0/14 36.16.0.0/12 @@ -205,7 +205,8 @@ 42.248.0.0/15 43.102.128.0/21 43.102.136.0/22 -43.102.144.0/20 +43.102.144.0/21 +43.102.152.0/22 43.136.0.0/13 43.144.0.0/15 43.192.0.0/16 @@ -227,7 +228,6 @@ 43.225.120.0/22 43.225.180.0/22 43.225.208.0/22 -43.225.216.0/22 43.225.255.0/24 43.226.32.0/19 43.226.64.0/20 @@ -255,7 +255,6 @@ 43.229.48.0/22 43.229.184.0/23 43.229.216.0/22 -43.230.72.0/22 43.230.136.0/22 43.230.220.0/22 43.231.41.0/24 @@ -296,7 +295,6 @@ 43.242.164.0/22 43.242.180.0/22 43.242.192.0/21 -43.242.204.0/22 43.242.252.0/22 43.243.4.0/22 43.243.12.0/22 @@ -374,7 +372,6 @@ 43.255.84.0/22 43.255.96.0/22 43.255.184.0/22 -43.255.192.0/22 43.255.200.0/22 43.255.212.0/22 43.255.224.0/21 @@ -388,7 +385,9 @@ 44.32.188.0/24 45.9.11.0/24 45.40.192.0/18 +45.59.106.0/24 45.65.20.0/22 +45.112.232.0/22 45.113.20.0/22 45.113.24.0/22 45.113.40.0/22 @@ -405,6 +404,8 @@ 45.116.152.0/22 45.116.208.0/22 45.117.8.0/22 +45.117.68.0/24 +45.117.70.0/23 45.119.60.0/22 45.119.68.0/22 45.119.105.0/24 @@ -413,8 +414,6 @@ 45.120.164.0/22 45.120.241.0/24 45.120.243.0/24 -45.121.52.0/24 -45.121.55.0/24 45.123.128.0/22 45.123.168.0/21 45.123.176.0/21 @@ -521,6 +520,7 @@ 49.112.0.0/13 49.120.0.0/14 49.128.203.0/24 +49.128.220.0/24 49.128.223.0/24 49.140.0.0/15 49.208.0.0/14 @@ -561,7 +561,8 @@ 54.222.70.0/23 54.222.72.0/21 54.222.80.0/21 -54.222.88.0/22 +54.222.88.0/24 +54.222.90.0/23 54.222.96.0/23 54.222.100.0/22 54.222.104.0/21 @@ -605,8 +606,7 @@ 59.81.102.0/23 59.81.104.0/22 59.82.0.0/17 -59.82.128.0/21 -59.82.136.0/23 +59.82.128.0/20 59.83.192.0/19 59.83.224.0/21 59.83.232.0/22 @@ -679,7 +679,31 @@ 60.200.0.0/24 60.204.0.0/14 60.208.0.0/12 -60.232.0.0/16 +60.232.0.0/24 +60.232.130.0/23 +60.232.132.0/24 +60.232.136.0/24 +60.232.140.0/24 +60.232.144.0/24 +60.232.148.0/24 +60.232.152.0/24 +60.232.156.0/23 +60.232.160.0/24 +60.232.164.0/24 +60.232.172.0/24 +60.232.176.0/23 +60.232.178.0/24 +60.232.180.0/24 +60.232.184.0/24 +60.232.188.0/24 +60.232.192.0/24 +60.232.200.0/24 +60.232.224.0/24 +60.232.244.0/24 +60.232.246.0/23 +60.232.251.0/24 +60.232.252.0/24 +60.232.254.0/24 60.235.0.0/16 60.245.128.0/17 60.247.0.0/16 @@ -830,7 +854,9 @@ 101.204.0.0/14 101.224.0.0/13 101.234.76.0/22 -101.236.0.0/16 +101.236.0.0/18 +101.236.64.0/20 +101.236.128.0/17 101.237.0.0/19 101.237.33.0/24 101.237.34.0/23 @@ -840,9 +866,13 @@ 101.240.0.0/14 101.245.0.0/22 101.245.8.0/23 -101.245.16.0/22 +101.245.12.0/22 +101.245.16.0/21 101.245.32.0/19 101.245.64.0/18 +101.245.128.0/22 +101.245.136.0/22 +101.245.144.0/22 101.246.172.0/22 101.246.176.0/20 101.247.0.0/18 @@ -870,7 +900,7 @@ 103.4.56.0/22 103.5.192.0/22 103.6.220.0/22 -103.7.140.0/22 +103.7.140.0/23 103.8.8.0/22 103.8.32.0/22 103.8.52.0/22 @@ -889,7 +919,6 @@ 103.14.132.0/22 103.14.136.0/22 103.15.4.0/22 -103.15.96.0/22 103.16.124.0/22 103.17.40.0/22 103.17.228.0/22 @@ -921,7 +950,6 @@ 103.26.0.0/22 103.26.64.0/22 103.26.76.0/22 -103.27.4.0/22 103.27.24.0/22 103.27.240.0/22 103.28.8.0/24 @@ -939,11 +967,11 @@ 103.35.254.0/24 103.36.28.0/22 103.36.36.0/22 -103.36.60.0/22 +103.36.63.0/24 103.36.96.0/22 103.36.132.0/22 103.36.136.0/22 -103.36.164.0/22 +103.36.165.0/24 103.36.168.0/24 103.36.172.0/22 103.36.192.0/20 @@ -951,7 +979,7 @@ 103.36.220.0/22 103.37.7.0/24 103.37.12.0/22 -103.37.16.0/22 +103.37.18.0/23 103.37.44.0/23 103.37.46.0/24 103.37.72.0/22 @@ -961,8 +989,6 @@ 103.37.160.0/21 103.37.172.0/22 103.38.40.0/22 -103.38.76.0/22 -103.38.84.0/22 103.38.92.0/23 103.38.116.0/22 103.38.224.0/22 @@ -982,7 +1008,6 @@ 103.41.116.0/22 103.41.164.0/22 103.41.232.0/23 -103.42.8.0/22 103.42.76.0/22 103.42.104.0/22 103.43.134.0/23 @@ -993,7 +1018,6 @@ 103.44.144.0/22 103.44.168.0/23 103.44.171.0/24 -103.44.176.0/22 103.44.236.0/22 103.44.240.0/20 103.45.72.0/21 @@ -1010,14 +1034,12 @@ 103.46.168.0/22 103.47.48.0/22 103.47.80.0/22 -103.48.232.0/22 103.49.12.0/22 -103.49.108.0/22 103.49.196.0/24 103.49.198.0/23 103.50.36.0/22 -103.50.253.0/24 103.51.62.0/23 +103.52.100.0/22 103.52.104.0/23 103.52.172.0/22 103.52.176.0/22 @@ -1033,8 +1055,8 @@ 103.56.100.0/22 103.56.104.0/22 103.56.152.0/22 -103.56.184.0/22 103.57.12.0/22 +103.57.136.0/23 103.57.139.0/24 103.59.112.0/22 103.59.124.0/22 @@ -1079,7 +1101,7 @@ 103.73.204.0/22 103.74.24.0/21 103.74.48.0/22 -103.75.104.0/22 +103.75.107.0/24 103.75.152.0/22 103.76.60.0/22 103.76.220.0/22 @@ -1151,7 +1173,6 @@ 103.98.127.0/24 103.98.220.0/22 103.98.248.0/21 -103.99.104.0/22 103.100.64.0/22 103.101.124.0/23 103.101.180.0/22 @@ -1174,7 +1195,6 @@ 103.106.36.0/22 103.106.252.0/22 103.107.0.0/22 -103.107.188.0/22 103.107.216.0/21 103.108.244.0/24 103.108.247.0/24 @@ -1186,7 +1206,6 @@ 103.113.4.0/22 103.114.100.0/22 103.114.158.0/23 -103.114.212.0/23 103.114.236.0/22 103.115.92.0/22 103.115.120.0/22 @@ -1225,13 +1244,11 @@ 103.131.168.0/22 103.131.179.0/24 103.132.22.0/23 -103.132.80.0/23 103.132.212.0/23 103.133.128.0/23 103.134.136.0/22 103.135.160.0/22 103.135.192.0/21 -103.135.236.0/24 103.137.60.0/24 103.138.156.0/23 103.139.136.0/23 @@ -1364,7 +1381,7 @@ 103.212.12.0/22 103.212.48.0/23 103.212.109.0/24 -103.213.48.0/23 +103.213.49.0/24 103.213.50.0/24 103.213.62.0/23 103.213.64.0/19 @@ -1430,12 +1447,10 @@ 103.233.4.0/22 103.233.52.0/22 103.233.128.0/22 -103.233.138.0/24 103.233.162.0/23 103.234.20.0/22 103.234.56.0/22 103.234.128.0/22 -103.235.85.0/24 103.235.102.0/23 103.235.136.0/22 103.235.144.0/24 @@ -1443,6 +1458,10 @@ 103.235.224.0/20 103.235.244.0/22 103.235.248.0/21 +103.236.52.0/22 +103.236.56.0/21 +103.236.64.0/19 +103.236.96.0/22 103.236.120.0/22 103.236.244.0/22 103.236.248.0/21 @@ -1459,6 +1478,7 @@ 103.238.52.0/22 103.238.96.0/23 103.238.98.0/24 +103.238.130.0/24 103.238.132.0/22 103.238.144.0/22 103.238.160.0/22 @@ -1468,7 +1488,7 @@ 103.238.204.0/22 103.239.68.0/22 103.239.152.0/22 -103.239.184.0/24 +103.239.184.0/23 103.239.187.0/24 103.239.192.0/22 103.239.204.0/22 @@ -1480,7 +1500,6 @@ 103.240.124.0/22 103.240.244.0/22 103.241.95.0/24 -103.241.208.0/23 103.242.128.0/24 103.242.130.0/24 103.242.168.0/23 @@ -1518,7 +1537,7 @@ 103.251.204.0/24 103.251.207.0/24 103.251.240.0/22 -103.252.36.0/22 +103.252.36.0/24 103.252.172.0/22 103.252.248.0/22 103.253.60.0/22 @@ -1564,7 +1583,11 @@ 106.3.80.0/22 106.3.88.0/21 106.3.96.0/22 -106.3.128.0/19 +106.3.128.0/20 +106.3.144.0/22 +106.3.148.0/23 +106.3.151.0/24 +106.3.152.0/21 106.3.192.0/20 106.3.208.0/21 106.3.224.0/21 @@ -1583,7 +1606,6 @@ 106.14.0.0/15 106.16.0.0/14 106.32.0.0/12 -106.48.0.0/21 106.48.16.0/21 106.52.0.0/14 106.56.0.0/14 @@ -1745,6 +1767,7 @@ 112.132.0.0/16 112.192.0.0/14 112.196.208.0/24 +112.196.220.0/24 112.224.0.0/11 113.0.0.0/13 113.8.0.0/15 @@ -1858,7 +1881,17 @@ 114.112.4.0/23 114.112.24.0/21 114.112.32.0/19 -114.112.64.0/19 +114.112.64.0/24 +114.112.66.0/24 +114.112.70.0/24 +114.112.72.0/21 +114.112.81.0/24 +114.112.82.0/24 +114.112.85.0/24 +114.112.86.0/24 +114.112.88.0/24 +114.112.91.0/24 +114.112.94.0/23 114.112.96.0/21 114.112.104.0/22 114.112.136.0/21 @@ -1908,7 +1941,7 @@ 115.120.144.0/23 115.120.148.0/22 115.120.152.0/21 -115.120.184.0/21 +115.120.176.0/20 115.120.192.0/18 115.124.16.0/20 115.148.0.0/14 @@ -1920,6 +1953,8 @@ 115.174.64.0/19 115.175.0.0/18 115.175.64.0/19 +115.175.104.0/22 +115.175.108.0/23 115.175.120.0/21 115.175.128.0/18 115.175.192.0/19 @@ -1945,7 +1980,8 @@ 116.66.48.0/23 116.66.53.0/24 116.66.98.0/24 -116.66.120.0/22 +116.66.120.0/24 +116.66.123.0/24 116.68.136.0/21 116.68.176.0/21 116.70.64.0/18 @@ -2035,7 +2071,7 @@ 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 -117.48.0.0/18 +117.48.32.0/19 117.48.64.0/20 117.48.80.0/21 117.48.88.0/22 @@ -2231,7 +2267,7 @@ 118.242.24.0/22 118.242.32.0/22 118.242.40.0/24 -118.242.236.0/22 +118.242.238.0/24 118.244.0.0/21 118.244.128.0/17 118.247.0.0/16 @@ -2243,9 +2279,8 @@ 119.15.136.0/23 119.15.140.0/23 119.18.208.0/21 -119.18.224.0/22 -119.18.231.0/24 -119.18.232.0/24 +119.18.224.0/24 +119.18.226.0/24 119.18.234.0/24 119.18.236.0/23 119.23.0.0/16 @@ -2368,10 +2403,7 @@ 119.253.0.0/20 119.253.32.0/19 119.253.64.0/19 -119.253.249.0/24 -119.253.252.0/24 119.254.0.0/16 -119.255.63.0/24 119.255.128.0/17 120.0.0.0/12 120.24.0.0/14 @@ -2440,6 +2472,7 @@ 121.39.255.0/24 121.40.0.0/14 121.46.0.0/20 +121.46.20.0/22 121.46.128.0/21 121.46.141.0/24 121.46.192.0/21 @@ -2449,7 +2482,6 @@ 121.46.248.0/22 121.46.252.0/23 121.46.254.0/24 -121.47.0.0/16 121.48.0.0/15 121.51.0.0/16 121.52.160.0/19 @@ -2580,9 +2612,6 @@ 123.8.0.0/13 123.49.192.0/23 123.49.194.0/24 -123.49.224.0/24 -123.49.229.0/24 -123.49.232.0/24 123.49.240.0/24 123.49.242.0/23 123.52.0.0/14 @@ -2826,7 +2855,22 @@ 140.210.8.0/21 140.210.16.0/20 140.210.32.0/22 -140.210.64.0/18 +140.210.65.0/24 +140.210.67.0/24 +140.210.69.0/24 +140.210.70.0/24 +140.210.72.0/23 +140.210.75.0/24 +140.210.77.0/24 +140.210.78.0/23 +140.210.80.0/24 +140.210.83.0/24 +140.210.84.0/24 +140.210.87.0/24 +140.210.88.0/22 +140.210.92.0/24 +140.210.94.0/24 +140.210.96.0/19 140.210.128.0/19 140.210.192.0/19 140.210.224.0/20 @@ -2838,7 +2882,6 @@ 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 -141.11.50.0/23 143.64.0.0/16 144.0.0.0/16 144.7.0.0/17 @@ -2891,6 +2934,7 @@ 150.242.244.0/22 150.242.248.0/22 150.255.0.0/16 +151.241.174.0/24 151.242.65.0/24 152.104.128.0/17 152.136.0.0/16 @@ -2903,24 +2947,12 @@ 153.118.0.0/15 154.8.48.0/20 154.8.128.0/17 -154.19.43.0/24 154.38.104.0/22 -154.48.226.0/24 -154.48.231.0/24 -154.48.235.0/24 -154.48.236.0/22 -154.48.240.0/24 -154.48.247.0/24 -154.48.248.0/24 -154.48.250.0/23 +154.48.237.0/24 154.72.42.0/24 154.72.44.0/24 154.72.47.0/24 154.89.32.0/20 -154.89.49.0/24 -154.89.50.0/23 -154.89.52.0/22 -154.89.56.0/21 154.91.158.0/23 154.208.140.0/22 154.208.144.0/20 @@ -2940,28 +2972,36 @@ 155.102.26.0/23 155.102.28.0/22 155.102.32.0/19 +155.102.72.0/24 155.102.111.0/24 155.102.112.0/21 155.102.120.0/23 +155.102.127.0/24 155.102.128.0/22 155.102.132.0/23 155.102.135.0/24 155.102.136.0/21 155.102.144.0/20 155.102.160.0/22 -155.102.165.0/24 +155.102.164.0/23 155.102.166.0/24 155.102.168.0/23 155.102.176.0/23 +155.102.180.0/22 155.102.193.0/24 155.102.194.0/23 155.102.196.0/23 155.102.198.0/24 -155.102.201.0/24 +155.102.200.0/23 +155.102.202.0/24 155.102.204.0/23 155.102.208.0/23 +155.102.211.0/24 155.102.216.0/22 155.102.220.0/23 +155.102.224.0/20 +155.102.240.0/23 +155.102.242.0/24 155.102.247.0/24 155.102.248.0/23 155.102.253.0/24 @@ -3006,11 +3046,11 @@ 160.19.208.0/22 160.20.18.0/23 160.22.188.0/24 -160.22.244.0/23 160.25.194.0/23 160.30.230.0/23 160.83.110.0/24 160.191.0.0/24 +160.202.152.0/22 160.202.212.0/22 160.202.224.0/19 160.250.14.0/23 @@ -3039,7 +3079,8 @@ 163.181.0.0/23 163.181.2.0/24 163.181.15.0/24 -163.181.16.0/22 +163.181.17.0/24 +163.181.18.0/23 163.181.22.0/23 163.181.25.0/24 163.181.26.0/24 @@ -3098,8 +3139,7 @@ 163.181.200.0/21 163.181.209.0/24 163.181.210.0/23 -163.181.212.0/23 -163.181.214.0/24 +163.181.212.0/22 163.181.216.0/21 163.181.224.0/23 163.181.228.0/22 @@ -3143,9 +3183,6 @@ 175.16.0.0/13 175.24.0.0/15 175.27.0.0/16 -175.29.107.0/24 -175.29.108.0/24 -175.29.110.0/23 175.30.0.0/15 175.42.0.0/15 175.44.0.0/16 @@ -3183,8 +3220,6 @@ 180.89.64.0/19 180.91.192.0/20 180.92.176.0/23 -180.94.192.0/20 -180.94.208.0/21 180.95.128.0/17 180.96.0.0/11 180.129.128.0/17 @@ -3220,7 +3255,8 @@ 180.188.32.0/20 180.200.252.0/22 180.201.0.0/16 -180.203.0.0/22 +180.203.0.0/23 +180.203.3.0/24 180.208.0.0/15 180.210.212.0/22 180.212.0.0/15 @@ -3258,7 +3294,6 @@ 182.174.0.0/15 182.200.0.0/13 182.236.160.0/19 -182.238.0.0/16 182.240.0.0/13 182.254.0.0/16 183.0.0.0/10 @@ -3283,12 +3318,11 @@ 183.192.0.0/10 185.75.173.0/24 185.75.174.0/24 -185.78.105.0/24 185.234.212.0/24 188.131.128.0/17 192.55.46.0/24 192.55.68.0/22 -192.102.204.0/22 +192.102.204.0/23 192.140.160.0/19 192.140.208.0/21 192.144.128.0/17 @@ -3312,6 +3346,7 @@ 194.127.229.0/24 194.138.202.0/23 194.138.245.0/24 +195.114.203.0/24 198.175.100.0/22 198.208.17.0/24 198.208.19.0/24 @@ -3404,7 +3439,8 @@ 202.111.230.0/24 202.111.240.0/23 202.111.242.0/24 -202.111.244.0/24 +202.111.244.0/23 +202.111.246.0/24 202.112.0.0/13 202.120.0.0/15 202.122.32.0/21 @@ -3427,7 +3463,6 @@ 202.130.0.0/19 202.130.224.0/20 202.130.240.0/21 -202.136.48.0/20 202.136.208.0/21 202.136.216.0/23 202.136.218.0/24 @@ -3441,7 +3476,7 @@ 202.143.100.0/22 202.144.198.0/23 202.148.96.0/19 -202.149.224.0/19 +202.149.224.0/20 202.150.16.0/20 202.153.48.0/20 202.158.160.0/19 @@ -3461,7 +3496,6 @@ 202.189.8.0/21 202.189.16.0/21 202.192.0.0/12 -202.222.32.0/19 203.0.104.0/21 203.2.64.0/21 203.2.112.0/21 @@ -3624,7 +3658,6 @@ 203.86.60.0/23 203.86.62.0/24 203.86.64.0/19 -203.86.112.0/24 203.86.116.0/24 203.86.254.0/23 203.88.32.0/19 @@ -3745,7 +3778,7 @@ 203.194.124.0/24 203.195.64.0/19 203.195.113.0/24 -203.195.114.0/23 +203.195.114.0/24 203.195.118.0/23 203.195.128.0/17 203.196.0.0/21 @@ -3776,7 +3809,6 @@ 206.54.9.0/24 206.54.10.0/23 206.54.12.0/22 -206.237.112.0/20 207.226.153.0/24 207.226.154.0/24 210.2.0.0/23 @@ -3822,7 +3854,10 @@ 210.72.128.0/18 210.72.192.0/19 210.72.224.0/20 -210.72.240.0/21 +210.72.240.0/23 +210.72.243.0/24 +210.72.245.0/24 +210.72.246.0/24 210.73.0.0/16 210.74.0.0/20 210.74.35.0/24 @@ -3845,7 +3880,12 @@ 210.77.0.0/18 210.77.64.0/19 210.77.128.0/19 -210.77.176.0/20 +210.77.176.0/22 +210.77.180.0/23 +210.77.182.0/24 +210.77.184.0/23 +210.77.189.0/24 +210.77.190.0/23 210.77.192.0/18 210.78.128.0/24 210.78.134.0/23 @@ -3903,13 +3943,11 @@ 211.98.0.0/16 211.99.8.0/21 211.99.16.0/23 -211.99.24.0/21 +211.99.24.0/23 +211.99.26.0/24 +211.99.28.0/22 211.99.32.0/19 -211.99.64.0/19 -211.99.96.0/20 -211.99.112.0/22 -211.99.116.0/24 -211.99.122.0/24 +211.99.64.0/18 211.99.128.0/18 211.99.192.0/19 211.100.0.0/17 @@ -4006,22 +4044,23 @@ 211.159.128.0/17 211.160.0.0/22 211.160.4.0/23 -211.160.8.0/22 -211.160.14.0/23 +211.160.9.0/24 +211.160.10.0/23 211.160.16.0/21 -211.160.24.0/22 +211.160.24.0/24 +211.160.26.0/23 211.160.28.0/23 211.160.36.0/23 -211.160.46.0/23 +211.160.46.0/24 211.160.62.0/23 211.160.72.0/21 211.160.80.0/20 211.160.112.0/22 211.160.120.0/23 211.160.160.0/19 -211.160.194.0/23 +211.160.195.0/24 211.160.196.0/24 -211.160.202.0/23 +211.160.203.0/24 211.160.204.0/23 211.160.240.0/20 211.161.0.0/20 @@ -4121,7 +4160,6 @@ 219.83.160.0/19 219.100.148.0/22 219.117.16.0/20 -219.121.224.0/19 219.128.0.0/12 219.144.0.0/14 219.148.0.0/15 @@ -4167,7 +4205,7 @@ 219.236.0.0/14 219.242.0.0/15 219.244.0.0/14 -220.101.192.0/18 +220.101.192.0/19 220.112.0.0/22 220.112.8.0/24 220.112.40.0/21 @@ -4232,11 +4270,16 @@ 220.207.176.0/22 220.207.184.0/22 220.207.254.0/23 -220.231.0.0/18 +220.231.32.0/20 220.231.128.0/17 220.232.64.0/18 220.234.0.0/16 -220.243.128.0/18 +220.242.180.0/24 +220.243.128.0/20 +220.243.153.0/24 +220.243.154.0/23 +220.243.156.0/23 +220.243.176.0/20 220.248.0.0/16 220.249.0.0/17 220.249.128.0/18 diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver index df0c5ad..f40434f 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver @@ -1 +1 @@ -20250808035959 +20250822033443 diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt index 6ef9bd2..e55c21c 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt @@ -2,6 +2,7 @@ 2001:254::/31 2001:256:100::/48 2001:678:120::/48 +2001:678:10d0::/48 2001:67c:ebc::/48 2001:7fa:5::/48 2001:c68::/32 @@ -95,6 +96,7 @@ 2400:9620::/32 2400:a860:1::/48 2400:a860:2::/47 +2400:a860:4::/47 2400:a980::/29 2400:ae00:1981::/48 2400:b200::/32 @@ -117,7 +119,6 @@ 2401:800::/32 2401:1160::/32 2401:11a0:10::/44 -2401:11a0:1500::/40 2401:11a0:d150::/48 2401:11a0:d152::/48 2401:11a0:d158::/48 @@ -159,7 +160,7 @@ 2401:cb80::/32 2401:cc00::/32 2401:ce00::/32 -2401:d0e0:2::/48 +2401:d0e0:2::/47 2401:d180::/46 2401:d180:10::/47 2401:d180:111::/48 @@ -169,8 +170,7 @@ 2401:ec00::/32 2401:f860:86::/47 2401:f860:88::/47 -2401:f860:90::/47 -2401:f860:93::/48 +2401:f860:90::/46 2401:f860:94::/48 2401:f860:100::/40 2401:f860:f100::/40 @@ -178,6 +178,7 @@ 2402:840:d000::/46 2402:840:e000::/46 2402:840:f000::/38 +2402:c60::/48 2402:1440::/32 2402:2000::/32 2402:3180::/46 @@ -223,7 +224,9 @@ 2402:f000::/32 2402:f140:ff10::/46 2402:f140:ff14::/48 -2402:f8c0::/32 +2402:f8c0::/47 +2402:f8c0:2::/48 +2402:f8c0:5::/48 2403:600::/32 2403:c80::/32 2403:1b80::/48 @@ -257,7 +260,6 @@ 2403:b400::/32 2403:c980::/32 2403:d400::/32 -2403:e7c0:1::/48 2403:f4c0::/48 2403:ffc0:1100::/40 2403:ffc0:1200::/39 @@ -287,7 +289,7 @@ 2404:2280:12e::/48 2404:2280:130::/48 2404:2280:134::/48 -2404:2280:136::/47 +2404:2280:137::/48 2404:2280:138::/48 2404:2280:13b::/48 2404:2280:13c::/47 @@ -346,13 +348,19 @@ 2404:2280:20e::/48 2404:2280:210::/46 2404:2280:214::/48 -2404:2280:217::/48 +2404:2280:216::/47 2404:2280:218::/48 2404:2280:21a::/48 +2404:2280:21d::/48 2404:2280:221::/48 +2404:2280:265::/48 +2404:2280:266::/47 +2404:2280:268::/46 +2404:2280:26c::/48 2404:2280:271::/48 +2404:2280:272::/48 2404:2280:27a::/48 -2404:2280:27c::/48 +2404:2280:27c::/47 2404:3700::/48 2404:4dc0::/32 2404:6380::/48 @@ -361,7 +369,6 @@ 2404:6500:dcb3::/48 2404:7180:a000::/48 2404:7180:a010::/48 -2404:7180:a021::/48 2404:7180:aa00::/48 2404:7180:aa10::/48 2404:7180:b001::/48 @@ -390,7 +397,6 @@ 2404:c2c0:c000::/36 2404:c300::/32 2404:c940::/48 -2404:d7c0:2::/48 2404:e280::/47 2404:e5c0::/32 2404:e8c0::/32 @@ -520,7 +526,6 @@ 2407:6c40:1210::/48 2407:6c40:1500::/48 2407:6c40:1600::/40 -2407:6c40:1810::/48 2407:8f40:2::/48 2407:9f00::/32 2407:ad80::/32 @@ -590,7 +595,6 @@ 2408:8181:a000::/40 2408:8181:a220::/44 2408:8181:e000::/40 -2408:8182:6000::/40 2408:8182:c000::/40 2408:8183:4000::/40 2408:8183:8000::/40 @@ -1106,7 +1110,6 @@ 2409:27fb::/48 2409:27fc::/48 2409:27fe::/33 -2409:6100::/44 2409:8000::/20 240a:2000::/40 240a:2001:100::/40 @@ -1184,6 +1187,7 @@ 240e::/20 2602:2e0:ff::/48 2602:f7ee:ee::/48 +2602:f92a:e100::/44 2602:f93b:400::/38 2602:f9ba:a8::/48 2602:f9ba:10c::/48 @@ -1235,8 +1239,8 @@ 2a04:f580:9280::/48 2a04:f580:9290::/48 2a06:1180:1000::/48 -2a06:3605::/32 -2a06:3606::/31 +2a06:3603::/32 +2a06:3604::/30 2a06:9f81:4600::/43 2a06:9f81:4640::/44 2a06:a005:260::/43 @@ -1251,10 +1255,9 @@ 2a09:b280:ff81::/48 2a09:b280:ff83::/48 2a09:b280:ff84::/47 -2a0a:2840:20::/43 -2a0a:2840:2000::/48 -2a0a:2842::/32 +2a0a:2840::/30 2a0a:2845:aab8::/46 +2a0a:2845:d647::/48 2a0a:2846::/48 2a0a:6040:ec00::/40 2a0a:6044:6600::/40 @@ -1262,6 +1265,7 @@ 2a0b:2542::/48 2a0b:4340:a6::/48 2a0b:4e07:b8::/47 +2a0c:9a40:84e0::/48 2a0c:9a40:9e00::/43 2a0c:b641:571::/48 2a0e:97c0:83f::/48 @@ -1319,6 +1323,7 @@ 2a0f:7803:fe82::/48 2a0f:7d07::/32 2a0f:85c1:ba5::/48 +2a0f:85c1:ca0::/44 2a0f:9400:6110::/48 2a0f:9400:7700::/48 2a0f:ac00::/29 @@ -1327,30 +1332,34 @@ 2a10:ccc0:d00::/46 2a10:ccc0:d0a::/47 2a10:ccc0:d0c::/47 +2a10:ccc6:66c4::/48 2a10:ccc6:66c6::/48 2a10:ccc6:66c9::/48 2a10:ccc6:66ca::/48 -2a10:ccc6:66cd::/48 +2a10:ccc6:66cc::/47 2a12:f8c3::/36 2a13:1800::/48 2a13:1800:10::/48 2a13:1800:80::/44 2a13:1800:300::/44 2a13:1801:180::/43 +2a13:a5c3:ff10::/44 2a13:a5c3:ff21::/48 2a13:a5c3:ff50::/44 2a13:a5c7:1800::/40 2a13:a5c7:2100::/48 2a13:a5c7:2102::/48 2a13:a5c7:2121::/48 +2a13:a5c7:2801::/48 2a13:a5c7:2803::/48 -2a13:a5c7:3100::/43 +2a13:a5c7:3108::/48 2a13:a5c7:31a0::/43 2a13:aac4:f000::/44 2a14:7c0:4a01::/48 2a14:4c41::/32 2a14:67c1:20::/44 2a14:67c1:70::/47 +2a14:67c1:73::/48 2a14:67c1:74::/48 2a14:67c1:702::/47 2a14:67c1:704::/48 @@ -1364,7 +1373,8 @@ 2a14:67c1:a061::/48 2a14:67c1:a064::/48 2a14:67c1:a090::/46 -2a14:67c1:a094::/47 +2a14:67c1:a095::/48 +2a14:67c1:a096::/48 2a14:67c1:a099::/48 2a14:67c1:a100::/43 2a14:67c1:b000::/48 @@ -1374,17 +1384,24 @@ 2a14:67c1:b100::/46 2a14:67c1:b105::/48 2a14:67c1:b107::/48 -2a14:67c1:b130::/47 -2a14:67c1:b132::/48 +2a14:67c1:b130::/48 +2a14:67c1:b132::/47 +2a14:67c1:b134::/47 +2a14:67c1:b4a1::/48 +2a14:67c1:b4a2::/48 2a14:67c1:b4c0::/45 +2a14:67c1:b4d0::/44 2a14:67c1:b4e0::/43 2a14:67c1:b500::/48 +2a14:67c1:b549::/48 2a14:67c1:b561::/48 2a14:67c1:b563::/48 2a14:67c1:b566::/48 +2a14:67c1:b581::/48 2a14:67c1:b582::/48 2a14:67c1:b588::/47 2a14:67c1:b590::/48 +2a14:67c1:b599::/48 2a14:67c5:1900::/40 2a14:7580:9200::/40 2a14:7580:9400::/39 diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver index df0c5ad..f40434f 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver @@ -1 +1 @@ -20250808035959 +20250822033443 diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt index bc8b2fc..12cc633 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt @@ -54617,7 +54617,6 @@ itiankong.com itiankong.net itianliao.com itiexue.net -itiger.com itigergrowth.com itigergrowtha.com itigerup.com @@ -61793,7 +61792,6 @@ kovemoto.com kowa-dental.com kowa103.com kowloonhospital.com -kox.moe koyuki.cc kpblw.com kpbyd.com @@ -70630,7 +70628,6 @@ mowan123.com moweather.com mowgz.com mowowo.com -mox.moe moxfive.xyz moxiai.com moxian.com @@ -71461,8 +71458,6 @@ mypharma.com mypian.com mypiao.com mypiaojia.com -mypikpak.com -mypikpak.net mypitaya.com mypity.com mypiwik.com @@ -71729,7 +71724,6 @@ naitta.com naiveadmin.com naiveblue.com naiwch.com -naixi.net naixuecha.com naiyouxuexi.com najingtech.com @@ -97561,7 +97555,6 @@ ustarl.com ustbtc.com ustc.edu ustcers.com -ustclug.org ustui.com usuredata.com usuuu.com @@ -98607,7 +98600,6 @@ voidking.com voip366.com vojs.tv vokop.com -vol.moe volc-dns.com volc-dns.net volc-dns.pub @@ -104816,7 +104808,6 @@ xiaomei.cc xiaomeiti.com xiaomeng1235.com xiaomi.com -xiaomi.eu xiaomi.hk xiaomi.net xiaomi.org @@ -106602,6 +106593,7 @@ xn--4xup5j.com xn--54q23ckxiyx0e.com xn--54q249denfzw9a.net xn--54q40czz0g7xp.com +xn--55qw42g xn--55qw7biqf7g3d004h8yuw1ctrt04sep1cjfb.com xn--55qwa79fh6ku8czve.com xn--55qx2ag79c1iq.com diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver index 3b2cd43..68ed364 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver @@ -1 +1 @@ -202508072216 +202508212214 diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt index bd872bc..b0d6bb6 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt @@ -511,6 +511,7 @@ bestvpnusa.com bet365.com betaclouds.net betfair.com +betterhash.net betternet.co bettervpn.com bettween.com @@ -537,6 +538,7 @@ bild.de biliworld.com billypan.com binance.com +binance.org binancezh.cc binux.me bird.so @@ -548,6 +550,7 @@ bitchute.com bitcointalk.org bitcoinworld.com bitfinex.com +bitget.com bithumb.com bitmex.com bitshare.com @@ -1043,6 +1046,7 @@ clipconverter.cc clipfish.de cloud.dify.ai cloud.mail.ru +cloudflare-dns.com cloudflare-ipfs.com cloudfunctions.net club1069.com @@ -1266,6 +1270,7 @@ delicious.com demo.unlock-music.dev democrats.org demosisto.hk +deno.dev depositphotos.com desc.se desipro.de @@ -1334,6 +1339,7 @@ dnvod.tv doc.new docker.com docker.io +docs.deno.com docs.new doctorvoice.org documentingreality.com @@ -1856,6 +1862,7 @@ fuq.com furbo.org furhhdl.org furinkan.com +furrybar.com futurechinaforum.org futuremessage.org fux.com @@ -2366,6 +2373,7 @@ hentaivideoworld.com heqinglian.net heritage.org herokuapp.com +herominers.com hexieshe.com hexieshe.xyz hexxeh.net @@ -2662,6 +2670,7 @@ indiatoday.in indiemerch.com inews-api.tvb.com info-graf.fr +infura.io inherit.live initiativesforchina.org inkbunny.net @@ -2735,9 +2744,11 @@ isupportuyghurs.org itaiwan.gov.tw italiatibet.org itasoftware.com +itch.io itemdb.com itemfix.com ithelp.ithome.com.tw +itiger.com itsaol.com itshidden.com itsky.it @@ -3086,6 +3097,7 @@ lsmwebcast.com lsxszzg.com ltn.com.tw luckydesigner.space +luckymobile.ca ludepress.com luke54.com luke54.org @@ -3159,6 +3171,7 @@ matters.news matters.town matthewdgreen.wordpress.com mattwilcox.net +maven.neoforged.net maxing.jp mayimayi.com mcadforums.com @@ -3207,6 +3220,7 @@ mesotw.com messenger.com meta.com metafilter.com +metamask.io metart.com metarthunter.com meteorshowersonline.com @@ -3429,6 +3443,7 @@ nationalreview.com nationsonline.org nationwide.com naughtyamerica.com +naver.com navyfamily.navy.mil navyreserve.navy.mil naweeklytimes.com @@ -3753,6 +3768,7 @@ palacemoon.com paljorpublications.com paltalk.com panamapapers.sueddeutsche.de +pancakeswap.finance pandafan.pub pandapow.co pandapow.net @@ -3819,6 +3835,7 @@ periscope.tv perplexity.ai persecutionblog.com persiankitty.com +pewresearch.org phapluan.org phayul.com philborges.com @@ -3948,6 +3965,7 @@ prism-break.org prisoneralert.com pritunl.com privacybox.de +privacyguides.org private.com privateinternetaccess.com privatepaste.com @@ -4601,6 +4619,7 @@ suroot.com surrenderat20.net svsfx.com swagbucks.com +swapspace.co swissinfo.ch swissvpn.net switch1.jp @@ -5130,6 +5149,7 @@ uderzo.it udn.com udn.com.tw udnbkk.com +udomain.hk uforadio.com.tw ufreevpn.com ugo.com @@ -5170,6 +5190,7 @@ unseen.is unstable.icu unwire.hk uocn.org +upbit.com updates.tdesktop.com upghsbc.com upholdjustice.org @@ -5591,7 +5612,6 @@ www.monlamit.org www.moztw.org www.msn.com www.nbc.com -www.nodeloc.com www.owind.com www.oxid.it www.powerpointninja.com diff --git a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver index 3b2cd43..68ed364 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver +++ b/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver @@ -1 +1 @@ -202508072216 +202508212214 diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc index a8f221f..68fe43f 100755 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc @@ -13,9 +13,8 @@ import { connect } from 'ubus'; import { cursor } from 'uci'; import { - isEmpty, strToBool, strToInt, - removeBlankAttrs, validation, - HP_DIR, RUN_DIR + isEmpty, parseURL, strToBool, strToInt, strToTime, + removeBlankAttrs, validation, HP_DIR, RUN_DIR } from 'homeproxy'; const ubus = connect(); @@ -53,10 +52,13 @@ const dns_port = uci.get(uciconfig, uciinfra, 'dns_port') || '5333'; const ntp_server = uci.get(uciconfig, uciinfra, 'ntp_server') || 'time.apple.com'; -let main_node, main_udp_node, dedicated_udp_node, default_outbound, domain_strategy, sniff_override, - dns_server, china_dns_server, dns_default_strategy, dns_default_server, dns_disable_cache, - dns_disable_cache_expire, dns_independent_cache, dns_client_subnet, cache_file_store_rdrc, - cache_file_rdrc_timeout, direct_domain_list, proxy_domain_list; +const ipv6_support = uci.get(uciconfig, ucimain, 'ipv6_support') || '0'; + +let main_node, main_udp_node, dedicated_udp_node, default_outbound, default_outbound_dns, + domain_strategy, sniff_override, dns_server, china_dns_server, dns_default_strategy, + dns_default_server, dns_disable_cache, dns_disable_cache_expire, dns_independent_cache, + dns_client_subnet, cache_file_store_rdrc, cache_file_rdrc_timeout, direct_domain_list, + proxy_domain_list; if (routing_mode !== 'custom') { main_node = uci.get(uciconfig, ucimain, 'main_node') || 'nil'; @@ -72,6 +74,7 @@ if (routing_mode !== 'custom') { if (isEmpty(china_dns_server) || type(china_dns_server) !== 'string' || china_dns_server === 'wan') china_dns_server = wan_dns; } + dns_default_strategy = (ipv6_support !== '1') ? 'ipv4_only' : null; direct_domain_list = trim(readfile(HP_DIR + '/resources/direct_list.txt')); if (direct_domain_list) @@ -95,21 +98,25 @@ if (routing_mode !== 'custom') { /* Routing settings */ default_outbound = uci.get(uciconfig, uciroutingsetting, 'default_outbound') || 'nil'; + default_outbound_dns = uci.get(uciconfig, uciroutingsetting, 'default_outbound_dns') || 'default-dns'; domain_strategy = uci.get(uciconfig, uciroutingsetting, 'domain_strategy'); sniff_override = uci.get(uciconfig, uciroutingsetting, 'sniff_override'); } const proxy_mode = uci.get(uciconfig, ucimain, 'proxy_mode') || 'redirect_tproxy', - ipv6_support = uci.get(uciconfig, ucimain, 'ipv6_support') || '0', default_interface = uci.get(uciconfig, ucicontrol, 'bind_interface'); const mixed_port = uci.get(uciconfig, uciinfra, 'mixed_port') || '5330'; -let self_mark, redirect_port, tproxy_port, - tun_name, tun_addr4, tun_addr6, tun_mtu, - tcpip_stack, endpoint_independent_nat, udp_timeout; -udp_timeout = uci.get(uciconfig, 'infra', 'udp_timeout'); + +let self_mark, redirect_port, tproxy_port, tun_name, + tun_addr4, tun_addr6, tun_mtu, tcpip_stack, + endpoint_independent_nat, udp_timeout; + if (routing_mode === 'custom') udp_timeout = uci.get(uciconfig, uciroutingsetting, 'udp_timeout'); +else + udp_timeout = uci.get(uciconfig, 'infra', 'udp_timeout'); + if (match(proxy_mode, /redirect/)) { self_mark = uci.get(uciconfig, 'infra', 'self_mark') || '100'; redirect_port = uci.get(uciconfig, 'infra', 'redirect_port') || '5331'; @@ -143,6 +150,22 @@ function parse_port(strport) { } +function parse_dnserver(server_addr, default_protocol) { + if (isEmpty(server_addr)) + return null; + + if (!match(server_addr, /:\/\//)) + server_addr = (default_protocol || 'udp') + '://' + server_addr; + server_addr = parseURL(server_addr); + + return { + type: server_addr.protocol, + server: server_addr.hostname, + server_port: strToInt(server_addr.port), + path: (server_addr.pathname !== '/') ? server_addr.pathname : null, + } +} + function parse_dnsquery(strquery) { if (type(strquery) !== 'array' || isEmpty(strquery)) return null; @@ -210,8 +233,12 @@ function generate_outbound(node) { override_address: node.override_address, override_port: strToInt(node.override_port), proxy_protocol: strToInt(node.proxy_protocol), + /* AnyTLS */ + idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval), + idle_session_timeout: strToTime(node.anytls_idle_session_timeout), + min_idle_session: strToInt(node.anytls_min_idle_session), /* Hysteria (2) */ - hop_interval: node.hysteria_hop_interval ? (node.hysteria_hop_interval + 's') : null, + hop_interval: strToTime(node.hysteria_hop_interval), up_mbps: strToInt(node.hysteria_up_mbps), down_mbps: strToInt(node.hysteria_down_mbps), obfs: node.hysteria_obfs_type ? { @@ -241,13 +268,13 @@ function generate_outbound(node) { udp_relay_mode: node.tuic_udp_relay_mode, udp_over_stream: strToBool(node.tuic_udp_over_stream), zero_rtt_handshake: strToBool(node.tuic_enable_zero_rtt), - heartbeat: node.tuic_heartbeat ? (node.tuic_heartbeat + 's') : null, + heartbeat: strToTime(node.tuic_heartbeat), /* VLESS / VMess */ flow: node.vless_flow, alter_id: strToInt(node.vmess_alterid), security: node.vmess_encrypt, - global_padding: node.vmess_global_padding ? (node.vmess_global_padding === '1') : null, - authenticated_length: node.vmess_authenticated_length ? (node.vmess_authenticated_length === '1') : null, + global_padding: strToBool(node.vmess_global_padding), + authenticated_length: strToBool(node.vmess_authenticated_length), packet_encoding: node.packet_encoding, multiplex: (node.multiplex === '1') ? { @@ -256,7 +283,7 @@ function generate_outbound(node) { max_connections: strToInt(node.multiplex_max_connections), min_streams: strToInt(node.multiplex_min_streams), max_streams: strToInt(node.multiplex_max_streams), - padding: (node.multiplex_padding === '1'), + padding: strToBool(node.multiplex_padding), brutal: (node.multiplex_brutal === '1') ? { enabled: true, up_mbps: strToInt(node.multiplex_brutal_up), @@ -266,7 +293,7 @@ function generate_outbound(node) { tls: (node.tls === '1') ? { enabled: true, server_name: node.tls_sni, - insecure: (node.tls_insecure === '1'), + insecure: strToBool(node.tls_insecure), alpn: node.tls_alpn, min_version: node.tls_min_version, max_version: node.tls_max_version, @@ -274,7 +301,7 @@ function generate_outbound(node) { certificate_path: node.tls_cert_path, ech: (node.tls_ech === '1') ? { enabled: true, - pq_signature_schemes_enabled: (node.tls_ech_enable_pqss === '1'), + pq_signature_schemes_enabled: strToBool(node.tls_ech_enable_pqss), config: node.tls_ech_config, config_path: node.tls_ech_config_path } : null, @@ -299,8 +326,8 @@ function generate_outbound(node) { max_early_data: strToInt(node.websocket_early_data), early_data_header_name: node.websocket_early_data_header, service_name: node.grpc_servicename, - idle_timeout: node.http_idle_timeout ? (node.http_idle_timeout + 's') : null, - ping_timeout: node.http_ping_timeout ? (node.http_ping_timeout + 's') : null, + idle_timeout: (node.http_idle_timeout), + ping_timeout: (node.http_ping_timeout), permit_without_stream: strToBool(node.grpc_permit_without_stream) } : null, udp_over_tcp: (node.udp_over_tcp === '1') ? { @@ -349,7 +376,6 @@ function get_resolver(cfg) { return null; switch (cfg) { - case 'block-dns': case 'default-dns': case 'system-dns': return cfg; @@ -384,8 +410,7 @@ config.ntp = { enabled: true, server: ntp_server, detour: 'direct-out', - /* TODO: disable this until we have sing-box 1.12 */ - /* domain_resolver: 'default-dns', */ + domain_resolver: 'default-dns', }; /* DNS start */ @@ -394,32 +419,21 @@ config.dns = { servers: [ { tag: 'default-dns', - address: wan_dns, + type: 'udp', + server: wan_dns, detour: 'direct-out' }, { tag: 'system-dns', - address: 'local', + type: 'local', detour: 'direct-out' - }, - { - tag: 'block-dns', - address: 'rcode://refused' - } - ], - rules: [ - /* TODO: remove this once we have sing-box 1.12 */ - /* NTP domain must be resolved by default DNS */ - { - domain: ntp_server, - action: 'route', - server: 'default-dns' } ], + rules: [], strategy: dns_default_strategy, - disable_cache: (dns_disable_cache === '1'), - disable_expire: (dns_disable_cache_expire === '1'), - independent_cache: (dns_independent_cache === '1'), + disable_cache: strToBool(dns_disable_cache), + disable_expire: strToBool(dns_disable_cache_expire), + independent_cache: strToBool(dns_independent_cache), client_subnet: dns_client_subnet }; @@ -427,21 +441,15 @@ if (!isEmpty(main_node)) { /* Main DNS */ push(config.dns.servers, { tag: 'main-dns', - address: !match(dns_server, /:\/\//) ? 'tcp://' + (validation('ip6addr', dns_server) ? `[${dns_server}]` : dns_server) : dns_server, - strategy: (ipv6_support !== '1') ? 'ipv4_only' : null, - address_resolver: 'default-dns', - address_strategy: (ipv6_support !== '1') ? 'ipv4_only' : null, - detour: 'main-out' + domain_resolver: { + server: 'default-dns', + strategy: (ipv6_support !== '1') ? 'ipv4_only' : null + }, + detour: 'main-out', + ...parse_dnserver(dns_server, 'tcp') }); config.dns.final = 'main-dns'; - /* Avoid DNS loop */ - push(config.dns.rules, { - outbound: 'any', - action: 'route', - server: 'default-dns' - }); - if (length(direct_domain_list)) push(config.dns.rules, { rule_set: 'direct-domain', @@ -460,9 +468,12 @@ if (!isEmpty(main_node)) { if (routing_mode === 'bypass_mainland_china') { push(config.dns.servers, { tag: 'china-dns', - address: china_dns_server, - address_resolver: 'default-dns', - detour: 'direct-out' + domain_resolver: { + server: 'default-dns', + strategy: 'prefer_ipv6' + }, + detour: 'direct-out', + ...parse_dnserver(china_dns_server) }); if (length(proxy_domain_list)) @@ -475,7 +486,8 @@ if (!isEmpty(main_node)) { push(config.dns.rules, { rule_set: 'geosite-cn', action: 'route', - server: 'china-dns' + server: 'china-dns', + strategy: 'prefer_ipv6' }); push(config.dns.rules, { type: 'logical', @@ -490,7 +502,8 @@ if (!isEmpty(main_node)) { } ], action: 'route', - server: 'china-dns' + server: 'china-dns', + strategy: 'prefer_ipv6' }); } } else if (!isEmpty(default_outbound)) { @@ -501,13 +514,20 @@ if (!isEmpty(main_node)) { push(config.dns.servers, { tag: 'cfg-' + cfg['.name'] + '-dns', - address: cfg.address, - address: cfg.address, - address_resolver: get_resolver(cfg.address_resolver), - address_strategy: cfg.address_strategy, - strategy: cfg.resolve_strategy, - detour: get_outbound(cfg.outbound), - client_subnet: cfg.client_subnet + type: cfg.type, + server: cfg.server, + server_port: strToInt(cfg.server_port), + path: cfg.path, + headers: cfg.headers, + tls: cfg.tls_sni ? { + enabled: true, + server_name: cfg.tls_sni + } : null, + domain_resolver: { + server: get_resolver(cfg.address_resolver), + strategy: cfg.address_strategy + }, + detour: get_outbound(cfg.outbound) }); }); @@ -528,9 +548,9 @@ if (!isEmpty(main_node)) { port: parse_port(cfg.port), port_range: cfg.port_range, source_ip_cidr: cfg.source_ip_cidr, - source_ip_is_private: (cfg.source_ip_is_private === '1') || null, + source_ip_is_private: strToBool(cfg.source_ip_is_private), ip_cidr: cfg.ip_cidr, - ip_is_private: (cfg.ip_is_private === '1') || null, + ip_is_private: strToBool(cfg.ip_is_private), source_port: parse_port(cfg.source_port), source_port_range: cfg.source_port_range, process_name: cfg.process_name, @@ -538,15 +558,21 @@ if (!isEmpty(main_node)) { process_path_regex: cfg.process_path_regex, user: cfg.user, rule_set: get_ruleset(cfg.rule_set), - rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null, - invert: (cfg.invert === '1') || null, + rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source), + invert: strToBool(cfg.invert), outbound: get_outbound(cfg.outbound), - action: (cfg.server === 'block-dns') ? 'reject' : 'route', + action: cfg.action, server: get_resolver(cfg.server), - disable_cache: (cfg.dns_disable_cache === '1') || null, + strategy: cfg.domain_strategy, + disable_cache: strToBool(cfg.dns_disable_cache), rewrite_ttl: strToInt(cfg.rewrite_ttl), - client_subnet: cfg.client_subnet - + client_subnet: cfg.client_subnet, + method: cfg.reject_method, + no_drop: strToBool(cfg.reject_no_drop), + rcode: cfg.predefined_rcode, + answer: cfg.predefined_answer, + ns: cfg.predefined_ns, + extra: cfg.predefined_extra }); }); @@ -572,9 +598,9 @@ push(config.inbounds, { tag: 'mixed-in', listen: '::', listen_port: int(mixed_port), - udp_timeout: udp_timeout ? (udp_timeout + 's') : null, + udp_timeout: strToTime(udp_timeout), sniff: true, - sniff_override_destination: (sniff_override === '1'), + sniff_override_destination: strToBool(sniff_override), set_system_proxy: false }); @@ -586,7 +612,7 @@ if (match(proxy_mode, /redirect/)) listen: '::', listen_port: int(redirect_port), sniff: true, - sniff_override_destination: (sniff_override === '1') + sniff_override_destination: strToBool(sniff_override) }); if (match(proxy_mode, /tproxy/)) push(config.inbounds, { @@ -596,9 +622,9 @@ if (match(proxy_mode, /tproxy/)) listen: '::', listen_port: int(tproxy_port), network: 'udp', - udp_timeout: udp_timeout ? (udp_timeout + 's') : null, + udp_timeout: strToTime(udp_timeout), sniff: true, - sniff_override_destination: (sniff_override === '1') + sniff_override_destination: strToBool(sniff_override) }); if (match(proxy_mode, /tun/)) push(config.inbounds, { @@ -610,10 +636,10 @@ if (match(proxy_mode, /tun/)) mtu: strToInt(tun_mtu), auto_route: false, endpoint_independent_nat: strToBool(endpoint_independent_nat), - udp_timeout: udp_timeout ? (udp_timeout + 's') : null, + udp_timeout: strToTime(udp_timeout), stack: tcpip_stack, sniff: true, - sniff_override_destination: (sniff_override === '1') + sniff_override_destination: strToBool(sniff_override) }); /* Inbound end */ @@ -646,7 +672,7 @@ if (!isEmpty(main_node)) { type: 'urltest', tag: 'main-out', outbounds: map(main_urltest_nodes, (k) => `cfg-${k}-out`), - interval: main_urltest_interval ? (main_urltest_interval + 's') : null, + interval: strToTime(main_urltest_interval), tolerance: strToInt(main_urltest_tolerance), idle_timeout: (strToInt(main_urltest_interval) > 1800) ? `${main_urltest_interval * 2}s` : null, }); @@ -658,7 +684,6 @@ if (!isEmpty(main_node)) { config.endpoints[length(config.endpoints)-1].tag = 'main-out'; } else { push(config.outbounds, generate_outbound(main_node_cfg)); - config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null; config.outbounds[length(config.outbounds)-1].tag = 'main-out'; } } @@ -672,7 +697,7 @@ if (!isEmpty(main_node)) { type: 'urltest', tag: 'main-udp-out', outbounds: map(main_udp_urltest_nodes, (k) => `cfg-${k}-out`), - interval: main_udp_urltest_interval ? (main_udp_urltest_interval + 's') : null, + interval: strToTime(main_udp_urltest_interval), tolerance: strToInt(main_udp_urltest_tolerance), idle_timeout: (strToInt(main_udp_urltest_interval) > 1800) ? `${main_udp_urltest_interval * 2}s` : null, }); @@ -681,11 +706,9 @@ if (!isEmpty(main_node)) { const main_udp_node_cfg = uci.get_all(uciconfig, main_udp_node) || {}; if (main_udp_node_cfg.type === 'wireguard') { push(config.endpoints, generate_endpoint(main_udp_node_cfg)); - config.endpoints[length(config.endpoints)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null; config.endpoints[length(config.endpoints)-1].tag = 'main-udp-out'; } else { push(config.outbounds, generate_outbound(main_udp_node_cfg)); - config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null; config.outbounds[length(config.outbounds)-1].tag = 'main-udp-out'; } } @@ -694,11 +717,9 @@ if (!isEmpty(main_node)) { const urltest_node = uci.get_all(uciconfig, i) || {}; if (urltest_node.type === 'wireguard') { push(config.endpoints, generate_endpoint(urltest_node)); - config.endpoints[length(config.endpoints)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null; config.endpoints[length(config.endpoints)-1].tag = 'cfg-' + i + '-out'; } else { push(config.outbounds, generate_outbound(urltest_node)); - config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null; config.outbounds[length(config.outbounds)-1].tag = 'cfg-' + i + '-out'; } } @@ -716,24 +737,32 @@ if (!isEmpty(main_node)) { tag: 'cfg-' + cfg['.name'] + '-out', outbounds: map(cfg.urltest_nodes, (k) => `cfg-${k}-out`), url: cfg.urltest_url, - interval: cfg.urltest_interval ? (cfg.urltest_interval + 's') : null, + interval: strToTime(cfg.urltest_interval), tolerance: strToInt(cfg.urltest_tolerance), - idle_timeout: cfg.urltest_idle_timeout ? (cfg.urltest_idle_timeout + 's') : null, - interrupt_exist_connections: (cfg.urltest_interrupt_exist_connections === '1') + idle_timeout: strToTime(cfg.urltest_idle_timeout), + interrupt_exist_connections: strToBool(cfg.urltest_interrupt_exist_connections) }); urltest_nodes = [...urltest_nodes, ...filter(cfg.urltest_nodes, (l) => !~index(urltest_nodes, l))]; } else { const outbound = uci.get_all(uciconfig, cfg.node) || {}; if (outbound.type === 'wireguard') { push(config.endpoints, generate_endpoint(outbound)); - config.endpoints[length(config.endpoints)-1].domain_strategy = cfg.domain_strategy; config.endpoints[length(config.endpoints)-1].bind_interface = cfg.bind_interface; config.endpoints[length(config.endpoints)-1].detour = get_outbound(cfg.outbound); + if (cfg.domain_resolver || cfg.domain_strategy) + config.endpoints[length(config.endpoints)-1].domain_resolver = { + server: get_resolver(cfg.domain_resolver || default_outbound_dns), + strategy: cfg.domain_strategy + }; } else { push(config.outbounds, generate_outbound(outbound)); - config.outbounds[length(config.outbounds)-1].domain_strategy = cfg.domain_strategy; config.outbounds[length(config.outbounds)-1].bind_interface = cfg.bind_interface; config.outbounds[length(config.outbounds)-1].detour = get_outbound(cfg.outbound); + if (cfg.domain_resolver || cfg.domain_strategy) + config.outbounds[length(config.outbounds)-1].domain_resolver = { + server: get_resolver(cfg.domain_resolver || default_outbound_dns), + strategy: cfg.domain_strategy + }; } push(routing_nodes, cfg.node); } @@ -774,6 +803,13 @@ config.route = { /* Routing rules */ if (!isEmpty(main_node)) { + /* Avoid DNS loop */ + config.route.default_domain_resolver = { + action: 'route', + server: 'default-dns', + strategy: (ipv6_support !== '1') ? 'prefer_ipv4' : null + }; + /* Direct list */ if (length(direct_domain_list)) push(config.route.rules, { @@ -844,6 +880,11 @@ if (!isEmpty(main_node)) { if (isEmpty(config.route.rule_set)) config.route.rule_set = null; } else if (!isEmpty(default_outbound)) { + config.route.default_domain_resolver = { + action: 'resolve', + server: get_resolver(default_outbound_dns) + }; + if (domain_strategy) push(config.route.rules, { action: 'resolve', @@ -863,9 +904,9 @@ if (!isEmpty(main_node)) { domain_keyword: cfg.domain_keyword, domain_regex: cfg.domain_regex, source_ip_cidr: cfg.source_ip_cidr, - source_ip_is_private: (cfg.source_ip_is_private === '1') || null, + source_ip_is_private: strToBool(cfg.source_ip_is_private), ip_cidr: cfg.ip_cidr, - ip_is_private: (cfg.ip_is_private === '1') || null, + ip_is_private: strToBool(cfg.ip_is_private), source_port: parse_port(cfg.source_port), source_port_range: cfg.source_port_range, port: parse_port(cfg.port), @@ -875,13 +916,19 @@ if (!isEmpty(main_node)) { process_path_regex: cfg.process_path_regex, user: cfg.user, rule_set: get_ruleset(cfg.rule_set), - rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null, - rule_set_ip_cidr_accept_empty: (cfg.rule_set_ip_cidr_accept_empty === '1') || null, - invert: (cfg.invert === '1') || null, - action: (cfg.outbound === 'block-out') ? 'reject' : 'route', + rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source), + rule_set_ip_cidr_accept_empty: strToBool(cfg.rule_set_ip_cidr_accept_empty), + invert: strToBool(cfg.invert), + action: cfg.action, + outbound: get_outbound(cfg.outbound), override_address: cfg.override_address, override_port: strToInt(cfg.override_port), - outbound: get_outbound(cfg.outbound), + udp_disable_domain_unmapping: strToBool(cfg.udp_disable_domain_unmapping), + udp_connect: strToBool(cfg.udp_connect), + udp_timeout: strToTime(cfg.udp_timeout), + tls_fragment: strToBool(cfg.tls_fragment), + tls_fragment_fallback_delay: strToTime(cfg.tls_fragment_fallback_delay), + tls_record_fragment: strToBool(cfg.tls_record_fragment) }); }); @@ -911,8 +958,8 @@ if (routing_mode in ['bypass_mainland_china', 'custom']) { cache_file: { enabled: true, path: RUN_DIR + '/cache.db', - store_rdrc: (cache_file_store_rdrc === '1') || null, - rdrc_timeout: cache_file_rdrc_timeout ? (cache_file_rdrc_timeout + 's') : null, + store_rdrc: strToBool(cache_file_store_rdrc), + rdrc_timeout: strToTime(cache_file_rdrc_timeout), } }; } diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc index 6f5158d..4988aee 100755 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_server.uc @@ -11,7 +11,7 @@ import { writefile } from 'fs'; import { cursor } from 'uci'; import { - isEmpty, strToBool, strToInt, + isEmpty, strToBool, strToInt, strToTime, removeBlankAttrs, HP_DIR, RUN_DIR } from 'homeproxy'; @@ -45,12 +45,17 @@ uci.foreach(uciconfig, uciserver, (cfg) => { listen: cfg.address || '::', listen_port: strToInt(cfg.port), + bind_interface: cfg.bind_interface, + reuse_addr: strToBool(cfg.reuse_addr), tcp_fast_open: strToBool(cfg.tcp_fast_open), tcp_multi_path: strToBool(cfg.tcp_multi_path), udp_fragment: strToBool(cfg.udp_fragment), - udp_timeout: cfg.udp_timeout ? (cfg.udp_timeout + 's') : null, + udp_timeout: strToTime(cfg.udp_timeout), network: cfg.network, + /* AnyTLS */ + padding_scheme: cfg.anytls_padding_scheme, + /* Hysteria */ up_mbps: strToInt(cfg.hysteria_up_mbps), down_mbps: strToInt(cfg.hysteria_down_mbps), @@ -71,11 +76,11 @@ uci.foreach(uciconfig, uciserver, (cfg) => { /* Tuic */ congestion_control: cfg.tuic_congestion_control, - auth_timeout: cfg.tuic_auth_timeout ? (cfg.tuic_auth_timeout + 's') : null, + auth_timeout: strToTime(cfg.tuic_auth_timeout), zero_rtt_handshake: strToBool(cfg.tuic_enable_zero_rtt), - heartbeat: cfg.tuic_heartbeat ? (cfg.tuic_heartbeat + 's') : null, + heartbeat: strToTime(cfg.tuic_heartbeat), - /* HTTP / Hysteria (2) / Mixed / Socks / Trojan / Tuic / VLESS / VMess */ + /* AnyTLS / HTTP / Hysteria (2) / Mixed / Socks / Trojan / Tuic / VLESS / VMess */ users: (cfg.type !== 'shadowsocks') ? [ { name: !(cfg.type in ['http', 'mixed', 'naive', 'socks']) ? 'cfg-' + cfg['.name'] + '-server' : null, @@ -97,7 +102,7 @@ uci.foreach(uciconfig, uciserver, (cfg) => { multiplex: (cfg.multiplex === '1') ? { enabled: true, - padding: (cfg.multiplex_padding === '1'), + padding: strToBool(cfg.multiplex_padding), brutal: (cfg.multiplex_brutal === '1') ? { enabled: true, up_mbps: strToInt(cfg.multiplex_brutal_up), @@ -120,8 +125,8 @@ uci.foreach(uciconfig, uciserver, (cfg) => { default_server_name: cfg.tls_acme_dsn, email: cfg.tls_acme_email, provider: cfg.tls_acme_provider, - disable_http_challenge: (cfg.tls_acme_dhc === '1'), - disable_tls_alpn_challenge: (cfg.tls_acme_dtac === '1'), + disable_http_challenge: strToBool(cfg.tls_acme_dhc), + disable_tls_alpn_challenge: (cfg.tls_acme_dtac), alternative_http_port: strToInt(cfg.tls_acme_ahp), alternative_tls_port: strToInt(cfg.tls_acme_atp), external_account: (cfg.tls_acme_external_account === '1') ? { @@ -145,7 +150,7 @@ uci.foreach(uciconfig, uciserver, (cfg) => { enabled: true, private_key: cfg.tls_reality_private_key, short_id: cfg.tls_reality_short_id, - max_time_difference: cfg.tls_reality_max_time_difference ? (cfg.max_time_difference + 's') : null, + max_time_difference: strToTime(cfg.tls_reality_max_time_difference), handshake: { server: cfg.tls_reality_server_addr, server_port: strToInt(cfg.tls_reality_server_port) @@ -164,8 +169,8 @@ uci.foreach(uciconfig, uciserver, (cfg) => { max_early_data: strToInt(cfg.websocket_early_data), early_data_header_name: cfg.websocket_early_data_header, service_name: cfg.grpc_servicename, - idle_timeout: cfg.http_idle_timeout ? (cfg.http_idle_timeout + 's') : null, - ping_timeout: cfg.http_ping_timeout ? (cfg.http_ping_timeout + 's') : null + idle_timeout: strToTime(cfg.http_idle_timeout), + ping_timeout: strToTime(cfg.http_ping_timeout) } : null }); }); diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc index 3f7cb2b..b883ee0 100644 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/homeproxy.uc @@ -52,14 +52,6 @@ export function executeCommand(...args) { }; }; -export function calcStringMD5(str) { - if (!str || type(str) !== 'string') - return null; - - const output = executeCommand(`/bin/echo -n ${shellQuote(str)} | /usr/bin/md5sum | /usr/bin/awk '{print $1}'`) || {}; - return trim(output.stdout); -}; - export function getTime(epoch) { const local_time = localtime(epoch); return replace(replace(sprintf( @@ -99,6 +91,10 @@ export function strToInt(str) { return !isEmpty(str) ? (int(str) || null) : null; }; +export function strToTime(str) { + return str ? (str + 's') : null; +}; + export function removeBlankAttrs(res) { let content; diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc index aa1c427..e9f8741 100755 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/migrate_config.uc @@ -8,7 +8,7 @@ 'use strict'; import { cursor } from 'uci'; -import { isEmpty } from 'homeproxy'; +import { isEmpty, parseURL } from 'homeproxy'; const uci = cursor(); @@ -20,6 +20,7 @@ const uciinfra = 'infra', ucimain = 'config', ucinode = 'node', ucidns = 'dns', + ucidnsserver = 'dns_server', ucidnsrule = 'dns_rule', ucirouting = 'routing', uciroutingnode = 'routing_node', @@ -72,11 +73,122 @@ if (uci.get(uciconfig, ucimain, 'routing_port') === 'all') if (uci.get(uciconfig, 'experimental')) uci.delete(uciconfig, 'experimental'); +/* block-dns was removed from built-in dns servers */ +const default_dns_server = uci.get(uciconfig, ucidns, 'default_server'); +if (default_dns_server === 'block-dns') { + /* append a rule at last to block all DNS queries */ + uci.set(uciconfig, '_migration_dns_final_block', ucidnsrule); + uci.set(uciconfig, '_migration_dns_final_block', 'label', 'migration_final_block_dns'); + uci.set(uciconfig, '_migration_dns_final_block', 'enabled', '1'); + uci.set(uciconfig, '_migration_dns_final_block', 'mode', 'default'); + uci.set(uciconfig, '_migration_dns_final_block', 'action', 'reject'); + uci.set(uciconfig, ucidns, 'default_server', 'default-dns'); +} + +const dns_server_migration = {}; +/* DNS servers options */ +uci.foreach(uciconfig, ucidnsserver, (cfg) => { + /* legacy format was deprecated in sb 1.12 */ + if (cfg.address) { + const addr = parseURL((!match(cfg.address, /:\/\//) ? 'udp://' : '') + cfg.address); + /* RCode was moved into DNS rules */ + if (addr.protocol === 'rcode') { + dns_server_migration[cfg['.name']] = { action: 'predefined' }; + switch (addr.hostname) { + case 'success': + dns_server_migration[cfg['.name']].rcode = 'NOERROR'; + break; + case 'format_error': + dns_server_migration[cfg['.name']].rcode = 'FORMERR'; + break; + case 'server_failure': + dns_server_migration[cfg['.name']].rcode = 'SERVFAIL'; + break; + case 'name_error': + dns_server_migration[cfg['.name']].rcode = 'NXDOMAIN'; + break; + case 'not_implemented': + dns_server_migration[cfg['.name']].rcode = 'NOTIMP'; + break; + case 'refused': + default: + dns_server_migration[cfg['.name']].rcode = 'REFUSED'; + break; + } + + uci.delete(uciconfig, cfg['.name']); + return; + } + uci.set(uciconfig, cfg['.name'], 'type', addr.protocol); + uci.set(uciconfig, cfg['.name'], 'server', addr.hostname); + uci.set(uciconfig, cfg['.name'], 'server_port', addr.port); + uci.set(uciconfig, cfg['.name'], 'path', (addr.pathname !== '/') ? addr.pathname : null); + uci.delete(uciconfig, cfg['.name'], 'address'); + } + + if (cfg.strategy) { + if (cfg['.name'] === default_dns_server) + uci.set(uciconfig, ucidns, 'default_strategy', cfg.strategy); + dns_server_migration[cfg['.name']] = { strategy: cfg.strategy }; + uci.delete(uciconfig, cfg['.name'], 'strategy'); + } + + if (cfg.client_subnet) { + if (cfg['.name'] === default_dns_server) + uci.set(uciconfig, ucidns, 'client_subnet', cfg.client_subnet); + + if (isEmpty(dns_server_migration[cfg['.name']])) + dns_server_migration[cfg['.name']] = {}; + dns_server_migration[cfg['.name']].client_subnet = cfg.client_subnet; + uci.delete(uciconfig, cfg['.name'], 'client_subnet'); + } +}); + /* DNS rules options */ uci.foreach(uciconfig, ucidnsrule, (cfg) => { + /* outbound was removed in sb 1.12 */ + if (cfg.outbound) { + uci.delete(uciconfig, cfg['.name']); + if (!cfg.enabled) + return; + + map(cfg.outbound, (outbound) => { + switch (outbound) { + case 'direct-out': + case 'block-out': + break; + case 'any-out': + uci.set(uciconfig, ucirouting, 'default_outbound_dns', cfg.server); + break; + default: + uci.set(uciconfig, cfg.outbound, 'domain_resolver', cfg.server); + break; + } + }); + + return; + } + /* rule_set_ipcidr_match_source was renamed in sb 1.10 */ if (cfg.rule_set_ipcidr_match_source === '1') uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source'); + + /* block-dns was moved into action in sb 1.11 */ + if (cfg.server === 'block-dns') { + uci.set(uciconfig, cfg['.name'], 'action', 'reject'); + uci.delete(uciconfig, cfg['.name'], 'server'); + } else if (!cfg.action) { + /* add missing 'action' field */ + uci.set(uciconfig, cfg['.name'], 'action', 'route'); + } + + /* strategy and client_subnet were moved into dns rules */ + if (dns_server_migration[cfg.server]) { + if (dns_server_migration[cfg.server].strategy) + uci.set(uciconfig, cfg['.name'], 'strategy', dns_server_migration[cfg.server].strategy); + if (dns_server_migration[cfg.server].client_subnet) + uci.set(uciconfig, cfg['.name'], 'client_subnet', dns_server_migration[cfg.server].client_subnet); + } }); /* nodes options */ @@ -95,6 +207,15 @@ uci.foreach(uciconfig, uciroutingrule, (cfg) => { /* rule_set_ipcidr_match_source was renamed in sb 1.10 */ if (cfg.rule_set_ipcidr_match_source === '1') uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source'); + + /* block-out was moved into action in sb 1.11 */ + if (cfg.outbound === 'block-out') { + uci.set(uciconfig, cfg['.name'], 'action', 'reject'); + uci.delete(uciconfig, cfg['.name'], 'outbound'); + } else if (!cfg.action) { + /* add missing 'action' field */ + uci.set(uciconfig, cfg['.name'], 'action', 'route'); + } }); /* server options */ diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc index 2a73309..97b6778 100755 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc @@ -7,6 +7,7 @@ 'use strict'; +import { md5 } from 'digest'; import { open } from 'fs'; import { connect } from 'ubus'; import { cursor } from 'uci'; @@ -15,9 +16,8 @@ import { urldecode, urlencode } from 'luci.http'; import { init_action } from 'luci.sys'; import { - calcStringMD5, wGET, decodeBase64Str, - getTime, isEmpty, parseURL, validation, - HP_DIR, RUN_DIR + wGET, decodeBase64Str, getTime, isEmpty, parseURL, + validation, HP_DIR, RUN_DIR } from 'homeproxy'; /* UCI config start */ @@ -101,6 +101,23 @@ function parse_uri(uri) { uri = split(trim(uri), '://'); switch (uri[0]) { + case 'anytls': + /* https://github.com/anytls/anytls-go/blob/v0.0.8/docs/uri_scheme.md */ + url = parseURL('http://' + uri[1]) || {}; + params = url.searchParams || {}; + + config = { + label: url.hash ? urldecode(url.hash) : null, + type: 'anytls', + address: url.hostname, + port: url.port, + password: urldecode(url.username), + tls: '1', + tls_sni: params.sni, + tls_insecure: (params.insecure === '1') ? '1' : '0' + }; + + break; case 'http': case 'https': url = parseURL('http://' + uri[1]) || {}; @@ -464,7 +481,7 @@ function main() { for (let url in subscription_urls) { url = replace(url, /#.*$/, ''); - const groupHash = calcStringMD5(url); + const groupHash = md5(url); node_cache[groupHash] = {}; const res = wGET(url, user_agent); @@ -495,8 +512,8 @@ function main() { const label = config.label; config.label = null; - const confHash = calcStringMD5(sprintf('%J', config)), - nameHash = calcStringMD5(label); + const confHash = md5(sprintf('%J', config)), + nameHash = md5(label); config.label = label; if (filter_check(config.label)) @@ -566,7 +583,7 @@ function main() { if (node.isExisting) return null; - const nameHash = calcStringMD5(node.label); + const nameHash = md5(node.label); uci.set(uciconfig, nameHash, 'node'); map(keys(node), (v) => uci.set(uciconfig, nameHash, v, node[v])); diff --git a/luci-app-homeproxy/root/etc/init.d/homeproxy b/luci-app-homeproxy/root/etc/init.d/homeproxy index 888bba7..3167775 100755 --- a/luci-app-homeproxy/root/etc/init.d/homeproxy +++ b/luci-app-homeproxy/root/etc/init.d/homeproxy @@ -250,7 +250,7 @@ start_service() { [ "$outbound_node" = "nil" ] || utpl -S "$HP_DIR/scripts/firewall_post.ut" > "$RUN_DIR/fw4_post.nft" fw4 reload >"/dev/null" 2>&1 - log "$(sing-box version | awk 'NR==1{print $1,$3}') started." + log "sing-box $(sing-box version -n) started." } stop_service() { diff --git a/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json b/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json index 580d08d..f551c22 100644 --- a/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json +++ b/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json @@ -16,8 +16,6 @@ "/etc/nikki/run/config.yaml": ["read"], "/etc/nikki/run/providers/rule/*": ["read"], "/etc/nikki/run/providers/proxy/*": ["read"], - "/etc/nikki/nftables/reserved_ip.nft": ["read"], - "/etc/nikki/nftables/reserved_ip6.nft": ["read"], "/var/log/nikki/*.log": ["read"] } }, @@ -32,8 +30,6 @@ "/etc/nikki/run/config.yaml": ["write"], "/etc/nikki/run/providers/rule/*": ["write"], "/etc/nikki/run/providers/proxy/*": ["write"], - "/etc/nikki/nftables/reserved_ip.nft": ["write"], - "/etc/nikki/nftables/reserved_ip6.nft": ["write"], "/var/log/nikki/*.log": ["write"] } } diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua index 2d62b8d..831941c 100644 --- a/luci-app-passwall/luasrc/controller/passwall.lua +++ b/luci-app-passwall/luasrc/controller/passwall.lua @@ -448,6 +448,9 @@ function clear_all_nodes() end) uci:foreach(appname, "subscribe_list", function(t) uci:delete(appname, t[".name"], "md5") + uci:delete(appname, t[".name"], "chain_proxy") + uci:delete(appname, t[".name"], "preproxy_node") + uci:delete(appname, t[".name"], "to_node") end) api.uci_save(uci, appname, true, true) @@ -518,6 +521,16 @@ function delete_select_nodes() uci:delete(appname, t[".name"], "fallback_node") end end) + uci:foreach(appname, "subscribe_list", function(t) + if t["preproxy_node"] == w then + uci:delete(appname, t[".name"], "preproxy_node") + uci:delete(appname, t[".name"], "chain_proxy") + end + if t["to_node"] == w then + uci:delete(appname, t[".name"], "to_node") + uci:delete(appname, t[".name"], "chain_proxy") + end + end) if (uci:get(appname, w, "add_mode") or "0") == "2" then local add_from = uci:get(appname, w, "add_from") or "" if add_from ~= "" then @@ -633,20 +646,29 @@ function create_backup() end function restore_backup() + local result = { status = "error", message = "unknown error" } local ok, err = pcall(function() local filename = http.formvalue("filename") local chunk = http.formvalue("chunk") local chunk_index = tonumber(http.formvalue("chunk_index") or "-1") local total_chunks = tonumber(http.formvalue("total_chunks") or "-1") - if not filename or not chunk then - http_write_json({ status = "error", message = "Missing filename or chunk" }) + if not filename then + result = { status = "error", message = "Missing filename" } + return + end + if not chunk then + result = { status = "error", message = "Missing chunk data" } return end local file_path = "/tmp/" .. filename local decoded = nixio.bin.b64decode(chunk) + if not decoded then + result = { status = "error", message = "Base64 decode failed" } + return + end local fp = io.open(file_path, "a+") if not fp then - http_write_json({ status = "error", message = "Failed to open file for writing: " .. file_path }) + result = { status = "error", message = "Failed to open file: " .. file_path } return end fp:write(decoded) @@ -667,19 +689,21 @@ function restore_backup() api.log(" * 重启 PassWall 服务中…\n") luci.sys.call('/etc/init.d/passwall restart > /dev/null 2>&1 &') luci.sys.call('/etc/init.d/passwall_server restart > /dev/null 2>&1 &') + result = { status = "success", message = "Upload completed", path = file_path } else api.log(" * PassWall 配置文件解压失败,请重试!") + result = { status = "error", message = "Decompression failed" } end luci.sys.call("rm -rf " .. temp_dir) fs.remove(file_path) - http_write_json({ status = "success", message = "Upload completed", path = file_path }) else - http_write_json({ status = "success", message = "Chunk received" }) + result = { status = "success", message = "Chunk received" } end end) if not ok then - http_write_json({ status = "error", message = tostring(err) }) + result = { status = "error", message = tostring(err) } end + http_write_json(result) end function geo_view() diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua index 49aa9e6..1811aa3 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua @@ -91,6 +91,16 @@ function s.remove(e, t) m:del(s[".name"], "fallback_node") end end) + m.uci:foreach(appname, "subscribe_list", function(s) + if s["preproxy_node"] == t then + m:del(s[".name"], "preproxy_node") + m:del(s[".name"], "chain_proxy") + end + if s["to_node"] == t then + m:del(s[".name"], "to_node") + m:del(s[".name"], "chain_proxy") + end + end) if (m:get(t, "add_mode") or "0") == "2" then local add_from = m:get(t, "add_from") or "" if add_from ~= "" then diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua index c4c57a3..7d6edd2 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua @@ -56,6 +56,18 @@ if has_hysteria2 then local s = "hysteria2" table.insert(hysteria2_type, s) end +local nodes_table = {} +for k, e in ipairs(api.get_valid_nodes()) do + if e.node_type == "normal" then + nodes_table[#nodes_table + 1] = { + id = e[".name"], + remark = e["remark"], + type = e["type"], + add_mode = e["add_mode"], + chain_proxy = e["chain_proxy"] + } + end +end s = m:section(NamedSection, arg[1]) s.addremove = false @@ -210,4 +222,29 @@ o:value("curl", "Curl") o:value("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0", "Edge for Linux") o:value("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0", "Edge for Windows") +o = s:option(ListValue, "chain_proxy", translate("Chain Proxy")) +o:value("", translate("Close(Not use)")) +o:value("1", translate("Preproxy Node")) +o:value("2", translate("Landing Node")) + +local descrStr = "Chained proxy works only with Xray or Sing-box nodes.
" +descrStr = descrStr .. "The chained node must be the same type as your subscription node (Xray with Xray, Sing-box with Sing-box).
" +descrStr = descrStr .. "You can only use manual or imported nodes as chained nodes." +descrStr = translate(descrStr) .. "
" .. translate("Only support a layer of proxy.") + +o = s:option(ListValue, "preproxy_node", translate("Preproxy Node")) +o:depends({ ["chain_proxy"] = "1" }) +o.description = descrStr + +o = s:option(ListValue, "to_node", translate("Landing Node")) +o:depends({ ["chain_proxy"] = "2" }) +o.description = descrStr + +for k, v in pairs(nodes_table) do + if (v.type == "Xray" or v.type == "sing-box") and (not v.chain_proxy or v.chain_proxy == "") and v.add_mode ~= "2" then + s.fields["preproxy_node"]:value(v.id, v.remark) + s.fields["to_node"]:value(v.id, v.remark) + end +end + return m diff --git a/luci-app-passwall/luasrc/view/passwall/global/backup.htm b/luci-app-passwall/luasrc/view/passwall/global/backup.htm index c0d2e76..918417c 100644 --- a/luci-app-passwall/luasrc/view/passwall/global/backup.htm +++ b/luci-app-passwall/luasrc/view/passwall/global/backup.htm @@ -184,7 +184,6 @@ local api = require "luci.passwall.api" const chunk = base64Data.substring(currentChunk * chunkSize, (currentChunk + 1) * chunkSize); const xhr = new XMLHttpRequest(); xhr.open("POST", '<%= api.url("restore_backup") %>', true); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { @@ -203,12 +202,12 @@ local api = require "luci.passwall.api" } } }; - xhr.send( - "filename=" + encodeURIComponent(file.name) + - "&chunk=" + encodeURIComponent(chunk) + - "&chunk_index=" + currentChunk + - "&total_chunks=" + totalChunks - ); + const formData = new FormData(); + formData.append("filename", file.name); + formData.append("chunk", chunk); + formData.append("chunk_index", currentChunk); + formData.append("total_chunks", totalChunks); + xhr.send(formData); } else { //alert("Upload completed."); document.getElementById("upload-btn").value = "<%:UL Restore%>"; diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po index 3c2e153..0e0ecfd 100644 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ b/luci-app-passwall/po/zh-cn/passwall.po @@ -1795,6 +1795,15 @@ msgstr "落地节点" msgid "Only support a layer of proxy." msgstr "仅支持一层代理。" +msgid "" +"Chained proxy works only with Xray or Sing-box nodes.
" +"The chained node must be the same type as your subscription node (Xray with Xray, Sing-box with Sing-box).
" +"You can only use manual or imported nodes as chained nodes." +msgstr "" +"链式代理仅支持 Xray 与 Sing-box 节点。
" +"链式节点需与订阅节点类型一致(Xray 对应 Xray,Sing-box 对应 Sing-box)。
" +"仅支持手动添加或导入的节点用作链式节点。" + msgid "Only work with using the %s node." msgstr "与使用 %s 节点时生效。" diff --git a/luci-app-passwall/root/usr/share/passwall/subscribe.lua b/luci-app-passwall/root/usr/share/passwall/subscribe.lua index a30608c..ab23df1 100755 --- a/luci-app-passwall/root/usr/share/passwall/subscribe.lua +++ b/luci-app-passwall/root/usr/share/passwall/subscribe.lua @@ -36,6 +36,7 @@ local vless_type_default = uci:get(appname, "@global_subscribe[0]", "vless_type" local hysteria2_type_default = uci:get(appname, "@global_subscribe[0]", "hysteria2_type") or "hysteria2" local domain_strategy_default = uci:get(appname, "@global_subscribe[0]", "domain_strategy") or "" local domain_strategy_node = "" +local preproxy_node_group, to_node_group, chain_node_type = "", "", "" -- 判断是否过滤节点关键字 local filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0" local filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {} @@ -1714,6 +1715,16 @@ local function update_node(manual) if kkk == "type" and vvv == "sing-box" then uci:set(appname, cfgid, "domain_strategy", domain_strategy_node) end + -- 订阅组链式代理 + if chain_node_type ~= "" and kkk == "type" and vvv == chain_node_type then + if preproxy_node_group ~="" then + uci:set(appname, cfgid, "chain_proxy", "1") + uci:set(appname, cfgid, "preproxy_node", preproxy_node_group) + elseif to_node_group ~= "" then + uci:set(appname, cfgid, "chain_proxy", "2") + uci:set(appname, cfgid, "to_node", to_node_group) + end + end end end end @@ -1916,6 +1927,22 @@ local execute = function() else domain_strategy_node = domain_strategy_default end + + -- 订阅组链式代理 + local function valid_chain_node(node) + if not node then return "" end + local cp = uci:get(appname, node, "chain_proxy") or "" + local am = uci:get(appname, node, "add_mode") or "0" + chain_node_type = (cp == "" and am ~= "2") and (uci:get(appname, node, "type") or "") or "" + if chain_node_type ~= "Xray" and chain_node_type ~= "sing-box" then + chain_node_type = "" + return "" + end + return node + end + preproxy_node_group = (value.chain_proxy == "1") and valid_chain_node(value.preproxy_node) or "" + to_node_group = (value.chain_proxy == "2") and valid_chain_node(value.to_node) or "" + local ua = value.user_agent local access_mode = value.access_mode local result = (not access_mode) and "自动" or (access_mode == "direct" and "直连访问" or (access_mode == "proxy" and "通过代理" or "自动")) diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index 721c9ae..7589c39 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=25.8.9 +PKG_VERSION:=25.8.22 PKG_RELEASE:=1 PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua index 7b6bd7d..e8d5473 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua @@ -30,6 +30,11 @@ o = s:option(Value, _n("hop"), translate("Port hopping range")) o.description = translate("Format as 1000:2000 or 1000-2000 Multiple groups are separated by commas (,).") o.rewrite_option = o.option +o = s:option(Value, _n("hop_interval"), translate("Hop Interval"), translate("Example:") .. "30s (≥5s)") +o.placeholder = "30s" +o.default = "30s" +o.rewrite_option = o.option + o = s:option(Value, _n("obfs"), translate("Obfs Password")) o.rewrite_option = o.option @@ -54,9 +59,6 @@ o.rewrite_option = o.option o = s:option(Value, _n("down_mbps"), translate("Max download Mbps")) o.rewrite_option = o.option -o = s:option(Value, _n("hop_interval"), translate("Hop Interval"), translate("Example:") .. "30s (≥5s)") -o.rewrite_option = o.option - o = s:option(Value, _n("recv_window"), translate("QUIC stream receive window")) o.rewrite_option = o.option diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 73f25b3..125dac4 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -61,7 +61,8 @@ for k, e in ipairs(api.get_valid_nodes()) do nodes_table[#nodes_table + 1] = { id = e[".name"], remark = e["remark"], - type = e["type"] + type = e["type"], + chain_proxy = e["chain_proxy"] } end if e.protocol == "_balancing" then @@ -337,6 +338,7 @@ o.default = "" o:value("", translate("Disable")) o:value("xtls-rprx-vision") o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" }) +o:depends({ [_n("protocol")] = "trojan", [_n("tls")] = true, [_n("transport")] = "raw" }) o = s:option(Flag, _n("tls"), translate("TLS")) o.default = 0 @@ -392,6 +394,13 @@ o.validate = function(self, value) return api.trim(value:gsub("[\r\n]", "")) end +o = s:option(ListValue, _n("ech_ForceQuery"), translate("ECH Query Policy"), translate("Controls the policy used when performing DNS queries for ECH configuration.")) +o.default = "none" +o:value("none") +o:value("half") +o:value("full") +o:depends({ [_n("ech")] = true }) + -- [[ REALITY部分 ]] -- o = s:option(Value, _n("reality_publicKey"), translate("Public Key")) o:depends({ [_n("tls")] = true, [_n("reality")] = true }) @@ -696,7 +705,7 @@ o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Onl o:depends({ [_n("chain_proxy")] = "2" }) for k, v in pairs(nodes_table) do - if v.type == "Xray" and v.id ~= arg[1] then + if v.type == "Xray" and v.id ~= arg[1] and (not v.chain_proxy or v.chain_proxy == "") then s.fields[_n("preproxy_node")]:value(v.id, v.remark) s.fields[_n("to_node")]:value(v.id, v.remark) end diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index 998e689..13f2f7c 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -81,7 +81,8 @@ for k, e in ipairs(api.get_valid_nodes()) do nodes_table[#nodes_table + 1] = { id = e[".name"], remark = e["remark"], - type = e["type"] + type = e["type"], + chain_proxy = e["chain_proxy"] } end if e.protocol == "_iface" then @@ -339,12 +340,18 @@ o.default = "" o:value("", translate("Disable")) o:value("xtls-rprx-vision") o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true }) +o:depends({ [_n("protocol")] = "trojan", [_n("tls")] = true }) if singbox_tags:find("with_quic") then o = s:option(Value, _n("hysteria_hop"), translate("Port hopping range")) o.description = translate("Format as 1000:2000 or 1000-2000 Multiple groups are separated by commas (,).") o:depends({ [_n("protocol")] = "hysteria" }) + o = s:option(Value, _n("hysteria_hop_interval"), translate("Hop Interval"), translate("Example:") .. "30s (≥5s)") + o.placeholder = "30s" + o.default = "30s" + o:depends({ [_n("protocol")] = "hysteria" }) + o = s:option(Value, _n("hysteria_obfs"), translate("Obfs Password")) o:depends({ [_n("protocol")] = "hysteria" }) @@ -425,6 +432,11 @@ if singbox_tags:find("with_quic") then o.description = translate("Format as 1000:2000 or 1000-2000 Multiple groups are separated by commas (,).") o:depends({ [_n("protocol")] = "hysteria2" }) + o = s:option(Value, _n("hysteria2_hop_interval"), translate("Hop Interval"), translate("Example:") .. "30s (≥5s)") + o.placeholder = "30s" + o.default = "30s" + o:depends({ [_n("protocol")] = "hysteria2" }) + o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps")) o:depends({ [_n("protocol")] = "hysteria2" }) @@ -526,30 +538,30 @@ if singbox_tags:find("with_utls") then o:value("firefox") o:value("edge") o:value("safari") - -- o:value("360") + o:value("360") o:value("qq") o:value("ios") - -- o:value("android") + o:value("android") o:value("random") - -- o:value("randomized") + o:value("randomized") o.default = "chrome" - o:depends({ [_n("tls")] = true, [_n("utls")] = true }) + o:depends({ [_n("utls")] = true }) -- [[ REALITY部分 ]] -- o = s:option(Flag, _n("reality"), translate("REALITY")) o.default = 0 - o:depends({ [_n("protocol")] = "vless", [_n("utls")] = true }) - o:depends({ [_n("protocol")] = "vmess", [_n("utls")] = true }) - o:depends({ [_n("protocol")] = "shadowsocks", [_n("utls")] = true }) - o:depends({ [_n("protocol")] = "socks", [_n("utls")] = true }) - o:depends({ [_n("protocol")] = "trojan", [_n("utls")] = true }) - o:depends({ [_n("protocol")] = "anytls", [_n("utls")] = true }) + o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true }) + o:depends({ [_n("protocol")] = "vmess", [_n("tls")] = true }) + o:depends({ [_n("protocol")] = "shadowsocks", [_n("tls")] = true }) + o:depends({ [_n("protocol")] = "socks", [_n("tls")] = true }) + o:depends({ [_n("protocol")] = "trojan", [_n("tls")] = true }) + o:depends({ [_n("protocol")] = "anytls", [_n("tls")] = true }) o = s:option(Value, _n("reality_publicKey"), translate("Public Key")) - o:depends({ [_n("utls")] = true, [_n("reality")] = true }) + o:depends({ [_n("reality")] = true }) o = s:option(Value, _n("reality_shortId"), translate("Short Id")) - o:depends({ [_n("utls")] = true, [_n("reality")] = true }) + o:depends({ [_n("reality")] = true }) end o = s:option(ListValue, _n("transport"), translate("Transport")) @@ -801,7 +813,7 @@ o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Onl o:depends({ [_n("chain_proxy")] = "2" }) for k, v in pairs(nodes_table) do - if v.type == "sing-box" and v.id ~= arg[1] then + if v.type == "sing-box" and v.id ~= arg[1] and (not v.chain_proxy or v.chain_proxy == "") then s.fields[_n("preproxy_node")]:value(v.id, v.remark) s.fields[_n("to_node")]:value(v.id, v.remark) end diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index dd71579..c4eee19 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -321,7 +321,11 @@ function gen_outbound(flag, node, tag, proxy_table) end protocol_table = { server_ports = next(server_ports) and server_ports or nil, - hop_interval = next(server_ports) and "30s" or nil, + hop_interval = (function() + if not next(server_ports) then return nil end + local v = tonumber((node.hysteria_hop_interval or "30s"):match("^%d+")) + return (v and v >= 5) and (v .. "s") or "30s" + end)(), up_mbps = tonumber(node.hysteria_up_mbps), down_mbps = tonumber(node.hysteria_down_mbps), obfs = node.hysteria_obfs, @@ -397,7 +401,11 @@ function gen_outbound(flag, node, tag, proxy_table) end protocol_table = { server_ports = next(server_ports) and server_ports or nil, - hop_interval = next(server_ports) and "30s" or nil, + hop_interval = (function() + if not next(server_ports) then return nil end + local v = tonumber((node.hysteria2_hop_interval or "30s"):match("^%d+")) + return (v and v >= 5) and (v .. "s") or "30s" + end)(), up_mbps = (node.hysteria2_up_mbps and tonumber(node.hysteria2_up_mbps)) and tonumber(node.hysteria2_up_mbps) or nil, down_mbps = (node.hysteria2_down_mbps and tonumber(node.hysteria2_down_mbps)) and tonumber(node.hysteria2_down_mbps) or nil, obfs = { diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 058de37..7fbd0b4 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -155,7 +155,8 @@ function gen_outbound(flag, node, tag, proxy_table) serverName = node.tls_serverName, allowInsecure = (node.tls_allowInsecure == "1") and true or false, fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, - echConfigList = (node.ech == "1") and node.ech_config or nil + echConfigList = (node.ech == "1") and node.ech_config or nil, + echForceQuery = (node.ech == "1") and (node.ech_ForceQuery or "none") or nil } or nil, realitySettings = (node.stream_security == "reality") and { serverName = node.tls_serverName, @@ -1060,6 +1061,7 @@ function gen_config(var) domains = {} string.gsub(e.domain_list, '[^' .. "\r\n" .. ']+', function(w) if w:find("#") == 1 then return end + if w:find("rule-set:", 1, true) == 1 or w:find("rs:") == 1 then return end table.insert(domains, w) table.insert(domain_table.domain, w) end) @@ -1073,6 +1075,7 @@ function gen_config(var) ip = {} string.gsub(e.ip_list, '[^' .. "\r\n" .. ']+', function(w) if w:find("#") == 1 then return end + if w:find("rule-set:", 1, true) == 1 or w:find("rs:") == 1 then return end table.insert(ip, w) end) if #ip == 0 then ip = nil end diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm index 57985d3..1ecd231 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm @@ -284,10 +284,6 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin params += opt.query("spx", dom_prefix + "reality_spiderX"); params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify"); } - if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) { - let v_flow = opt.get(dom_prefix + "flow").value; - params += "&flow=" + v_flow; - } params += "&security=" + v_security; params += opt.query("alpn", dom_prefix + "alpn"); params += opt.query("sni", dom_prefix + "tls_serverName"); @@ -960,11 +956,10 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "tls") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', false); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_allowInsecure', true); - if (queryParam.allowinsecure === '0' || queryParam.insecure === '0') { + if ((queryParam.allowinsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') { opt.set(dom_prefix + 'tls_allowInsecure', false); } if (queryParam.fp && queryParam.fp.trim() != "") { @@ -978,7 +973,6 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "reality") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', true); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); if (queryParam.fp && queryParam.fp.trim() != "") { @@ -1205,9 +1199,11 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin } tls_serverName = tls_serverName || ""; opt.set(dom_prefix + 'tls_serverName', tls_serverName); + opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); + opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); } opt.set(dom_prefix + 'tls_allowInsecure', true); - if (queryParam.allowinsecure === '0' || queryParam.insecure === '0') { + if ((queryParam.allowinsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') { opt.set(dom_prefix + 'tls_allowInsecure', false); } @@ -1342,11 +1338,11 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "tls") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', false); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); + opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_allowInsecure', true); - if (queryParam.allowinsecure === '0' || queryParam.insecure === '0') { + if ((queryParam.allowinsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') { opt.set(dom_prefix + 'tls_allowInsecure', false); } if (queryParam.fp && queryParam.fp.trim() != "") { @@ -1360,7 +1356,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "reality") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', true); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); + opt.set(dom_prefix + 'flow', (queryParam.flow || '').replace('-udp443', '')); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); if (queryParam.fp && queryParam.fp.trim() != "") { @@ -1539,7 +1535,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin opt.set(dom_prefix + 'tuic_alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_allowInsecure', true); - if (queryParam.allowinsecure === '0' || queryParam.insecure === '0') { + if ((queryParam.allowinsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') { opt.set(dom_prefix + 'tls_allowInsecure', false); } if (hash) { @@ -1579,11 +1575,10 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "tls") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', false); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); opt.set(dom_prefix + 'tls_allowInsecure', true); - if (queryParam.allowinsecure === '0' || queryParam.insecure === '0') { + if ((queryParam.allowinsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') { opt.set(dom_prefix + 'tls_allowInsecure', false); } if (queryParam.fp && queryParam.fp.trim() != "") { @@ -1594,7 +1589,6 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin if (queryParam.security == "reality") { opt.set(dom_prefix + 'tls', true); opt.set(dom_prefix + 'reality', true); - opt.set(dom_prefix + 'flow', queryParam.flow || ''); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); opt.set(dom_prefix + 'tls_serverName', queryParam.sni || ''); if (queryParam.fp && queryParam.fp.trim() != "") { diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po index 4db2813..c3ac43c 100644 --- a/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/luci-app-passwall2/po/zh-cn/passwall2.po @@ -1576,6 +1576,12 @@ msgstr "后量子对等证书签名方案" msgid "Disable adaptive sizing of TLS records" msgstr "禁用 TLS 记录的自适应大小调整" +msgid "ECH Query Policy" +msgstr "ECH 查询策略" + +msgid "Controls the policy used when performing DNS queries for ECH configuration." +msgstr "控制使用 DNS 查询 ECH 配置时的策略。" + msgid "Enable Multipath TCP, need to be enabled in both server and client configuration." msgstr "启用 Multipath TCP,需在服务端和客户端配置中同时启用。" diff --git a/luci-app-passwall2/root/usr/share/passwall2/app.sh b/luci-app-passwall2/root/usr/share/passwall2/app.sh index 89b4efb..814fa08 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -336,6 +336,15 @@ eval_cache_var() { [ -s "$TMP_PATH/var" ] && eval $(cat "$TMP_PATH/var") } +has_1_65535() { + local val="$1" + val=${val//:/-} + case ",$val," in + *,1-65535,*) return 0 ;; + *) return 1 ;; + esac +} + run_xray() { local flag node redir_port tcp_proxy_way socks_address socks_port socks_username socks_password http_address http_port http_username http_password local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache write_ipset_direct @@ -1146,11 +1155,10 @@ acl_app() { index=$(expr $index + 1) local enabled sid remarks sources interface tcp_no_redir_ports udp_no_redir_ports node direct_dns_query_strategy write_ipset_direct remote_dns_protocol remote_dns remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy local _ip _mac _iprange _ipset _ip_or_mac source_list config_file - sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') + local sid=$(uci -q show "${CONFIG}.${item}" | grep "=acl_rule" | awk -F '=' '{print $1}' | awk -F '.' '{print $2}') + [ "$(config_n_get $sid enabled)" = "1" ] || continue eval $(uci -q show "${CONFIG}.${item}" | cut -d'.' -sf 3-) - [ "$enabled" = "1" ] || continue - if [ -n "${sources}" ]; then for s in $sources; do local s2 @@ -1183,7 +1191,9 @@ acl_app() { udp_no_redir_ports=${udp_no_redir_ports:-default} [ "$tcp_no_redir_ports" = "default" ] && tcp_no_redir_ports=$TCP_NO_REDIR_PORTS [ "$udp_no_redir_ports" = "default" ] && udp_no_redir_ports=$UDP_NO_REDIR_PORTS - [ "$tcp_no_redir_ports" == "1:65535" ] && [ "$udp_no_redir_ports" == "1:65535" ] && unset node + if has_1_65535 "$tcp_no_redir_ports" && has_1_65535 "$udp_no_redir_ports"; then + unset node + fi [ -n "$node" ] && { tcp_proxy_mode="global" diff --git a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh index c1e0759..44cc493 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh @@ -418,7 +418,7 @@ load_acl() { [ -n "${is_tproxy}" ] && ipt_tmp=$ipt_m [ "$tcp_no_redir_ports" != "disable" ] && { - if [ "$tcp_no_redir_ports" != "1:65535" ]; then + if ! has_1_65535 "$tcp_no_redir_ports"; then [ "$_ipv4" != "1" ] && add_port_rules "$ip6t_m -A PSW2 $(comment "$remarks") ${_ipt_source} -p tcp" $tcp_no_redir_ports "-j RETURN" 2>/dev/null add_port_rules "$ipt_tmp -A PSW2 $(comment "$remarks") ${_ipt_source} -p tcp" $tcp_no_redir_ports "-j RETURN" echolog " - ${msg}不代理 TCP 端口[${tcp_no_redir_ports}]" @@ -430,7 +430,7 @@ load_acl() { } [ "$udp_no_redir_ports" != "disable" ] && { - if [ "$udp_no_redir_ports" != "1:65535" ]; then + if ! has_1_65535 "$udp_no_redir_ports"; then [ "$_ipv4" != "1" ] && add_port_rules "$ip6t_m -A PSW2 $(comment "$remarks") ${_ipt_source} -p udp" $udp_no_redir_ports "-j RETURN" 2>/dev/null add_port_rules "$ipt_m -A PSW2 $(comment "$remarks") ${_ipt_source} -p udp" $udp_no_redir_ports "-j RETURN" echolog " - ${msg}不代理 UDP 端口[${udp_no_redir_ports}]" @@ -526,7 +526,7 @@ load_acl() { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { add_port_rules "$ip6t_m -A PSW2 $(comment "默认") -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ipt_tmp -A PSW2 $(comment "默认") -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN" - if [ "$TCP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$TCP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 TCP 端口[${TCP_NO_REDIR_PORTS}]" else TCP_PROXY_MODE="disable" @@ -537,7 +537,7 @@ load_acl() { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { add_port_rules "$ip6t_m -A PSW2 $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ipt_tmp -A PSW2 $(comment "默认") -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" - if [ "$UDP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$UDP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 UDP 端口[${UDP_NO_REDIR_PORTS}]" else UDP_PROXY_MODE="disable" @@ -871,7 +871,7 @@ add_firewall_rule() { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { add_port_rules "$ipt_tmp -A PSW2_OUTPUT -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ip6t_m -A PSW2_OUTPUT -p tcp" $TCP_NO_REDIR_PORTS "-j RETURN" - if [ "$TCP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$TCP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 TCP 端口[${TCP_NO_REDIR_PORTS}]" else unset TCP_LOCALHOST_PROXY @@ -882,7 +882,7 @@ add_firewall_rule() { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { add_port_rules "$ipt_m -A PSW2_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" add_port_rules "$ip6t_m -A PSW2_OUTPUT -p udp" $UDP_NO_REDIR_PORTS "-j RETURN" - if [ "$UDP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$UDP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 UDP 端口[${UDP_NO_REDIR_PORTS}]" else unset UDP_LOCALHOST_PROXY diff --git a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh index 0ae46b3..4d6b946 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh @@ -432,7 +432,7 @@ load_acl() { msg="【$remarks】,${msg}" [ "$tcp_no_redir_ports" != "disable" ] && { - if [ "$tcp_no_redir_ports" != "1:65535" ]; then + if ! has_1_65535 "$tcp_no_redir_ports"; then nft "add rule $NFTABLE_NAME $nft_prerouting_chain ${_ipt_source} ip protocol tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\"" [ "$_ipv4" != "1" ] && nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 ${_ipt_source} meta l4proto tcp $(factor $tcp_no_redir_ports "tcp dport") counter return comment \"$remarks\"" echolog " - ${msg}不代理 TCP 端口[${tcp_no_redir_ports}]" @@ -444,7 +444,7 @@ load_acl() { } [ "$udp_no_redir_ports" != "disable" ] && { - if [ "$udp_no_redir_ports" != "1:65535" ]; then + if ! has_1_65535 "$udp_no_redir_ports"; then nft "add rule $NFTABLE_NAME PSW2_MANGLE ip protocol udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\"" [ "$_ipv4" != "1" ] && nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 meta l4proto udp ${_ipt_source} $(factor $udp_no_redir_ports "udp dport") counter return comment \"$remarks\"" 2>/dev/null echolog " - ${msg}不代理 UDP 端口[${udp_no_redir_ports}]" @@ -544,7 +544,7 @@ load_acl() { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { nft "add rule $NFTABLE_NAME $nft_prerouting_chain ip protocol tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return comment \"默认\"" nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 meta l4proto tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return comment \"默认\"" - if [ "$TCP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$TCP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 TCP 端口[${TCP_NO_REDIR_PORTS}]" else TCP_PROXY_MODE="disable" @@ -555,7 +555,7 @@ load_acl() { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { nft "add $NFTABLE_NAME PSW2_MANGLE ip protocol udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return comment \"默认\"" nft "add $NFTABLE_NAME PSW2_MANGLE_V6 counter meta l4proto udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return comment \"默认\"" - if [ "$UDP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$UDP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 UDP 端口[${UDP_NO_REDIR_PORTS}]" else UDP_PROXY_MODE="disable" @@ -893,7 +893,7 @@ add_firewall_rule() { [ "$TCP_NO_REDIR_PORTS" != "disable" ] && { nft "add rule $NFTABLE_NAME $nft_output_chain ip protocol tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 meta l4proto tcp $(factor $TCP_NO_REDIR_PORTS "tcp dport") counter return" - if [ "$TCP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$TCP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 TCP 端口[${TCP_NO_REDIR_PORTS}]" else unset TCP_LOCALHOST_PROXY @@ -904,7 +904,7 @@ add_firewall_rule() { [ "$UDP_NO_REDIR_PORTS" != "disable" ] && { nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE ip protocol udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 meta l4proto udp $(factor $UDP_NO_REDIR_PORTS "udp dport") counter return" - if [ "$UDP_NO_REDIR_PORTS" != "1:65535" ]; then + if ! has_1_65535 "$UDP_NO_REDIR_PORTS"; then echolog " - ${msg}不代理 UDP 端口[${UDP_NO_REDIR_PORTS}]" else unset UDP_LOCALHOST_PROXY diff --git a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua index 25754a6..2d37277 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua @@ -1042,8 +1042,8 @@ local function processData(szType, content, add_mode, add_from) end result.encryption = params.encryption or "none" - - result.flow = params.flow or nil + result.flow = params.flow and params.flow:gsub("-udp443", "") or nil + result.alpn = params.alpn if result.type == "sing-box" and (result.transport == "mkcp" or result.transport == "xhttp" or result.transport == "splithttp") then log("跳过节点:" .. result.remarks ..",因Sing-Box不支持" .. szType .. "协议的" .. result.transport .. "传输方式,需更换Xray。") @@ -1194,7 +1194,7 @@ local function processData(szType, content, add_mode, add_from) result.encryption = params.encryption or "none" - result.flow = params.flow or nil + result.flow = params.flow and params.flow:gsub("-udp443", "") or nil result.tls = "0" if params.security == "tls" or params.security == "reality" then @@ -1272,7 +1272,6 @@ local function processData(szType, content, add_mode, add_from) else result.address = host_port end - result.protocol = params.protocol result.hysteria_obfs = params.obfsParam result.hysteria_auth_type = "string" result.hysteria_auth_password = params.auth diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index b61c8af..a66d45d 100644 --- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -408,6 +408,7 @@ o:depends("type", "ssr") -- [[ Hysteria2 ]]-- o = s:option(Value, "hy2_auth", translate("Users Authentication")) o:depends("type", "hysteria2") +o.password = true o.rmempty = false o = s:option(Flag, "flag_port_hopping", translate("Enable Port Hopping")) @@ -455,6 +456,7 @@ o.placeholder = "salamander" o = s:option(Value, "salamander", translate("Obfuscation Password")) o:depends({type = "hysteria2", flag_obfs = "1"}) +o.password = true o.rmempty = true o.placeholder = "cry_me_a_r1ver" @@ -575,6 +577,7 @@ o.default="auto" -- [[ TUIC ]] -- TuicNameId o = s:option(Value, "tuic_uuid", translate("TUIC User UUID")) +o.password = true o.rmempty = true o.default = uuid o:depends("type", "tuic") @@ -588,6 +591,7 @@ o:depends("type", "tuic") -- Tuic Password o = s:option(Value, "tuic_passwd", translate("TUIC User Password")) +o.password = true o.rmempty = true o.default = "" o:depends("type", "tuic") @@ -675,6 +679,7 @@ o:depends({type = "v2ray", v2ray_protocol = "vmess"}) -- VmessId o = s:option(Value, "vmess_id", translate("Vmess/VLESS ID (UUID)")) +o.password = true o.rmempty = true o.default = uuid o:depends({type = "v2ray", v2ray_protocol = "vmess"}) @@ -792,7 +797,7 @@ o:depends("transport", "splithttp") o.rmempty = true -- [[ XHTTP部分 ]]-- -o = s:option(ListValue, "xhttp_alpn", translate("XHTTP Alpn")) +o = s:option(ListValue, "xhttp_alpn", translate("XHTTP ALPN")) o.default = "" o:value("", translate("Default")) o:value("h3") @@ -1179,10 +1184,13 @@ o:depends("xtls", true) o:depends("reality", true) o.rmempty = true -o = s:option(DynamicList, "tls_alpn", translate("TLS ALPN")) +o = s:option(ListValue, "tls_alpn", translate("TLS ALPN")) +o.default = "" +o:value("", translate("Default")) +o:value("h3") +o:value("spdy/3.1") +o:value("h3,spdy/3.1") o:depends("type", "tuic") -o.default = "h3" -o.rmempty = true -- [[ allowInsecure ]]-- o = s:option(Flag, "insecure", translate("allowInsecure")) diff --git a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm index c785ada..e2bf0e9 100644 --- a/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ b/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -480,7 +480,7 @@ function import_ssr_url(btn, urlname, sid) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.xhttp_mode')[0].value = ssm.mode; document.getElementsByName('cbid.shadowsocksr.' + sid + '.xhttp_host')[0].value = ssm.host; document.getElementsByName('cbid.shadowsocksr.' + sid + '.xhttp_path')[0].value = ssm.path; - if (params.get("extra") && params.get("extra").trim() !== "") { + if (ssm.extra !== "" && ssm.extra !== undefined) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_xhttp_extra')[0].checked = true; // 设置 enable_xhttp_extra 为 true document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_xhttp_extra')[0].dispatchEvent(event); // 触发事件 document.getElementsByName('cbid.shadowsocksr.' + sid + '.xhttp_extra')[0].value = ssm.extra; @@ -500,16 +500,18 @@ function import_ssr_url(btn, urlname, sid) { if (ssm.tls == "tls") { document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); - document.getElementsByName('cbid.shadowsocksr.' + sid + '.fingerprint')[0].value = ssm.fp; + if (ssm.fq !== "" && ssm.fq !== undefined) { + document.getElementsByName('cbid.shadowsocksr.' + sid + '.fingerprint')[0].value = ssm.fp; + } if (ssm.net == "xhttp") { document.getElementsByName('cbid.shadowsocksr.' + sid + '.xhttp_alpn')[0].value = ssm.alpn; } document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = ssm.sni || ssm.host; - } - if (ssm.tls == "tls") { - document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].checked = true; - document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].dispatchEvent(event); - document.getElementsByName('cbid.shadowsocksr.' + sid + '.ech_config')[0].value = ssm.ech; + if (ssm.ech !== "" && ssm.ech !== undefined) { + document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].checked = true; // 设置 enable_ech 为 true + document.getElementsByName('cbid.shadowsocksr.' + sid + '.enable_ech')[0].dispatchEvent(event); // 触发事件 + document.getElementsByName('cbid.shadowsocksr.' + sid + '.ech_config')[0].value = ssm.ech; + } } if (ssm.mux !== undefined) { document.getElementsByName('cbid.shadowsocksr.' + sid + '.mux')[0].checked = true; diff --git a/luci-app-ssr-plus/po/templates/ssr-plus.pot b/luci-app-ssr-plus/po/templates/ssr-plus.pot index de34a7e..77423bb 100644 --- a/luci-app-ssr-plus/po/templates/ssr-plus.pot +++ b/luci-app-ssr-plus/po/templates/ssr-plus.pot @@ -20,7 +20,7 @@ msgstr "" msgid "128 Threads" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1247 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1255 msgid "16" msgstr "" @@ -36,7 +36,7 @@ msgstr "" msgid "32 Threads" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1120 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1125 msgid "360" msgstr "" @@ -56,7 +56,7 @@ msgstr "" msgid "64 Threads" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1234 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1242 msgid "8" msgstr "" @@ -68,9 +68,9 @@ msgstr "" msgid "" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:831 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1135 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:836 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1140 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1167 msgid "" msgstr "" @@ -81,9 +81,9 @@ msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:151 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1227 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1240 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1254 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1235 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1248 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1262 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:200 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:235 @@ -135,7 +135,7 @@ msgstr "" msgid "Allow subscribe Insecure nodes By default" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:670 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:674 msgid "AlterId" msgstr "" @@ -198,8 +198,8 @@ msgstr "" msgid "Auto Update Server subscription, GFW list and CHN route" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:604 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1288 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:608 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1296 msgid "BBR" msgstr "" @@ -219,8 +219,8 @@ msgstr "" msgid "Baidu Public DNS (180.76.76.76)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:946 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:956 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:951 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:961 msgid "BitTorrent (uTP)" msgstr "" @@ -244,17 +244,17 @@ msgstr "" msgid "CNNIC SDNS (1.2.4.8)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:605 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1289 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:609 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1297 msgid "CUBIC" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:727 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:952 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:732 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:957 msgid "Camouflage Type" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1195 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1203 msgid "Certificate fingerprint" msgstr "" @@ -319,9 +319,9 @@ msgid "Click here to view or manage the DNS list file" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:382 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:833 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1137 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1164 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:838 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1142 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1169 msgid "Click to the page" msgstr "" @@ -346,15 +346,15 @@ msgstr "" msgid "Collecting data..." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:831 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:836 msgid "Configure XHTTP Extra Settings (JSON format), see:" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1005 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1010 msgid "Congestion" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:602 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606 msgid "Congestion control algorithm" msgstr "" @@ -370,7 +370,7 @@ msgstr "" msgid "Connection Timeout" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1148 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1153 msgid "" "Controls the policy used when performing DNS queries for ECH configuration." msgstr "" @@ -383,11 +383,11 @@ msgstr "" msgid "Create Backup File" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1324 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1332 msgid "Create upload file error." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1344 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1352 msgid "Current Certificate Path" msgstr "" @@ -446,30 +446,31 @@ msgstr "" msgid "DNSPod Public DNS (119.29.29.29)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:948 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:958 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:953 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:963 msgid "DTLS 1.2" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:797 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:802 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1189 msgid "Default" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1255 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1263 msgid "Default reject rejects traffic." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:503 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:505 msgid "Default value 0 indicatesno heartbeat." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1228 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1236 msgid "" "Default: disable. When entering a negative number, such as -1, The Mux " "module will not be used to carry TCP traffic." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1241 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1249 msgid "" "Default:16. When entering a negative number, such as -1, The Mux module will " "not be used to carry UDP traffic, Use original UDP transmission method of " @@ -524,15 +525,15 @@ msgstr "" msgid "Disable IPv6 query mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:466 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:468 msgid "Disable QUIC path MTU discovery" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:646 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:650 msgid "Disable SNI" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:529 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:531 msgid "Disable TCP No_delay" msgstr "" @@ -561,23 +562,23 @@ msgstr "" msgid "Domestic DNS Server" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:982 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:987 msgid "Downlink Capacity(Default:Mbps)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:657 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:661 msgid "Dual-stack Listening Socket" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1133 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1138 msgid "ECH Config" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1147 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1152 msgid "ECH Query Policy" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:764 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:769 msgid "Early Data Header Name" msgstr "" @@ -593,7 +594,7 @@ msgstr "" msgid "Enable" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:651 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:655 msgid "Enable 0-RTT QUIC handshake" msgstr "" @@ -602,29 +603,29 @@ msgid "Enable Authentication" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:54 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1358 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1366 msgid "Enable Auto Switch" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1128 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1133 msgid "Enable ECH(optional)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:446 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:447 msgid "Enable Lazy Mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1155 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1160 msgid "Enable ML-DSA-65(optional)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1273 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1281 msgid "" "Enable Multipath TCP, need to be enabled in both server and client " "configuration." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1201 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1209 msgid "Enable Mux.Cool" msgstr "" @@ -632,7 +633,7 @@ msgstr "" msgid "Enable Netflix Mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:441 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:442 msgid "Enable Obfuscation" msgstr "" @@ -640,7 +641,7 @@ msgstr "" msgid "Enable Plugin" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:413 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:414 msgid "Enable Port Hopping" msgstr "" @@ -648,19 +649,19 @@ msgstr "" msgid "Enable Server" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:424 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:425 msgid "Enable Transport Protocol Settings" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:515 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:517 msgid "Enable V2 protocol." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:514 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:516 msgid "Enable V3 protocol." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1219 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1227 msgid "Enable Xudp Mux" msgstr "" @@ -672,11 +673,11 @@ msgstr "" msgid "Enable the SUoT protocol, requires server support." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:824 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:829 msgid "Enable this option to configure XHTTP Extra (JSON format)." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1010 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1015 msgid "Enabled Kernel virtual NIC TUN(optional)" msgstr "" @@ -684,17 +685,17 @@ msgstr "" msgid "Enabled Mixed" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:524 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1350 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:526 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1275 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1358 msgid "Enabling TCP Fast Open Requires Server Support." msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:323 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:330 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:556 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:567 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:690 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:558 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:569 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:695 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:118 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:125 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:122 @@ -749,12 +750,12 @@ msgstr "" msgid "Filter Words splited by /" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1112 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1117 msgid "Finger Print" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1085 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1098 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1090 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1103 msgid "Flow" msgstr "" @@ -768,7 +769,7 @@ msgstr "" msgid "For specific usage, see:" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:419 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:420 msgid "" "Format as 10000:20000 or 10000-20000 Multiple groups are separated by commas " "(,)." @@ -830,11 +831,11 @@ msgstr "" msgid "Game Mode UDP Server" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:622 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:626 msgid "Garbage collection interval(second)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:628 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:632 msgid "Garbage collection lifetime(second)" msgstr "" @@ -887,15 +888,15 @@ msgstr "" msgid "Grant UCI access for luci-app-ssr-plus" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:887 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:892 msgid "Gun" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:906 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:911 msgid "H2 Read Idle Timeout" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:901 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:906 msgid "H2/gRPC Health Check" msgstr "" @@ -903,39 +904,39 @@ msgstr "" msgid "HTTP" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:739 msgid "HTTP Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:739 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:744 msgid "HTTP Path" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:869 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:874 msgid "HTTP/2 Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:874 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:879 msgid "HTTP/2 Path" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:941 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:946 msgid "Header" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:918 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:923 msgid "Health Check Timeout" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:610 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:614 msgid "Heartbeat interval(second)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:773 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:778 msgid "Httpupgrade Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:778 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:783 msgid "Httpupgrade Path" msgstr "" @@ -943,7 +944,7 @@ msgstr "" msgid "Hysteria2" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:461 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:463 msgid "Hysterir QUIC parameters" msgstr "" @@ -955,27 +956,27 @@ msgstr "" msgid "If empty, Not change Apple domains parsing DNS (Default is empty)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1135 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1140 msgid "" "If it is not empty, it indicates that the Client has enabled Encrypted " "Client, see:" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:658 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:662 msgid "If this option is not set, the socket behavior is platform dependent." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1192 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1200 msgid "" "If true, allowss insecure connection at TLS client, e.g., TLS server uses " "unverifiable certificates." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1308 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1316 msgid "If you have a self-signed certificate,please check the box" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:661 +#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:663 msgid "Import" msgstr "" @@ -983,12 +984,12 @@ msgstr "" #: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:303 #: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:335 #: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:434 -#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:522 -#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:652 +#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:524 +#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:654 msgid "Import configuration information successfully." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:894 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:899 msgid "Initial Windows Size" msgstr "" @@ -1000,11 +1001,11 @@ msgstr "" msgid "Interface control" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:860 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:865 msgid "Invalid JSON format" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:655 +#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm:657 msgid "Invalid format." msgstr "" @@ -1012,19 +1013,19 @@ msgstr "" msgid "KcpTun" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1368 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1376 msgid "KcpTun Enable" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1385 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1393 msgid "KcpTun Param" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1380 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1388 msgid "KcpTun Password" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1374 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1382 msgid "KcpTun Port" msgstr "" @@ -1114,7 +1115,7 @@ msgid "Listen only on the given interface or, if unspecified, on all" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:340 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1362 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1370 msgid "Local Port" msgstr "" @@ -1122,7 +1123,7 @@ msgstr "" msgid "Local Servers" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1016 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1021 msgid "Local addresses" msgstr "" @@ -1138,15 +1139,15 @@ msgstr "" msgid "Loyalsoldier/v2ray-rules-dat" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1160 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1165 msgid "ML-DSA-65 Public key" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1273 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1281 msgid "MPTCP" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:962 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:967 msgid "MTU" msgstr "" @@ -1154,21 +1155,21 @@ msgstr "" msgid "Main Server" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:757 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:762 msgid "Max Early Data" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:663 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:667 msgid "Maximum packet size the socks5 server can receive from external" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1242 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1250 msgid "" "Min value is 1, Max value is 1024. When omitted or set to 0, Will same path " "as TCP traffic." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1229 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1237 msgid "" "Min value is 1, Max value is 128. When omitted or set to 0, it equals 8." msgstr "" @@ -1182,7 +1183,7 @@ msgstr "" msgid "Muitiple DNS server can saperate with ','" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:888 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:893 msgid "Multi" msgstr "" @@ -1190,7 +1191,7 @@ msgstr "" msgid "Multi Threads Option" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1201 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1209 msgid "Mux" msgstr "" @@ -1242,7 +1243,7 @@ msgstr "" msgid "Network interface to use" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:606 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:610 msgid "New Reno" msgstr "" @@ -1256,7 +1257,7 @@ msgstr "" msgid "No new data!" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1340 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1348 msgid "No specify upload file." msgstr "" @@ -1265,10 +1266,10 @@ msgid "Noise" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:362 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:729 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:932 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:944 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:954 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:734 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:937 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:949 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:187 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:192 msgid "None" @@ -1305,15 +1306,15 @@ msgstr "" msgid "Obfs param (optional)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1001 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1006 msgid "Obfuscate password (optional)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:456 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:457 msgid "Obfuscation Password" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:451 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:452 msgid "Obfuscation Type" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "Paste sharing link here" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1031 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1036 msgid "Peer public key" msgstr "" @@ -1382,7 +1383,7 @@ msgstr "" msgid "Perform reset" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:924 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:929 msgid "Permit Without Stream" msgstr "" @@ -1390,7 +1391,7 @@ msgstr "" msgid "Ping Latency" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1347 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1355 msgid "Please confirm the current certificate path" msgstr "" @@ -1402,19 +1403,19 @@ msgstr "" msgid "Plugin Opts" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:435 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:436 msgid "Port Hopping Interval(Unit:Second)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:418 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:419 msgid "Port hopping range" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1035 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1040 msgid "Pre-shared key" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1026 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1031 msgid "Private key" msgstr "" @@ -1432,35 +1433,35 @@ msgstr "" msgid "Proxy Ports" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1072 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1077 msgid "Public key" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:937 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:942 msgid "QUIC Key" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:930 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:935 msgid "QUIC Security" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:484 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:486 msgid "QUIC initConnReceiveWindow" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:472 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:474 msgid "QUIC initStreamReceiveWindow" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:490 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:492 msgid "QUIC maxConnReceiveWindow" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:496 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:498 msgid "QUIC maxIdleTimeout(Unit:second)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:478 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:480 msgid "QUIC maxStreamReceiveWindow" msgstr "" @@ -1469,7 +1470,7 @@ msgstr "" msgid "Quad9 DNSCrypt SDNS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1067 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1072 msgid "REALITY" msgstr "" @@ -1481,7 +1482,7 @@ msgstr "" msgid "RUNNING" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:989 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:994 msgid "Read Buffer Size" msgstr "" @@ -1524,11 +1525,11 @@ msgstr "" msgid "Refresh..." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1290 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1298 msgid "Reno" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1021 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1026 msgid "Reserved bytes(optional)" msgstr "" @@ -1603,7 +1604,7 @@ msgstr "" msgid "Selection ShadowSocks Node Use Version." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1300 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1308 msgid "Self-signed Certificate" msgstr "" @@ -1651,7 +1652,7 @@ msgstr "" msgid "Servers subscription and manage" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1061 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1066 msgid "Session Ticket" msgstr "" @@ -1664,7 +1665,7 @@ msgstr "" msgid "Shadow-TLS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:541 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:543 msgid "Shadow-TLS ChainPoxy type" msgstr "" @@ -1685,7 +1686,7 @@ msgid "ShadowSocks-libev Version" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:223 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:544 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:546 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:23 msgid "ShadowSocks-rust Version" msgstr "" @@ -1698,7 +1699,7 @@ msgstr "" msgid "ShadowSocksR Plus+ Settings" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:552 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:554 msgid "Shadowsocks password" msgstr "" @@ -1707,7 +1708,7 @@ msgstr "" msgid "ShadowsocksR" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1076 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1081 msgid "Short ID" msgstr "" @@ -1719,7 +1720,7 @@ msgstr "" msgid "Socks" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:698 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:703 msgid "Socks Version" msgstr "" @@ -1748,11 +1749,11 @@ msgstr "" msgid "Specifically for edit dnsproxy DNS parse files." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:785 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:790 msgid "Splithttp Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:790 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:795 msgid "Splithttp Path" msgstr "" @@ -1792,9 +1793,9 @@ msgstr "" msgid "Switch check cycly(second)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:524 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1267 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1350 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:526 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1275 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1358 #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:149 msgid "TCP Fast Open" msgstr "" @@ -1810,23 +1811,23 @@ msgstr "" msgid "TCP upstream" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1048 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1053 msgid "TLS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:519 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:521 msgid "TLS 1.3 Strict mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1182 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1187 msgid "TLS ALPN" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1175 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1180 msgid "TLS Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:969 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:974 msgid "TTI" msgstr "" @@ -1834,23 +1835,23 @@ msgstr "" msgid "TUIC" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:583 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:586 msgid "TUIC Server IP Address" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:590 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:593 msgid "TUIC User Password" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:577 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:579 msgid "TUIC User UUID" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:640 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:644 msgid "TUIC receive window" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:634 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:638 msgid "TUIC send window" msgstr "" @@ -1859,7 +1860,7 @@ msgstr "" msgid "TWNIC-101 DNSCrypt SDNS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1167 msgid "" "The client has not configured mldsa65Verify, but it will not perform the " "\"additional verification\" step and can still connect normally, see:" @@ -1869,7 +1870,7 @@ msgstr "" msgid "The content entered is incorrect!" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:502 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:504 msgid "The keep-alive period.(Unit:second)" msgstr "" @@ -1881,7 +1882,7 @@ msgstr "" msgid "Through proxy update list, Not Recommended" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:616 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:620 msgid "Timeout for establishing a connection to server(second)" msgstr "" @@ -1898,11 +1899,11 @@ msgstr "" msgid "Total Records:" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:707 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:712 msgid "Transport" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:429 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:430 msgid "Transport Protocol" msgstr "" @@ -1916,7 +1917,7 @@ msgstr "" msgid "Type" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:431 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:432 msgid "UDP" msgstr "" @@ -1930,7 +1931,7 @@ msgstr "" msgid "UDP over TCP" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:595 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:599 msgid "UDP relay mode" msgstr "" @@ -1982,11 +1983,11 @@ msgstr "" msgid "Update time (every day)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:975 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:980 msgid "Uplink Capacity(Default:Mbps)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1310 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1318 #: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/certupload.htm:3 msgid "Upload" msgstr "" @@ -2074,7 +2075,7 @@ msgstr "" msgid "VLESS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:684 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:689 msgid "VLESS Encryption" msgstr "" @@ -2082,26 +2083,26 @@ msgstr "" msgid "VMess" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:945 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:955 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:950 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:960 msgid "VideoCall (SRTP)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1011 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1016 msgid "" "Virtual NIC TUN of Linux kernel can be used only when system supports and " "have root permission. If used, IPv6 routing table 1023 is occupied." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:547 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:549 msgid "Vmess Protocol" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:562 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:564 msgid "Vmess UUID" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:677 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:681 msgid "Vmess/VLESS ID (UUID)" msgstr "" @@ -2117,16 +2118,16 @@ msgstr "" msgid "WAN White List IP" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:745 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:750 msgid "WebSocket Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:751 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:756 msgid "WebSocket Path" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:947 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:957 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:952 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:962 msgid "WechatVideo" msgstr "" @@ -2152,40 +2153,40 @@ msgid "" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:263 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:949 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:959 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:954 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:964 msgid "WireGuard" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1041 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1046 msgid "Wireguard allows only traffic from specific source IP." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1022 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1027 msgid "Wireguard reserved bytes." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:995 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1000 msgid "Write Buffer Size" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:795 -msgid "XHTTP Alpn" +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:800 +msgid "XHTTP ALPN" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:823 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:828 msgid "XHTTP Extra" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:814 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:819 msgid "XHTTP Host" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:806 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:811 msgid "XHTTP Mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:818 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:823 msgid "XHTTP Path" msgstr "" @@ -2197,7 +2198,7 @@ msgstr "" msgid "Xray Noise Packets" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1219 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1227 msgid "Xudp Mux" msgstr "" @@ -2205,27 +2206,27 @@ msgstr "" msgid "adblock_url" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:933 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:938 msgid "aes-128-gcm" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1262 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1270 msgid "allow" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1256 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1264 msgid "allow: Allows use Mux connection." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1188 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1196 msgid "allowInsecure" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1040 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1045 msgid "allowedIPs(optional)" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1118 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1123 msgid "android" msgstr "" @@ -2233,7 +2234,7 @@ msgstr "" msgid "anti-AD" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:934 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:939 msgid "chacha20-poly1305" msgstr "" @@ -2241,7 +2242,7 @@ msgstr "" msgid "china-operator-ip" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1114 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1119 msgid "chrome" msgstr "" @@ -2250,21 +2251,21 @@ msgstr "" msgid "cloudflare-dns.com DNSCrypt SDNS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1287 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1295 msgid "comment_tcpcongestion_disable" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1225 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1233 msgid "concurrency" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1284 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1292 msgid "custom_tcpcongestion" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1233 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1246 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1129 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1241 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1254 msgid "disable" msgstr "" @@ -2273,7 +2274,7 @@ msgstr "" msgid "dns.sb DNSCrypt SDNS" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1119 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1124 msgid "edge" msgstr "" @@ -2286,19 +2287,19 @@ msgstr "" msgid "felixonmars/dnsmasq-china-list" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1115 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1120 msgid "firefox" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:912 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:917 msgid "gRPC Idle Timeout" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:885 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:890 msgid "gRPC Mode" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:879 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:884 msgid "gRPC Service Name" msgstr "" @@ -2310,7 +2311,7 @@ msgstr "" msgid "gfwlist/gfwlist" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1117 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1122 msgid "ios" msgstr "" @@ -2319,11 +2320,11 @@ msgstr "" msgid "load_balance" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:598 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:602 msgid "lossless UDP relay using QUIC streams" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:597 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:601 msgid "native UDP characteristics" msgstr "" @@ -2332,8 +2333,8 @@ msgid "nfip_url" msgstr "" #: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:334 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1089 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1102 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1094 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1107 msgid "none" msgstr "" @@ -2346,27 +2347,27 @@ msgstr "" msgid "parallel" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1121 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1126 msgid "qq" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1122 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1127 msgid "random" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1123 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1128 msgid "randomized" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1261 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1269 msgid "reject" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1116 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1121 msgid "safari" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:534 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:536 msgid "shadow-TLS SNI" msgstr "" @@ -2374,21 +2375,21 @@ msgstr "" msgid "shadow-tls" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:512 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:514 msgid "shadowTLS protocol Version" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1263 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1271 msgid "skip" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1257 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1265 msgid "" "skip: Not use Mux module to carry UDP 443 traffic, Use original UDP " "transmission method of proxy protocol." msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1080 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1085 msgid "spiderX" msgstr "" @@ -2412,14 +2413,14 @@ msgstr "" msgid "xray-plugin" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1104 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1109 msgid "xtls-rprx-vision" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1238 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1246 msgid "xudpConcurrency" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1252 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1260 msgid "xudpProxyUDP443" msgstr "" diff --git a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po index c43abeb..ed1642c 100644 --- a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po +++ b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po @@ -22,7 +22,7 @@ msgstr "单线程" msgid "128 Threads" msgstr "128 线程" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1247 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1255 msgid "16" msgstr "" @@ -38,7 +38,7 @@ msgstr "2 线程" msgid "32 Threads" msgstr "32 线程" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1120 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1125 msgid "360" msgstr "" @@ -58,7 +58,7 @@ msgstr "4 线程" msgid "64 Threads" msgstr "64 线程" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1234 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1242 msgid "8" msgstr "" @@ -70,9 +70,9 @@ msgstr "8 线程" msgid "" msgstr "" -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:831 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1135 -#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1162 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:836 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1140 +#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1167 msgid "" msgstr "" @@ -83,9 +83,9 @@ msgstr "

支持 SS/SSR/V2RAY/XRAY/TROJAN/NAIVEPROXY/SOCKS5/TUN 等协议。 0 then + return alpn + else + return nil + end + end)() or nil, fingerprint = server.fingerprint, allowInsecure = (server.insecure == "1"), serverName = server.tls_host, @@ -580,7 +592,19 @@ local tuic = { timeout = server.timeout and server.timeout .. "s" or nil, gc_interval = server.gc_interval and server.gc_interval .. "s" or nil, gc_lifetime = server.gc_lifetime and server.gc_lifetime .. "s" or nil, - alpn = server.tls_alpn, + alpn = (server.type == "tuic") and (function() + local alpn = {} + if server.tls_alpn and server.tls_alpn ~= "" then + string.gsub(server.tls_alpn, '[^,]+', function(w) + table.insert(alpn, w) + end) + end + if #alpn > 0 then + return alpn + else + return nil + end + end)() or nil, disable_sni = (server.disable_sni == "1") and true or false, zero_rtt_handshake = (server.zero_rtt_handshake == "1") and true or false, send_window = tonumber(server.send_window), diff --git a/nikki/files/nikki.upgrade b/nikki/files/nikki.upgrade index 1d2a89f..8fb9d19 100644 --- a/nikki/files/nikki.upgrade +++ b/nikki/files/nikki.upgrade @@ -3,5 +3,3 @@ /etc/nikki/mixin.yaml /etc/nikki/run/providers/rule/ /etc/nikki/run/providers/proxy/ -/etc/nikki/nftables/reserved_ip.nft -/etc/nikki/nftables/reserved_ip6.nft diff --git a/nikki/files/ucode/hijack.ut b/nikki/files/ucode/hijack.ut index dde34d6..4dcd4fb 100644 --- a/nikki/files/ucode/hijack.ut +++ b/nikki/files/ucode/hijack.ut @@ -70,8 +70,8 @@ push(lan_access_control, access_control); }); - const reserved_ip = uci_array(uci.get('momo', 'proxy', 'reserved_ip')); - const reserved_ip6 = uci_array(uci.get('momo', 'proxy', 'reserved_ip6')); + const reserved_ip = uci_array(uci.get('nikki', 'proxy', 'reserved_ip')); + const reserved_ip6 = uci_array(uci.get('nikki', 'proxy', 'reserved_ip6')); const bypass_dscp = uci_array(uci.get('nikki', 'proxy', 'bypass_dscp')); const bypass_china_mainland_ip = uci_bool(uci.get('nikki', 'proxy', 'bypass_china_mainland_ip')); const proxy_tcp_dport = split((uci.get('nikki', 'proxy', 'proxy_tcp_dport') ?? '0-65535'), ' ');