diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js index f3c6f3dfc..ad642a6da 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js @@ -242,7 +242,7 @@ return view.extend({ o.value('redirect', _('Redirect TCP')); if (features.hp_has_tproxy) o.value('redirect_tproxy', _('Redirect TCP + TProxy UDP')); - if (features.hp_has_tun) { + if (features.hp_has_ip_full && features.hp_has_tun) { o.value('redirect_tun', _('Redirect TCP + Tun UDP')); o.value('tun', _('Tun TCP/UDP')); } diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js index 3f0697335..019f2278d 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js @@ -948,8 +948,8 @@ return view.extend({ so.modalonly = true; so = ss.option(form.Value, 'http_method', _('Method')); - so.value('get', _('GET')); - so.value('put', _('PUT')); + so.value('GET', _('GET')); + so.value('PUT', _('PUT')); so.depends('transport', 'http'); so.modalonly = true; diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js index f6bd05341..9c0f60361 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js @@ -116,7 +116,12 @@ return view.extend({ o.value('vmess', _('VMess')); o.rmempty = false; - o = s.option(form.Value, 'port', _('Port'), + o = s.option(form.Value, 'address', _('Listen address')); + o.placeholder = '::'; + o.datatype = 'ipaddr'; + o.modalonly = true; + + o = s.option(form.Value, 'port', _('Listen port'), _('The port must be unique.')); o.datatype = 'port'; o.validate = L.bind(hp.validateUniqueValue, this, data[0], 'server', 'port'); diff --git a/homeproxy/po/templates/homeproxy.pot b/homeproxy/po/templates/homeproxy.pot index 1062ee931..f7d3333e4 100644 --- a/homeproxy/po/templates/homeproxy.pot +++ b/homeproxy/po/templates/homeproxy.pot @@ -18,12 +18,12 @@ msgid "4 or 6. Not limited if empty." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1175 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 -#: htdocs/luci-static/resources/view/homeproxy/server.js:647 +#: htdocs/luci-static/resources/view/homeproxy/server.js:634 +#: htdocs/luci-static/resources/view/homeproxy/server.js:652 msgid "Save your configuration before uploading files!" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:538 +#: htdocs/luci-static/resources/view/homeproxy/server.js:543 msgid "API token" msgstr "" @@ -31,11 +31,11 @@ msgstr "" msgid "Access Control" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:523 +#: htdocs/luci-static/resources/view/homeproxy/server.js:528 msgid "Access key ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:528 +#: htdocs/luci-static/resources/view/homeproxy/server.js:533 msgid "Access key secret" msgstr "" @@ -76,7 +76,7 @@ msgstr "" msgid "Address strategy" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:516 +#: htdocs/luci-static/resources/view/homeproxy/server.js:521 msgid "Alibaba Cloud DNS" msgstr "" @@ -103,7 +103,7 @@ msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:983 -#: htdocs/luci-static/resources/view/homeproxy/server.js:388 +#: htdocs/luci-static/resources/view/homeproxy/server.js:393 msgid "Allowed payload size is in the request." msgstr "" @@ -116,15 +116,15 @@ msgid "Already in updating." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:856 -#: htdocs/luci-static/resources/view/homeproxy/server.js:304 +#: htdocs/luci-static/resources/view/homeproxy/server.js:309 msgid "Alter ID" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:553 +#: htdocs/luci-static/resources/view/homeproxy/server.js:558 msgid "Alternative HTTP port" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:559 +#: htdocs/luci-static/resources/view/homeproxy/server.js:564 msgid "Alternative TLS port" msgstr "" @@ -153,7 +153,7 @@ msgstr "" msgid "Are you sure to allow insecure?" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:275 +#: htdocs/luci-static/resources/view/homeproxy/server.js:280 msgid "Auth timeout" msgstr "" @@ -162,12 +162,12 @@ msgid "Authenticated length" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:637 -#: htdocs/luci-static/resources/view/homeproxy/server.js:195 +#: htdocs/luci-static/resources/view/homeproxy/server.js:200 msgid "Authentication payload" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:630 -#: htdocs/luci-static/resources/view/homeproxy/server.js:188 +#: htdocs/luci-static/resources/view/homeproxy/server.js:193 msgid "Authentication type" msgstr "" @@ -192,7 +192,7 @@ msgid "BaiDu" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:632 -#: htdocs/luci-static/resources/view/homeproxy/server.js:190 +#: htdocs/luci-static/resources/view/homeproxy/server.js:195 msgid "Base64" msgstr "" @@ -228,7 +228,7 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:426 #: htdocs/luci-static/resources/view/homeproxy/client.js:447 #: htdocs/luci-static/resources/view/homeproxy/client.js:713 -#: htdocs/luci-static/resources/view/homeproxy/server.js:688 +#: htdocs/luci-static/resources/view/homeproxy/server.js:693 msgid "Both" msgstr "" @@ -244,7 +244,7 @@ msgstr "" msgid "Bypass mainland China traffic via firewall rules by default." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:502 +#: htdocs/luci-static/resources/view/homeproxy/server.js:507 msgid "CA provider" msgstr "" @@ -261,7 +261,7 @@ msgid "Cancel" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1167 -#: htdocs/luci-static/resources/view/homeproxy/server.js:618 +#: htdocs/luci-static/resources/view/homeproxy/server.js:623 msgid "Certificate path" msgstr "" @@ -294,7 +294,7 @@ msgid "Chrome" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1153 -#: htdocs/luci-static/resources/view/homeproxy/server.js:460 +#: htdocs/luci-static/resources/view/homeproxy/server.js:465 msgid "Cipher suites" msgstr "" @@ -314,7 +314,7 @@ msgstr "" msgid "CloudFlare Public DNS (1.1.1.1)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:517 +#: htdocs/luci-static/resources/view/homeproxy/server.js:522 msgid "Cloudflare" msgstr "" @@ -329,7 +329,7 @@ msgid "Common ports only (bypass P2P traffic)" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:810 -#: htdocs/luci-static/resources/view/homeproxy/server.js:266 +#: htdocs/luci-static/resources/view/homeproxy/server.js:271 msgid "Congestion control algorithm" msgstr "" @@ -357,7 +357,7 @@ msgstr "" msgid "DNS Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:515 +#: htdocs/luci-static/resources/view/homeproxy/server.js:520 msgid "DNS provider" msgstr "" @@ -370,7 +370,7 @@ msgstr "" msgid "DNS server" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:510 +#: htdocs/luci-static/resources/view/homeproxy/server.js:515 msgid "DNS01 challenge" msgstr "" @@ -407,7 +407,7 @@ msgstr "" msgid "Default packet encoding" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:481 +#: htdocs/luci-static/resources/view/homeproxy/server.js:486 msgid "Default server name" msgstr "" @@ -447,8 +447,8 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:643 #: htdocs/luci-static/resources/view/homeproxy/node.js:1207 #: htdocs/luci-static/resources/view/homeproxy/node.js:1320 -#: htdocs/luci-static/resources/view/homeproxy/server.js:189 -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 +#: htdocs/luci-static/resources/view/homeproxy/server.js:194 +#: htdocs/luci-static/resources/view/homeproxy/server.js:206 msgid "Disable" msgstr "" @@ -456,16 +456,16 @@ msgstr "" msgid "Disable DNS cache" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:543 +#: htdocs/luci-static/resources/view/homeproxy/server.js:548 msgid "Disable HTTP challenge" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:679 -#: htdocs/luci-static/resources/view/homeproxy/server.js:232 +#: htdocs/luci-static/resources/view/homeproxy/server.js:237 msgid "Disable Path MTU discovery" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:548 +#: htdocs/luci-static/resources/view/homeproxy/server.js:553 msgid "Disable TLS ALPN challenge" msgstr "" @@ -486,7 +486,7 @@ msgid "Disable dynamic record sizing" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:680 -#: htdocs/luci-static/resources/view/homeproxy/server.js:233 +#: htdocs/luci-static/resources/view/homeproxy/server.js:238 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " "(IPv4) / 1232 (IPv6) bytes in size." @@ -508,7 +508,7 @@ msgid "Domain regex" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:353 -#: htdocs/luci-static/resources/view/homeproxy/server.js:679 +#: htdocs/luci-static/resources/view/homeproxy/server.js:684 msgid "Domain strategy" msgstr "" @@ -517,7 +517,7 @@ msgstr "" msgid "Domain suffix" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:475 +#: htdocs/luci-static/resources/view/homeproxy/server.js:480 msgid "Domains" msgstr "" @@ -532,7 +532,7 @@ msgstr "" msgid "Drop/keep specific nodes from subscriptions." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:566 +#: htdocs/luci-static/resources/view/homeproxy/server.js:571 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 " @@ -551,16 +551,16 @@ msgid "ECH config" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:982 -#: htdocs/luci-static/resources/view/homeproxy/server.js:387 +#: htdocs/luci-static/resources/view/homeproxy/server.js:392 msgid "Early data" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:989 -#: htdocs/luci-static/resources/view/homeproxy/server.js:394 +#: htdocs/luci-static/resources/view/homeproxy/server.js:399 msgid "Early data header name" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:395 +#: htdocs/luci-static/resources/view/homeproxy/server.js:400 msgid "Early data is sent in path instead of header by default." msgstr "" @@ -572,7 +572,7 @@ msgstr "" msgid "Edit nodes" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:487 +#: htdocs/luci-static/resources/view/homeproxy/server.js:492 msgid "Email" msgstr "" @@ -586,7 +586,7 @@ msgid "Enable" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:835 -#: htdocs/luci-static/resources/view/homeproxy/server.js:283 +#: htdocs/luci-static/resources/view/homeproxy/server.js:288 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.
A 404 page will be " "returned if empty." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:605 +#: htdocs/luci-static/resources/view/homeproxy/server.js:610 msgid "Handshake server address" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:611 +#: htdocs/luci-static/resources/view/homeproxy/server.js:616 msgid "Handshake server port" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:841 -#: htdocs/luci-static/resources/view/homeproxy/server.js:289 +#: htdocs/luci-static/resources/view/homeproxy/server.js:294 msgid "Heartbeat interval" msgstr "" @@ -818,12 +818,12 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:941 #: htdocs/luci-static/resources/view/homeproxy/node.js:974 -#: htdocs/luci-static/resources/view/homeproxy/server.js:349 -#: htdocs/luci-static/resources/view/homeproxy/server.js:379 +#: htdocs/luci-static/resources/view/homeproxy/server.js:354 +#: htdocs/luci-static/resources/view/homeproxy/server.js:384 msgid "Host" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 +#: htdocs/luci-static/resources/view/homeproxy/server.js:281 msgid "" "How long the server should wait for the client to send the authentication " "command (in seconds)." @@ -869,7 +869,7 @@ msgid "IPv6 support" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:956 -#: htdocs/luci-static/resources/view/homeproxy/server.js:362 +#: htdocs/luci-static/resources/view/homeproxy/server.js:367 msgid "Idle timeout" msgstr "" @@ -879,7 +879,7 @@ msgid "" "connections." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:680 +#: htdocs/luci-static/resources/view/homeproxy/server.js:685 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "" @@ -891,7 +891,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/server.js:334 +#: htdocs/luci-static/resources/view/homeproxy/server.js:339 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." @@ -903,7 +903,7 @@ msgid "" "insecure." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:238 +#: htdocs/luci-static/resources/view/homeproxy/server.js:243 msgid "Ignore client bandwidth" msgstr "" @@ -922,7 +922,7 @@ msgid "Interface Control" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:842 -#: htdocs/luci-static/resources/view/homeproxy/server.js:290 +#: htdocs/luci-static/resources/view/homeproxy/server.js:295 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." @@ -938,7 +938,7 @@ msgstr "" msgid "Invert match result." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:641 msgid "Key path" msgstr "" @@ -960,7 +960,7 @@ msgid "Label" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:857 -#: htdocs/luci-static/resources/view/homeproxy/server.js:305 +#: htdocs/luci-static/resources/view/homeproxy/server.js:310 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." @@ -970,7 +970,7 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:504 +#: htdocs/luci-static/resources/view/homeproxy/server.js:509 msgid "Let's Encrypt" msgstr "" @@ -980,14 +980,22 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1124 -#: htdocs/luci-static/resources/view/homeproxy/server.js:440 +#: htdocs/luci-static/resources/view/homeproxy/server.js:445 msgid "List of supported application level protocols, in order of preference." msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/server.js:119 +msgid "Listen address" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/client.js:841 msgid "Listen interfaces" msgstr "" +#: htdocs/luci-static/resources/view/homeproxy/server.js:124 +msgid "Listen port" +msgstr "" + #: htdocs/luci-static/resources/view/homeproxy/status.js:126 msgid "Loading" msgstr "" @@ -1016,7 +1024,7 @@ msgstr "" msgid "Main node" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:244 +#: htdocs/luci-static/resources/view/homeproxy/server.js:249 msgid "Masquerade" msgstr "" @@ -1104,31 +1112,31 @@ msgid "Match user name." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:653 -#: htdocs/luci-static/resources/view/homeproxy/server.js:174 +#: htdocs/luci-static/resources/view/homeproxy/server.js:179 msgid "Max download speed" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:654 -#: htdocs/luci-static/resources/view/homeproxy/server.js:175 +#: htdocs/luci-static/resources/view/homeproxy/server.js:180 msgid "Max download speed in Mbps." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:600 +#: htdocs/luci-static/resources/view/homeproxy/server.js:605 msgid "Max time difference" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:660 -#: htdocs/luci-static/resources/view/homeproxy/server.js:181 +#: htdocs/luci-static/resources/view/homeproxy/server.js:186 msgid "Max upload speed" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:661 -#: htdocs/luci-static/resources/view/homeproxy/server.js:182 +#: htdocs/luci-static/resources/view/homeproxy/server.js:187 msgid "Max upload speed in Mbps." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1145 -#: htdocs/luci-static/resources/view/homeproxy/server.js:452 +#: htdocs/luci-static/resources/view/homeproxy/server.js:457 msgid "Maximum TLS version" msgstr "" @@ -1148,12 +1156,12 @@ msgid "Maximum streams" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:950 -#: htdocs/luci-static/resources/view/homeproxy/server.js:358 +#: htdocs/luci-static/resources/view/homeproxy/server.js:363 msgid "Method" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1137 -#: htdocs/luci-static/resources/view/homeproxy/server.js:444 +#: htdocs/luci-static/resources/view/homeproxy/server.js:449 msgid "Minimum TLS version" msgstr "" @@ -1180,7 +1188,7 @@ msgid "Mode" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1256 -#: htdocs/luci-static/resources/view/homeproxy/server.js:663 +#: htdocs/luci-static/resources/view/homeproxy/server.js:668 msgid "MultiPath TCP" msgstr "" @@ -1211,7 +1219,7 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:444 #: htdocs/luci-static/resources/view/homeproxy/client.js:710 -#: htdocs/luci-static/resources/view/homeproxy/server.js:685 +#: htdocs/luci-static/resources/view/homeproxy/server.js:690 msgid "Network" msgstr "" @@ -1221,13 +1229,13 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:889 #: htdocs/luci-static/resources/view/homeproxy/node.js:905 -#: htdocs/luci-static/resources/view/homeproxy/server.js:313 -#: htdocs/luci-static/resources/view/homeproxy/server.js:326 +#: htdocs/luci-static/resources/view/homeproxy/server.js:318 +#: htdocs/luci-static/resources/view/homeproxy/server.js:331 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:903 -#: htdocs/luci-static/resources/view/homeproxy/server.js:324 +#: htdocs/luci-static/resources/view/homeproxy/server.js:329 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "" @@ -1259,8 +1267,8 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:616 #: htdocs/luci-static/resources/view/homeproxy/node.js:851 #: htdocs/luci-static/resources/view/homeproxy/node.js:890 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 -#: htdocs/luci-static/resources/view/homeproxy/server.js:314 +#: htdocs/luci-static/resources/view/homeproxy/server.js:304 +#: htdocs/luci-static/resources/view/homeproxy/server.js:319 msgid "None" msgstr "" @@ -1273,12 +1281,12 @@ msgid "Obfs param" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:648 -#: htdocs/luci-static/resources/view/homeproxy/server.js:206 +#: htdocs/luci-static/resources/view/homeproxy/server.js:211 msgid "Obfuscate password" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:642 -#: htdocs/luci-static/resources/view/homeproxy/server.js:200 +#: htdocs/luci-static/resources/view/homeproxy/server.js:205 msgid "Obfuscate type" msgstr "" @@ -1306,7 +1314,7 @@ msgid "Override address" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:298 -#: htdocs/luci-static/resources/view/homeproxy/server.js:675 +#: htdocs/luci-static/resources/view/homeproxy/server.js:680 msgid "Override destination" msgstr "" @@ -1315,7 +1323,7 @@ msgid "Override port" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:299 -#: htdocs/luci-static/resources/view/homeproxy/server.js:676 +#: htdocs/luci-static/resources/view/homeproxy/server.js:681 msgid "Override the connection destination address with the sniffed domain." msgstr "" @@ -1336,14 +1344,14 @@ msgid "Packet encoding" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:572 -#: htdocs/luci-static/resources/view/homeproxy/server.js:130 +#: htdocs/luci-static/resources/view/homeproxy/server.js:135 msgid "Password" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:946 #: htdocs/luci-static/resources/view/homeproxy/node.js:978 -#: htdocs/luci-static/resources/view/homeproxy/server.js:354 -#: htdocs/luci-static/resources/view/homeproxy/server.js:383 +#: htdocs/luci-static/resources/view/homeproxy/server.js:359 +#: htdocs/luci-static/resources/view/homeproxy/server.js:388 msgid "Path" msgstr "" @@ -1358,7 +1366,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:964 -#: htdocs/luci-static/resources/view/homeproxy/server.js:370 +#: htdocs/luci-static/resources/view/homeproxy/server.js:375 msgid "Ping timeout" msgstr "" @@ -1373,7 +1381,6 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:505 #: htdocs/luci-static/resources/view/homeproxy/client.js:768 #: htdocs/luci-static/resources/view/homeproxy/node.js:562 -#: htdocs/luci-static/resources/view/homeproxy/server.js:119 msgid "Port" msgstr "" @@ -1417,7 +1424,7 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:619 #: htdocs/luci-static/resources/view/homeproxy/node.js:747 #: htdocs/luci-static/resources/view/homeproxy/node.js:1056 -#: htdocs/luci-static/resources/view/homeproxy/server.js:163 +#: htdocs/luci-static/resources/view/homeproxy/server.js:168 msgid "Protocol" msgstr "" @@ -1477,35 +1484,35 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:719 #: htdocs/luci-static/resources/view/homeproxy/node.js:824 #: htdocs/luci-static/resources/view/homeproxy/node.js:893 -#: htdocs/luci-static/resources/view/homeproxy/server.js:317 +#: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "QUIC" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:811 -#: htdocs/luci-static/resources/view/homeproxy/server.js:267 +#: htdocs/luci-static/resources/view/homeproxy/server.js:272 msgid "QUIC congestion control algorithm." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:673 -#: htdocs/luci-static/resources/view/homeproxy/server.js:218 +#: htdocs/luci-static/resources/view/homeproxy/server.js:223 msgid "QUIC connection receive window" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:225 +#: htdocs/luci-static/resources/view/homeproxy/server.js:230 msgid "QUIC maximum concurrent bidirectional streams" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:667 -#: htdocs/luci-static/resources/view/homeproxy/server.js:211 +#: htdocs/luci-static/resources/view/homeproxy/server.js:216 msgid "QUIC stream receive window" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1234 -#: htdocs/luci-static/resources/view/homeproxy/server.js:584 +#: htdocs/luci-static/resources/view/homeproxy/server.js:589 msgid "REALITY" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:590 +#: htdocs/luci-static/resources/view/homeproxy/server.js:595 msgid "REALITY private key" msgstr "" @@ -1514,7 +1521,7 @@ msgid "REALITY public key" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1244 -#: htdocs/luci-static/resources/view/homeproxy/server.js:595 +#: htdocs/luci-static/resources/view/homeproxy/server.js:600 msgid "REALITY short ID" msgstr "" @@ -1555,7 +1562,7 @@ msgstr "" msgid "Refresh every %s seconds." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:533 +#: htdocs/luci-static/resources/view/homeproxy/server.js:538 msgid "Region ID" msgstr "" @@ -1621,7 +1628,7 @@ msgid "Safari" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:644 -#: htdocs/luci-static/resources/view/homeproxy/server.js:202 +#: htdocs/luci-static/resources/view/homeproxy/server.js:207 msgid "Salamander" msgstr "" @@ -1646,7 +1653,7 @@ msgstr "" msgid "Server Settings" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:482 +#: htdocs/luci-static/resources/view/homeproxy/server.js:487 msgid "" "Server name to use when choosing a certificate if the ClientHello's " "ServerName field is empty." @@ -1735,8 +1742,8 @@ msgid "" "will be executed every interval." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:331 -#: htdocs/luci-static/resources/view/homeproxy/server.js:363 +#: htdocs/luci-static/resources/view/homeproxy/server.js:336 +#: htdocs/luci-static/resources/view/homeproxy/server.js:368 msgid "" "Specifies the time (in seconds) until idle clients should be closed with a " "GOAWAY frame. PING frames are not considered as activity." @@ -1758,7 +1765,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:633 -#: htdocs/luci-static/resources/view/homeproxy/server.js:191 +#: htdocs/luci-static/resources/view/homeproxy/server.js:196 msgid "String" msgstr "" @@ -1791,12 +1798,12 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:445 #: htdocs/luci-static/resources/view/homeproxy/client.js:711 -#: htdocs/luci-static/resources/view/homeproxy/server.js:686 +#: htdocs/luci-static/resources/view/homeproxy/server.js:691 msgid "TCP" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1251 -#: htdocs/luci-static/resources/view/homeproxy/server.js:656 +#: htdocs/luci-static/resources/view/homeproxy/server.js:661 msgid "TCP fast open" msgstr "" @@ -1811,22 +1818,22 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:452 #: htdocs/luci-static/resources/view/homeproxy/client.js:718 #: htdocs/luci-static/resources/view/homeproxy/node.js:1091 -#: htdocs/luci-static/resources/view/homeproxy/server.js:406 +#: htdocs/luci-static/resources/view/homeproxy/server.js:411 msgid "TLS" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1123 -#: htdocs/luci-static/resources/view/homeproxy/server.js:439 +#: htdocs/luci-static/resources/view/homeproxy/server.js:444 msgid "TLS ALPN" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1118 -#: htdocs/luci-static/resources/view/homeproxy/server.js:433 +#: htdocs/luci-static/resources/view/homeproxy/server.js:438 msgid "TLS SNI" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:901 -#: htdocs/luci-static/resources/view/homeproxy/server.js:322 +#: htdocs/luci-static/resources/view/homeproxy/server.js:327 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "" @@ -1848,7 +1855,7 @@ msgstr "" msgid "Tag of the target outbound." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:239 +#: htdocs/luci-static/resources/view/homeproxy/server.js:244 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "" @@ -1858,7 +1865,7 @@ msgstr "" msgid "Tencent Public DNS (119.29.29.29)" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:503 +#: htdocs/luci-static/resources/view/homeproxy/server.js:508 msgid "The ACME CA provider to use." msgstr "" @@ -1867,12 +1874,12 @@ msgid "The DNS strategy for resolving the domain name in the address." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:674 -#: htdocs/luci-static/resources/view/homeproxy/server.js:219 +#: htdocs/luci-static/resources/view/homeproxy/server.js:224 msgid "The QUIC connection-level flow control window for receiving data." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:668 -#: htdocs/luci-static/resources/view/homeproxy/server.js:212 +#: htdocs/luci-static/resources/view/homeproxy/server.js:217 msgid "The QUIC stream-level flow control window for receiving data." msgstr "" @@ -1880,13 +1887,13 @@ msgstr "" msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:554 +#: htdocs/luci-static/resources/view/homeproxy/server.js:559 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:560 +#: htdocs/luci-static/resources/view/homeproxy/server.js:565 msgid "" "The alternate port to use for the ACME TLS-ALPN challenge; the system must " "forward 443 to this port for challenge to succeed." @@ -1915,35 +1922,35 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1154 -#: htdocs/luci-static/resources/view/homeproxy/server.js:461 +#: htdocs/luci-static/resources/view/homeproxy/server.js:466 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:488 +#: htdocs/luci-static/resources/view/homeproxy/server.js:493 msgid "" "The email address to use when creating or selecting an existing ACME server " "account." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1146 -#: htdocs/luci-static/resources/view/homeproxy/server.js:453 +#: htdocs/luci-static/resources/view/homeproxy/server.js:458 msgid "The maximum TLS version that is acceptable." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:226 +#: htdocs/luci-static/resources/view/homeproxy/server.js:231 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:601 +#: htdocs/luci-static/resources/view/homeproxy/server.js:606 msgid "The maximum time difference between the server and the client." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1138 -#: htdocs/luci-static/resources/view/homeproxy/server.js:445 +#: htdocs/luci-static/resources/view/homeproxy/server.js:450 msgid "The minimum TLS version that is acceptable." msgstr "" @@ -1960,15 +1967,15 @@ msgstr "" msgid "The path to the server certificate, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:120 +#: htdocs/luci-static/resources/view/homeproxy/server.js:125 msgid "The port must be unique." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:637 +#: htdocs/luci-static/resources/view/homeproxy/server.js:642 msgid "The server private key, in PEM format." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:619 +#: htdocs/luci-static/resources/view/homeproxy/server.js:624 msgid "The server public key, in PEM format." msgstr "" @@ -1979,7 +1986,7 @@ msgid "" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:921 -#: htdocs/luci-static/resources/view/homeproxy/server.js:371 +#: htdocs/luci-static/resources/view/homeproxy/server.js:376 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 " @@ -1999,14 +2006,14 @@ msgid "" "QUIC stream based UDP relay mode that TUIC does not provide." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:397 +#: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "" "To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:888 -#: htdocs/luci-static/resources/view/homeproxy/server.js:312 +#: htdocs/luci-static/resources/view/homeproxy/server.js:317 msgid "Transport" msgstr "" @@ -2031,12 +2038,12 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:446 #: htdocs/luci-static/resources/view/homeproxy/client.js:712 -#: htdocs/luci-static/resources/view/homeproxy/server.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:692 msgid "UDP" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1261 -#: htdocs/luci-static/resources/view/homeproxy/server.js:669 +#: htdocs/luci-static/resources/view/homeproxy/server.js:674 msgid "UDP Fragment" msgstr "" @@ -2057,7 +2064,7 @@ msgid "UDP relay mode" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:803 -#: htdocs/luci-static/resources/view/homeproxy/server.js:259 +#: htdocs/luci-static/resources/view/homeproxy/server.js:264 msgid "UUID" msgstr "" @@ -2098,17 +2105,17 @@ msgid "Update via proxy" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1174 -#: htdocs/luci-static/resources/view/homeproxy/server.js:628 +#: htdocs/luci-static/resources/view/homeproxy/server.js:633 msgid "Upload certificate" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:646 +#: htdocs/luci-static/resources/view/homeproxy/server.js:651 msgid "Upload key" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1177 -#: htdocs/luci-static/resources/view/homeproxy/server.js:631 -#: htdocs/luci-static/resources/view/homeproxy/server.js:649 +#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:654 msgid "Upload..." msgstr "" @@ -2116,7 +2123,7 @@ msgstr "" msgid "Upstream archived. Not recommended." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:470 +#: htdocs/luci-static/resources/view/homeproxy/server.js:475 msgid "Use ACME TLS certificate issuer." msgstr "" @@ -2130,7 +2137,7 @@ msgid "Use DNS server from WAN + 114DNS" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1119 -#: htdocs/luci-static/resources/view/homeproxy/server.js:434 +#: htdocs/luci-static/resources/view/homeproxy/server.js:439 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." @@ -2142,7 +2149,7 @@ msgid "User" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:567 -#: htdocs/luci-static/resources/view/homeproxy/server.js:124 +#: htdocs/luci-static/resources/view/homeproxy/server.js:129 msgid "Username" msgstr "" @@ -2161,7 +2168,7 @@ msgid "WAN IP Policy" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:894 -#: htdocs/luci-static/resources/view/homeproxy/server.js:318 +#: htdocs/luci-static/resources/view/homeproxy/server.js:323 msgid "WebSocket" msgstr "" @@ -2207,19 +2214,19 @@ msgstr "" msgid "Your %s was successfully uploaded. Size: %sB." msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 +#: htdocs/luci-static/resources/view/homeproxy/server.js:510 msgid "ZeroSSL" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/server.js:633 +#: htdocs/luci-static/resources/view/homeproxy/server.js:638 msgid "certificate" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:1139 #: htdocs/luci-static/resources/view/homeproxy/node.js:1147 -#: htdocs/luci-static/resources/view/homeproxy/server.js:446 -#: htdocs/luci-static/resources/view/homeproxy/server.js:454 +#: htdocs/luci-static/resources/view/homeproxy/server.js:451 +#: htdocs/luci-static/resources/view/homeproxy/server.js:459 msgid "default" msgstr "" @@ -2228,7 +2235,7 @@ msgid "failed" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:891 -#: htdocs/luci-static/resources/view/homeproxy/server.js:315 +#: htdocs/luci-static/resources/view/homeproxy/server.js:320 msgid "gRPC" msgstr "" @@ -2237,7 +2244,7 @@ msgid "gRPC permit without stream" msgstr "" #: htdocs/luci-static/resources/view/homeproxy/node.js:927 -#: htdocs/luci-static/resources/view/homeproxy/server.js:342 +#: htdocs/luci-static/resources/view/homeproxy/server.js:347 msgid "gRPC service name" msgstr "" @@ -2254,7 +2261,7 @@ msgstr "" #: htdocs/luci-static/resources/view/homeproxy/client.js:173 #: htdocs/luci-static/resources/view/homeproxy/node.js:599 #: htdocs/luci-static/resources/view/homeproxy/node.js:1223 -#: htdocs/luci-static/resources/view/homeproxy/server.js:154 +#: htdocs/luci-static/resources/view/homeproxy/server.js:159 msgid "non-empty value" msgstr "" @@ -2273,7 +2280,7 @@ msgstr "" msgid "passed" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:651 +#: htdocs/luci-static/resources/view/homeproxy/server.js:656 msgid "private key" msgstr "" diff --git a/homeproxy/po/zh_Hans/homeproxy.po b/homeproxy/po/zh_Hans/homeproxy.po index 56700280b..2c222f45f 100644 --- a/homeproxy/po/zh_Hans/homeproxy.po +++ b/homeproxy/po/zh_Hans/homeproxy.po @@ -25,12 +25,12 @@ msgid "4 or 6. Not limited if empty." msgstr "4 或 6。留空不限制。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1175 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 -#: htdocs/luci-static/resources/view/homeproxy/server.js:647 +#: htdocs/luci-static/resources/view/homeproxy/server.js:634 +#: htdocs/luci-static/resources/view/homeproxy/server.js:652 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" -#: htdocs/luci-static/resources/view/homeproxy/server.js:538 +#: htdocs/luci-static/resources/view/homeproxy/server.js:543 msgid "API token" msgstr "API 令牌" @@ -38,11 +38,11 @@ msgstr "API 令牌" msgid "Access Control" msgstr "访问控制" -#: htdocs/luci-static/resources/view/homeproxy/server.js:523 +#: htdocs/luci-static/resources/view/homeproxy/server.js:528 msgid "Access key ID" msgstr "访问密钥 ID" -#: htdocs/luci-static/resources/view/homeproxy/server.js:528 +#: htdocs/luci-static/resources/view/homeproxy/server.js:533 msgid "Access key secret" msgstr "访问密钥" @@ -83,7 +83,7 @@ msgstr "地址解析器" msgid "Address strategy" msgstr "地址解析策略" -#: htdocs/luci-static/resources/view/homeproxy/server.js:516 +#: htdocs/luci-static/resources/view/homeproxy/server.js:521 msgid "Alibaba Cloud DNS" msgstr "阿里云 DNS" @@ -110,7 +110,7 @@ msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "从订阅获取节点时,默认允许不安全连接。" #: htdocs/luci-static/resources/view/homeproxy/node.js:983 -#: htdocs/luci-static/resources/view/homeproxy/server.js:388 +#: htdocs/luci-static/resources/view/homeproxy/server.js:393 msgid "Allowed payload size is in the request." msgstr "请求中允许的载荷大小。" @@ -123,15 +123,15 @@ msgid "Already in updating." msgstr "已在更新中。" #: htdocs/luci-static/resources/view/homeproxy/node.js:856 -#: htdocs/luci-static/resources/view/homeproxy/server.js:304 +#: htdocs/luci-static/resources/view/homeproxy/server.js:309 msgid "Alter ID" msgstr "额外 ID" -#: htdocs/luci-static/resources/view/homeproxy/server.js:553 +#: htdocs/luci-static/resources/view/homeproxy/server.js:558 msgid "Alternative HTTP port" msgstr "替代 HTTP 端口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:559 +#: htdocs/luci-static/resources/view/homeproxy/server.js:564 msgid "Alternative TLS port" msgstr "替代 HTTPS 端口" @@ -160,7 +160,7 @@ msgstr "应用" msgid "Are you sure to allow insecure?" msgstr "确定要允许不安全连接吗?" -#: htdocs/luci-static/resources/view/homeproxy/server.js:275 +#: htdocs/luci-static/resources/view/homeproxy/server.js:280 msgid "Auth timeout" msgstr "认证超时" @@ -169,12 +169,12 @@ msgid "Authenticated length" msgstr "认证长度" #: htdocs/luci-static/resources/view/homeproxy/node.js:637 -#: htdocs/luci-static/resources/view/homeproxy/server.js:195 +#: htdocs/luci-static/resources/view/homeproxy/server.js:200 msgid "Authentication payload" msgstr "认证载荷" #: htdocs/luci-static/resources/view/homeproxy/node.js:630 -#: htdocs/luci-static/resources/view/homeproxy/server.js:188 +#: htdocs/luci-static/resources/view/homeproxy/server.js:193 msgid "Authentication type" msgstr "认证类型" @@ -199,7 +199,7 @@ msgid "BaiDu" msgstr "百度" #: htdocs/luci-static/resources/view/homeproxy/node.js:632 -#: htdocs/luci-static/resources/view/homeproxy/server.js:190 +#: htdocs/luci-static/resources/view/homeproxy/server.js:195 msgid "Base64" msgstr "Base64" @@ -235,7 +235,7 @@ msgstr "封锁 DNS 请求" #: htdocs/luci-static/resources/view/homeproxy/client.js:426 #: htdocs/luci-static/resources/view/homeproxy/client.js:447 #: htdocs/luci-static/resources/view/homeproxy/client.js:713 -#: htdocs/luci-static/resources/view/homeproxy/server.js:688 +#: htdocs/luci-static/resources/view/homeproxy/server.js:693 msgid "Both" msgstr "全部" @@ -251,7 +251,7 @@ msgstr "大陆白名单" msgid "Bypass mainland China traffic via firewall rules by default." msgstr "默认使用防火墙规则绕过中国大陆流量。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:502 +#: htdocs/luci-static/resources/view/homeproxy/server.js:507 msgid "CA provider" msgstr "CA 颁发机构" @@ -268,7 +268,7 @@ msgid "Cancel" msgstr "取消" #: htdocs/luci-static/resources/view/homeproxy/node.js:1167 -#: htdocs/luci-static/resources/view/homeproxy/server.js:618 +#: htdocs/luci-static/resources/view/homeproxy/server.js:623 msgid "Certificate path" msgstr "证书路径" @@ -301,7 +301,7 @@ msgid "Chrome" msgstr "Chrome" #: htdocs/luci-static/resources/view/homeproxy/node.js:1153 -#: htdocs/luci-static/resources/view/homeproxy/server.js:460 +#: htdocs/luci-static/resources/view/homeproxy/server.js:465 msgid "Cipher suites" msgstr "密码套件" @@ -321,7 +321,7 @@ msgstr "客户端设置" msgid "CloudFlare Public DNS (1.1.1.1)" msgstr "CloudFlare 公共 DNS(1.1.1.1)" -#: htdocs/luci-static/resources/view/homeproxy/server.js:517 +#: htdocs/luci-static/resources/view/homeproxy/server.js:522 msgid "Cloudflare" msgstr "Cloudflare" @@ -336,7 +336,7 @@ msgid "Common ports only (bypass P2P traffic)" msgstr "仅常用端口(绕过 P2P 流量)" #: htdocs/luci-static/resources/view/homeproxy/node.js:810 -#: htdocs/luci-static/resources/view/homeproxy/server.js:266 +#: htdocs/luci-static/resources/view/homeproxy/server.js:271 msgid "Congestion control algorithm" msgstr "拥塞控制算法" @@ -364,7 +364,7 @@ msgstr "DNS 服务器" msgid "DNS Settings" msgstr "DNS 设置" -#: htdocs/luci-static/resources/view/homeproxy/server.js:515 +#: htdocs/luci-static/resources/view/homeproxy/server.js:520 msgid "DNS provider" msgstr "DNS 提供商" @@ -377,7 +377,7 @@ msgstr "DNS 规则" msgid "DNS server" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/server.js:510 +#: htdocs/luci-static/resources/view/homeproxy/server.js:515 msgid "DNS01 challenge" msgstr "DNS01 验证" @@ -414,7 +414,7 @@ msgstr "默认出站" msgid "Default packet encoding" msgstr "默认包封装格式" -#: htdocs/luci-static/resources/view/homeproxy/server.js:481 +#: htdocs/luci-static/resources/view/homeproxy/server.js:486 msgid "Default server name" msgstr "默认服务器名称" @@ -454,8 +454,8 @@ msgstr "直连 MAC 地址" #: htdocs/luci-static/resources/view/homeproxy/node.js:643 #: htdocs/luci-static/resources/view/homeproxy/node.js:1207 #: htdocs/luci-static/resources/view/homeproxy/node.js:1320 -#: htdocs/luci-static/resources/view/homeproxy/server.js:189 -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 +#: htdocs/luci-static/resources/view/homeproxy/server.js:194 +#: htdocs/luci-static/resources/view/homeproxy/server.js:206 msgid "Disable" msgstr "禁用" @@ -463,16 +463,16 @@ msgstr "禁用" msgid "Disable DNS cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/server.js:543 +#: htdocs/luci-static/resources/view/homeproxy/server.js:548 msgid "Disable HTTP challenge" msgstr "禁用 HTTP 验证" #: htdocs/luci-static/resources/view/homeproxy/node.js:679 -#: htdocs/luci-static/resources/view/homeproxy/server.js:232 +#: htdocs/luci-static/resources/view/homeproxy/server.js:237 msgid "Disable Path MTU discovery" msgstr "禁用路径 MTU 探测" -#: htdocs/luci-static/resources/view/homeproxy/server.js:548 +#: htdocs/luci-static/resources/view/homeproxy/server.js:553 msgid "Disable TLS ALPN challenge" msgstr "禁用 TLS ALPN 认证" @@ -493,7 +493,7 @@ msgid "Disable dynamic record sizing" msgstr "禁用动态记录大小" #: htdocs/luci-static/resources/view/homeproxy/node.js:680 -#: htdocs/luci-static/resources/view/homeproxy/server.js:233 +#: htdocs/luci-static/resources/view/homeproxy/server.js:238 msgid "" "Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 " "(IPv4) / 1232 (IPv6) bytes in size." @@ -517,7 +517,7 @@ msgid "Domain regex" msgstr "域名正则表达式" #: htdocs/luci-static/resources/view/homeproxy/client.js:353 -#: htdocs/luci-static/resources/view/homeproxy/server.js:679 +#: htdocs/luci-static/resources/view/homeproxy/server.js:684 msgid "Domain strategy" msgstr "域名解析策略" @@ -526,7 +526,7 @@ msgstr "域名解析策略" msgid "Domain suffix" msgstr "域名后缀" -#: htdocs/luci-static/resources/view/homeproxy/server.js:475 +#: htdocs/luci-static/resources/view/homeproxy/server.js:480 msgid "Domains" msgstr "域名" @@ -544,7 +544,7 @@ msgstr "" msgid "Drop/keep specific nodes from subscriptions." msgstr "从订阅中 丢弃/保留 指定节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:566 +#: htdocs/luci-static/resources/view/homeproxy/server.js:571 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 " @@ -568,16 +568,16 @@ msgid "ECH config" msgstr "ECH 配置" #: htdocs/luci-static/resources/view/homeproxy/node.js:982 -#: htdocs/luci-static/resources/view/homeproxy/server.js:387 +#: htdocs/luci-static/resources/view/homeproxy/server.js:392 msgid "Early data" msgstr "前置数据" #: htdocs/luci-static/resources/view/homeproxy/node.js:989 -#: htdocs/luci-static/resources/view/homeproxy/server.js:394 +#: htdocs/luci-static/resources/view/homeproxy/server.js:399 msgid "Early data header name" msgstr "前置数据标头" -#: htdocs/luci-static/resources/view/homeproxy/server.js:395 +#: htdocs/luci-static/resources/view/homeproxy/server.js:400 msgid "Early data is sent in path instead of header by default." msgstr "前置数据默认发送在路径而不是标头中。" @@ -589,7 +589,7 @@ msgstr "Edge" msgid "Edit nodes" msgstr "修改节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:487 +#: htdocs/luci-static/resources/view/homeproxy/server.js:492 msgid "Email" msgstr "Email" @@ -603,7 +603,7 @@ msgid "Enable" msgstr "启用" #: htdocs/luci-static/resources/view/homeproxy/node.js:835 -#: htdocs/luci-static/resources/view/homeproxy/server.js:283 +#: htdocs/luci-static/resources/view/homeproxy/server.js:288 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:834 -#: htdocs/luci-static/resources/view/homeproxy/server.js:282 +#: htdocs/luci-static/resources/view/homeproxy/server.js:287 msgid "Enable 0-RTT handshake" msgstr "启用 0-RTT 握手" -#: htdocs/luci-static/resources/view/homeproxy/server.js:469 +#: htdocs/luci-static/resources/view/homeproxy/server.js:474 msgid "Enable ACME" msgstr "启用 ACME" @@ -630,7 +630,7 @@ msgid "Enable PQ signature schemes" msgstr "启用 PQ 签名方案。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1262 -#: htdocs/luci-static/resources/view/homeproxy/server.js:670 +#: htdocs/luci-static/resources/view/homeproxy/server.js:675 msgid "Enable UDP fragmentation." msgstr "启用 UDP 分片。" @@ -642,7 +642,7 @@ msgstr "启用端点独立 NAT" msgid "Enable padding" msgstr "启用填充" -#: htdocs/luci-static/resources/view/homeproxy/server.js:657 +#: htdocs/luci-static/resources/view/homeproxy/server.js:662 msgid "Enable tcp fast open for listener." msgstr "为监听器启用 TCP 快速打开。" @@ -654,7 +654,7 @@ msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" #: htdocs/luci-static/resources/view/homeproxy/node.js:687 #: htdocs/luci-static/resources/view/homeproxy/node.js:719 #: htdocs/luci-static/resources/view/homeproxy/node.js:862 -#: htdocs/luci-static/resources/view/homeproxy/server.js:251 +#: htdocs/luci-static/resources/view/homeproxy/server.js:256 msgid "Encrypt method" msgstr "加密方式" @@ -677,21 +677,21 @@ msgstr "加密方式" #: htdocs/luci-static/resources/view/homeproxy/node.js:1223 #: htdocs/luci-static/resources/view/homeproxy/node.js:1308 #: htdocs/luci-static/resources/view/homeproxy/node.js:1311 -#: htdocs/luci-static/resources/view/homeproxy/server.js:154 -#: htdocs/luci-static/resources/view/homeproxy/server.js:493 -#: htdocs/luci-static/resources/view/homeproxy/server.js:495 +#: htdocs/luci-static/resources/view/homeproxy/server.js:159 +#: htdocs/luci-static/resources/view/homeproxy/server.js:498 +#: htdocs/luci-static/resources/view/homeproxy/server.js:500 msgid "Expecting: %s" msgstr "请输入:%s" -#: htdocs/luci-static/resources/view/homeproxy/server.js:565 +#: htdocs/luci-static/resources/view/homeproxy/server.js:570 msgid "External Account Binding" msgstr "外部账户绑定" -#: htdocs/luci-static/resources/view/homeproxy/server.js:577 +#: htdocs/luci-static/resources/view/homeproxy/server.js:582 msgid "External account MAC key" msgstr "外部账户 MAC 密钥" -#: htdocs/luci-static/resources/view/homeproxy/server.js:572 +#: htdocs/luci-static/resources/view/homeproxy/server.js:577 msgid "External account key ID" msgstr "外部账户密钥标识符" @@ -712,7 +712,7 @@ msgid "Firefox" msgstr "Firefox" #: htdocs/luci-static/resources/view/homeproxy/node.js:850 -#: htdocs/luci-static/resources/view/homeproxy/server.js:298 +#: htdocs/luci-static/resources/view/homeproxy/server.js:303 msgid "Flow" msgstr "流控" @@ -798,26 +798,26 @@ msgstr "授予 homeproxy 访问 UCI 配置的权限" #: htdocs/luci-static/resources/view/homeproxy/node.js:538 #: htdocs/luci-static/resources/view/homeproxy/node.js:892 #: htdocs/luci-static/resources/view/homeproxy/server.js:104 -#: htdocs/luci-static/resources/view/homeproxy/server.js:316 +#: htdocs/luci-static/resources/view/homeproxy/server.js:321 msgid "HTTP" msgstr "HTTP" -#: htdocs/luci-static/resources/view/homeproxy/server.js:245 +#: htdocs/luci-static/resources/view/homeproxy/server.js:250 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:605 +#: htdocs/luci-static/resources/view/homeproxy/server.js:610 msgid "Handshake server address" msgstr "握手服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:611 +#: htdocs/luci-static/resources/view/homeproxy/server.js:616 msgid "Handshake server port" msgstr "握手服务器端口" #: htdocs/luci-static/resources/view/homeproxy/node.js:841 -#: htdocs/luci-static/resources/view/homeproxy/server.js:289 +#: htdocs/luci-static/resources/view/homeproxy/server.js:294 msgid "Heartbeat interval" msgstr "心跳间隔" @@ -837,12 +837,12 @@ msgstr "HomeProxy 服务端" #: htdocs/luci-static/resources/view/homeproxy/node.js:941 #: htdocs/luci-static/resources/view/homeproxy/node.js:974 -#: htdocs/luci-static/resources/view/homeproxy/server.js:349 -#: htdocs/luci-static/resources/view/homeproxy/server.js:379 +#: htdocs/luci-static/resources/view/homeproxy/server.js:354 +#: htdocs/luci-static/resources/view/homeproxy/server.js:384 msgid "Host" msgstr "主机名" -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 +#: htdocs/luci-static/resources/view/homeproxy/server.js:281 msgid "" "How long the server should wait for the client to send the authentication " "command (in seconds)." @@ -888,7 +888,7 @@ msgid "IPv6 support" msgstr "IPv6 支持" #: htdocs/luci-static/resources/view/homeproxy/node.js:956 -#: htdocs/luci-static/resources/view/homeproxy/server.js:362 +#: htdocs/luci-static/resources/view/homeproxy/server.js:367 msgid "Idle timeout" msgstr "空闲超时" @@ -898,7 +898,7 @@ msgid "" "connections." msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:680 +#: htdocs/luci-static/resources/view/homeproxy/server.js:685 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。" @@ -911,7 +911,7 @@ msgstr "" "如果设置,服务器域名将在连接前被解析为 IP。
默认使用 dns.strategy。" #: htdocs/luci-static/resources/view/homeproxy/node.js:918 -#: htdocs/luci-static/resources/view/homeproxy/server.js:334 +#: htdocs/luci-static/resources/view/homeproxy/server.js:339 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." @@ -925,7 +925,7 @@ msgid "" "insecure." msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:238 +#: htdocs/luci-static/resources/view/homeproxy/server.js:243 msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" @@ -944,7 +944,7 @@ msgid "Interface Control" msgstr "接口控制" #: htdocs/luci-static/resources/view/homeproxy/node.js:842 -#: htdocs/luci-static/resources/view/homeproxy/server.js:290 +#: htdocs/luci-static/resources/view/homeproxy/server.js:295 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." @@ -960,7 +960,7 @@ msgstr "反转" msgid "Invert match result." msgstr "反转匹配结果" -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:641 msgid "Key path" msgstr "证书路径" @@ -982,7 +982,7 @@ msgid "Label" msgstr "标签" #: htdocs/luci-static/resources/view/homeproxy/node.js:857 -#: htdocs/luci-static/resources/view/homeproxy/server.js:305 +#: htdocs/luci-static/resources/view/homeproxy/server.js:310 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." @@ -994,7 +994,7 @@ msgstr "" msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:504 +#: htdocs/luci-static/resources/view/homeproxy/server.js:509 msgid "Let's Encrypt" msgstr "Let's Encrypt" @@ -1004,14 +1004,22 @@ msgid "" msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1124 -#: htdocs/luci-static/resources/view/homeproxy/server.js:440 +#: htdocs/luci-static/resources/view/homeproxy/server.js:445 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" +#: htdocs/luci-static/resources/view/homeproxy/server.js:119 +msgid "Listen address" +msgstr "监听地址" + #: htdocs/luci-static/resources/view/homeproxy/client.js:841 msgid "Listen interfaces" msgstr "监听接口" +#: htdocs/luci-static/resources/view/homeproxy/server.js:124 +msgid "Listen port" +msgstr "监听端口" + #: htdocs/luci-static/resources/view/homeproxy/status.js:126 msgid "Loading" msgstr "加载中" @@ -1040,7 +1048,7 @@ msgstr "主 UDP 节点" msgid "Main node" msgstr "主节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:244 +#: htdocs/luci-static/resources/view/homeproxy/server.js:249 msgid "Masquerade" msgstr "伪装" @@ -1128,31 +1136,31 @@ msgid "Match user name." msgstr "匹配用户名。" #: htdocs/luci-static/resources/view/homeproxy/node.js:653 -#: htdocs/luci-static/resources/view/homeproxy/server.js:174 +#: htdocs/luci-static/resources/view/homeproxy/server.js:179 msgid "Max download speed" msgstr "最大下载速度" #: htdocs/luci-static/resources/view/homeproxy/node.js:654 -#: htdocs/luci-static/resources/view/homeproxy/server.js:175 +#: htdocs/luci-static/resources/view/homeproxy/server.js:180 msgid "Max download speed in Mbps." msgstr "最大下载速度(Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:600 +#: htdocs/luci-static/resources/view/homeproxy/server.js:605 msgid "Max time difference" msgstr "最大时间差" #: htdocs/luci-static/resources/view/homeproxy/node.js:660 -#: htdocs/luci-static/resources/view/homeproxy/server.js:181 +#: htdocs/luci-static/resources/view/homeproxy/server.js:186 msgid "Max upload speed" msgstr "最大上传速度" #: htdocs/luci-static/resources/view/homeproxy/node.js:661 -#: htdocs/luci-static/resources/view/homeproxy/server.js:182 +#: htdocs/luci-static/resources/view/homeproxy/server.js:187 msgid "Max upload speed in Mbps." msgstr "最大上传速度(Mbps)。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1145 -#: htdocs/luci-static/resources/view/homeproxy/server.js:452 +#: htdocs/luci-static/resources/view/homeproxy/server.js:457 msgid "Maximum TLS version" msgstr "最大 TLS 版本" @@ -1174,12 +1182,12 @@ msgid "Maximum streams" msgstr "最大流数量" #: htdocs/luci-static/resources/view/homeproxy/node.js:950 -#: htdocs/luci-static/resources/view/homeproxy/server.js:358 +#: htdocs/luci-static/resources/view/homeproxy/server.js:363 msgid "Method" msgstr "方式" #: htdocs/luci-static/resources/view/homeproxy/node.js:1137 -#: htdocs/luci-static/resources/view/homeproxy/server.js:444 +#: htdocs/luci-static/resources/view/homeproxy/server.js:449 msgid "Minimum TLS version" msgstr "最低 TLS 版本" @@ -1206,7 +1214,7 @@ msgid "Mode" msgstr "模式" #: htdocs/luci-static/resources/view/homeproxy/node.js:1256 -#: htdocs/luci-static/resources/view/homeproxy/server.js:663 +#: htdocs/luci-static/resources/view/homeproxy/server.js:668 msgid "MultiPath TCP" msgstr "多路径 TCP(MPTCP)" @@ -1237,7 +1245,7 @@ msgstr "NaïveProxy" #: htdocs/luci-static/resources/view/homeproxy/client.js:444 #: htdocs/luci-static/resources/view/homeproxy/client.js:710 -#: htdocs/luci-static/resources/view/homeproxy/server.js:685 +#: htdocs/luci-static/resources/view/homeproxy/server.js:690 msgid "Network" msgstr "网络" @@ -1247,13 +1255,13 @@ msgstr "New Reno" #: htdocs/luci-static/resources/view/homeproxy/node.js:889 #: htdocs/luci-static/resources/view/homeproxy/node.js:905 -#: htdocs/luci-static/resources/view/homeproxy/server.js:313 -#: htdocs/luci-static/resources/view/homeproxy/server.js:326 +#: htdocs/luci-static/resources/view/homeproxy/server.js:318 +#: htdocs/luci-static/resources/view/homeproxy/server.js:331 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。" #: htdocs/luci-static/resources/view/homeproxy/node.js:903 -#: htdocs/luci-static/resources/view/homeproxy/server.js:324 +#: htdocs/luci-static/resources/view/homeproxy/server.js:329 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "无额外加密支持:它基本上是重复加密。" @@ -1285,8 +1293,8 @@ msgstr "节点" #: htdocs/luci-static/resources/view/homeproxy/client.js:616 #: htdocs/luci-static/resources/view/homeproxy/node.js:851 #: htdocs/luci-static/resources/view/homeproxy/node.js:890 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 -#: htdocs/luci-static/resources/view/homeproxy/server.js:314 +#: htdocs/luci-static/resources/view/homeproxy/server.js:304 +#: htdocs/luci-static/resources/view/homeproxy/server.js:319 msgid "None" msgstr "无" @@ -1299,12 +1307,12 @@ msgid "Obfs param" msgstr "混淆参数" #: htdocs/luci-static/resources/view/homeproxy/node.js:648 -#: htdocs/luci-static/resources/view/homeproxy/server.js:206 +#: htdocs/luci-static/resources/view/homeproxy/server.js:211 msgid "Obfuscate password" msgstr "混淆密码" #: htdocs/luci-static/resources/view/homeproxy/node.js:642 -#: htdocs/luci-static/resources/view/homeproxy/server.js:200 +#: htdocs/luci-static/resources/view/homeproxy/server.js:205 msgid "Obfuscate type" msgstr "混淆类型" @@ -1332,7 +1340,7 @@ msgid "Override address" msgstr "覆盖地址" #: htdocs/luci-static/resources/view/homeproxy/client.js:298 -#: htdocs/luci-static/resources/view/homeproxy/server.js:675 +#: htdocs/luci-static/resources/view/homeproxy/server.js:680 msgid "Override destination" msgstr "覆盖目标地址" @@ -1341,7 +1349,7 @@ msgid "Override port" msgstr "覆盖端口" #: htdocs/luci-static/resources/view/homeproxy/client.js:299 -#: htdocs/luci-static/resources/view/homeproxy/server.js:676 +#: htdocs/luci-static/resources/view/homeproxy/server.js:681 msgid "Override the connection destination address with the sniffed domain." msgstr "使用嗅探到的域名覆盖连接目标。" @@ -1362,14 +1370,14 @@ msgid "Packet encoding" msgstr "数据包编码" #: htdocs/luci-static/resources/view/homeproxy/node.js:572 -#: htdocs/luci-static/resources/view/homeproxy/server.js:130 +#: htdocs/luci-static/resources/view/homeproxy/server.js:135 msgid "Password" msgstr "密码" #: htdocs/luci-static/resources/view/homeproxy/node.js:946 #: htdocs/luci-static/resources/view/homeproxy/node.js:978 -#: htdocs/luci-static/resources/view/homeproxy/server.js:354 -#: htdocs/luci-static/resources/view/homeproxy/server.js:383 +#: htdocs/luci-static/resources/view/homeproxy/server.js:359 +#: htdocs/luci-static/resources/view/homeproxy/server.js:388 msgid "Path" msgstr "路径" @@ -1384,7 +1392,7 @@ msgid "" msgstr "性能可能会略有下降,建议仅在需要时开启。" #: htdocs/luci-static/resources/view/homeproxy/node.js:964 -#: htdocs/luci-static/resources/view/homeproxy/server.js:370 +#: htdocs/luci-static/resources/view/homeproxy/server.js:375 msgid "Ping timeout" msgstr "Ping 超时" @@ -1399,7 +1407,6 @@ msgstr "插件参数" #: htdocs/luci-static/resources/view/homeproxy/client.js:505 #: htdocs/luci-static/resources/view/homeproxy/client.js:768 #: htdocs/luci-static/resources/view/homeproxy/node.js:562 -#: htdocs/luci-static/resources/view/homeproxy/server.js:119 msgid "Port" msgstr "端口" @@ -1443,7 +1450,7 @@ msgstr "进程路径" #: htdocs/luci-static/resources/view/homeproxy/node.js:619 #: htdocs/luci-static/resources/view/homeproxy/node.js:747 #: htdocs/luci-static/resources/view/homeproxy/node.js:1056 -#: htdocs/luci-static/resources/view/homeproxy/server.js:163 +#: htdocs/luci-static/resources/view/homeproxy/server.js:168 msgid "Protocol" msgstr "协议" @@ -1503,35 +1510,35 @@ msgstr "QQ" #: htdocs/luci-static/resources/view/homeproxy/client.js:719 #: htdocs/luci-static/resources/view/homeproxy/node.js:824 #: htdocs/luci-static/resources/view/homeproxy/node.js:893 -#: htdocs/luci-static/resources/view/homeproxy/server.js:317 +#: htdocs/luci-static/resources/view/homeproxy/server.js:322 msgid "QUIC" msgstr "QUIC" #: htdocs/luci-static/resources/view/homeproxy/node.js:811 -#: htdocs/luci-static/resources/view/homeproxy/server.js:267 +#: htdocs/luci-static/resources/view/homeproxy/server.js:272 msgid "QUIC congestion control algorithm." msgstr "QUIC 拥塞控制算法。" #: htdocs/luci-static/resources/view/homeproxy/node.js:673 -#: htdocs/luci-static/resources/view/homeproxy/server.js:218 +#: htdocs/luci-static/resources/view/homeproxy/server.js:223 msgid "QUIC connection receive window" msgstr "QUIC 连接窗口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:225 +#: htdocs/luci-static/resources/view/homeproxy/server.js:230 msgid "QUIC maximum concurrent bidirectional streams" msgstr "QUIC 最大双向并发流" #: htdocs/luci-static/resources/view/homeproxy/node.js:667 -#: htdocs/luci-static/resources/view/homeproxy/server.js:211 +#: htdocs/luci-static/resources/view/homeproxy/server.js:216 msgid "QUIC stream receive window" msgstr "QUIC 流接收窗口" #: htdocs/luci-static/resources/view/homeproxy/node.js:1234 -#: htdocs/luci-static/resources/view/homeproxy/server.js:584 +#: htdocs/luci-static/resources/view/homeproxy/server.js:589 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/homeproxy/server.js:590 +#: htdocs/luci-static/resources/view/homeproxy/server.js:595 msgid "REALITY private key" msgstr "REALITY 私钥" @@ -1540,7 +1547,7 @@ msgid "REALITY public key" msgstr "REALITY 公钥" #: htdocs/luci-static/resources/view/homeproxy/node.js:1244 -#: htdocs/luci-static/resources/view/homeproxy/server.js:595 +#: htdocs/luci-static/resources/view/homeproxy/server.js:600 msgid "REALITY short ID" msgstr "REALITY 标识符" @@ -1581,7 +1588,7 @@ msgstr "Redirect TCP + Tun UDP" msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:533 +#: htdocs/luci-static/resources/view/homeproxy/server.js:538 msgid "Region ID" msgstr "区域 ID" @@ -1647,7 +1654,7 @@ msgid "Safari" msgstr "Safari" #: htdocs/luci-static/resources/view/homeproxy/node.js:644 -#: htdocs/luci-static/resources/view/homeproxy/server.js:202 +#: htdocs/luci-static/resources/view/homeproxy/server.js:207 msgid "Salamander" msgstr "Salamander" @@ -1672,7 +1679,7 @@ msgstr "服务器" msgid "Server Settings" msgstr "服务器设置" -#: htdocs/luci-static/resources/view/homeproxy/server.js:482 +#: htdocs/luci-static/resources/view/homeproxy/server.js:487 msgid "" "Server name to use when choosing a certificate if the ClientHello's " "ServerName field is empty." @@ -1766,8 +1773,8 @@ msgstr "" "查。
需要注意的是,PING 响应被视为已接收的帧,因此如果连接上没有其他流" "量,则健康检查将在每个间隔执行一次。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:331 -#: htdocs/luci-static/resources/view/homeproxy/server.js:363 +#: htdocs/luci-static/resources/view/homeproxy/server.js:336 +#: htdocs/luci-static/resources/view/homeproxy/server.js:368 msgid "" "Specifies the time (in seconds) until idle clients should be closed with a " "GOAWAY frame. PING frames are not considered as activity." @@ -1793,7 +1800,7 @@ msgid "" msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。" #: htdocs/luci-static/resources/view/homeproxy/node.js:633 -#: htdocs/luci-static/resources/view/homeproxy/server.js:191 +#: htdocs/luci-static/resources/view/homeproxy/server.js:196 msgid "String" msgstr "字符串" @@ -1828,12 +1835,12 @@ msgstr "系统" #: htdocs/luci-static/resources/view/homeproxy/client.js:445 #: htdocs/luci-static/resources/view/homeproxy/client.js:711 -#: htdocs/luci-static/resources/view/homeproxy/server.js:686 +#: htdocs/luci-static/resources/view/homeproxy/server.js:691 msgid "TCP" msgstr "TCP" #: htdocs/luci-static/resources/view/homeproxy/node.js:1251 -#: htdocs/luci-static/resources/view/homeproxy/server.js:656 +#: htdocs/luci-static/resources/view/homeproxy/server.js:661 msgid "TCP fast open" msgstr "TCP 快速打开" @@ -1848,22 +1855,22 @@ msgstr "TCP/IP 协议栈。" #: htdocs/luci-static/resources/view/homeproxy/client.js:452 #: htdocs/luci-static/resources/view/homeproxy/client.js:718 #: htdocs/luci-static/resources/view/homeproxy/node.js:1091 -#: htdocs/luci-static/resources/view/homeproxy/server.js:406 +#: htdocs/luci-static/resources/view/homeproxy/server.js:411 msgid "TLS" msgstr "TLS" #: htdocs/luci-static/resources/view/homeproxy/node.js:1123 -#: htdocs/luci-static/resources/view/homeproxy/server.js:439 +#: htdocs/luci-static/resources/view/homeproxy/server.js:444 msgid "TLS ALPN" msgstr "TLS ALPN" #: htdocs/luci-static/resources/view/homeproxy/node.js:1118 -#: htdocs/luci-static/resources/view/homeproxy/server.js:433 +#: htdocs/luci-static/resources/view/homeproxy/server.js:438 msgid "TLS SNI" msgstr "TLS SNI" #: htdocs/luci-static/resources/view/homeproxy/node.js:901 -#: htdocs/luci-static/resources/view/homeproxy/server.js:322 +#: htdocs/luci-static/resources/view/homeproxy/server.js:327 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。" @@ -1887,7 +1894,7 @@ msgstr "目标 DNS 服务器标签。" msgid "Tag of the target outbound." msgstr "目标出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:239 +#: htdocs/luci-static/resources/view/homeproxy/server.js:244 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "让客户端使用 BBR 流控算法。" @@ -1897,7 +1904,7 @@ msgstr "让客户端使用 BBR 流控算法。" msgid "Tencent Public DNS (119.29.29.29)" msgstr "腾讯公共 DNS(119.29.29.29)" -#: htdocs/luci-static/resources/view/homeproxy/server.js:503 +#: htdocs/luci-static/resources/view/homeproxy/server.js:508 msgid "The ACME CA provider to use." msgstr "使用的 ACME CA 颁发机构。" @@ -1906,12 +1913,12 @@ msgid "The DNS strategy for resolving the domain name in the address." msgstr "解析域名的默认策略。" #: htdocs/luci-static/resources/view/homeproxy/node.js:674 -#: htdocs/luci-static/resources/view/homeproxy/server.js:219 +#: htdocs/luci-static/resources/view/homeproxy/server.js:224 msgid "The QUIC connection-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 连接级流控制窗口。" #: htdocs/luci-static/resources/view/homeproxy/node.js:668 -#: htdocs/luci-static/resources/view/homeproxy/server.js:212 +#: htdocs/luci-static/resources/view/homeproxy/server.js:217 msgid "The QUIC stream-level flow control window for receiving data." msgstr "用于接收数据的 QUIC 流级流控制窗口。" @@ -1919,7 +1926,7 @@ msgstr "用于接收数据的 QUIC 流级流控制窗口。" msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode." msgstr "DNS 服务器的地址。支持 UDP、TCP、DoT、DoH 和 RCode。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:554 +#: htdocs/luci-static/resources/view/homeproxy/server.js:559 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." @@ -1927,7 +1934,7 @@ msgstr "" "用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启动 HTTP 质" "询的侦听器。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:560 +#: htdocs/luci-static/resources/view/homeproxy/server.js:565 msgid "" "The alternate port to use for the ACME TLS-ALPN challenge; the system must " "forward 443 to this port for challenge to succeed." @@ -1963,35 +1970,35 @@ msgid "" msgstr "用于解析本 DNS 服务器的域名的策略。默认使用 dns.strategy。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1154 -#: htdocs/luci-static/resources/view/homeproxy/server.js:461 +#: htdocs/luci-static/resources/view/homeproxy/server.js:466 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:488 +#: htdocs/luci-static/resources/view/homeproxy/server.js:493 msgid "" "The email address to use when creating or selecting an existing ACME server " "account." msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1146 -#: htdocs/luci-static/resources/view/homeproxy/server.js:453 +#: htdocs/luci-static/resources/view/homeproxy/server.js:458 msgid "The maximum TLS version that is acceptable." msgstr "可接受的最高 TLS 版本。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:226 +#: htdocs/luci-static/resources/view/homeproxy/server.js:231 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:601 +#: htdocs/luci-static/resources/view/homeproxy/server.js:606 msgid "The maximum time difference between the server and the client." msgstr "服务器和客户端之间的最大时间差。" #: htdocs/luci-static/resources/view/homeproxy/node.js:1138 -#: htdocs/luci-static/resources/view/homeproxy/server.js:445 +#: htdocs/luci-static/resources/view/homeproxy/server.js:450 msgid "The minimum TLS version that is acceptable." msgstr "可接受的最低 TLS 版本。" @@ -2008,15 +2015,15 @@ msgstr "绑定到的网络接口。" msgid "The path to the server certificate, in PEM format." msgstr "服务端证书路径,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:120 +#: htdocs/luci-static/resources/view/homeproxy/server.js:125 msgid "The port must be unique." msgstr "必须是唯一端口。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:637 +#: htdocs/luci-static/resources/view/homeproxy/server.js:642 msgid "The server private key, in PEM format." msgstr "服务端私钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:619 +#: htdocs/luci-static/resources/view/homeproxy/server.js:624 msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" @@ -2027,7 +2034,7 @@ msgid "" msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。" #: htdocs/luci-static/resources/view/homeproxy/node.js:921 -#: htdocs/luci-static/resources/view/homeproxy/server.js:371 +#: htdocs/luci-static/resources/view/homeproxy/server.js:376 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 " @@ -2052,7 +2059,7 @@ msgstr "" "这是 TUIC 的 UDP over TCP 协议移植, 旨在提供 TUIC 不提供的基于 QUIC 流的 " "UDP 中继模式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:397 +#: htdocs/luci-static/resources/view/homeproxy/server.js:402 msgid "" "To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." @@ -2060,7 +2067,7 @@ msgstr "" "要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。" #: htdocs/luci-static/resources/view/homeproxy/node.js:888 -#: htdocs/luci-static/resources/view/homeproxy/server.js:312 +#: htdocs/luci-static/resources/view/homeproxy/server.js:317 msgid "Transport" msgstr "传输层" @@ -2085,12 +2092,12 @@ msgstr "类型" #: htdocs/luci-static/resources/view/homeproxy/client.js:446 #: htdocs/luci-static/resources/view/homeproxy/client.js:712 -#: htdocs/luci-static/resources/view/homeproxy/server.js:687 +#: htdocs/luci-static/resources/view/homeproxy/server.js:692 msgid "UDP" msgstr "UDP" #: htdocs/luci-static/resources/view/homeproxy/node.js:1261 -#: htdocs/luci-static/resources/view/homeproxy/server.js:669 +#: htdocs/luci-static/resources/view/homeproxy/server.js:674 msgid "UDP Fragment" msgstr "UDP 分片" @@ -2111,7 +2118,7 @@ msgid "UDP relay mode" msgstr "UDP 中继模式" #: htdocs/luci-static/resources/view/homeproxy/node.js:803 -#: htdocs/luci-static/resources/view/homeproxy/server.js:259 +#: htdocs/luci-static/resources/view/homeproxy/server.js:264 msgid "UUID" msgstr "UUID" @@ -2152,17 +2159,17 @@ msgid "Update via proxy" msgstr "使用代理更新" #: htdocs/luci-static/resources/view/homeproxy/node.js:1174 -#: htdocs/luci-static/resources/view/homeproxy/server.js:628 +#: htdocs/luci-static/resources/view/homeproxy/server.js:633 msgid "Upload certificate" msgstr "上传证书" -#: htdocs/luci-static/resources/view/homeproxy/server.js:646 +#: htdocs/luci-static/resources/view/homeproxy/server.js:651 msgid "Upload key" msgstr "上传密钥" #: htdocs/luci-static/resources/view/homeproxy/node.js:1177 -#: htdocs/luci-static/resources/view/homeproxy/server.js:631 -#: htdocs/luci-static/resources/view/homeproxy/server.js:649 +#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy/server.js:654 msgid "Upload..." msgstr "上传..." @@ -2170,7 +2177,7 @@ msgstr "上传..." msgid "Upstream archived. Not recommended." msgstr "上游已存档。不建议。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:470 +#: htdocs/luci-static/resources/view/homeproxy/server.js:475 msgid "Use ACME TLS certificate issuer." msgstr "使用 ACME TLS 证书颁发机构。" @@ -2184,7 +2191,7 @@ msgid "Use DNS server from WAN + 114DNS" msgstr "使用 WAN DNS + 114DNS" #: htdocs/luci-static/resources/view/homeproxy/node.js:1119 -#: htdocs/luci-static/resources/view/homeproxy/server.js:434 +#: htdocs/luci-static/resources/view/homeproxy/server.js:439 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." @@ -2196,7 +2203,7 @@ msgid "User" msgstr "用户" #: htdocs/luci-static/resources/view/homeproxy/node.js:567 -#: htdocs/luci-static/resources/view/homeproxy/server.js:124 +#: htdocs/luci-static/resources/view/homeproxy/server.js:129 msgid "Username" msgstr "用户名" @@ -2215,7 +2222,7 @@ msgid "WAN IP Policy" msgstr "WAN IP 策略" #: htdocs/luci-static/resources/view/homeproxy/node.js:894 -#: htdocs/luci-static/resources/view/homeproxy/server.js:318 +#: htdocs/luci-static/resources/view/homeproxy/server.js:323 msgid "WebSocket" msgstr "WebSocket" @@ -2261,19 +2268,19 @@ msgstr "您只能设置一个服务器。它必须支持 TCP 查询。" msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上传。大小:%sB。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 +#: htdocs/luci-static/resources/view/homeproxy/server.js:510 msgid "ZeroSSL" msgstr "ZeroSSL" #: htdocs/luci-static/resources/view/homeproxy/node.js:1179 -#: htdocs/luci-static/resources/view/homeproxy/server.js:633 +#: htdocs/luci-static/resources/view/homeproxy/server.js:638 msgid "certificate" msgstr "证书" #: htdocs/luci-static/resources/view/homeproxy/node.js:1139 #: htdocs/luci-static/resources/view/homeproxy/node.js:1147 -#: htdocs/luci-static/resources/view/homeproxy/server.js:446 -#: htdocs/luci-static/resources/view/homeproxy/server.js:454 +#: htdocs/luci-static/resources/view/homeproxy/server.js:451 +#: htdocs/luci-static/resources/view/homeproxy/server.js:459 msgid "default" msgstr "默认" @@ -2282,7 +2289,7 @@ msgid "failed" msgstr "失败" #: htdocs/luci-static/resources/view/homeproxy/node.js:891 -#: htdocs/luci-static/resources/view/homeproxy/server.js:315 +#: htdocs/luci-static/resources/view/homeproxy/server.js:320 msgid "gRPC" msgstr "gRPC" @@ -2291,7 +2298,7 @@ msgid "gRPC permit without stream" msgstr "gRPC 允许无活动连接" #: htdocs/luci-static/resources/view/homeproxy/node.js:927 -#: htdocs/luci-static/resources/view/homeproxy/server.js:342 +#: htdocs/luci-static/resources/view/homeproxy/server.js:347 msgid "gRPC service name" msgstr "gRPC 服务名称" @@ -2308,7 +2315,7 @@ msgstr "iOS" #: htdocs/luci-static/resources/view/homeproxy/client.js:173 #: htdocs/luci-static/resources/view/homeproxy/node.js:599 #: htdocs/luci-static/resources/view/homeproxy/node.js:1223 -#: htdocs/luci-static/resources/view/homeproxy/server.js:154 +#: htdocs/luci-static/resources/view/homeproxy/server.js:159 msgid "non-empty value" msgstr "非空值" @@ -2327,7 +2334,7 @@ msgstr "packet addr (v2ray-core v5+)" msgid "passed" msgstr "通过" -#: htdocs/luci-static/resources/view/homeproxy/server.js:651 +#: htdocs/luci-static/resources/view/homeproxy/server.js:656 msgid "private key" msgstr "私钥" diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc index 154f80971..9b4f883fb 100755 --- a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc +++ b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc @@ -44,7 +44,7 @@ uci.foreach(uciconfig, uciserver, (cfg) => { type: cfg.type, tag: 'cfg-' + cfg['.name'] + '-in', - listen: '::', + listen: cfg.address || '::', listen_port: strToInt(cfg.port), tcp_fast_open: strToBool(cfg.tcp_fast_open), tcp_multi_path: strToBool(cfg.tcp_multi_path), diff --git a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy index 445248cd3..75a6c9984 100755 --- a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy +++ b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy @@ -172,6 +172,7 @@ const methods = { } features.hp_has_chinadns_ng = access('/usr/bin/chinadns-ng'); + features.hp_has_ip_full = access('/usr/libexec/ip-full'); features.hp_has_tproxy = access('/etc/modules.d/nft-tproxy'); features.hp_has_tun = access('/etc/modules.d/30-tun'); diff --git a/hysteria/Makefile b/hysteria/Makefile index 12f19ac1e..34acb003c 100644 --- a/hysteria/Makefile +++ b/hysteria/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hysteria -PKG_VERSION:=2.0.4 +PKG_VERSION:=2.1.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/apernet/hysteria/tar.gz/app/v$(PKG_VERSION)? -PKG_HASH:=cca4b80fa8bfb509ed6da98638962937c7ce5f56bff0d104e5721da1b6ab058f +PKG_HASH:=f3163b5918bcc197e32a1448aa6b7f2dcf3c0f67eed8d603f8bd5bedb460f68c PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-app-v$(PKG_VERSION) PKG_LICENSE:=MIT diff --git a/luci-app-ssr-plus/Makefile b/luci-app-ssr-plus/Makefile index 9441e21c0..3018dfcee 100644 --- a/luci-app-ssr-plus/Makefile +++ b/luci-app-ssr-plus/Makefile @@ -11,6 +11,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Tuic-Client \ + CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Shadow-TLS \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \ @@ -27,7 +28,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \ CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan -LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/TUIC/Hysteria/Socks5/Tun LuCI interface +LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/TUIC/ShadowTLS/Hysteria/Socks5/Tun LuCI interface LUCI_PKGARCH:=all LUCI_DEPENDS:= \ @(PACKAGE_libustream-mbedtls||PACKAGE_libustream-openssl||PACKAGE_libustream-wolfssl) \ @@ -41,6 +42,7 @@ LUCI_DEPENDS:= \ +PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \ +PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria:hysteria \ +PACKAGE_$(PKG_NAME)_INCLUDE_TUIC-Client:tuic-client \ + +PACKAGE_$(PKG_NAME)_INCLUDE_Shadow-TLS:shadow-tls \ +PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks:ipt2socks \ +PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \ +PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \ @@ -62,7 +64,7 @@ select PACKAGE_luci-lib-ipkg if PACKAGE_$(PKG_NAME) choice prompt "Shadowsocks Client Selection" - default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client if aarch64 + default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client if aarch64 || x86_64 default PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Libev_Client config PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_NONE_Client @@ -127,6 +129,14 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_TUIC-Client depends on !(TARGET_x86_geode||TARGET_x86_legacy) default n +config PACKAGE_$(PKG_NAME)_INCLUDE_Shadow-TLS + bool "Include shadow-TLS" + select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG + select PACKAGE_$(PKG_NAME)_INCLUDE_Shadowsocks_Rust_Client + depends on aarch64||arm||x86_64 + depends on !(TARGET_x86_geode||TARGET_x86_legacy) + default n + config PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks bool "Include IPT2Socks" default n 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 f5b845717..d8f5ca14f 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 @@ -144,8 +144,11 @@ end if is_finded("ssr-redir") then o:value("ssr", translate("ShadowsocksR")) end -if is_finded("sslocal") or is_finded("ss-redir") then - o:value("ss", translate("Shadowsocks New Version")) +if is_finded("ss-local") or is_finded("ss-redir") then + o:value("ss", translate("Shadowsocks-libev Version")) +end +if is_finded("sslocal") or is_finded("ssmanager") then + o:value("ss", translate("Shadowsocks-rust Version")) end if is_finded("trojan") then o:value("trojan", translate("Trojan")) @@ -159,6 +162,9 @@ end if is_finded("tuic-client") then o:value("tuic", translate("TUIC")) end +if is_finded("shadow-tls") and is_finded("sslocal") then + o:value("shadowtls", translate("Shadow-TLS")) +end if is_finded("ipt2socks") then o:value("socks5", translate("Socks5")) end @@ -201,18 +207,20 @@ o:depends("type", "trojan") o:depends("type", "naiveproxy") o:depends("type", "hysteria") o:depends("type", "tuic") +o:depends("type", "shadowtls") o:depends("type", "socks5") o = s:option(Value, "server_port", translate("Server Port")) o.datatype = "port" -o.rmempty = ({port_hopping=0 and false or true}) +o.rmempty = true o:depends("type", "ssr") o:depends("type", "ss") o:depends("type", "v2ray") o:depends("type", "trojan") o:depends("type", "naiveproxy") -o:depends({type="hysteria",port_hopping=0}) +o:depends({type = "hysteria",port_hopping = false}) o:depends("type", "tuic") +o:depends("type", "shadowtls") o:depends("type", "socks5") o = s:option(Flag, "auth_enable", translate("Enable Authentication")) @@ -236,6 +244,7 @@ o:depends("type", "ssr") o:depends("type", "ss") o:depends("type", "trojan") o:depends("type", "naiveproxy") +o:depends("type", "shadowtls") o:depends({type = "socks5", auth_enable = true}) o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true}) o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", auth_enable = true}) @@ -307,56 +316,165 @@ o:depends("type", "ssr") o = s:option(Value, "obfs_param", translate("Obfs param (optional)")) o:depends("type", "ssr") --- [[ Hysteria ]]-- + +-- [[ Hysteria2 ]]-- +o = s:option(Value, "hy2_auth", translate("Users Authentication")) +o:depends("type", "hysteria") +o.rmempty = false + +o = s:option(ListValue, "transport_protocol", translate("Protocol")) +o:depends("type", "hysteria") +o:value("udp", translate("udp")) +o.default = "udp" +o.rmempty = true + o = s:option(Flag, "port_hopping", translate("Enable Port Hopping")) o:depends("type", "hysteria") o.rmempty = true o.default = "0" +o = s:option(Value, "hopinterval", translate("Port Hopping Interval(Unit:Second)")) +o:depends({type = "hysteria", port_hopping = true}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "30" + o = s:option(Value, "port_range", translate("Port Range")) -o:depends({type = "hysteria", port_hopping = "1"}) -o.datatype = "portrange" -o.rmempty = true +o:depends({type = "hysteria", port_hopping = true}) +o.rmempty = false -o = s:option(ListValue, "hysteria_protocol", translate("Protocol")) -o:depends("type", "hysteria") -o:value("udp", translate("udp")) -o:value("wechat-video", translate("wechat-video")) -o:value("faketcp", translate("faketcp")) -o.default = "udp" -o.rmempty = true - -o = s:option(ListValue, "auth_type", translate("Authentication type")) -o:depends("type", "hysteria") -o:value("0", translate("disabled")) -o:value("1", translate("base64")) -o:value("2", translate("string")) -o.rmempty = true - -o = s:option(Value, "auth_payload", translate("Authentication payload")) -o:depends({type = "hysteria", auth_type = "1"}) -o:depends({type = "hysteria", auth_type = "2"}) -o.rmempty = true - -o = s:option(Value, "recv_window", translate("QUIC connection receive window")) -o.datatype = "uinteger" -o:depends("type", "hysteria") -o.rmempty = true - -o = s:option(Value, "recv_window_conn", translate("QUIC stream receive window")) -o.datatype = "uinteger" -o:depends("type", "hysteria") -o.rmempty = true - -o = s:option(Flag, "disable_mtu_discovery", translate("Disable Path MTU discovery")) -o:depends("type", "hysteria") -o.rmempty = true - -o = s:option(Flag, "lazy_start", translate("Lazy Start")) +o = s:option(Flag, "lazy_mode", translate("Enable Lazy Mode")) o:depends("type", "hysteria") o.rmempty = true o.default = "0" +o = s:option(Flag, "flag_obfs", translate("Enable Obfuscation")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +o = s:option(Value, "obfs_type", translate("Obfuscation Type")) +o:depends({type = "hysteria", flag_obfs = "1"}) +o.rmempty = true +o.default = "salamander" + +o = s:option(Value, "salamander", translate("Obfuscation Password")) +o:depends({type = "hysteria", flag_obfs = "1"}) +o.rmempty = true +o.default = "cry_me_a_r1ver" + +o = s:option(Flag, "flag_quicparam", translate("Hysterir QUIC parameters")) +o:depends("type", "hysteria") +o.rmempty = true +o.default = "0" + +--[[Hysteria2 QUIC parameters setting]] +o = s:option(Value, "initstreamreceivewindow", translate("QUIC initStreamReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "8388608" + +o = s:option(Value, "maxstreamseceivewindow", translate("QUIC maxStreamReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "8388608" + +o = s:option(Value, "initconnreceivewindow", translate("QUIC initConnReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "20971520" + +o = s:option(Value, "maxconnreceivewindow", translate("QUIC maxConnReceiveWindow")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.datatype = "uinteger" +o.rmempty = true +o.default = "20971520" + +o = s:option(Value, "maxidletimeout", translate("QUIC maxIdleTimeout(Unit:second)")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.datatype = "uinteger" +o.default = "30" + +o = s:option(Value, "keepaliveperiod", translate("The keep-alive period.(Unit:second)")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.datatype = "uinteger" +o.default = "10" + +o = s:option(Flag, "disablepathmtudiscovery", translate("Disable Path MTU discovery")) +o:depends({type = "hysteria", flag_quicparam = "1"}) +o.rmempty = true +o.default = false + + +--[[ Shadow-TLS Options ]] +o = s:option(ListValue, "shadowtls_protocol", translate("shadowTLS protocol Version")) +o:depends("type", "shadowtls") +o:value("v3", translate("Enable V3 protocol.")) +o:value("v2", translate("Enable V2 protocol.")) +o.default = "v3" +o.rmempty = true + +o = s:option(Flag, "strict", translate("TLS 1.3 Strict mode")) +o:depends("type", "shadowtls") +o.default = "1" +o.rmempty = false + +o = s:option(Flag, "fastopen", translate("TCP Fast Open")) +o:depends("type", "shadowtls") +o.default = "0" +o.rmempty = false + +o = s:option(Flag, "disable_nodelay", translate("Disable TCP No_delay")) +o:depends("type", "shadowtls") +o.default = "0" +o.rmempty = true + +o = s:option(Value, "shadowtls_sni", translate("shadow-TLS SNI")) +o:depends("type", "shadowtls") +o.datatype = "host" +o.rmempty = true +o.default = "" + +--[[ add a ListValue for Choose chain type,sslocal or vmess ]] +o = s:option(ListValue, "chain_type", translate("Shadow-TLS ChainPoxy type")) +o:depends("type", "shadowtls") +if is_finded("sslocal") then + o:value("sslocal", translate("Shadowsocks-rust Version")) +end +if is_finded("xray") or is_finded("v2ray") then + o:value("vmess", translate("Vmess Protocol")) +end +o.default = "sslocal" +o.rmempty = false + +o = s:option(Value, "sslocal_password",translate("Shadowsocks password")) +o:depends({type = "shadowtls", chain_type = "sslocal"}) +o.rmempty = true + +o = s:option(ListValue, "sslocal_method", translate("Encrypt Method")) +o:depends({type = "shadowtls", chain_type = "sslocal"}) +for _, v in ipairs(encrypt_methods_ss) do + o:value(v) +end + +o = s:option(Value, "vmess_uuid", translate("Vmess UUID")) +o:depends({type = "shadowtls", chain_type = "vmess"}) +o.rmempty = false +o.default = uuid + +o = s:option(ListValue, "vmess_method", translate("Encrypt Method")) +o:depends({type = "shadowtls", chain_type = "vmess"}) +for _, v in ipairs(securitys) do + o:value(v, v:lower()) +end +o.rmempty = true +o.default="auto" + -- [[ TUIC ]] -- TuicNameId o = s:option(Value, "tuic_uuid", translate("TUIC User UUID")) @@ -420,29 +538,29 @@ o.rmempty = true o = s:option(Value, "send_window", translate("TUIC send window")) o:depends("type", "tuic") o.datatype = "uinteger" -o.default = 16777216 +o.default = 20971520 o.rmempty = true o = s:option(Value, "receive_window", translate("TUIC receive window")) o:depends("type", "tuic") o.datatype = "uinteger" -o.default = 8388608 +o.default = 10485760 o.rmempty = true o = s:option(Flag, "disable_sni", translate("Disable SNI")) o:depends("type", "tuic") -o.default = 0 +o.default = "0" o.rmempty = true o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake")) o:depends("type", "tuic") -o.default = 0 +o.default = "0" o.rmempty = true ---Tuic settings for the local inbound socks5 server -o = s:option(Flag, "tuic_dual_stack", translate("Set if the listening socket should be dual-stack")) +-- Tuic settings for the local inbound socks5 server +o = s:option(Flag, "tuic_dual_stack", translate("Dual-stack Listening Socket")) o:depends("type", "tuic") -o.default = 0 +o.default = "0" o.rmempty = true o = s:option(Value, "tuic_max_package_size", translate("Maximum packet size the socks5 server can receive from external")) @@ -651,14 +769,14 @@ o:depends("transport", "kcp") o.default = 50 o.rmempty = true -o = s:option(Value, "uplink_capacity", translate("Uplink Capacity")) +o = s:option(Value, "uplink_capacity", translate("Uplink Capacity(Default:Mbps)")) o.datatype = "uinteger" o:depends("transport", "kcp") o:depends("type", "hysteria") o.default = 5 o.rmempty = true -o = s:option(Value, "downlink_capacity", translate("Downlink Capacity")) +o = s:option(Value, "downlink_capacity", translate("Downlink Capacity(Default:Mbps)")) o.datatype = "uinteger" o:depends("transport", "kcp") o:depends("type", "hysteria") @@ -679,7 +797,6 @@ o.rmempty = true o = s:option(Value, "seed", translate("Obfuscate password (optional)")) o:depends("transport", "kcp") -o:depends("type", "hysteria") o.rmempty = true o = s:option(Flag, "congestion", translate("Congestion")) @@ -717,6 +834,7 @@ o:depends({type = "v2ray", v2ray_protocol = "shadowsocks", reality = false}) o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", reality = false}) o:depends({type = "v2ray", v2ray_protocol = "http", reality = false}) o:depends("type", "trojan") +o:depends("type", "hysteria") -- [[ TLS部分 ]] -- o = s:option(Flag, "tls_sessionTicket", translate("Session Ticket")) @@ -772,15 +890,11 @@ o = s:option(Value, "tls_host", translate("TLS Host")) o.datatype = "hostname" o:depends("tls", true) o:depends("reality", true) -o:depends("type", "hysteria") o.rmempty = true o = s:option(DynamicList, "tls_alpn", translate("TLS ALPN")) o:depends("tls", true) o:depends("type", "tuic") -o.rmempty = true - -o = s:option(Value, "quic_tls_alpn", translate("QUIC TLS ALPN")) o:depends("type", "hysteria") o.rmempty = true @@ -791,6 +905,11 @@ o:depends("tls", true) o:depends("type", "hysteria") o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.") +-- [[ Hysteria2 TLS pinSHA256 ]] -- +o = s:option(Value, "pinsha256", translate("Certificate fingerprint")) +o:depends({type = "hysteria", insecure = true }) +o.rmempty = true + -- [[ Mux ]]-- o = s:option(Flag, "mux", translate("Mux")) o.rmempty = false diff --git a/luci-app-ssr-plus/po/zh-cn/ssr-plus.po b/luci-app-ssr-plus/po/zh-cn/ssr-plus.po index 2546b9f36..aa317d88b 100644 --- a/luci-app-ssr-plus/po/zh-cn/ssr-plus.po +++ b/luci-app-ssr-plus/po/zh-cn/ssr-plus.po @@ -106,14 +106,81 @@ msgstr "混淆参数(可选)" msgid "Authentication type" msgstr "验证类型" +msgid "Users Authentication" +msgstr "用户验证" + +msgid "NOTE: If the server uses the userpass authentication, the format must be username:password." +msgstr "注意: 如果服务器使用 userpass 验证,格式必须是 username:password。" + msgid "Enable Port Hopping" msgstr "启用端口跃迁" msgid "Port Range" msgstr "端口范围值" -msgid "Authentication payload" -msgstr "验证载荷" +msgid "Port Hopping Interval(Unit:Second)" +msgstr "端口跃迁间隔(单位:秒)" + +msgid "Enable Lazy Mode" +msgstr "启用懒狗模式" + +msgid "Enable Obfuscation" +msgstr "启用混淆功能" + +msgid "Obfuscation Type" +msgstr "混淆类型" + +msgid "Obfuscation Password" +msgstr "混淆密码" + +msgid "Hysterir QUIC parameters" +msgstr "QUIC参数" + +msgid "QUIC initStreamReceiveWindow" +msgstr "QUIC初始流接收窗口大小。" + +msgid "QUIC maxStreamReceiveWindow" +msgstr "QUIC最大的流接收窗口大小" + +msgid "QUIC initConnReceiveWindow" +msgstr "QUIC初始的连接接收窗口大小" + +msgid "QUIC maxConnReceiveWindow" +msgstr "QUIC最大的连接接收窗口大小" + +msgid "QUIC maxIdleTimeout(Unit:second)" +msgstr "QUIC最长空闲超时时间(单位:秒)" + +msgid "The keep-alive period.(Unit:second)" +msgstr "心跳包发送间隔(单位:秒)" + + +msgid "Certificate fingerprint" +msgstr "证书指纹" + +msgid "shadowTLS protocol Version" +msgstr "ShadowTLS协议版本" + +msgid "TLS 1.3 Strict mode" +msgstr "TLS 1.3 限定模式" + +msgid "Disable TCP No_delay" +msgstr "禁用TCP无延迟" + +msgid "shadow-TLS SNI" +msgstr "服务器名称指示" + +msgid "Shadow-TLS ChainPoxy type" +msgstr "代理链类型" + +msgid "Shadowsocks-rust Version" +msgstr "shadowsocks rust版本" + +msgid "Vmess Protocol" +msgstr "VMESS协议" + +msgid "Shadowsocks password" +msgstr "shadowsocks密码" msgid "QUIC connection receive window" msgstr "QUIC 连接接收窗口" @@ -121,6 +188,7 @@ msgstr "QUIC 连接接收窗口" msgid "QUIC stream receive window" msgstr "QUIC 流接收窗口" + msgid "Lazy Start" msgstr "延迟启动" @@ -805,11 +873,11 @@ msgstr "最大传输单元" msgid "TTI" msgstr "传输时间间隔" -msgid "Uplink Capacity" -msgstr "上行链路容量" +msgid "Uplink Capacity(Default:Mbps)" +msgstr "上行链路容量(默认:Mbps)" -msgid "Downlink Capacity" -msgstr "下行链路容量" +msgid "Downlink Capacity(Default:Mbps)" +msgstr "下行链路容量(默认:Mbps)" msgid "Read Buffer Size" msgstr "读取缓冲区大小" @@ -904,8 +972,8 @@ msgstr "发送窗口(无需确认即可发送的最大字节数:默认8Mb*2 msgid "TUIC receive window" msgstr "接收窗口(无需确认即可接收的最大字节数:默认8Mb)" -msgid "Set if the listening socket should be dual-stack" -msgstr "设置监听套接字为双栈" +msgid "Dual-stack Listening Socket" +msgstr "双栈Socket监听" msgid "Maximum packet size the socks5 server can receive from external" msgstr "socks5服务器可以从外部接收的最大数据包大小(单位:字节)" diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index b8177272c..932febedb 100755 --- a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -18,13 +18,17 @@ LOG_FILE=/var/log/ssrplus.log TMP_PATH=/var/etc/ssrplus TMP_BIN_PATH=$TMP_PATH/bin TMP_DNSMASQ_PATH=/tmp/dnsmasq.d/dnsmasq-ssrplus.d + +chain_config_file= #generate shadowtls chain proxy config file tcp_config_file= udp_config_file= shunt_config_file= local_config_file= shunt_dns_config_file= tmp_local_port= + ARG_UDP= + dns_port="5335" #dns port china_dns_port="5333" #china_dns_port tmp_dns_port="300" #dns2socks temporary port @@ -34,6 +38,7 @@ tmp_shunt_port="303" #shunt temporary port tmp_shunt_local_port="304" #shunt socks temporary port tmp_shunt_dns_port="305" #shunt dns2socks temporary port tmp_tcp_local_port="306" #tcp socks temporary port + server_count=0 redir_tcp=0 redir_udp=0 @@ -217,44 +222,48 @@ start_dns() { fi } -gen_service_file() { +gen_service_file() { #1-server.type 2-cfgname 3-file_path + local fastopen if [ $(uci_get_by_name $2 fast_open) == "1" ]; then - local fastopen="true" + fastopen="true" else - local fastopen="false" + fastopen="false" fi - if [ $1 == "ssr" ]; then + case $1 in + ssr) cat <<-EOF >$3 { - "server": "0.0.0.0", - "server_ipv6": "::", - "server_port": $(uci_get_by_name $2 server_port), - "mode": "tcp_and_udp", - "password": "$(uci_get_by_name $2 password)", - "timeout": $(uci_get_by_name $2 timeout 60), - "method": "$(uci_get_by_name $2 encrypt_method)", - "protocol": "$(uci_get_by_name $2 protocol)", - "protocol_param": "$(uci_get_by_name $2 protocol_param)", - "obfs": "$(uci_get_by_name $2 obfs)", - "obfs_param": "$(uci_get_by_name $2 obfs_param)", - "fast_open": $fastopen + "server": "0.0.0.0", + "server_ipv6": "::", + "server_port": $(uci_get_by_name $2 server_port), + "mode": "tcp_and_udp", + "password": "$(uci_get_by_name $2 password)", + "timeout": $(uci_get_by_name $2 timeout 60), + "method": "$(uci_get_by_name $2 encrypt_method)", + "protocol": "$(uci_get_by_name $2 protocol)", + "protocol_param": "$(uci_get_by_name $2 protocol_param)", + "obfs": "$(uci_get_by_name $2 obfs)", + "obfs_param": "$(uci_get_by_name $2 obfs_param)", + "fast_open": $fastopen } - EOF - else - cat <<-EOF >$3 - { - "server": "0.0.0.0", - "server_ipv6": "::", - "server_port": $(uci_get_by_name $2 server_port), - "mode": "tcp_and_udp", - "password": "$(uci_get_by_name $2 password)", - "timeout": $(uci_get_by_name $2 timeout 60), - "method": "$(uci_get_by_name $2 encrypt_method_ss)", - "protocol": "socks", - "fast_open": $fastopen - } - EOF - fi + EOF + ;; + ss) + cat <<-EOF >$3 + { + "server": "0.0.0.0", + "server_ipv6": "::", + "server_port": $(uci_get_by_name $2 server_port), + "mode": "tcp_and_udp", + "password": "$(uci_get_by_name $2 password)", + "timeout": $(uci_get_by_name $2 timeout 60), + "method": "$(uci_get_by_name $2 encrypt_method_ss)", + "protocol": "socks", + "fast_open": $fastopen + } + EOF + ;; + esac } get_name() { @@ -264,13 +273,15 @@ get_name() { esac } -gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 +gen_config_file() { #server1 type2 code3 local_port4 socks_port5 chain6 threads5 case "$3" in 1) config_file=$tcp_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') ;; 2) config_file=$udp_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') ;; 3) if [ -n "$tmp_local_port" ]; then @@ -279,10 +290,12 @@ gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 local tmp_port=$tmp_shunt_local_port fi config_file=$shunt_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') ;; 4) local ss_protocol="socks" config_file=$local_config_file + chain_config_file=$(echo ${config_file}|sed 's/ssrplus\//ssrplus\/chain-/') ;; esac case "$2" in @@ -330,7 +343,25 @@ gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 >$config_file ;; tuic) - lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + case "$3" in + 1|2|4) + lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + ;; + 3) + [ -z "$6" ] && lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$shunt_dns_config_file || lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 >$config_file + ;; + esac + ;; + shadowtls) + case "$3" in + 1|2|4) + [ -z "$6" ] && lua /usr/share/shadowsocksr/gen_config.lua $1 $type $4 >$chain_config_file || lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 $6 >$config_file + ;; + 3) + lua /usr/share/shadowsocksr/gen_config.lua $1 $type $4 >$chain_config_file + lua /usr/share/shadowsocksr/gen_config.lua $1 $mode $4 $5 $6 >$config_file + ;; + esac ;; socks5) /usr/share/shadowsocksr/genred2config.sh $config_file $2 $mode $4 \ @@ -344,7 +375,7 @@ gen_config_file() { #server1 type2 code3 local_port4 socks_port5 threads5 /usr/share/shadowsocksr/genred2config.sh $config_file $2 $(uci_get_by_name $1 iface "br-lan") $4 ;; esac - sed -i 's/\\//g' $TMP_PATH/*-ssr-*.json + sed -i 's/\\//g' $TMP_PATH/*-ssr-*.json #>/dev/null > 2>&1 } start_udp() { @@ -376,17 +407,34 @@ start_udp() { hysteria) gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port ln_start_bin $(first_type hysteria) hysteria client --config $udp_config_file - echolog "UDP TPROXY Relay:$($(first_type "hysteria") --version | awk '{print $1,$3}') Started!" + echolog "UDP TPROXY Relay:$($(first_type "hysteria") version | awk '{print $1,$3}') Started!" ;; tuic) - # gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_local_port - # ln_start_bin $(first_type tuic-client) tuic-client --config $udp_config_file - # ln_start_bin $(first_type ipt2socks) ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_udp_local_port -l $tmp_udp_port - # echolog "UDP TPROXY Relay:tuic-client $($(first_type tuic-client) --version) Started!" # FIXME: ipt2socks cannot handle udp reply from tuic + # 20230726 uncomment following 4 lines + gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_local_port + ln_start_bin $(first_type tuic-client) tuic-client --config $udp_config_file + ln_start_bin $(first_type ipt2socks) ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_udp_local_port -l $tmp_udp_port + echolog "UDP TPROXY Relay:tuic-client $($(first_type tuic-client) --version) Started!" echolog "TUIC UDP TPROXY Relay not supported!" - redir_udp=0 - ARG_UDP="" + #redir_udp=0 + #ARG_UDP="" + ;; + shadowtls) + gen_config_file $UDP_RELAY_SERVER $type 2 ${tmp_udp_local_port} + gen_config_file $UDP_RELAY_SERVER $type 2 ${tmp_udp_local_port} 0 chain + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + local chain_type=$(uci_get_by_name $UDP_RELAY_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $udp_config_file + echolog "UDP TPROXY Relay:shadow-tls chain-to $($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $udp_config_file + echolog "UDP TPROXY Relay:shadow-tls chain-to $($(first_type sslocal) --version) Started!" + ;; + esac ;; socks5) # if [ "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable 0)" == "1" ]; then @@ -463,21 +511,39 @@ start_shunt() { fi ln_start_bin $(first_type hysteria) hysteria client --config $shunt_config_file ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:$($(first_type hysteria) --version | awk '{print $1,$3}') Started!" + echolog "shunt:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" ;; tuic) - if [ -n "$tmp_local_port" ]; then - local tmp_port=$tmp_local_port - else - local tmp_port=$tmp_shunt_local_port - gen_config_file $SHUNT_SERVER $type 3 $tmp_port - ln_start_bin $(first_type tuic-client) tuic-client --config $shunt_config_file - fi - ln_start_bin $(first_type ipt2socks) ipt2socks -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_port -l $tmp_shunt_port + local chain_shunt_port="30${tmp_shunt_port}" + gen_config_file $SHUNT_SERVER $type 3 $chain_shunt_port 0 chain #make a tuic socks:30303, make a ipt2socks redir:303 + ln_start_bin $(first_type tuic-client) tuic-client --config $shunt_config_file + ln_start_bin $(first_type ipt2socks) ipt2socks -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $chain_shunt_port -l $tmp_shunt_port + + [ -n "$tmp_local_port" ] && tmp_port=$tmp_local_port || tmp_port=$tmp_shunt_local_port + gen_config_file $SHUNT_SERVER $type 3 $tmp_port # make a tuic socks :304 + ln_start_bin $(first_type tuic-client) tuic-client --config $shunt_dns_config_file ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:$tmp_port 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q - echolog "shunt:tuic-client $($(first_type tuic-client) --version) Started!" + echolog "Netflix Separated Shunt Server:tuic-client $($(first_type tuic-client) --version) Started!" # FIXME: ipt2socks cannot handle udp reply from tuic - redir_udp=0 + #redir_udp=0 + ;; + shadowtls) + [ -n "$tmp_local_port" ] && tmp_port=$tmp_local_port || tmp_port=$tmp_shunt_local_port + gen_config_file $SHUNT_SERVER $type 3 "10${tmp_shunt_port}" $tmp_port chain/$tmp_shunt_port #make a redir:303 and a socks:304 + #echo "debug \$tmp_port=$tmp_port, \$tmp_shunt_port=${tmp_shunt_port}, \$tmp_shunt_local_port=$tmp_shunt_local_port" + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + ln_start_bin $(first_type dns2socks) dns2socks 127.0.0.1:"${tmp_port}" 8.8.8.8:53 127.0.0.1:$tmp_shunt_dns_port -q + local chain_type=$(uci_get_by_name $SHUNT_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $shunt_config_file + echolog "Netflix Separated Shunt Server:shadow-tls chain-to$($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $shunt_config_file + echolog "Netflix Separated Shunt Server:shadow-tls chain-to$($(first_type sslocal) --version) Started!" + ;; + esac ;; # socks5) # if [ "$(uci_get_by_name $SHUNT_SERVER auth_enable 0)" == "1" ]; then @@ -538,21 +604,40 @@ start_local() { naiveproxy) gen_config_file $LOCAL_SERVER $type 4 $local_port ln_start_bin $(first_type naive) naive --config $local_config_file - echolog "Global_Socks5:$($(first_type $type) --version | head -1) Started!" + echolog "Global_Socks5:$($(first_type naive) --version | head -1) Started!" ;; hysteria) if [ "$_local" == "2" ]; then gen_config_file $LOCAL_SERVER $type 4 0 $local_port ln_start_bin $(first_type hysteria) hysteria client --config $local_config_file - echolog "Global_Socks5:$($(first_type hysteria) --version | awk '{print $1,$3}') Started!" + echolog "Global_Socks5:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" fi ;; tuic) if [ "$_local" == "2" ]; then gen_config_file $LOCAL_SERVER $type 4 $local_port ln_start_bin $(first_type tuic-client) tuic-client --config $local_config_file + echolog "Global Socks5:tuic-client $($(first_type tuic-client) --version) Started!" + fi + ;; + shadowtls) + #respective config for global socks and main node + if [ "$_local" == "2" ]; then + gen_config_file $LOCAL_SERVER $type 4 "10${tmp_tcp_local_port}" + gen_config_file $LOCAL_SERVER $type 4 0 $local_port chain/"10${tmp_tcp_local_port}" + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_local_config_file + local chain_type=$(uci_get_by_name $LOCAL_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type xray v2ray) v2ray run -c $local_config_file + echolog "Global Socks5 Proxy:shadow-tls chain-to$($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type sslocal) sslocal -c $local_config_file + echolog "Global Socks5 Proxy:shadow-tls chain-to$($(first_type sslocal) --version) Started!" + ;; + esac fi - echolog "Global_Socks5:tuic-client $($(first_type tuic-client) --version) Started!" ;; *) [ -e /proc/sys/net/ipv6 ] && local listenip='-i ::' @@ -620,14 +705,43 @@ Start_Run() { hysteria) gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $socks_port ln_start_bin $(first_type hysteria) hysteria client --config $tcp_config_file - echolog "Main node:$($(first_type hysteria) --version | awk '{print $1,$3}') Started!" + echolog "Main node:$($(first_type hysteria) version | awk '{print $1,$3}') Started!" ;; tuic) + local PARAM + [ $mode == "tcp" ] && PARAM="-T" || PARAM="" gen_config_file $GLOBAL_SERVER $type 1 $tmp_tcp_local_port ln_start_bin $(first_type tuic-client) tuic-client --config $tcp_config_file - ln_start_bin $(first_type ipt2socks) ipt2socks -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_tcp_local_port -l $tcp_port + ln_start_bin $(first_type ipt2socks) ipt2socks "$PARAM" -R -b 0.0.0.0 -4 -s 127.0.0.1 -p $tmp_tcp_local_port -l $tcp_port + if [ -n $socks_port ] && [ $GLOBAL_SERVER == $LOCAL_SERVER ]; then #start a new tuic instance + gen_config_file $GLOBAL_SERVER $type 4 $socks_port + ln_start_bin $(first_type tuic-client) tuic-client --config $local_config_file + echolog "Global Socks5:tuic-client $($(first_type tuic-client) --version) Started!" + fi echolog "Main node:tuic-client $($(first_type tuic-client) --version) Started!" ;; + shadowtls) + if [ -z "$socks_port" ]; then + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" 0 chain + else + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" + gen_config_file $GLOBAL_SERVER $type 1 "10${tmp_tcp_local_port}" $socks_port chain + fi + local chain_type=$(uci_get_by_name $GLOBAL_SERVER chain_type) + case ${chain_type} in + vmess) + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + ln_start_bin $(first_type xray v2ray) v2ray run -c $tcp_config_file + echolog "Mian node:shadow-tls chain-to $($(first_type xray) --version) Started!" + ;; + sslocal) + ln_start_bin $(first_type shadow-tls) shadow-tls config --config $chain_config_file + ln_start_bin $(first_type sslocal) sslocal -c $tcp_config_file + echolog "Main node:shadow-tls chain-to $($(first_type sslocal) --version) Started!" + ;; + esac + ;; socks5) if [ "$(uci_get_by_name $GLOBAL_SERVER auth_enable 0)" == "1" ]; then local auth="-a $(uci_get_by_name $GLOBAL_SERVER username) -k $(uci_get_by_name $GLOBAL_SERVER password)" @@ -981,6 +1095,7 @@ reset() { set shadowsocksr.@global[0].switch_time='667' set shadowsocksr.@global[0].switch_timeout='5' set shadowsocksr.@global[0].switch_try_count='3' +# set shadowsocksr.@global[0].default_packet_encoding='xudp' set shadowsocksr.@global[0].gfwlist_url='https://fastly.jsdelivr.net/gh/YW5vbnltb3Vz/domain-list-community@release/gfwlist.txt' set shadowsocksr.@global[0].chnroute_url='https://ispip.clang.cn/all_cn.txt' set shadowsocksr.@global[0].nfip_url='https://fastly.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt' diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua index 50d7e0c2d..9e84683e2 100755 --- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua +++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua @@ -8,6 +8,9 @@ local proto = arg[2] local local_port = arg[3] or "0" local socks_port = arg[4] or "0" +local chain = arg[5] or "0" +local chain_local_port = string.split(chain, "/")[2] or "0" + local server = ucursor:get_all("shadowsocksr", server_section) local outbound_settings = nil @@ -275,59 +278,159 @@ local ss = { reuse_port = true } local hysteria = { - server = server.server .. ":" .. server.server_port, - protocol = server.hysteria_protocol, - up_mbps = tonumber(server.uplink_capacity), - down_mbps = tonumber(server.downlink_capacity), + server = server.server_port and (server.server .. ":" .. server.server_port) or (server.server .. ":" .. server.port_range), + bandwidth = { + up = tonumber(server.uplink_capacity) and tonumber(server.uplink_capacity) .. " mbps" or nil, + down = tonumber(server.downlink_capacity) and tonumber(server.downlink_capacity) .. " mbps" or nil + }, socks5 = (proto:find("tcp") and tonumber(socks_port) and tonumber(socks_port) ~= 0) and { listen = "0.0.0.0:" .. tonumber(socks_port), - timeout = 300, disable_udp = false } or nil, - redirect_tcp = (proto:find("tcp") and local_port ~= "0") and { - listen = "0.0.0.0:" .. tonumber(local_port), - timeout = 300 + transport = { + type = server.transport_protocol, + udp = { + hopInterval = tonumber(server.hopinterval) and tonumber(server.hopinterval) .. "s" or nil + } + }, +--[[ + tcpTProxy = (proto:find("tcp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) +} or nil, +]] + tcpRedirect = (proto:find("tcp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) } or nil, - tproxy_udp = (proto:find("udp") and local_port ~= "0") and { - listen = "0.0.0.0:" .. tonumber(local_port), - timeout = 60 + udpTProxy = (proto:find("udp") and local_port ~= "0") and { + listen = "0.0.0.0:" .. tonumber(local_port) } or nil, - obfs = server.seed, - auth = (server.auth_type == "1") and server.auth_payload or nil, - auth_str = (server.auth_type == "2") and server.auth_payload or nil, - alpn = server.quic_tls_alpn, - server_name = server.tls_host, - insecure = (server.insecure == "1") and true or false, - ca = (server.certificate) and server.certpath or nil, - recv_window_conn = tonumber(server.recv_window_conn), - recv_window = tonumber(server.recv_window), - disable_mtu_discovery = (server.disable_mtu_discovery == "1") and true or false, + obfs = (server.flag_obfs == "1") and { + type = server.obfs_type, + salamander = { password = server.salamander } + } or nil, + quic = (server.flag_quicparam == "1" ) and { + initStreamReceiveWindow = (server.initstreamreceivewindow and server.initstreamreceivewindow or nil), + maxStreamReceiveWindow = (server.maxstreamseceivewindow and server.maxstreamseceivewindow or nil), + initConnReceiveWindow = (server.initconnreceivewindow and server.initconnreceivewindow or nil), + maxConnReceiveWindow = (server.maxconnreceivewindow and server.maxconnreceivewindow or nil), + maxIdleTimeout = (tonumber(server.maxidletimeout) and tonumber(server.maxidletimeout) .. "s" or nil), + keepAlivePeriod = (tonumber(server.keepaliveperiod) and tonumber(server.keepaliveperiod) .. "s" or nil), + disable_mtu_discovery = (server.disablepathmtudiscovery == "1") and true or false + } or nil, + auth = server.hy2_auth, + tls = (server.tls_host) and { + sni = server.tls_host, + insecure = (server.insecure == "1") and true or false, + pinSHA256 = (server.insecure == "1") and server.pinsha256 or nil + } or { + sni = server.server, + insecure = (server.insecure == "1") and true or false + }, fast_open = (server.fast_open == "1") and true or false, - lazy_start = (server.lazy_start == "1") and true or false + lazy = (server.lazy_mode == "1") and true or false +} +local shadowtls = { + client = { + server_addr = server.server_port and server.server .. ":" .. server.server_port or nil, + listen = "127.0.0.1:" .. tonumber(local_port), + tls_names = server.shadowtls_sni, + password = server.password + }, + v3 = (server.shadowtls_protocol == "v3") and true or false, + disable_nodelay = (server.disable_nodelay == "1") and true or false, + fastopen = (server.fastopen == "1") and true or false, + strict = (server.strict == "1") and true or false +} +local chain_sslocal = { + locals = local_port ~= "0" and { + { + local_address = "0.0.0.0", + local_port = (chain_local_port == "0" and tonumber(server.local_port) or tonumber(chain_local_port)), + mode = (proto:find("tcp,udp") and "tcp_and_udp") or proto .. "_only", + protocol = "redir", + tcp_redir = "redirect", + --tcp_redir = "tproxy", + udp_redir = "tproxy" + }, + socks_port ~= "0" and { + protocol = "socks", + local_address = "0.0.0.0", + local_port = tonumber(socks_port) + } or nil + } or {{ + protocol = "socks", + local_address = "0.0.0.0", + ocal_port = tonumber(socks_port) + }}, + servers = { + { + server = "127.0.0.1", + server_port = (tonumber(local_port) == 0 and tonumber(chain_local_port) or tonumber(local_port)), + method = server.sslocal_method, + password = server.sslocal_password + } + } +} +local chain_vmess = { + inbounds = (local_port ~= "0") and { + { + port = (chain_local_port == "0" and tonumber(server.local_port) or tonumber(chain_local_port)), + protocol = "dokodemo-door", + settings = { + network = proto, + followRedirect = true + }, + streamSettings = { + sockopt = {tproxy = "redirect"} + }, + sniffing = { + enable = true, + destOverride = {"http","tls"} + } + }, + (proto:find("tcp") and socks_port ~= "0") and { + protocol = "socks", + port = tonumber(socks_port) + } or nil + } or { protocol = "socks",port = tonumber(socks_port) }, + outbound = { + protocol = "vmess", + settings = { + vnext = {{ + address = "127.0.0.1", + port = (tonumber(local_port) == 0 and tonumber(chain_local_port) or tonumber(local_port)), + users = {{ + id = (server.vmess_uuid), + security = server.vmess_method, + level = 0 + }} + }} + } + } } local tuic = { relay = { - server = server.server .. ":" .. server.server_port, - ip = server.tuic_ip, - uuid = server.tuic_uuid, - password = server.tuic_passwd, - certificates = server.certificate and { server.certpath } or nil, - udp_relay_mode = server.udp_relay_mode, - congestion_control = server.congestion_control, - heartbeat = server.heartbeat and server.heartbeat .. "s" or nil, - 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, - 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), - receive_window = tonumber(server.receive_window) - }, + server = server.server_port and server.server .. ":" .. server.server_port, + ip = server.tuic_ip, + uuid = server.tuic_uuid, + password = server.tuic_passwd, + certificates = server.certificate and { server.certpath } or nil, + udp_relay_mode = server.udp_relay_mode, + congestion_control = server.congestion_control, + heartbeat = server.heartbeat and server.heartbeat .. "s" or nil, + 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, + 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), + receive_window = tonumber(server.receive_window) + }, ["local"] = { - server = "0.0.0.0:" .. tonumber(local_port), - --dual_stack = (server.tuic_dual_stack == "1") and true or false, - max_packet_size = tonumber(server.tuic_max_package_size) + server = tonumber(socks_port) and (server.tuic_dual_stack == "1" and "[::1]:" or "127.0.0.1:") .. (socks_port == "0" and local_port or tonumber(socks_port)), + dual_stack = (server.tuic_dual_stack == "1") and true or false, + max_packet_size = tonumber(server.tuic_max_package_size) } } local config = {} @@ -367,6 +470,28 @@ function config:handleIndex(index) hysteria = function() print(json.stringify(hysteria, 1)) end, + shadowtls = function() + local chain_switch = { + sslocal = function() + if (chain:find("chain")) then + print(json.stringify(chain_sslocal, 1)) + else + print(json.stringify(shadowtls, 1)) + end + end, + vmess = function() + if (chain:find("chain")) then + print(json.stringify(chain_vmess, 1)) + else + print(json.stringify(shadowtls, 1)) + end + end + } + local ChainType = server.chain_type + if chain_switch[ChainType] then + chain_switch[ChainType]() + end + end, tuic = function() print(json.stringify(tuic, 1)) end diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile index 785a1352b..9f8cb7752 100644 --- a/v2ray-geodata/Makefile +++ b/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=25e8fd3517988781e0a901c1d29dd35bed1aabed6343647c76206161e49fa1f4 endef -GEOSITE_VER:=20231011025202 +GEOSITE_VER:=20231012035256 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=32868ddecfab6faa2ea6eceb2f466bea144025eab1ae044609b09f47d254cab5 + HASH:=642dd9dee924d03a1516f6521c908a3ccf9fbc77e2a18551856f7e1ed405ea49 endef GEOSITE_IRAN_VER:=202310090024