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"
"code>."
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"
"code>."
@@ -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