diff --git a/homeproxy/Makefile b/homeproxy/Makefile index 14166586..4cad2f72 100644 --- a/homeproxy/Makefile +++ b/homeproxy/Makefile @@ -10,12 +10,18 @@ LUCI_DEPENDS:= \ +sing-box \ +firewall4 \ +kmod-nft-tproxy \ + +curl \ + +jsonfilter \ +ucode-mod-digest PKG_NAME:=luci-app-homeproxy +PKG_VERSION=$(PKG_SRC_VERSION) +PKG_RELEASE:=5 +PKG_PO_VERSION=$(PKG_SRC_VERSION)-r$(PKG_RELEASE) define Package/luci-app-homeproxy/conffiles /etc/config/homeproxy +/etc/homeproxy/cache/ /etc/homeproxy/certs/ /etc/homeproxy/ruleset/ /etc/homeproxy/resources/direct_list.txt diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js index a85f8ffa..843ddb89 100644 --- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js +++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js @@ -65,7 +65,7 @@ function renderStatus(isRunning, version, currentNode) { renderHTML = spanTemp.format(statusColor, _('HomeProxy'), version, _('NOT RUNNING')); if (currentNode) - renderHTML += '
%s will be temporarily overwritten to %s after 50 "
"triggers in 30s if not enabled."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1516
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1526
#: htdocs/luci-static/resources/view/homeproxy/server.js:768
#: htdocs/luci-static/resources/view/homeproxy/server.js:787
msgid "Save your configuration before uploading files!"
@@ -39,15 +39,15 @@ msgstr ""
msgid "API token"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1100
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1091
msgid "Accept any if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1161
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1155
msgid "Accept empty query response"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
msgid "Access Control"
msgstr ""
@@ -59,20 +59,20 @@ msgstr ""
msgid "Access key secret"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:692
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+#: htdocs/luci-static/resources/view/homeproxy/client.js:686
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1163
msgid "Action"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:211
msgid "AdGuard Public DNS (DoH)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1073
msgid "Add a DNS rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
msgid "Add a DNS server"
msgstr ""
@@ -80,15 +80,15 @@ msgstr ""
msgid "Add a node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:422
msgid "Add a routing node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
msgid "Add a routing rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1337
msgid "Add a rule set"
msgstr ""
@@ -96,20 +96,20 @@ msgstr ""
msgid "Add a server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:998
+#: htdocs/luci-static/resources/view/homeproxy/client.js:992
msgid "Additional headers to be sent to the DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:980
+#: htdocs/luci-static/resources/view/homeproxy/client.js:974
#: htdocs/luci-static/resources/view/homeproxy/node.js:878
msgid "Address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1005
msgid "Address resolver"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1043
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1037
msgid "Address strategy"
msgstr ""
@@ -117,11 +117,11 @@ msgstr ""
msgid "AliYun"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:246
+#: htdocs/luci-static/resources/view/homeproxy/client.js:247
msgid "AliYun Public DNS (DoH)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:290
msgid "All ports"
msgstr ""
@@ -129,33 +129,33 @@ msgstr ""
msgid "Allow access from the Internet."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1813
msgid "Allow insecure"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1462
msgid "Allow insecure connection at TLS client."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1814
msgid "Allow insecure connection by default when add nodes from subscriptions."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1295
#: htdocs/luci-static/resources/view/homeproxy/server.js:482
msgid "Allowed payload size is in the request."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:95
+#: htdocs/luci-static/resources/view/homeproxy/status.js:148
msgid "Already at the latest version."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:92
+#: htdocs/luci-static/resources/view/homeproxy/status.js:145
msgid "Already in updating."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1163
#: htdocs/luci-static/resources/view/homeproxy/server.js:391
msgid "Alter ID"
msgstr ""
@@ -168,11 +168,11 @@ msgstr ""
msgid "Alternative TLS port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1850
msgid "An error occurred during updating subscriptions: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1244
msgid "Answer"
msgstr ""
@@ -185,16 +185,16 @@ msgstr ""
msgid "AnyTLS padding scheme in array."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1218
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:926
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1212
msgid ""
"Append a edns0-subnet OPT extra record with the specified IP "
"prefix to every query by default./32 or /128 will be appended automatically."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1502
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1493
msgid "Append self-signed certificate"
msgstr ""
@@ -215,29 +215,29 @@ msgstr ""
msgid "Auth timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1187
msgid "Authenticated length"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:991
+#: htdocs/luci-static/resources/view/homeproxy/node.js:982
#: htdocs/luci-static/resources/view/homeproxy/server.js:282
msgid "Authentication payload"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:984
+#: htdocs/luci-static/resources/view/homeproxy/node.js:975
#: htdocs/luci-static/resources/view/homeproxy/server.js:275
msgid "Authentication type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1768
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1759
msgid "Auto update"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1760
msgid "Auto update subscriptions and geodata."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1123
msgid "BBR"
msgstr ""
@@ -245,64 +245,64 @@ msgstr ""
msgid "Backend execution failed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:235
+#: htdocs/luci-static/resources/view/homeproxy/status.js:286
msgid "BaiDu"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:986
+#: htdocs/luci-static/resources/view/homeproxy/node.js:977
#: htdocs/luci-static/resources/view/homeproxy/server.js:277
msgid "Base64"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:347
msgid "Based on google/gvisor."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
msgid "Binary file"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
+#: htdocs/luci-static/resources/view/homeproxy/client.js:470
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
#: htdocs/luci-static/resources/view/homeproxy/server.js:874
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:640
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/client.js:634
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1123
msgid "BitTorrent"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1809
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1800
msgid "Blacklist mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:388
+#: htdocs/luci-static/resources/view/homeproxy/client.js:382
msgid "Block"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:663
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1115
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
+#: htdocs/luci-static/resources/view/homeproxy/client.js:657
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1109
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
#: htdocs/luci-static/resources/view/homeproxy/server.js:869
msgid "Both"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
msgid "Bypass CN traffic"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:276
+#: htdocs/luci-static/resources/view/homeproxy/client.js:277
msgid "Bypass mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:367
+#: htdocs/luci-static/resources/view/homeproxy/client.js:361
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr ""
@@ -310,15 +310,15 @@ msgstr ""
msgid "CA provider"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1121
msgid "CUBIC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1672
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1663
msgid "Cancel"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1498
#: htdocs/luci-static/resources/view/homeproxy/server.js:756
msgid "Certificate path"
msgstr ""
@@ -327,48 +327,44 @@ msgstr ""
msgid "Check"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:105
-msgid "Check update"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:242
msgid "China DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:244
-msgid "China IPv4 list version"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:66
+msgid "China IPv4 list"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:248
-msgid "China IPv6 list version"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:70
+msgid "China IPv6 list"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:252
-msgid "China list version"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:74
+msgid "China domain list"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1783
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1774
msgid "Choose which method node latency tests use."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:646
msgid "Chromium / Cronet"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1485
#: htdocs/luci-static/resources/view/homeproxy/server.js:586
msgid "Cipher suites"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:212
+#: htdocs/luci-static/resources/view/homeproxy/client.js:213
msgid "Cisco Public DNS (DoH)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:214
+#: htdocs/luci-static/resources/view/homeproxy/status.js:265
msgid "Clean log"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:650
+#: htdocs/luci-static/resources/view/homeproxy/client.js:644
msgid "Client"
msgstr ""
@@ -376,7 +372,7 @@ msgstr ""
msgid "Client Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1094
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
msgid "Client version"
msgstr ""
@@ -384,50 +380,50 @@ msgstr ""
msgid "CloudFlare"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:208
msgid "CloudFlare Public DNS (DoH)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:140
#: htdocs/luci-static/resources/view/homeproxy/server.js:142
-#: htdocs/luci-static/resources/view/homeproxy/status.js:176
+#: htdocs/luci-static/resources/view/homeproxy/status.js:227
msgid "Collecting data..."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:291
msgid "Common ports only (bypass P2P traffic)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1119
#: htdocs/luci-static/resources/view/homeproxy/server.js:354
msgid "Congestion control algorithm"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:232
+#: htdocs/luci-static/resources/view/homeproxy/status.js:283
msgid "Connection check"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1772
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1763
msgid "Cron expression"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:279
msgid "Custom routing"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:635
msgid "DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1064
msgid "DNS Rules"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:947
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
msgid "DNS Servers"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:895
+#: htdocs/luci-static/resources/view/homeproxy/client.js:889
msgid "DNS Settings"
msgstr ""
@@ -435,17 +431,17 @@ msgstr ""
msgid "DNS provider"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1073
msgid "DNS rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:204
-#: htdocs/luci-static/resources/view/homeproxy/client.js:772
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
msgid "DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:212
msgid "DNS.SB Public DNS (DoH)"
msgstr ""
@@ -453,59 +449,59 @@ msgstr ""
msgid "DNS01 challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:642
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:636
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
msgid "DTLS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:136
+#: htdocs/luci-static/resources/view/homeproxy/status.js:187
msgid "Debug"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:456
-#: htdocs/luci-static/resources/view/homeproxy/client.js:626
-#: htdocs/luci-static/resources/view/homeproxy/client.js:778
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1140
+#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:620
+#: htdocs/luci-static/resources/view/homeproxy/client.js:772
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1100
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
msgid "Default"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:405
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-#: htdocs/luci-static/resources/view/homeproxy/client.js:910
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1018
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1184
+#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:904
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
msgid "Default DNS (issued by WAN)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:899
msgid "Default DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:394
msgid "Default DNS server for resolving domain name in the server address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:894
msgid "Default DNS strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:380
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid "Default outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:393
msgid "Default outbound DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:375
msgid "Default outbound for connections not matched by any routing rules."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1829
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1820
msgid "Default packet encoding"
msgstr ""
@@ -513,56 +509,55 @@ msgstr ""
msgid "Default server name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:387
-#: htdocs/luci-static/resources/view/homeproxy/client.js:489
-#: htdocs/luci-static/resources/view/homeproxy/client.js:707
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:483
+#: htdocs/luci-static/resources/view/homeproxy/client.js:701
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
#: htdocs/luci-static/resources/view/homeproxy/node.js:858
msgid "Direct"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1532
msgid "Direct Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1491
msgid "Direct IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1449
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1494
msgid "Direct IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1452
msgid "Direct MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:148
-#: htdocs/luci-static/resources/view/homeproxy/client.js:176
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1445
-#: htdocs/luci-static/resources/view/homeproxy/node.js:929
-#: htdocs/luci-static/resources/view/homeproxy/node.js:985
-#: htdocs/luci-static/resources/view/homeproxy/node.js:998
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1545
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1808
+#: htdocs/luci-static/resources/view/homeproxy/client.js:149
+#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1440
+#: htdocs/luci-static/resources/view/homeproxy/node.js:976
+#: htdocs/luci-static/resources/view/homeproxy/node.js:989
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1536
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
#: htdocs/luci-static/resources/view/homeproxy/server.js:276
#: htdocs/luci-static/resources/view/homeproxy/server.js:289
msgid "Disable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:386
+#: htdocs/luci-static/resources/view/homeproxy/client.js:380
msgid "Disable (the service)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:916
msgid "Disable DNS cache"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:805
msgid "Disable DNS cache in this query."
msgstr ""
@@ -570,7 +565,7 @@ msgstr ""
msgid "Disable HTTP challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1026
#: htdocs/luci-static/resources/view/homeproxy/server.js:321
msgid "Disable Path MTU discovery"
msgstr ""
@@ -579,60 +574,60 @@ msgstr ""
msgid "Disable TLS ALPN challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:733
+#: htdocs/luci-static/resources/view/homeproxy/client.js:727
msgid "Disable UDP domain unmapping"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1199
msgid "Disable cache and save cache in this query."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+#: htdocs/luci-static/resources/view/homeproxy/client.js:918
msgid "Disable cache expire"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
msgid "Disable dns cache"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1027
#: htdocs/luci-static/resources/view/homeproxy/server.js:322
msgid ""
"Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 "
"(IPv4) / 1232 (IPv6) bytes in size."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:837
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:831
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1268
msgid "Domain keyword"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:828
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1259
msgid "Domain name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:835
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1272
msgid "Domain regex"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
msgid "Domain resolver"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:370
-#: htdocs/luci-static/resources/view/homeproxy/client.js:469
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/client.js:364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:463
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1191
msgid "Domain strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:798
msgid "Domain strategy for resolving the domain names."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1270
+#: htdocs/luci-static/resources/view/homeproxy/client.js:827
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1264
msgid "Domain suffix"
msgstr ""
@@ -640,42 +635,42 @@ msgstr ""
msgid "Domains"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:797
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid "Don't drop packets"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
msgid "Don't drop requests"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1419
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1410
#: htdocs/luci-static/resources/view/homeproxy/server.js:517
msgid "Download bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1420
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1411
#: htdocs/luci-static/resources/view/homeproxy/server.js:518
msgid "Download bandwidth in Mbps."
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:787
#: htdocs/luci-static/resources/view/homeproxy/client.js:793
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
msgid "Drop packets"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
msgid "Drop requests"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1815
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1806
msgid ""
"Drop/keep nodes that contain the specific keywords. Regex is supported."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1807
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1798
msgid "Drop/keep specific nodes from subscriptions."
msgstr ""
@@ -687,18 +682,18 @@ msgid ""
"a non-ACME system, such as a CA customer database."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1524
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
msgid ""
"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
"encrypt the first part of its ClientHello message."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1539
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1530
#: htdocs/luci-static/resources/view/homeproxy/server.js:835
msgid "ECH config"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1528
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1519
msgid "ECH config path"
msgstr ""
@@ -706,18 +701,18 @@ msgstr ""
msgid "ECH key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:821
-#: htdocs/luci-static/resources/view/homeproxy/client.js:931
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/client.js:815
+#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
msgid "EDNS Client subnet"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1303
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1294
#: htdocs/luci-static/resources/view/homeproxy/server.js:481
msgid "Early data"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1301
#: htdocs/luci-static/resources/view/homeproxy/server.js:488
msgid "Early data header name"
msgstr ""
@@ -726,7 +721,7 @@ msgstr ""
msgid "Early data is sent in path instead of header by default."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1644
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1635
msgid "Edit nodes"
msgstr ""
@@ -734,17 +729,17 @@ msgstr ""
msgid "Email"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:437
-#: htdocs/luci-static/resources/view/homeproxy/client.js:613
-#: htdocs/luci-static/resources/view/homeproxy/client.js:965
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1093
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1352
+#: htdocs/luci-static/resources/view/homeproxy/client.js:431
+#: htdocs/luci-static/resources/view/homeproxy/client.js:607
+#: htdocs/luci-static/resources/view/homeproxy/client.js:959
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1346
#: htdocs/luci-static/resources/view/homeproxy/server.js:148
#: htdocs/luci-static/resources/view/homeproxy/server.js:166
msgid "Enable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1152
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1143
#: htdocs/luci-static/resources/view/homeproxy/server.js:371
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
@@ -752,7 +747,7 @@ msgid ""
">Disabling this is highly recommended, as it is vulnerable to replay attacks."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1151
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
#: htdocs/luci-static/resources/view/homeproxy/server.js:370
msgid "Enable 0-RTT handshake"
msgstr ""
@@ -761,30 +756,26 @@ msgstr ""
msgid "Enable ACME"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1523
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1514
msgid "Enable ECH"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1414
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
#: htdocs/luci-static/resources/view/homeproxy/server.js:512
msgid "Enable TCP Brutal"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1415
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1406
#: htdocs/luci-static/resources/view/homeproxy/server.js:513
msgid "Enable TCP Brutal congestion control algorithm"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1598
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1589
#: htdocs/luci-static/resources/view/homeproxy/server.js:855
msgid "Enable UDP fragmentation."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:351
-msgid "Enable endpoint-independent NAT"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1410
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1401
#: htdocs/luci-static/resources/view/homeproxy/server.js:507
msgid "Enable padding"
msgstr ""
@@ -793,19 +784,19 @@ msgstr ""
msgid "Enable tcp fast open for listener."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1602
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1593
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with multiplex."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1042
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1033
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1169
#: htdocs/luci-static/resources/view/homeproxy/server.js:338
msgid "Encrypt method"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/node.js:488
-#: htdocs/luci-static/resources/view/homeproxy/status.js:139
+#: htdocs/luci-static/resources/view/homeproxy/status.js:190
msgid "Error"
msgstr ""
@@ -817,26 +808,26 @@ msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:317
#: htdocs/luci-static/resources/homeproxy.js:326
#: htdocs/luci-static/resources/homeproxy.js:328
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+#: htdocs/luci-static/resources/view/homeproxy/client.js:232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:236
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
+#: htdocs/luci-static/resources/view/homeproxy/client.js:265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:269
+#: htdocs/luci-static/resources/view/homeproxy/client.js:298
+#: htdocs/luci-static/resources/view/homeproxy/client.js:521
+#: htdocs/luci-static/resources/view/homeproxy/client.js:535
+#: htdocs/luci-static/resources/view/homeproxy/client.js:538
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1374
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1525
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1552
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1726
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
#: htdocs/luci-static/resources/view/homeproxy/server.js:235
#: htdocs/luci-static/resources/view/homeproxy/server.js:618
#: htdocs/luci-static/resources/view/homeproxy/server.js:620
@@ -855,7 +846,7 @@ msgstr ""
msgid "External account key ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1260
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1254
msgid "Extra records"
msgstr ""
@@ -867,19 +858,19 @@ msgstr ""
msgid "Failed to upload %s, error: %s."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:140
+#: htdocs/luci-static/resources/view/homeproxy/status.js:191
msgid "Fatal"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1814
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1805
msgid "Filter keywords"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1806
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1797
msgid "Filter nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:653
+#: htdocs/luci-static/resources/view/homeproxy/client.js:647
msgid "Firefox / uquic firefox"
msgstr ""
@@ -887,53 +878,53 @@ msgstr ""
msgid "Firewall"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1157
#: htdocs/luci-static/resources/view/homeproxy/server.js:385
msgid "Flow"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:445
msgid "For resolving domain name in the server address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1363
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
msgid "Format"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:753
+#: htdocs/luci-static/resources/view/homeproxy/client.js:747
msgid "Fragment TLS handshake into multiple TLS records."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:759
+#: htdocs/luci-static/resources/view/homeproxy/client.js:753
msgid ""
"Fragment TLS handshakes. Due to poor performance, try %s first."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
+#: htdocs/luci-static/resources/view/homeproxy/client.js:759
msgid "Fragment fallback delay"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1272
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1263
msgid "GET"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:256
-msgid "GFW list version"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:78
+msgid "GFW domain list"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:276
msgid "GFWList"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1464
msgid "Gaming mode IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
msgid "Gaming mode IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
msgid "Gaming mode MAC-s"
msgstr ""
@@ -943,27 +934,27 @@ msgstr ""
msgid "Generate"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:260
+#: htdocs/luci-static/resources/view/homeproxy/status.js:298
msgid "GitHub token"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:280
msgid "Global"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1180
msgid "Global padding"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
msgid "Global proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
msgid "Global proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1477
msgid "Global proxy MAC-s"
msgstr ""
@@ -971,11 +962,11 @@ msgstr ""
msgid "Global settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:238
+#: htdocs/luci-static/resources/view/homeproxy/status.js:289
msgid "Google"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:208
+#: htdocs/luci-static/resources/view/homeproxy/client.js:209
msgid "Google Public DNS (DoH)"
msgstr ""
@@ -983,16 +974,16 @@ msgstr ""
msgid "Grant access to homeproxy configuration"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:643
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/client.js:637
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
#: htdocs/luci-static/resources/view/homeproxy/node.js:860
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1207
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1198
#: htdocs/luci-static/resources/view/homeproxy/server.js:177
#: htdocs/luci-static/resources/view/homeproxy/server.js:403
msgid "HTTP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:975
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
msgid "HTTP/3"
msgstr ""
@@ -1002,11 +993,11 @@ msgid ""
"returned if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:974
+#: htdocs/luci-static/resources/view/homeproxy/client.js:968
msgid "HTTPS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1208
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1199
#: htdocs/luci-static/resources/view/homeproxy/server.js:404
msgid "HTTPUpgrade"
msgstr ""
@@ -1019,19 +1010,19 @@ msgstr ""
msgid "Handshake server port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/client.js:991
msgid "Headers"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1148
#: htdocs/luci-static/resources/view/homeproxy/server.js:376
msgid "Heartbeat interval"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/client.js:63
#: htdocs/luci-static/resources/view/homeproxy/client.js:65
-#: htdocs/luci-static/resources/view/homeproxy/client.js:112
-#: htdocs/luci-static/resources/view/homeproxy/status.js:282
+#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/status.js:320
#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
msgid "HomeProxy"
msgstr ""
@@ -1042,33 +1033,33 @@ msgstr ""
msgid "HomeProxy Server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:965
+#: htdocs/luci-static/resources/view/homeproxy/node.js:956
msgid "Hop interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:959
+#: htdocs/luci-static/resources/view/homeproxy/node.js:950
msgid "Hopping port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1256
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1261
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1247
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1252
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
#: htdocs/luci-static/resources/view/homeproxy/server.js:437
#: htdocs/luci-static/resources/view/homeproxy/server.js:442
#: htdocs/luci-static/resources/view/homeproxy/server.js:473
msgid "Host"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1090
msgid "Host key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1104
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
msgid "Host key algorithms"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:604
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/client.js:598
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1078
msgid "Host/IP fields"
msgstr ""
@@ -1088,7 +1079,7 @@ msgstr ""
msgid "Hysteria2"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1784
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1775
msgid "ICMP"
msgstr ""
@@ -1104,18 +1095,18 @@ msgstr ""
msgid "ICMP Timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:853
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:847
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1284
msgid "IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:631
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1112
+#: htdocs/luci-static/resources/view/homeproxy/client.js:625
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
msgid "IP version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:633
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1107
msgid "IPv4"
msgstr ""
@@ -1123,8 +1114,8 @@ msgstr ""
msgid "IPv4 only"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:634
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1114
+#: htdocs/luci-static/resources/view/homeproxy/client.js:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1108
msgid "IPv6"
msgstr ""
@@ -1132,55 +1123,55 @@ msgstr ""
msgid "IPv6 only"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:321
msgid "IPv6 support"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:936
+#: htdocs/luci-static/resources/view/homeproxy/node.js:927
msgid "Idle session check interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:943
+#: htdocs/luci-static/resources/view/homeproxy/node.js:934
msgid "Idle session check timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:576
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1268
#: htdocs/luci-static/resources/view/homeproxy/server.js:456
msgid "Idle timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:740
+#: htdocs/luci-static/resources/view/homeproxy/client.js:734
msgid ""
"If enabled, attempts to connect UDP connection to the destination instead of "
"listen."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:734
+#: htdocs/luci-static/resources/view/homeproxy/client.js:728
msgid ""
"If enabled, for UDP proxy requests addressed to a domain, the original "
"packet address will be sent in the response instead of the mapped domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1249
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1240
msgid ""
"If enabled, the client transport sends keepalive pings even with no active "
"connections."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:371
+#: htdocs/luci-static/resources/view/homeproxy/client.js:365
msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1225
#: htdocs/luci-static/resources/view/homeproxy/server.js:425
msgid ""
"If the transport doesn't see any activity after a duration of this time (in "
"seconds), it pings the client to check if the connection is still active."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1503
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
msgid ""
"If you have the root certificate, use this option instead of allowing "
"insecure."
@@ -1190,68 +1181,68 @@ msgstr ""
msgid "Ignore client bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1718
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1709
msgid "Import"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1665
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1744
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1746
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1656
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1737
msgid "Import share links"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:353
#: htdocs/luci-static/resources/view/homeproxy/server.js:860
msgid "In seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1367
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1358
msgid "In seconds. Disabled by default."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:951
+#: htdocs/luci-static/resources/view/homeproxy/node.js:942
msgid ""
"In the check, at least the first n idle sessions are kept open."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:944
+#: htdocs/luci-static/resources/view/homeproxy/node.js:935
msgid ""
"In the check, close sessions that have been idle for longer than this, in "
"seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:927
+#: htdocs/luci-static/resources/view/homeproxy/client.js:921
msgid "Independent cache per server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:137
+#: htdocs/luci-static/resources/view/homeproxy/status.js:188
msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1423
msgid "Interface Control"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:583
+#: htdocs/luci-static/resources/view/homeproxy/client.js:577
msgid "Interrupt existing connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:584
+#: htdocs/luci-static/resources/view/homeproxy/client.js:578
msgid "Interrupt existing connections when the selected outbound has changed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:937
+#: htdocs/luci-static/resources/view/homeproxy/node.js:928
msgid "Interval checking for idle sessions, in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1149
#: htdocs/luci-static/resources/view/homeproxy/server.js:377
msgid ""
"Interval for sending heartbeat packets for keeping the connection alive (in "
"seconds)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:129
#: htdocs/luci-static/resources/view/homeproxy/node.js:480
msgid "Invalid node"
msgstr ""
@@ -1260,13 +1251,13 @@ msgstr ""
msgid "Invalid response"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:688
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:682
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1159
msgid "Invert"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:689
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/client.js:683
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1160
msgid "Invert match result."
msgstr ""
@@ -1274,15 +1265,15 @@ msgstr ""
msgid "Key path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1437
msgid "LAN IP Policy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
-#: htdocs/luci-static/resources/view/homeproxy/client.js:608
-#: htdocs/luci-static/resources/view/homeproxy/client.js:960
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
+#: htdocs/luci-static/resources/view/homeproxy/client.js:426
+#: htdocs/luci-static/resources/view/homeproxy/client.js:602
+#: htdocs/luci-static/resources/view/homeproxy/client.js:954
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1082
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1341
#: htdocs/luci-static/resources/view/homeproxy/node.js:852
#: htdocs/luci-static/resources/view/homeproxy/server.js:160
msgid "Label"
@@ -1292,18 +1283,18 @@ msgstr ""
msgid "Latency"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1782
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
msgid "Latency test mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1164
#: htdocs/luci-static/resources/view/homeproxy/server.js:392
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:349
msgid "Less compatibility and sometimes better performance."
msgstr ""
@@ -1311,31 +1302,31 @@ msgstr ""
msgid "Let's Encrypt"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
msgid ""
"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:157
-#: htdocs/luci-static/resources/view/homeproxy/client.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:187
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
msgid "List of nodes to test."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1457
#: htdocs/luci-static/resources/view/homeproxy/server.js:566
msgid "List of supported application level protocols, in order of preference."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1245
msgid "List of text DNS record to respond as answers."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1261
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
msgid "List of text DNS record to respond as extra records."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1256
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
msgid "List of text DNS record to respond as name servers."
msgstr ""
@@ -1343,7 +1334,7 @@ msgstr ""
msgid "Listen address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
msgid "Listen interfaces"
msgstr ""
@@ -1351,51 +1342,51 @@ msgstr ""
msgid "Listen port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:174
+#: htdocs/luci-static/resources/view/homeproxy/status.js:225
msgid "Loading"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1352
msgid "Local"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1326
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
msgid "Local address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:191
+#: htdocs/luci-static/resources/view/homeproxy/status.js:242
msgid "Log file does not exist."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:184
+#: htdocs/luci-static/resources/view/homeproxy/status.js:235
msgid "Log is empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1360
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1351
msgid "MTU"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:175
+#: htdocs/luci-static/resources/view/homeproxy/client.js:176
msgid "Main UDP node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:147
+#: htdocs/luci-static/resources/view/homeproxy/client.js:148
msgid "Main node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "Make IP CIDR in rule set used to match the source IP."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1152
msgid "Make IP CIDR in rule sets match the source IP."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1162
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1156
msgid "Make IP CIDR in rule-sets accept empty query response."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:928
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
msgid ""
"Make each DNS server's cache independent for special purposes. If enabled, "
"will slightly degrade performance."
@@ -1405,109 +1396,109 @@ msgstr ""
msgid "Masquerade"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1291
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1285
msgid ""
"Match IP CIDR with query response. Current rule will be skipped if not match."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:848
msgid "Match IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:828
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
msgid "Match domain suffix."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:838
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:832
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1269
msgid "Match domain using keyword."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:842
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:836
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1273
msgid "Match domain using regular expression."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:829
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
+#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1260
msgid "Match full domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:877
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:871
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
msgid "Match port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:872
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
msgid "Match port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/client.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1289
msgid "Match private IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1290
msgid "Match private IP with query response."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:850
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:844
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1281
msgid "Match private source IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:882
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:876
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
msgid "Match process name."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
+#: htdocs/luci-static/resources/view/homeproxy/client.js:884
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1322
msgid "Match process path using regular expression."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:886
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:880
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1318
msgid "Match process path."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
msgid "Match query type."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1143
+#: htdocs/luci-static/resources/view/homeproxy/client.js:664
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1137
msgid "Match rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:846
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1283
+#: htdocs/luci-static/resources/view/homeproxy/client.js:840
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1277
msgid "Match source IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:867
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1305
+#: htdocs/luci-static/resources/view/homeproxy/client.js:861
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
msgid "Match source port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:862
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1300
+#: htdocs/luci-static/resources/view/homeproxy/client.js:856
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1294
msgid "Match source port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
msgid "Match user name."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1009
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1000
#: htdocs/luci-static/resources/view/homeproxy/server.js:261
msgid "Max download speed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1010
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1001
#: htdocs/luci-static/resources/view/homeproxy/server.js:262
msgid "Max download speed in Mbps."
msgstr ""
@@ -1516,93 +1507,93 @@ msgstr ""
msgid "Max time difference"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1016
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1007
#: htdocs/luci-static/resources/view/homeproxy/server.js:268
msgid "Max upload speed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1017
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1008
#: htdocs/luci-static/resources/view/homeproxy/server.js:269
msgid "Max upload speed in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1477
#: htdocs/luci-static/resources/view/homeproxy/server.js:578
msgid "Maximum TLS version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1391
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
msgid "Maximum connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1403
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1394
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"%s and %s."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1393
msgid "Maximum streams"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:791
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1225
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:785
+#: htdocs/luci-static/resources/view/homeproxy/client.js:793
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1219
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1262
#: htdocs/luci-static/resources/view/homeproxy/server.js:452
msgid "Method"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1469
#: htdocs/luci-static/resources/view/homeproxy/server.js:570
msgid "Minimum TLS version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:950
+#: htdocs/luci-static/resources/view/homeproxy/node.js:941
msgid "Minimum idle sessions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1397
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1388
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1387
#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
msgid "Minimum streams"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1764
msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+#: htdocs/luci-static/resources/view/homeproxy/client.js:334
#: htdocs/luci-static/resources/view/homeproxy/server.js:183
msgid "Mixed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+#: htdocs/luci-static/resources/view/homeproxy/client.js:345
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1098
+#: htdocs/luci-static/resources/view/homeproxy/client.js:612
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
msgid "Mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1594
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1585
#: htdocs/luci-static/resources/view/homeproxy/server.js:850
msgid "MultiPath TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1374
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1365
#: htdocs/luci-static/resources/view/homeproxy/server.js:500
msgid "Multiplex"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1373
msgid "Multiplex protocol."
msgstr ""
@@ -1611,15 +1602,19 @@ msgstr ""
msgid "NOT RUNNING"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1826
msgid "NOTE: Save current settings before updating subscriptions."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1249
msgid "NS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1141
+#: htdocs/luci-static/resources/view/homeproxy/status.js:102
+msgid "Name"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
msgid "Native"
msgstr ""
@@ -1627,41 +1622,41 @@ msgstr ""
msgid "NaïveProxy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
+#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1116
#: htdocs/luci-static/resources/view/homeproxy/server.js:866
msgid "Network"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1122
msgid "New Reno"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1204
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1195
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1212
#: htdocs/luci-static/resources/view/homeproxy/server.js:400
#: htdocs/luci-static/resources/view/homeproxy/server.js:417
msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1219
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
#: htdocs/luci-static/resources/view/homeproxy/server.js:415
msgid "No additional encryption support: It's basically duplicate encryption."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1852
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1843
msgid "No subscription available"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1877
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1868
msgid "No subscription node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1704
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1695
msgid "No valid share link found."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:436
#: htdocs/luci-static/resources/view/homeproxy/node.js:719
msgid "Node"
msgstr ""
@@ -1670,13 +1665,13 @@ msgstr ""
msgid "Node Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1650
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1641
msgid "Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1167
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
#: htdocs/luci-static/resources/view/homeproxy/server.js:386
#: htdocs/luci-static/resources/view/homeproxy/server.js:401
msgid "None"
@@ -1687,69 +1682,69 @@ msgstr ""
msgid "Not Tested"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1003
+#: htdocs/luci-static/resources/view/homeproxy/node.js:994
#: htdocs/luci-static/resources/view/homeproxy/server.js:294
msgid "Obfuscate password"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:997
+#: htdocs/luci-static/resources/view/homeproxy/node.js:988
#: htdocs/luci-static/resources/view/homeproxy/server.js:288
msgid "Obfuscate type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1426
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:278
msgid "Only proxy mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:603
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1083
+#: htdocs/luci-static/resources/view/homeproxy/client.js:597
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1077
msgid "Other fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:701
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:695
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1392
msgid "Outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:437
msgid "Outbound node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:713
msgid "Override address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
+#: htdocs/luci-static/resources/view/homeproxy/client.js:369
msgid "Override destination"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:720
msgid "Override port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:370
msgid "Override the connection destination address with the sniffed domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:714
msgid "Override the connection destination address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:721
msgid "Override the connection destination port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1273
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1264
msgid "PUT"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1316
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1307
msgid "Packet encoding"
msgstr ""
@@ -1757,7 +1752,7 @@ msgstr ""
msgid "Padding scheme"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:141
+#: htdocs/luci-static/resources/view/homeproxy/status.js:192
msgid "Panic"
msgstr ""
@@ -1766,72 +1761,66 @@ msgstr ""
msgid "Password"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:990
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1369
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1266
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:984
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1363
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1257
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1290
#: htdocs/luci-static/resources/view/homeproxy/server.js:447
#: htdocs/luci-static/resources/view/homeproxy/server.js:477
msgid "Path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1341
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1332
msgid "Peer pubkic key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:352
-msgid ""
-"Performance may degrade slightly, so it is not recommended to enable on when "
-"it is not needed."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1366
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1357
msgid "Persistent keepalive interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1285
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1276
#: htdocs/luci-static/resources/view/homeproxy/server.js:464
msgid "Ping timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1051
msgid "Plugin"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1058
msgid "Plugin opts"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
-#: htdocs/luci-static/resources/view/homeproxy/client.js:985
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
+#: htdocs/luci-static/resources/view/homeproxy/client.js:865
+#: htdocs/luci-static/resources/view/homeproxy/client.js:979
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1303
#: htdocs/luci-static/resources/view/homeproxy/node.js:883
msgid "Port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:300
msgid "Port %s alrealy exists!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:605
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
msgid "Port fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:966
+#: htdocs/luci-static/resources/view/homeproxy/node.js:957
msgid "Port hopping interval in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:876
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+#: htdocs/luci-static/resources/view/homeproxy/client.js:870
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1308
msgid "Port range"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1339
msgid "Pre-shared key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1167
msgid "Predefined"
msgstr ""
@@ -1843,12 +1832,12 @@ msgstr ""
msgid "Prefer IPv6"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1108
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1324
msgid "Private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1104
msgid "Private key passphrase"
msgstr ""
@@ -1856,97 +1845,93 @@ msgstr ""
msgid "Probe failed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:606
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/client.js:600
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1080
msgid "Process fields"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:881
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1319
+#: htdocs/luci-static/resources/view/homeproxy/client.js:875
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1313
msgid "Process name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1323
+#: htdocs/luci-static/resources/view/homeproxy/client.js:879
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1317
msgid "Process path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1321
msgid "Process path (regex)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:638
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
-#: htdocs/luci-static/resources/view/homeproxy/node.js:973
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:632
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
+#: htdocs/luci-static/resources/view/homeproxy/node.js:964
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1372
#: htdocs/luci-static/resources/view/homeproxy/server.js:250
msgid "Protocol"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1188
msgid "Protocol parameter. Enable length block encryption."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1181
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1500
msgid "Proxy Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1489
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1455
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1484
msgid "Proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1492
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1458
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
msgid "Proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1461
msgid "Proxy MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1447
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
msgid "Proxy all except listed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1439
msgid "Proxy filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1441
msgid "Proxy listed only"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:308
msgid "Proxy mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:927
-msgid "Proxy protocol"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:644
-#: htdocs/luci-static/resources/view/homeproxy/client.js:976
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1209
+#: htdocs/luci-static/resources/view/homeproxy/client.js:638
+#: htdocs/luci-static/resources/view/homeproxy/client.js:970
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1126
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1200
#: htdocs/luci-static/resources/view/homeproxy/server.js:405
msgid "QUIC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
#: htdocs/luci-static/resources/view/homeproxy/server.js:355
msgid "QUIC congestion control algorithm."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1020
#: htdocs/luci-static/resources/view/homeproxy/server.js:307
msgid "QUIC connection receive window"
msgstr ""
@@ -1955,33 +1940,33 @@ msgstr ""
msgid "QUIC maximum concurrent bidirectional streams"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1023
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
#: htdocs/luci-static/resources/view/homeproxy/server.js:300
msgid "QUIC stream receive window"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:209
+#: htdocs/luci-static/resources/view/homeproxy/client.js:210
msgid "Quad9 Public DNS (DoH)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1112
msgid "Query type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
msgid "RCode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:645
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/client.js:639
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
msgid "RDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:940
+#: htdocs/luci-static/resources/view/homeproxy/client.js:934
msgid "RDRC timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1572
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1563
#: htdocs/luci-static/resources/view/homeproxy/server.js:709
msgid "REALITY"
msgstr ""
@@ -1990,17 +1975,17 @@ msgstr ""
msgid "REALITY private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1577
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1568
#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid "REALITY public key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1583
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1574
#: htdocs/luci-static/resources/view/homeproxy/server.js:734
msgid "REALITY short ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1785
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1776
msgid "RP"
msgstr ""
@@ -2013,31 +1998,31 @@ msgstr ""
msgid "RUNNING"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
msgid "Random version will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
+#: htdocs/luci-static/resources/view/homeproxy/client.js:505
msgid "Recursive outbound detected!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1030
msgid "Recursive resolver detected!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:309
msgid "Redirect TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:311
msgid "Redirect TCP + TProxy UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:313
msgid "Redirect TCP + Tun UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:219
+#: htdocs/luci-static/resources/view/homeproxy/status.js:270
msgid "Refresh every %s seconds."
msgstr ""
@@ -2045,44 +2030,44 @@ msgstr ""
msgid "Region ID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:695
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/client.js:689
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
msgid "Reject"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1353
msgid "Remote"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1874
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1865
msgid "Remove %s nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1864
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1855
msgid "Remove all nodes from subscriptions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1220
msgid "Reply with REFUSED"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:792
+#: htdocs/luci-static/resources/view/homeproxy/client.js:786
msgid "Reply with TCP RST / ICMP port unreachable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1346
msgid "Reserved field bytes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
msgid "Resolve"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:797
msgid "Resolve strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:241
+#: htdocs/luci-static/resources/view/homeproxy/status.js:128
msgid "Resources management"
msgstr ""
@@ -2094,115 +2079,115 @@ msgstr ""
msgid "Reuse listener address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:809
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
msgid "Rewrite TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
msgid "Rewrite TTL in DNS responses."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:693
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:687
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1164
msgid "Route"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:694
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:688
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
msgid "Route options"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:413
msgid "Routing Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:590
+#: htdocs/luci-static/resources/view/homeproxy/client.js:584
msgid "Routing Rules"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:146
msgid "Routing Settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:275
msgid "Routing mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:422
msgid "Routing node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:288
msgid "Routing ports"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
msgid "Routing rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
msgid "Rule Set"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:669
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:663
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1136
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1337
msgid "Rule set"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:684
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:678
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1151
msgid "Rule set IP CIDR as source IP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1370
msgid "Rule set URL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:646
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1134
+#: htdocs/luci-static/resources/view/homeproxy/client.js:640
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
#: htdocs/luci-static/resources/view/homeproxy/node.js:868
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:647
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1607
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1598
msgid "SUoT version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:649
msgid "Safari / Apple Network API"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:999
+#: htdocs/luci-static/resources/view/homeproxy/node.js:990
#: htdocs/luci-static/resources/view/homeproxy/server.js:290
msgid "Salamander"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:178
msgid "Same as main node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:267
-#: htdocs/luci-static/resources/view/homeproxy/status.js:273
+#: htdocs/luci-static/resources/view/homeproxy/status.js:305
+#: htdocs/luci-static/resources/view/homeproxy/status.js:311
msgid "Save"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1837
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1828
msgid "Save current settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1834
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
msgid "Save subscriptions settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
#: htdocs/luci-static/resources/view/homeproxy/server.js:156
msgid "Server"
msgstr ""
@@ -2225,7 +2210,7 @@ msgstr ""
msgid "Service Status"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1192
msgid "Set domain strategy for this query."
msgstr ""
@@ -2233,7 +2218,7 @@ msgstr ""
msgid "ShadowTLS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1065
msgid "ShadowTLS version"
msgstr ""
@@ -2242,12 +2227,12 @@ msgstr ""
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:645
msgid "Sniffed client type (QUIC client type or SSH client name)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:639
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
msgid ""
"Sniffed protocol, see Sniff for details."
@@ -2258,48 +2243,52 @@ msgstr ""
msgid "Socks"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
msgid "Socks version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
msgid "Socks4"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
msgid "Socks4A"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1078
msgid "Socks5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:845
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1282
+#: htdocs/luci-static/resources/view/homeproxy/status.js:104
+msgid "Source"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:839
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1276
msgid "Source IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1365
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
msgid "Source file"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:861
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1293
msgid "Source port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:866
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/client.js:860
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1298
msgid "Source port range"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:767
msgid ""
"Specifies DNS server tag to use instead of selecting through DNS routing."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1226
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1269
msgid ""
"Specifies the period of time (in seconds) after which a health check will be "
"performed using a ping frame if no frames have been received on the "
@@ -2315,8 +2304,8 @@ msgid ""
"GOAWAY frame. PING frames are not considered as activity."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1230
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
msgid ""
"Specifies the timeout duration (in seconds) after sending a PING frame, "
"within which a response must be received.Address "
"filter DNS rule items will be cached until expiration."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:987
+#: htdocs/luci-static/resources/view/homeproxy/node.js:978
#: htdocs/luci-static/resources/view/homeproxy/server.js:278
msgid "String"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1755
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1746
msgid "Sub (%s)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1789
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1780
msgid "Subscription URL-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1766
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1757
msgid "Subscriptions"
msgstr ""
@@ -2361,111 +2350,111 @@ msgstr ""
msgid "Success"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1706
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1697
msgid "Successfully imported %s nodes of total %s."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:86
+#: htdocs/luci-static/resources/view/homeproxy/status.js:138
msgid "Successfully updated."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1666
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1657
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1781
msgid ""
"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
"online configuration delivery standard."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:206
msgid ""
"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:336
+#: htdocs/luci-static/resources/view/homeproxy/client.js:337
msgid "System"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:406
-#: htdocs/luci-static/resources/view/homeproxy/client.js:458
-#: htdocs/luci-static/resources/view/homeproxy/client.js:780
-#: htdocs/luci-static/resources/view/homeproxy/client.js:911
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1019
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1185
+#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:774
+#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1013
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1179
msgid "System DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:661
-#: htdocs/luci-static/resources/view/homeproxy/client.js:972
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1123
+#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:966
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1117
#: htdocs/luci-static/resources/view/homeproxy/server.js:867
msgid "TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1591
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1582
#: htdocs/luci-static/resources/view/homeproxy/server.js:845
msgid "TCP fast open"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:330
+#: htdocs/luci-static/resources/view/homeproxy/client.js:331
msgid "TCP/IP stack"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:331
+#: htdocs/luci-static/resources/view/homeproxy/client.js:332
msgid "TCP/IP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:648
-#: htdocs/luci-static/resources/view/homeproxy/client.js:973
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1136
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1433
+#: htdocs/luci-static/resources/view/homeproxy/client.js:642
+#: htdocs/luci-static/resources/view/homeproxy/client.js:967
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1424
#: htdocs/luci-static/resources/view/homeproxy/server.js:532
msgid "TLS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1465
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1456
#: htdocs/luci-static/resources/view/homeproxy/server.js:565
msgid "TLS ALPN"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1003
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1460
+#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1451
#: htdocs/luci-static/resources/view/homeproxy/server.js:560
msgid "TLS SNI"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:758
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "TLS fragment"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1208
#: htdocs/luci-static/resources/view/homeproxy/server.js:413
msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:752
-#: htdocs/luci-static/resources/view/homeproxy/client.js:760
+#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:754
msgid "TLS record fragment"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1006
msgid ""
"Tag of a another server to resolve the domain name in the address. Required "
"if address contains domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1051
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1045
msgid "Tag of an outbound for connecting to the dns server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1393
msgid "Tag of the outbound to download rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
msgid "Tag of the target dns server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:702
+#: htdocs/luci-static/resources/view/homeproxy/client.js:696
msgid "Tag of the target outbound."
msgstr ""
@@ -2474,7 +2463,7 @@ msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:245
+#: htdocs/luci-static/resources/view/homeproxy/client.js:246
msgid "Tencent Public DNS (DoH)"
msgstr ""
@@ -2483,28 +2472,28 @@ msgstr ""
msgid "Test"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1924
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1915
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1919
msgid "Test Current List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:533
+#: htdocs/luci-static/resources/view/homeproxy/client.js:527
msgid "Test URL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:163
-#: htdocs/luci-static/resources/view/homeproxy/client.js:192
-#: htdocs/luci-static/resources/view/homeproxy/client.js:553
+#: htdocs/luci-static/resources/view/homeproxy/client.js:164
+#: htdocs/luci-static/resources/view/homeproxy/client.js:193
+#: htdocs/luci-static/resources/view/homeproxy/client.js:547
msgid "Test interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:561
+#: htdocs/luci-static/resources/view/homeproxy/client.js:555
msgid "Test interval must be less or equal than idle timeout."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:169
-#: htdocs/luci-static/resources/view/homeproxy/client.js:198
-#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:199
+#: htdocs/luci-static/resources/view/homeproxy/client.js:563
msgid "Test tolerance"
msgstr ""
@@ -2513,7 +2502,7 @@ msgstr ""
msgid "Testing"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1917
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1908
msgid "Testing Current List..."
msgstr ""
@@ -2521,25 +2510,25 @@ msgstr ""
msgid "The ACME CA provider to use."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:901
+#: htdocs/luci-static/resources/view/homeproxy/client.js:895
msgid "The DNS strategy for resolving the domain name in the address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1030
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1021
#: htdocs/luci-static/resources/view/homeproxy/server.js:308
msgid "The QUIC connection-level flow control window for receiving data."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1024
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1015
#: htdocs/luci-static/resources/view/homeproxy/server.js:301
msgid "The QUIC stream-level flow control window for receiving data."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:534
+#: htdocs/luci-static/resources/view/homeproxy/client.js:528
msgid "The URL to test."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:981
+#: htdocs/luci-static/resources/view/homeproxy/client.js:975
msgid "The address of the dns server."
msgstr ""
@@ -2555,7 +2544,7 @@ msgid ""
"forward 443 to this port for challenge to succeed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:619
+#: htdocs/luci-static/resources/view/homeproxy/client.js:613
msgid ""
"The default rule uses the following matching logic:(domain || "
"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
@@ -2566,7 +2555,7 @@ msgid ""
"than as a single rule sub-item."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1093
msgid ""
"The default rule uses the following matching logic:
(domain || "
"domain_suffix || domain_keyword || domain_regex) &&
(port "
@@ -2576,17 +2565,17 @@ msgid ""
"considered merged rather than as a single rule sub-item."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:242
+#: htdocs/luci-static/resources/view/homeproxy/client.js:243
msgid ""
"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:470
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:464
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1038
msgid "The domain strategy for resolving the domain name in the address."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
#: htdocs/luci-static/resources/view/homeproxy/server.js:587
msgid ""
"The elliptic curves that will be used in an ECDHE handshake, in preference "
@@ -2599,17 +2588,17 @@ msgid ""
"account."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:760
msgid ""
"The fallback value in milliseconds used when TLS segmentation cannot "
"automatically determine the wait time."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:577
+#: htdocs/luci-static/resources/view/homeproxy/client.js:571
msgid "The idle timeout in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
#: htdocs/luci-static/resources/view/homeproxy/server.js:579
msgid "The maximum TLS version that is acceptable."
msgstr ""
@@ -2624,32 +2613,32 @@ msgstr ""
msgid "The maximum time difference between the server and the client."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
#: htdocs/luci-static/resources/view/homeproxy/server.js:571
msgid "The minimum TLS version that is acceptable."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:114
#: htdocs/luci-static/resources/view/homeproxy/server.js:130
msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:471
#: htdocs/luci-static/resources/view/homeproxy/server.js:875
msgid "The network interface to bind to."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:991
+#: htdocs/luci-static/resources/view/homeproxy/client.js:985
msgid "The path of the DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1529
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
msgid ""
"The path to the ECH config, in PEM format. If empty, load from DNS will be "
"attempted."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1499
msgid "The path to the server certificate, in PEM format."
msgstr ""
@@ -2657,11 +2646,11 @@ msgstr ""
msgid "The port must be unique."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:986
+#: htdocs/luci-static/resources/view/homeproxy/client.js:980
msgid "The port of the DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1233
msgid "The response code."
msgstr ""
@@ -2673,25 +2662,25 @@ msgstr ""
msgid "The server public key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
+#: htdocs/luci-static/resources/view/homeproxy/client.js:478
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:164
-#: htdocs/luci-static/resources/view/homeproxy/client.js:193
-#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:194
+#: htdocs/luci-static/resources/view/homeproxy/client.js:548
msgid "The test interval in seconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:170
-#: htdocs/luci-static/resources/view/homeproxy/client.js:199
-#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/client.js:171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:200
+#: htdocs/luci-static/resources/view/homeproxy/client.js:564
msgid "The test tolerance in milliseconds."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1237
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1228
#: htdocs/luci-static/resources/view/homeproxy/server.js:465
msgid ""
"The timeout (in seconds) that after performing a keepalive check, the client "
@@ -2699,20 +2688,20 @@ msgid ""
"closed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1473
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1464
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1816
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1147
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
msgid ""
"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
"QUIC stream based UDP relay mode that TUIC does not provide."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:244
+#: htdocs/luci-static/resources/view/homeproxy/client.js:245
msgid "ThreatBook Public DNS (DoH)"
msgstr ""
@@ -2720,13 +2709,13 @@ msgstr ""
msgid "Timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:740
msgid ""
"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
"in inbounds will have no effect."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+#: htdocs/luci-static/resources/view/homeproxy/client.js:935
msgid ""
"Timeout of rejected DNS response cache in seconds. 604800 (7d) "
"is used by default."
@@ -2738,17 +2727,17 @@ msgid ""
"code>."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:316
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:135
+#: htdocs/luci-static/resources/view/homeproxy/status.js:186
msgid "Trace"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1203
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
#: htdocs/luci-static/resources/view/homeproxy/server.js:399
msgid "Transport"
msgstr ""
@@ -2763,130 +2752,134 @@ msgstr ""
msgid "Tuic"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:313
+#: htdocs/luci-static/resources/view/homeproxy/client.js:314
msgid "Tun TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1351
#: htdocs/luci-static/resources/view/homeproxy/node.js:857
#: htdocs/luci-static/resources/view/homeproxy/server.js:175
msgid "Type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:662
-#: htdocs/luci-static/resources/view/homeproxy/client.js:971
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
+#: htdocs/luci-static/resources/view/homeproxy/client.js:656
+#: htdocs/luci-static/resources/view/homeproxy/client.js:965
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
#: htdocs/luci-static/resources/view/homeproxy/server.js:868
msgid "UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1597
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1588
#: htdocs/luci-static/resources/view/homeproxy/server.js:854
msgid "UDP Fragment"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:352
#: htdocs/luci-static/resources/view/homeproxy/server.js:859
msgid "UDP NAT expiration time"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1601
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1592
msgid "UDP over TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1146
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1137
msgid "UDP over stream"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
msgid "UDP packet relay mode."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
msgid "UDP relay mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:739
msgid "UDP timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:149
-#: htdocs/luci-static/resources/view/homeproxy/client.js:178
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:150
+#: htdocs/luci-static/resources/view/homeproxy/client.js:179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:438
msgid "URLTest"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:186
+#: htdocs/luci-static/resources/view/homeproxy/client.js:513
msgid "URLTest nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:131
msgid "URLTest: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1111
#: htdocs/luci-static/resources/view/homeproxy/server.js:346
msgid "UUID"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:98
+#: htdocs/luci-static/resources/view/homeproxy/status.js:151
msgid "Unknown error."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:195
+#: htdocs/luci-static/resources/view/homeproxy/status.js:246
msgid "Unknown error: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1565
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1556
msgid "Unsupported fingerprint!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1849
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1840
msgid "Update %s subscriptions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:89
+#: htdocs/luci-static/resources/view/homeproxy/status.js:160
+msgid "Update all"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/status.js:141
msgid "Update failed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1415
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1410
msgid "Update interval"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1411
msgid "Update interval of rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1844
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
msgid "Update nodes from subscriptions"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1779
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1770
msgid "Update subscriptions via proxy."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1778
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
msgid "Update via proxy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1525
msgid "Upload ECH config"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1416
#: htdocs/luci-static/resources/view/homeproxy/server.js:523
msgid "Upload bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1426
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1417
#: htdocs/luci-static/resources/view/homeproxy/server.js:524
msgid "Upload bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1506
#: htdocs/luci-static/resources/view/homeproxy/server.js:767
msgid "Upload certificate"
msgstr ""
@@ -2895,8 +2888,8 @@ msgstr ""
msgid "Upload key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1518
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1509
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1528
#: htdocs/luci-static/resources/view/homeproxy/server.js:770
#: htdocs/luci-static/resources/view/homeproxy/server.js:789
msgid "Upload..."
@@ -2906,23 +2899,23 @@ msgstr ""
msgid "Use ACME TLS certificate issuer."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1452
#: htdocs/luci-static/resources/view/homeproxy/server.js:561
msgid ""
"Used to verify the hostname on the returned certificates unless insecure is "
"given."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1004
+#: htdocs/luci-static/resources/view/homeproxy/client.js:998
msgid "Used to verify the hostname on the returned certificates."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/client.js:659
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
msgid "User"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1819
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
msgid "User-Agent"
msgstr ""
@@ -2941,25 +2934,29 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client.js:243
+#: htdocs/luci-static/resources/view/homeproxy/status.js:103
+msgid "Version"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:244
msgid "WAN DNS (read from interface)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "WAN IP Policy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:138
+#: htdocs/luci-static/resources/view/homeproxy/status.js:189
msgid "Warn"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1201
#: htdocs/luci-static/resources/view/homeproxy/server.js:406
msgid "WebSocket"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1801
msgid "Whitelist mode"
msgstr ""
@@ -2967,24 +2964,20 @@ msgstr ""
msgid "WireGuard"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1342
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
msgid "WireGuard peer public key."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1349
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1340
msgid "WireGuard pre-shared key."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1325
msgid "WireGuard requires base64-encoded private keys."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:928
-msgid "Write proxy protocol in the connection header."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1319
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1832
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
msgid "Xudp (Xray-core)"
msgstr ""
@@ -2996,17 +2989,17 @@ msgstr ""
msgid "ZeroSSL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1511
#: htdocs/luci-static/resources/view/homeproxy/server.js:772
msgid "certificate"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:739
+#: htdocs/luci-static/resources/view/homeproxy/client.js:733
msgid "connect UDP connections"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1488
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
#: htdocs/luci-static/resources/view/homeproxy/server.js:572
#: htdocs/luci-static/resources/view/homeproxy/server.js:580
msgid "default"
@@ -3016,44 +3009,44 @@ msgstr ""
msgid "failed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1206
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
#: htdocs/luci-static/resources/view/homeproxy/server.js:402
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1248
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1239
msgid "gRPC permit without stream"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1243
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1234
#: htdocs/luci-static/resources/view/homeproxy/server.js:430
msgid "gRPC service name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:335
msgid "gVisor"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:306
#: htdocs/luci-static/resources/homeproxy.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
+#: htdocs/luci-static/resources/view/homeproxy/client.js:521
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1374
#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1552
#: htdocs/luci-static/resources/view/homeproxy/server.js:235
msgid "non-empty value"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1830
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1052
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1308
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1821
msgid "none"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1831
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1309
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
msgid "packet addr (v2ray-core v5+)"
msgstr ""
@@ -3065,23 +3058,23 @@ msgstr ""
msgid "private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:648
msgid "quic-go / uquic chrome"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:285
+#: htdocs/luci-static/resources/view/homeproxy/status.js:323
msgid "sing-box client"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:288
+#: htdocs/luci-static/resources/view/homeproxy/status.js:326
msgid "sing-box server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1543
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
msgid "uTLS fingerprint"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1544
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
msgid ""
"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
"resistance."
@@ -3092,7 +3085,7 @@ msgid "unchecked"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:237
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1726
msgid "unique UCI identifier"
msgstr ""
@@ -3100,35 +3093,33 @@ msgstr ""
msgid "unique value"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:930
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1608
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1066
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1599
msgid "v1"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:931
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1600
msgid "v2"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1068
msgid "v3"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
+#: htdocs/luci-static/resources/view/homeproxy/client.js:232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:236
+#: htdocs/luci-static/resources/view/homeproxy/client.js:265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:269
msgid "valid DNS server address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:535
+#: htdocs/luci-static/resources/view/homeproxy/client.js:538
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
msgid "valid URL"
msgstr ""
@@ -3136,8 +3127,8 @@ msgstr ""
msgid "valid base64 key with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1525
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
msgid "valid hostname"
msgstr ""
@@ -3145,7 +3136,7 @@ msgstr ""
msgid "valid port range (port1:port2)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:298
msgid "valid port value"
msgstr ""
diff --git a/homeproxy/po/zh_Hans/homeproxy.po b/homeproxy/po/zh_Hans/homeproxy.po
index 20b56b29..34f36636 100644
--- a/homeproxy/po/zh_Hans/homeproxy.po
+++ b/homeproxy/po/zh_Hans/homeproxy.po
@@ -8,7 +8,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:206
+#: htdocs/luci-static/resources/view/homeproxy/status.js:257
msgid "%s log"
msgstr "%s 日志"
@@ -16,7 +16,7 @@ msgstr "%s 日志"
msgid "%s ms"
msgstr "%s 毫秒"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1896
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1887
msgid "%s nodes removed"
msgstr "移除了 %s 个节点"
@@ -24,12 +24,12 @@ msgstr "移除了 %s 个节点"
msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..."
msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..."
-#: htdocs/luci-static/resources/view/homeproxy/client.js:632
+#: htdocs/luci-static/resources/view/homeproxy/client.js:626
msgid "4 or 6. Not limited if empty."
msgstr "4 或 6。留空不限制。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:798
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1233
+#: htdocs/luci-static/resources/view/homeproxy/client.js:792
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
msgid ""
"%s will be temporarily overwritten to %s after 50 "
"triggers in 30s if not enabled."
@@ -37,8 +37,8 @@ msgstr ""
"%s 在未启用的情况下,50 次触发后会在 30 秒内临时覆盖为 "
"%s。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1516
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1526
#: htdocs/luci-static/resources/view/homeproxy/server.js:768
#: htdocs/luci-static/resources/view/homeproxy/server.js:787
msgid "Save your configuration before uploading files!"
@@ -48,15 +48,15 @@ msgstr "上传文件前请先保存配置!"
msgid "API token"
msgstr "API 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1100
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1091
msgid "Accept any if empty."
msgstr "留空则不校验。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1161
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1155
msgid "Accept empty query response"
msgstr "接受空查询响应"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1422
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1417
msgid "Access Control"
msgstr "访问控制"
@@ -68,20 +68,20 @@ msgstr "访问密钥 ID"
msgid "Access key secret"
msgstr "访问密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:692
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1169
+#: htdocs/luci-static/resources/view/homeproxy/client.js:686
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1163
msgid "Action"
msgstr "操作"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:211
msgid "AdGuard Public DNS (DoH)"
msgstr "AdGuard 公共DNS (DoH)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1073
msgid "Add a DNS rule"
msgstr "新增 DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
msgid "Add a DNS server"
msgstr "新增 DNS 服务器"
@@ -89,15 +89,15 @@ msgstr "新增 DNS 服务器"
msgid "Add a node"
msgstr "新增节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:422
msgid "Add a routing node"
msgstr "新增路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
msgid "Add a routing rule"
msgstr "新增路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1337
msgid "Add a rule set"
msgstr "新增规则集"
@@ -105,20 +105,20 @@ msgstr "新增规则集"
msgid "Add a server"
msgstr "新增服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:998
+#: htdocs/luci-static/resources/view/homeproxy/client.js:992
msgid "Additional headers to be sent to the DNS server."
msgstr "发送到 DNS 服务器的附加标头。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:980
+#: htdocs/luci-static/resources/view/homeproxy/client.js:974
#: htdocs/luci-static/resources/view/homeproxy/node.js:878
msgid "Address"
msgstr "地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1005
msgid "Address resolver"
msgstr "地址解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1043
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1037
msgid "Address strategy"
msgstr "地址解析策略"
@@ -126,11 +126,11 @@ msgstr "地址解析策略"
msgid "AliYun"
msgstr "AliYun"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:246
+#: htdocs/luci-static/resources/view/homeproxy/client.js:247
msgid "AliYun Public DNS (DoH)"
msgstr "阿里 公共DNS (DoH)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:289
+#: htdocs/luci-static/resources/view/homeproxy/client.js:290
msgid "All ports"
msgstr "所有端口"
@@ -138,33 +138,33 @@ msgstr "所有端口"
msgid "Allow access from the Internet."
msgstr "允许来自互联网的访问。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1813
msgid "Allow insecure"
msgstr "允许不安全连接"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1462
msgid "Allow insecure connection at TLS client."
msgstr "允许 TLS 客户端侧的不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1814
msgid "Allow insecure connection by default when add nodes from subscriptions."
msgstr "从订阅获取节点时,默认允许不安全连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1295
#: htdocs/luci-static/resources/view/homeproxy/server.js:482
msgid "Allowed payload size is in the request."
msgstr "请求中允许的载荷大小。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:95
+#: htdocs/luci-static/resources/view/homeproxy/status.js:148
msgid "Already at the latest version."
msgstr "已是最新版本。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:92
+#: htdocs/luci-static/resources/view/homeproxy/status.js:145
msgid "Already in updating."
msgstr "已在更新中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1163
#: htdocs/luci-static/resources/view/homeproxy/server.js:391
msgid "Alter ID"
msgstr "额外 ID"
@@ -177,11 +177,11 @@ msgstr "替代 HTTP 端口"
msgid "Alternative TLS port"
msgstr "替代 HTTPS 端口"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1859
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1850
msgid "An error occurred during updating subscriptions: %s"
msgstr "更新订阅时发生错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1244
msgid "Answer"
msgstr "回答"
@@ -194,9 +194,9 @@ msgstr "AnyTLS"
msgid "AnyTLS padding scheme in array."
msgstr "AnyTLS 填充方案。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1218
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:926
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1212
msgid ""
"Append a edns0-subnet OPT extra record with the specified IP "
"prefix to every query by default.
If value is an IP address instead of "
@@ -205,7 +205,7 @@ msgstr ""
"将带有指定 IP 前缀的 edns0-subnet OPT 记录附加到每个查询。如果值"
"是 IP 地址而不是前缀,则会自动添加 /32 或 /128。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1502
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1493
msgid "Append self-signed certificate"
msgstr "追加自签名证书"
@@ -226,29 +226,29 @@ msgstr "确定要允许不安全连接吗?"
msgid "Auth timeout"
msgstr "认证超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1187
msgid "Authenticated length"
msgstr "认证长度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:991
+#: htdocs/luci-static/resources/view/homeproxy/node.js:982
#: htdocs/luci-static/resources/view/homeproxy/server.js:282
msgid "Authentication payload"
msgstr "认证载荷"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:984
+#: htdocs/luci-static/resources/view/homeproxy/node.js:975
#: htdocs/luci-static/resources/view/homeproxy/server.js:275
msgid "Authentication type"
msgstr "认证类型"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1768
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1759
msgid "Auto update"
msgstr "自动更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1760
msgid "Auto update subscriptions and geodata."
msgstr "自动更新订阅和地理数据。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1123
msgid "BBR"
msgstr "BBR"
@@ -256,64 +256,64 @@ msgstr "BBR"
msgid "Backend execution failed"
msgstr "后端执行失败"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:235
+#: htdocs/luci-static/resources/view/homeproxy/status.js:286
msgid "BaiDu"
msgstr "百度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:986
+#: htdocs/luci-static/resources/view/homeproxy/node.js:977
#: htdocs/luci-static/resources/view/homeproxy/server.js:277
msgid "Base64"
msgstr "Base64"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:346
+#: htdocs/luci-static/resources/view/homeproxy/client.js:347
msgid "Based on google/gvisor."
msgstr "基于 google/gvisor。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
msgid "Binary file"
msgstr "二进制文件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1435
+#: htdocs/luci-static/resources/view/homeproxy/client.js:470
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
#: htdocs/luci-static/resources/view/homeproxy/server.js:874
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "绑定出站流量至指定端口。留空自动检测。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:640
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/client.js:634
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1123
msgid "BitTorrent"
msgstr "BitTorrent"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1809
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1800
msgid "Blacklist mode"
msgstr "黑名单模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:388
+#: htdocs/luci-static/resources/view/homeproxy/client.js:382
msgid "Block"
msgstr "封锁"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:663
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1115
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
+#: htdocs/luci-static/resources/view/homeproxy/client.js:657
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1109
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
#: htdocs/luci-static/resources/view/homeproxy/server.js:869
msgid "Both"
msgstr "全部"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
msgid "Bypass CN traffic"
msgstr "绕过中国流量"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:276
+#: htdocs/luci-static/resources/view/homeproxy/client.js:277
msgid "Bypass mainland China"
msgstr "大陆白名单"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:367
+#: htdocs/luci-static/resources/view/homeproxy/client.js:361
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr "默认使用防火墙规则绕过中国大陆流量。"
@@ -321,15 +321,15 @@ msgstr "默认使用防火墙规则绕过中国大陆流量。"
msgid "CA provider"
msgstr "CA 颁发机构"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1121
msgid "CUBIC"
msgstr "CUBIC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1672
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1663
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1507
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1498
#: htdocs/luci-static/resources/view/homeproxy/server.js:756
msgid "Certificate path"
msgstr "证书路径"
@@ -338,48 +338,44 @@ msgstr "证书路径"
msgid "Check"
msgstr "检查"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:105
-msgid "Check update"
-msgstr "检查更新"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:241
+#: htdocs/luci-static/resources/view/homeproxy/client.js:242
msgid "China DNS server"
msgstr "国内 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:244
-msgid "China IPv4 list version"
-msgstr "国内 IPv4 库版本"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:66
+msgid "China IPv4 list"
+msgstr "国内 IPv4 列表"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:248
-msgid "China IPv6 list version"
-msgstr "国内 IPv6 库版本"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:70
+msgid "China IPv6 list"
+msgstr "国内 IPv6 列表"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:252
-msgid "China list version"
-msgstr "国内域名列表版本"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:74
+msgid "China domain list"
+msgstr "国内域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1783
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1774
msgid "Choose which method node latency tests use."
msgstr "选择节点延迟测试使用的方法。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:646
msgid "Chromium / Cronet"
msgstr "Chromium / Cronet"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1485
#: htdocs/luci-static/resources/view/homeproxy/server.js:586
msgid "Cipher suites"
msgstr "密码套件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:212
+#: htdocs/luci-static/resources/view/homeproxy/client.js:213
msgid "Cisco Public DNS (DoH)"
msgstr "Cisco 公共DNS (DoH)"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:214
+#: htdocs/luci-static/resources/view/homeproxy/status.js:265
msgid "Clean log"
msgstr "清空日志"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:650
+#: htdocs/luci-static/resources/view/homeproxy/client.js:644
msgid "Client"
msgstr "客户端"
@@ -387,7 +383,7 @@ msgstr "客户端"
msgid "Client Settings"
msgstr "客户端设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1094
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
msgid "Client version"
msgstr "客户端版本"
@@ -395,50 +391,50 @@ msgstr "客户端版本"
msgid "CloudFlare"
msgstr "CloudFlare"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:208
msgid "CloudFlare Public DNS (DoH)"
msgstr "CloudFlare 公共DNS (DoH)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:140
#: htdocs/luci-static/resources/view/homeproxy/server.js:142
-#: htdocs/luci-static/resources/view/homeproxy/status.js:176
+#: htdocs/luci-static/resources/view/homeproxy/status.js:227
msgid "Collecting data..."
msgstr "正在收集数据中..."
-#: htdocs/luci-static/resources/view/homeproxy/client.js:290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:291
msgid "Common ports only (bypass P2P traffic)"
msgstr "仅常用端口(绕过 P2P 流量)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1119
#: htdocs/luci-static/resources/view/homeproxy/server.js:354
msgid "Congestion control algorithm"
msgstr "拥塞控制算法"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:232
+#: htdocs/luci-static/resources/view/homeproxy/status.js:283
msgid "Connection check"
msgstr "连接检查"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1772
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1763
msgid "Cron expression"
msgstr "定时任务表达式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:279
msgid "Custom routing"
msgstr "自定义路由"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:635
msgid "DNS"
msgstr "DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1064
msgid "DNS Rules"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:947
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
msgid "DNS Servers"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:895
+#: htdocs/luci-static/resources/view/homeproxy/client.js:889
msgid "DNS Settings"
msgstr "DNS 设置"
@@ -446,17 +442,17 @@ msgstr "DNS 设置"
msgid "DNS provider"
msgstr "DNS 提供商"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1073
msgid "DNS rule"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:204
-#: htdocs/luci-static/resources/view/homeproxy/client.js:772
-#: htdocs/luci-static/resources/view/homeproxy/client.js:956
+#: htdocs/luci-static/resources/view/homeproxy/client.js:205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
msgid "DNS server"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:212
msgid "DNS.SB Public DNS (DoH)"
msgstr "DNS.SB 公共DNS (DoH)"
@@ -464,59 +460,59 @@ msgstr "DNS.SB 公共DNS (DoH)"
msgid "DNS01 challenge"
msgstr "DNS01 验证"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:642
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:636
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
msgid "DTLS"
msgstr "DTLS"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:136
+#: htdocs/luci-static/resources/view/homeproxy/status.js:187
msgid "Debug"
msgstr "调试"
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:456
-#: htdocs/luci-static/resources/view/homeproxy/client.js:626
-#: htdocs/luci-static/resources/view/homeproxy/client.js:778
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1404
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1140
+#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:620
+#: htdocs/luci-static/resources/view/homeproxy/client.js:772
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1100
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
msgid "Default"
msgstr "默认"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:405
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-#: htdocs/luci-static/resources/view/homeproxy/client.js:910
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1018
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1184
+#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:904
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
msgid "Default DNS (issued by WAN)"
msgstr "默认 DNS(由 WAN 下发)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:899
msgid "Default DNS server"
msgstr "默认 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:394
msgid "Default DNS server for resolving domain name in the server address."
msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:894
msgid "Default DNS strategy"
msgstr "默认 DNS 解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:380
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid "Default outbound"
msgstr "默认出站"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:393
msgid "Default outbound DNS"
msgstr "默认出站 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:375
msgid "Default outbound for connections not matched by any routing rules."
msgstr "用于未被任何路由规则匹配的连接的默认出站。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1829
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1820
msgid "Default packet encoding"
msgstr "默认包封装格式"
@@ -524,56 +520,55 @@ msgstr "默认包封装格式"
msgid "Default server name"
msgstr "默认服务器名称"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:387
-#: htdocs/luci-static/resources/view/homeproxy/client.js:489
-#: htdocs/luci-static/resources/view/homeproxy/client.js:707
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1056
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/client.js:381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:483
+#: htdocs/luci-static/resources/view/homeproxy/client.js:701
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
#: htdocs/luci-static/resources/view/homeproxy/node.js:858
msgid "Direct"
msgstr "直连"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1532
msgid "Direct Domain List"
msgstr "直连域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1491
msgid "Direct IPv4 IP-s"
msgstr "直连 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1449
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1494
msgid "Direct IPv6 IP-s"
msgstr "直连 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1452
msgid "Direct MAC-s"
msgstr "直连 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:148
-#: htdocs/luci-static/resources/view/homeproxy/client.js:176
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1445
-#: htdocs/luci-static/resources/view/homeproxy/node.js:929
-#: htdocs/luci-static/resources/view/homeproxy/node.js:985
-#: htdocs/luci-static/resources/view/homeproxy/node.js:998
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1545
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1808
+#: htdocs/luci-static/resources/view/homeproxy/client.js:149
+#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1440
+#: htdocs/luci-static/resources/view/homeproxy/node.js:976
+#: htdocs/luci-static/resources/view/homeproxy/node.js:989
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1536
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
#: htdocs/luci-static/resources/view/homeproxy/server.js:276
#: htdocs/luci-static/resources/view/homeproxy/server.js:289
msgid "Disable"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:386
+#: htdocs/luci-static/resources/view/homeproxy/client.js:380
msgid "Disable (the service)"
msgstr "禁用(服务)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:916
msgid "Disable DNS cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:805
msgid "Disable DNS cache in this query."
msgstr "在本次查询中禁用 DNS 缓存。"
@@ -581,7 +576,7 @@ msgstr "在本次查询中禁用 DNS 缓存。"
msgid "Disable HTTP challenge"
msgstr "禁用 HTTP 验证"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1035
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1026
#: htdocs/luci-static/resources/view/homeproxy/server.js:321
msgid "Disable Path MTU discovery"
msgstr "禁用路径 MTU 探测"
@@ -590,23 +585,23 @@ msgstr "禁用路径 MTU 探测"
msgid "Disable TLS ALPN challenge"
msgstr "禁用 TLS ALPN 认证"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:733
+#: htdocs/luci-static/resources/view/homeproxy/client.js:727
msgid "Disable UDP domain unmapping"
msgstr "禁用 UDP 域名映射"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1199
msgid "Disable cache and save cache in this query."
msgstr "在本次查询中禁用缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+#: htdocs/luci-static/resources/view/homeproxy/client.js:918
msgid "Disable cache expire"
msgstr "缓存永不过期"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
msgid "Disable dns cache"
msgstr "禁用 DNS 缓存"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1027
#: htdocs/luci-static/resources/view/homeproxy/server.js:322
msgid ""
"Disables Path MTU Discovery (RFC 8899). Packets will then be at most 1252 "
@@ -615,37 +610,37 @@ msgstr ""
"禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) "
"字节。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:837
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:831
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1268
msgid "Domain keyword"
msgstr "域名关键词"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:828
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1259
msgid "Domain name"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/client.js:835
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1272
msgid "Domain regex"
msgstr "域名正则表达式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
msgid "Domain resolver"
msgstr "域名解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:370
-#: htdocs/luci-static/resources/view/homeproxy/client.js:469
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/client.js:364
+#: htdocs/luci-static/resources/view/homeproxy/client.js:463
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1191
msgid "Domain strategy"
msgstr "域名解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:804
+#: htdocs/luci-static/resources/view/homeproxy/client.js:798
msgid "Domain strategy for resolving the domain names."
msgstr "目标域名的解析策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1270
+#: htdocs/luci-static/resources/view/homeproxy/client.js:827
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1264
msgid "Domain suffix"
msgstr "域名后缀"
@@ -653,35 +648,35 @@ msgstr "域名后缀"
msgid "Domains"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:797
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid "Don't drop packets"
msgstr "不丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
msgid "Don't drop requests"
msgstr "不丢弃请求"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1419
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1410
#: htdocs/luci-static/resources/view/homeproxy/server.js:517
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1420
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1411
#: htdocs/luci-static/resources/view/homeproxy/server.js:518
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:787
#: htdocs/luci-static/resources/view/homeproxy/client.js:793
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
msgid "Drop packets"
msgstr "丢弃数据包"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1227
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
msgid "Drop requests"
msgstr "丢弃请求"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1815
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1806
msgid ""
"Drop/keep nodes that contain the specific keywords. "
"正则表达式。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1807
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1798
msgid "Drop/keep specific nodes from subscriptions."
msgstr "从订阅中 丢弃/保留 指定节点"
@@ -706,7 +701,7 @@ msgstr ""
"
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有帐户相关联,例如 CA "
"客户数据库。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1524
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
msgid ""
"ECH (Encrypted Client Hello) is a TLS extension that allows a client to "
"encrypt the first part of its ClientHello message."
@@ -714,12 +709,12 @@ msgstr ""
"ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 ClientHello "
"信息的第一部分。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1539
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1530
#: htdocs/luci-static/resources/view/homeproxy/server.js:835
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1528
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1519
msgid "ECH config path"
msgstr "ECH 配置路径"
@@ -727,18 +722,18 @@ msgstr "ECH 配置路径"
msgid "ECH key"
msgstr "ECH 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:821
-#: htdocs/luci-static/resources/view/homeproxy/client.js:931
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/client.js:815
+#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
msgid "EDNS Client subnet"
msgstr "ENDS 客户端子网"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1303
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1294
#: htdocs/luci-static/resources/view/homeproxy/server.js:481
msgid "Early data"
msgstr "前置数据"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1301
#: htdocs/luci-static/resources/view/homeproxy/server.js:488
msgid "Early data header name"
msgstr "前置数据标头"
@@ -747,7 +742,7 @@ msgstr "前置数据标头"
msgid "Early data is sent in path instead of header by default."
msgstr "前置数据默认发送在路径而不是标头中。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1644
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1635
msgid "Edit nodes"
msgstr "修改节点"
@@ -755,17 +750,17 @@ msgstr "修改节点"
msgid "Email"
msgstr "Email"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:437
-#: htdocs/luci-static/resources/view/homeproxy/client.js:613
-#: htdocs/luci-static/resources/view/homeproxy/client.js:965
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1093
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1352
+#: htdocs/luci-static/resources/view/homeproxy/client.js:431
+#: htdocs/luci-static/resources/view/homeproxy/client.js:607
+#: htdocs/luci-static/resources/view/homeproxy/client.js:959
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1346
#: htdocs/luci-static/resources/view/homeproxy/server.js:148
#: htdocs/luci-static/resources/view/homeproxy/server.js:166
msgid "Enable"
msgstr "启用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1152
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1143
#: htdocs/luci-static/resources/view/homeproxy/server.js:371
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
@@ -775,7 +770,7 @@ msgstr ""
"在客户端启用 0-RTT QUIC 连接握手。由于协议是完全复用的,这对性能影响不大。"
"
强烈建议禁用此功能,因为它容易受到重放攻击。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1151
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
#: htdocs/luci-static/resources/view/homeproxy/server.js:370
msgid "Enable 0-RTT handshake"
msgstr "启用 0-RTT 握手"
@@ -784,30 +779,26 @@ msgstr "启用 0-RTT 握手"
msgid "Enable ACME"
msgstr "启用 ACME"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1523
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1514
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1414
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
#: htdocs/luci-static/resources/view/homeproxy/server.js:512
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1415
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1406
#: htdocs/luci-static/resources/view/homeproxy/server.js:513
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1598
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1589
#: htdocs/luci-static/resources/view/homeproxy/server.js:855
msgid "Enable UDP fragmentation."
msgstr "启用 UDP 分片。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:351
-msgid "Enable endpoint-independent NAT"
-msgstr "启用端点独立 NAT"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1410
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1401
#: htdocs/luci-static/resources/view/homeproxy/server.js:507
msgid "Enable padding"
msgstr "启用填充"
@@ -816,19 +807,19 @@ msgstr "启用填充"
msgid "Enable tcp fast open for listener."
msgstr "为监听器启用 TCP 快速打开。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1602
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1593
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1042
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1033
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1169
#: htdocs/luci-static/resources/view/homeproxy/server.js:338
msgid "Encrypt method"
msgstr "加密方式"
#: htdocs/luci-static/resources/view/homeproxy/node.js:488
-#: htdocs/luci-static/resources/view/homeproxy/status.js:139
+#: htdocs/luci-static/resources/view/homeproxy/status.js:190
msgid "Error"
msgstr "错误"
@@ -840,26 +831,26 @@ msgstr "错误"
#: htdocs/luci-static/resources/homeproxy.js:317
#: htdocs/luci-static/resources/homeproxy.js:326
#: htdocs/luci-static/resources/homeproxy.js:328
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+#: htdocs/luci-static/resources/view/homeproxy/client.js:232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:236
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
+#: htdocs/luci-static/resources/view/homeproxy/client.js:265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:269
+#: htdocs/luci-static/resources/view/homeproxy/client.js:298
+#: htdocs/luci-static/resources/view/homeproxy/client.js:521
+#: htdocs/luci-static/resources/view/homeproxy/client.js:535
+#: htdocs/luci-static/resources/view/homeproxy/client.js:538
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1374
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1525
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1552
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1726
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
#: htdocs/luci-static/resources/view/homeproxy/server.js:235
#: htdocs/luci-static/resources/view/homeproxy/server.js:618
#: htdocs/luci-static/resources/view/homeproxy/server.js:620
@@ -878,7 +869,7 @@ msgstr "外部账户 MAC 密钥"
msgid "External account key ID"
msgstr "外部账户密钥标识符"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1260
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1254
msgid "Extra records"
msgstr "附加记录"
@@ -890,19 +881,19 @@ msgstr "生成 %s 失败,错误:%s。"
msgid "Failed to upload %s, error: %s."
msgstr "上传 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:140
+#: htdocs/luci-static/resources/view/homeproxy/status.js:191
msgid "Fatal"
msgstr "致命"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1814
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1805
msgid "Filter keywords"
msgstr "过滤关键词"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1806
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1797
msgid "Filter nodes"
msgstr "过滤节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:653
+#: htdocs/luci-static/resources/view/homeproxy/client.js:647
msgid "Firefox / uquic firefox"
msgstr "Firefox / uquic firefox"
@@ -910,53 +901,53 @@ msgstr "Firefox / uquic firefox"
msgid "Firewall"
msgstr "防火墙"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1157
#: htdocs/luci-static/resources/view/homeproxy/server.js:385
msgid "Flow"
msgstr "流控"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:445
msgid "For resolving domain name in the server address."
msgstr "用于解析服务器地址中的域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1363
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
msgid "Format"
msgstr "格式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:753
+#: htdocs/luci-static/resources/view/homeproxy/client.js:747
msgid "Fragment TLS handshake into multiple TLS records."
msgstr "将 TLS 握手分片为多个 TLS 记录"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:759
+#: htdocs/luci-static/resources/view/homeproxy/client.js:753
msgid ""
"Fragment TLS handshakes. Due to poor performance, try %s first."
msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
+#: htdocs/luci-static/resources/view/homeproxy/client.js:759
msgid "Fragment fallback delay"
msgstr "分片回退延迟"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1272
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1263
msgid "GET"
msgstr "GET"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:256
-msgid "GFW list version"
-msgstr "GFW 域名列表版本"
+#: htdocs/luci-static/resources/view/homeproxy/status.js:78
+msgid "GFW domain list"
+msgstr "GFW 域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:276
msgid "GFWList"
msgstr "GFWList"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1464
msgid "Gaming mode IPv4 IP-s"
msgstr "游戏模式 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
msgid "Gaming mode IPv6 IP-s"
msgstr "游戏模式 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1469
msgid "Gaming mode MAC-s"
msgstr "游戏模式 MAC 地址"
@@ -966,27 +957,27 @@ msgstr "游戏模式 MAC 地址"
msgid "Generate"
msgstr "生成"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:260
+#: htdocs/luci-static/resources/view/homeproxy/status.js:298
msgid "GitHub token"
msgstr "GitHub 令牌"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:280
msgid "Global"
msgstr "全局"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1189
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1180
msgid "Global padding"
msgstr "全局填充"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1476
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1471
msgid "Global proxy IPv4 IP-s"
msgstr "全局代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1474
msgid "Global proxy IPv6 IP-s"
msgstr "全局代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1477
msgid "Global proxy MAC-s"
msgstr "全局代理 MAC 地址"
@@ -994,11 +985,11 @@ msgstr "全局代理 MAC 地址"
msgid "Global settings"
msgstr "全局设置"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:238
+#: htdocs/luci-static/resources/view/homeproxy/status.js:289
msgid "Google"
msgstr "谷歌"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:208
+#: htdocs/luci-static/resources/view/homeproxy/client.js:209
msgid "Google Public DNS (DoH)"
msgstr "Google 公共DNS (DoH)"
@@ -1006,16 +997,16 @@ msgstr "Google 公共DNS (DoH)"
msgid "Grant access to homeproxy configuration"
msgstr "授予 homeproxy 访问 UCI 配置的权限"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:643
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/client.js:637
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1125
#: htdocs/luci-static/resources/view/homeproxy/node.js:860
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1207
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1198
#: htdocs/luci-static/resources/view/homeproxy/server.js:177
#: htdocs/luci-static/resources/view/homeproxy/server.js:403
msgid "HTTP"
msgstr "HTTP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:975
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
msgid "HTTP/3"
msgstr "HTTP/3"
@@ -1025,11 +1016,11 @@ msgid ""
"returned if empty."
msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:974
+#: htdocs/luci-static/resources/view/homeproxy/client.js:968
msgid "HTTPS"
msgstr "HTTPS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1208
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1199
#: htdocs/luci-static/resources/view/homeproxy/server.js:404
msgid "HTTPUpgrade"
msgstr "HTTPUpgrade"
@@ -1042,19 +1033,19 @@ msgstr "握手服务器地址"
msgid "Handshake server port"
msgstr "握手服务器端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/client.js:991
msgid "Headers"
msgstr "标头"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1148
#: htdocs/luci-static/resources/view/homeproxy/server.js:376
msgid "Heartbeat interval"
msgstr "心跳间隔"
#: htdocs/luci-static/resources/view/homeproxy/client.js:63
#: htdocs/luci-static/resources/view/homeproxy/client.js:65
-#: htdocs/luci-static/resources/view/homeproxy/client.js:112
-#: htdocs/luci-static/resources/view/homeproxy/status.js:282
+#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/status.js:320
#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
msgid "HomeProxy"
msgstr "HomeProxy"
@@ -1065,33 +1056,33 @@ msgstr "HomeProxy"
msgid "HomeProxy Server"
msgstr "HomeProxy 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:965
+#: htdocs/luci-static/resources/view/homeproxy/node.js:956
msgid "Hop interval"
msgstr "跳跃间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:959
+#: htdocs/luci-static/resources/view/homeproxy/node.js:950
msgid "Hopping port"
msgstr "跳跃端口"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1256
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1261
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1247
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1252
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
#: htdocs/luci-static/resources/view/homeproxy/server.js:437
#: htdocs/luci-static/resources/view/homeproxy/server.js:442
#: htdocs/luci-static/resources/view/homeproxy/server.js:473
msgid "Host"
msgstr "主机名"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1090
msgid "Host key"
msgstr "主机密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1104
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
msgid "Host key algorithms"
msgstr "主机密钥算法"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:604
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/client.js:598
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1078
msgid "Host/IP fields"
msgstr "主机/IP 字段"
@@ -1111,7 +1102,7 @@ msgstr "Hysteria"
msgid "Hysteria2"
msgstr "Hysteria2"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1784
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1775
msgid "ICMP"
msgstr "ICMP"
@@ -1127,18 +1118,18 @@ msgstr "ICMP 探测不可用"
msgid "ICMP Timeout"
msgstr "ICMP 超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:853
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1290
+#: htdocs/luci-static/resources/view/homeproxy/client.js:847
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1284
msgid "IP CIDR"
msgstr "IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:631
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1112
+#: htdocs/luci-static/resources/view/homeproxy/client.js:625
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1106
msgid "IP version"
msgstr "IP 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:633
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1107
msgid "IPv4"
msgstr "IPv4"
@@ -1146,8 +1137,8 @@ msgstr "IPv4"
msgid "IPv4 only"
msgstr "仅 IPv4"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:634
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1114
+#: htdocs/luci-static/resources/view/homeproxy/client.js:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1108
msgid "IPv6"
msgstr "IPv6"
@@ -1155,31 +1146,31 @@ msgstr "IPv6"
msgid "IPv6 only"
msgstr "仅 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:321
msgid "IPv6 support"
msgstr "IPv6 支持"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:936
+#: htdocs/luci-static/resources/view/homeproxy/node.js:927
msgid "Idle session check interval"
msgstr "空闲会话检查间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:943
+#: htdocs/luci-static/resources/view/homeproxy/node.js:934
msgid "Idle session check timeout"
msgstr "空闲会话检查超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:576
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1268
#: htdocs/luci-static/resources/view/homeproxy/server.js:456
msgid "Idle timeout"
msgstr "空闲超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:740
+#: htdocs/luci-static/resources/view/homeproxy/client.js:734
msgid ""
"If enabled, attempts to connect UDP connection to the destination instead of "
"listen."
msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:734
+#: htdocs/luci-static/resources/view/homeproxy/client.js:728
msgid ""
"If enabled, for UDP proxy requests addressed to a domain, the original "
"packet address will be sent in the response instead of the mapped domain."
@@ -1187,18 +1178,18 @@ msgstr ""
"如果启用,对于发送到域名的 UDP 代理请求,响应中将发送原始数据包地址而不是映射"
"的域名。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1249
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1240
msgid ""
"If enabled, the client transport sends keepalive pings even with no active "
"connections."
msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:371
+#: htdocs/luci-static/resources/view/homeproxy/client.js:365
msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1234
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1225
#: htdocs/luci-static/resources/view/homeproxy/server.js:425
msgid ""
"If the transport doesn't see any activity after a duration of this time (in "
@@ -1207,7 +1198,7 @@ msgstr ""
"如果传输在此时间段(单位:秒)后没有看到任何活动,它会向客户端发送 ping 请求"
"以检查连接是否仍然活动。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1503
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1494
msgid ""
"If you have the root certificate, use this option instead of allowing "
"insecure."
@@ -1217,68 +1208,68 @@ msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接
msgid "Ignore client bandwidth"
msgstr "忽略客户端带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1718
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1709
msgid "Import"
msgstr "导入"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1665
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1744
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1746
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1656
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1737
msgid "Import share links"
msgstr "导入分享链接"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:353
#: htdocs/luci-static/resources/view/homeproxy/server.js:860
msgid "In seconds."
msgstr "单位:秒。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1367
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1358
msgid "In seconds. Disabled by default."
msgstr "单位:秒。默认禁用。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:951
+#: htdocs/luci-static/resources/view/homeproxy/node.js:942
msgid ""
"In the check, at least the first n idle sessions are kept open."
msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:944
+#: htdocs/luci-static/resources/view/homeproxy/node.js:935
msgid ""
"In the check, close sessions that have been idle for longer than this, in "
"seconds."
msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:927
+#: htdocs/luci-static/resources/view/homeproxy/client.js:921
msgid "Independent cache per server"
msgstr "独立缓存"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:137
+#: htdocs/luci-static/resources/view/homeproxy/status.js:188
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1423
msgid "Interface Control"
msgstr "接口控制"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:583
+#: htdocs/luci-static/resources/view/homeproxy/client.js:577
msgid "Interrupt existing connections"
msgstr "中断现有连接"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:584
+#: htdocs/luci-static/resources/view/homeproxy/client.js:578
msgid "Interrupt existing connections when the selected outbound has changed."
msgstr "当选择的出站发生变化时中断现有连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:937
+#: htdocs/luci-static/resources/view/homeproxy/node.js:928
msgid "Interval checking for idle sessions, in seconds."
msgstr "空闲会话检查间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1149
#: htdocs/luci-static/resources/view/homeproxy/server.js:377
msgid ""
"Interval for sending heartbeat packets for keeping the connection alive (in "
"seconds)."
msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:129
#: htdocs/luci-static/resources/view/homeproxy/node.js:480
msgid "Invalid node"
msgstr "无效节点"
@@ -1287,13 +1278,13 @@ msgstr "无效节点"
msgid "Invalid response"
msgstr "无效响应"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:688
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:682
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1159
msgid "Invert"
msgstr "反转"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:689
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
+#: htdocs/luci-static/resources/view/homeproxy/client.js:683
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1160
msgid "Invert match result."
msgstr "反转匹配结果"
@@ -1301,15 +1292,15 @@ msgstr "反转匹配结果"
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1437
msgid "LAN IP Policy"
msgstr "LAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
-#: htdocs/luci-static/resources/view/homeproxy/client.js:608
-#: htdocs/luci-static/resources/view/homeproxy/client.js:960
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1088
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1347
+#: htdocs/luci-static/resources/view/homeproxy/client.js:426
+#: htdocs/luci-static/resources/view/homeproxy/client.js:602
+#: htdocs/luci-static/resources/view/homeproxy/client.js:954
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1082
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1341
#: htdocs/luci-static/resources/view/homeproxy/node.js:852
#: htdocs/luci-static/resources/view/homeproxy/server.js:160
msgid "Label"
@@ -1319,11 +1310,11 @@ msgstr "标签"
msgid "Latency"
msgstr "延迟"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1782
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
msgid "Latency test mode"
msgstr "延迟测试模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1164
#: htdocs/luci-static/resources/view/homeproxy/server.js:392
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
@@ -1332,7 +1323,7 @@ msgstr ""
"提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > "
"1。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:349
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
@@ -1340,31 +1331,31 @@ msgstr "有时性能更好。"
msgid "Let's Encrypt"
msgstr "Let's Encrypt"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
msgid ""
"List of IP (v4 or v6) addresses prefixes to be assigned to the interface."
msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:157
-#: htdocs/luci-static/resources/view/homeproxy/client.js:186
-#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:187
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
msgid "List of nodes to test."
msgstr "要测试的节点列表。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1457
#: htdocs/luci-static/resources/view/homeproxy/server.js:566
msgid "List of supported application level protocols, in order of preference."
msgstr "支持的应用层协议协商列表,按顺序排列。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1251
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1245
msgid "List of text DNS record to respond as answers."
msgstr "要响应的 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1261
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
msgid "List of text DNS record to respond as extra records."
msgstr "要响应的附加 DNS 记录列表。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1256
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1250
msgid "List of text DNS record to respond as name servers."
msgstr "要响应的域名服务器(NS) DNS 记录列表。"
@@ -1372,7 +1363,7 @@ msgstr "要响应的域名服务器(NS) DNS 记录列表。"
msgid "Listen address"
msgstr "监听地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1430
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1425
msgid "Listen interfaces"
msgstr "监听接口"
@@ -1380,51 +1371,51 @@ msgstr "监听接口"
msgid "Listen port"
msgstr "监听端口"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:174
+#: htdocs/luci-static/resources/view/homeproxy/status.js:225
msgid "Loading"
msgstr "加载中"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1352
msgid "Local"
msgstr "本地"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1326
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
msgid "Local address"
msgstr "本地地址"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:191
+#: htdocs/luci-static/resources/view/homeproxy/status.js:242
msgid "Log file does not exist."
msgstr "日志文件不存在。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:184
+#: htdocs/luci-static/resources/view/homeproxy/status.js:235
msgid "Log is empty."
msgstr "日志为空。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1360
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1351
msgid "MTU"
msgstr "MTU"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:175
+#: htdocs/luci-static/resources/view/homeproxy/client.js:176
msgid "Main UDP node"
msgstr "主 UDP 节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:147
+#: htdocs/luci-static/resources/view/homeproxy/client.js:148
msgid "Main node"
msgstr "主节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:685
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "Make IP CIDR in rule set used to match the source IP."
msgstr "使规则集中的 IP CIDR 用于匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1152
msgid "Make IP CIDR in rule sets match the source IP."
msgstr "使规则集中的 IP CIDR 匹配源 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1162
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1156
msgid "Make IP CIDR in rule-sets accept empty query response."
msgstr "使规则集中的 IP CIDR 接受空查询响应。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:928
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
msgid ""
"Make each DNS server's cache independent for special purposes. If enabled, "
"will slightly degrade performance."
@@ -1434,109 +1425,109 @@ msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后
msgid "Masquerade"
msgstr "伪装"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1291
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1285
msgid ""
"Match IP CIDR with query response. Current rule will be skipped if not match."
msgstr "使用查询响应匹配 IP CIDR。如果不匹配,则跳过当前规则。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:854
+#: htdocs/luci-static/resources/view/homeproxy/client.js:848
msgid "Match IP CIDR."
msgstr "匹配 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:828
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1265
msgid "Match domain suffix."
msgstr "匹配域名后缀。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:838
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1275
+#: htdocs/luci-static/resources/view/homeproxy/client.js:832
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1269
msgid "Match domain using keyword."
msgstr "使用关键词匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:842
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1279
+#: htdocs/luci-static/resources/view/homeproxy/client.js:836
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1273
msgid "Match domain using regular expression."
msgstr "使用正则表达式匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:829
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1266
+#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1260
msgid "Match full domain."
msgstr "匹配完整域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:877
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:871
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
msgid "Match port range. Format as START:/:END/START:END."
msgstr "匹配端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:872
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:866
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
msgid "Match port."
msgstr "匹配端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1295
+#: htdocs/luci-static/resources/view/homeproxy/client.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1289
msgid "Match private IP"
msgstr "匹配私有 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1296
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1290
msgid "Match private IP with query response."
msgstr "使用查询响应匹配私有 IP。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:850
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:844
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1281
msgid "Match private source IP"
msgstr "匹配私有源 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:882
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1320
+#: htdocs/luci-static/resources/view/homeproxy/client.js:876
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
msgid "Match process name."
msgstr "匹配进程名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
+#: htdocs/luci-static/resources/view/homeproxy/client.js:884
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1322
msgid "Match process path using regular expression."
msgstr "使用正则表达式匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:886
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1324
+#: htdocs/luci-static/resources/view/homeproxy/client.js:880
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1318
msgid "Match process path."
msgstr "匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1119
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1113
msgid "Match query type."
msgstr "匹配请求类型。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1143
+#: htdocs/luci-static/resources/view/homeproxy/client.js:664
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1137
msgid "Match rule set."
msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:846
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1283
+#: htdocs/luci-static/resources/view/homeproxy/client.js:840
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1277
msgid "Match source IP CIDR."
msgstr "匹配源 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:867
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1305
+#: htdocs/luci-static/resources/view/homeproxy/client.js:861
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
msgid "Match source port range. Format as START:/:END/START:END."
msgstr "匹配源端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:862
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1300
+#: htdocs/luci-static/resources/view/homeproxy/client.js:856
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1294
msgid "Match source port."
msgstr "匹配源端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
msgid "Match user name."
msgstr "匹配用户名。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1009
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1000
#: htdocs/luci-static/resources/view/homeproxy/server.js:261
msgid "Max download speed"
msgstr "最大下载速度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1010
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1001
#: htdocs/luci-static/resources/view/homeproxy/server.js:262
msgid "Max download speed in Mbps."
msgstr "最大下载速度(Mbps)。"
@@ -1545,27 +1536,27 @@ msgstr "最大下载速度(Mbps)。"
msgid "Max time difference"
msgstr "最大时间差"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1016
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1007
#: htdocs/luci-static/resources/view/homeproxy/server.js:268
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1017
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1008
#: htdocs/luci-static/resources/view/homeproxy/server.js:269
msgid "Max upload speed in Mbps."
msgstr "最大上传速度(Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1477
#: htdocs/luci-static/resources/view/homeproxy/server.js:578
msgid "Maximum TLS version"
msgstr "最大 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1391
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1403
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1394
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1573,67 +1564,67 @@ msgstr ""
"在打开新连接之前,连接中的最大多路复用流数量。与 %s 和 "
"%s 冲突。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1402
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1393
msgid "Maximum streams"
msgstr "最大流数量"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:791
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1225
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1234
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1271
+#: htdocs/luci-static/resources/view/homeproxy/client.js:785
+#: htdocs/luci-static/resources/view/homeproxy/client.js:793
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1219
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1228
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1262
#: htdocs/luci-static/resources/view/homeproxy/server.js:452
msgid "Method"
msgstr "方式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1469
#: htdocs/luci-static/resources/view/homeproxy/server.js:570
msgid "Minimum TLS version"
msgstr "最低 TLS 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:950
+#: htdocs/luci-static/resources/view/homeproxy/node.js:941
msgid "Minimum idle sessions"
msgstr "最小空闲会话数"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1397
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1388
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1387
#: htdocs/luci-static/resources/view/homeproxy/node.js:1396
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1405
msgid "Minimum streams"
msgstr "最小流数量"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1773
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1764
msgid "Minutes(0-59) Hours(0-23) Dates(1-31) Months(1-12) Weeks(0-6)"
msgstr "分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:333
+#: htdocs/luci-static/resources/view/homeproxy/client.js:334
#: htdocs/luci-static/resources/view/homeproxy/server.js:183
msgid "Mixed"
msgstr "混合"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:344
+#: htdocs/luci-static/resources/view/homeproxy/client.js:345
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr "混合系统 TCP 栈和 gVisor UDP 栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1098
+#: htdocs/luci-static/resources/view/homeproxy/client.js:612
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
msgid "Mode"
msgstr "模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1594
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1585
#: htdocs/luci-static/resources/view/homeproxy/server.js:850
msgid "MultiPath TCP"
msgstr "多路径 TCP(MPTCP)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1374
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1365
#: htdocs/luci-static/resources/view/homeproxy/server.js:500
msgid "Multiplex"
msgstr "多路复用"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1373
msgid "Multiplex protocol."
msgstr "多路复用协议。"
@@ -1642,15 +1633,19 @@ msgstr "多路复用协议。"
msgid "NOT RUNNING"
msgstr "未运行"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1826
msgid "NOTE: Save current settings before updating subscriptions."
msgstr "注意:更新订阅前先保存当前配置。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1255
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1249
msgid "NS"
msgstr "NS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1141
+#: htdocs/luci-static/resources/view/homeproxy/status.js:102
+msgid "Name"
+msgstr "名称"
+
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1132
msgid "Native"
msgstr "原生"
@@ -1658,41 +1653,41 @@ msgstr "原生"
msgid "NaïveProxy"
msgstr "NaïveProxy"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
+#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1116
#: htdocs/luci-static/resources/view/homeproxy/server.js:866
msgid "Network"
msgstr "网络"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1131
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1122
msgid "New Reno"
msgstr "New Reno"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1204
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1195
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1212
#: htdocs/luci-static/resources/view/homeproxy/server.js:400
#: htdocs/luci-static/resources/view/homeproxy/server.js:417
msgid "No TCP transport, plain HTTP is merged into the HTTP transport."
msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1219
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
#: htdocs/luci-static/resources/view/homeproxy/server.js:415
msgid "No additional encryption support: It's basically duplicate encryption."
msgstr "无额外加密支持:它基本上是重复加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1852
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1843
msgid "No subscription available"
msgstr "无可用订阅"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1877
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1868
msgid "No subscription node"
msgstr "无订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1704
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1695
msgid "No valid share link found."
msgstr "找不到有效分享链接。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:442
+#: htdocs/luci-static/resources/view/homeproxy/client.js:436
#: htdocs/luci-static/resources/view/homeproxy/node.js:719
msgid "Node"
msgstr "节点"
@@ -1701,13 +1696,13 @@ msgstr "节点"
msgid "Node Settings"
msgstr "节点设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1650
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1641
msgid "Nodes"
msgstr "节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1017
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1167
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1158
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1196
#: htdocs/luci-static/resources/view/homeproxy/server.js:386
#: htdocs/luci-static/resources/view/homeproxy/server.js:401
msgid "None"
@@ -1718,69 +1713,69 @@ msgstr "无"
msgid "Not Tested"
msgstr "未测试"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1003
+#: htdocs/luci-static/resources/view/homeproxy/node.js:994
#: htdocs/luci-static/resources/view/homeproxy/server.js:294
msgid "Obfuscate password"
msgstr "混淆密码"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:997
+#: htdocs/luci-static/resources/view/homeproxy/node.js:988
#: htdocs/luci-static/resources/view/homeproxy/server.js:288
msgid "Obfuscate type"
msgstr "混淆类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1431
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1426
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只处理来自指定接口的流量。留空表示全部。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:277
+#: htdocs/luci-static/resources/view/homeproxy/client.js:278
msgid "Only proxy mainland China"
msgstr "仅代理中国大陆"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:603
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1083
+#: htdocs/luci-static/resources/view/homeproxy/client.js:597
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1077
msgid "Other fields"
msgstr "其他字段"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:701
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1050
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1398
+#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:695
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1392
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:437
msgid "Outbound node"
msgstr "出站节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:719
+#: htdocs/luci-static/resources/view/homeproxy/client.js:713
msgid "Override address"
msgstr "覆盖地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
+#: htdocs/luci-static/resources/view/homeproxy/client.js:369
msgid "Override destination"
msgstr "覆盖目标地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:720
msgid "Override port"
msgstr "覆盖端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:370
msgid "Override the connection destination address with the sniffed domain."
msgstr "使用嗅探到的域名覆盖连接目标。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:714
msgid "Override the connection destination address."
msgstr "覆盖目标连接地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:721
msgid "Override the connection destination port."
msgstr "覆盖目标连接端口。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1273
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1264
msgid "PUT"
msgstr "PUT"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1316
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1307
msgid "Packet encoding"
msgstr "数据包编码"
@@ -1788,7 +1783,7 @@ msgstr "数据包编码"
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:141
+#: htdocs/luci-static/resources/view/homeproxy/status.js:192
msgid "Panic"
msgstr "崩溃"
@@ -1797,72 +1792,66 @@ msgstr "崩溃"
msgid "Password"
msgstr "密码"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:990
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1369
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1266
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:984
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1363
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1257
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1290
#: htdocs/luci-static/resources/view/homeproxy/server.js:447
#: htdocs/luci-static/resources/view/homeproxy/server.js:477
msgid "Path"
msgstr "路径"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1341
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1332
msgid "Peer pubkic key"
msgstr "对端公钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:352
-msgid ""
-"Performance may degrade slightly, so it is not recommended to enable on when "
-"it is not needed."
-msgstr "性能可能会略有下降,建议仅在需要时开启。"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1366
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1357
msgid "Persistent keepalive interval"
msgstr "持久 keepalive 间隔"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1285
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1276
#: htdocs/luci-static/resources/view/homeproxy/server.js:464
msgid "Ping timeout"
msgstr "Ping 超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1060
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1051
msgid "Plugin"
msgstr "插件"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1058
msgid "Plugin opts"
msgstr "插件参数"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
-#: htdocs/luci-static/resources/view/homeproxy/client.js:985
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1309
+#: htdocs/luci-static/resources/view/homeproxy/client.js:865
+#: htdocs/luci-static/resources/view/homeproxy/client.js:979
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1303
#: htdocs/luci-static/resources/view/homeproxy/node.js:883
msgid "Port"
msgstr "端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:300
msgid "Port %s alrealy exists!"
msgstr "端口 %s 已存在!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:605
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1079
msgid "Port fields"
msgstr "端口字段"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:966
+#: htdocs/luci-static/resources/view/homeproxy/node.js:957
msgid "Port hopping interval in seconds."
msgstr "端口跳跃间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:876
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1314
+#: htdocs/luci-static/resources/view/homeproxy/client.js:870
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1308
msgid "Port range"
msgstr "端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1348
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1339
msgid "Pre-shared key"
msgstr "预共享密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1167
msgid "Predefined"
msgstr "预定义"
@@ -1874,12 +1863,12 @@ msgstr "优先 IPv4"
msgid "Prefer IPv6"
msgstr "优先 IPv6"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1108
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1324
msgid "Private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1113
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1104
msgid "Private key passphrase"
msgstr "私钥指纹"
@@ -1887,97 +1876,93 @@ msgstr "私钥指纹"
msgid "Probe failed"
msgstr "探测失败"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:606
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/client.js:600
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1080
msgid "Process fields"
msgstr "进程字段"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:881
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1319
+#: htdocs/luci-static/resources/view/homeproxy/client.js:875
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1313
msgid "Process name"
msgstr "进程名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1323
+#: htdocs/luci-static/resources/view/homeproxy/client.js:879
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1317
msgid "Process path"
msgstr "进程路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1327
+#: htdocs/luci-static/resources/view/homeproxy/client.js:883
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1321
msgid "Process path (regex)"
msgstr "进程路径(正则表达式)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:638
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
-#: htdocs/luci-static/resources/view/homeproxy/node.js:973
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1381
+#: htdocs/luci-static/resources/view/homeproxy/client.js:632
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
+#: htdocs/luci-static/resources/view/homeproxy/node.js:964
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1372
#: htdocs/luci-static/resources/view/homeproxy/server.js:250
msgid "Protocol"
msgstr "协议"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1188
msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1190
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1181
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1500
msgid "Proxy Domain List"
msgstr "代理域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1489
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1455
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1484
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1492
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1458
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1461
msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1447
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1442
msgid "Proxy all except listed"
msgstr "仅允许列表外"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1439
msgid "Proxy filter mode"
msgstr "代理过滤模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1446
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1441
msgid "Proxy listed only"
msgstr "仅允许列表内"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:308
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:927
-msgid "Proxy protocol"
-msgstr "代理协议"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:644
-#: htdocs/luci-static/resources/view/homeproxy/client.js:976
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1209
+#: htdocs/luci-static/resources/view/homeproxy/client.js:638
+#: htdocs/luci-static/resources/view/homeproxy/client.js:970
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1126
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1200
#: htdocs/luci-static/resources/view/homeproxy/server.js:405
msgid "QUIC"
msgstr "QUIC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
#: htdocs/luci-static/resources/view/homeproxy/server.js:355
msgid "QUIC congestion control algorithm."
msgstr "QUIC 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1029
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1020
#: htdocs/luci-static/resources/view/homeproxy/server.js:307
msgid "QUIC connection receive window"
msgstr "QUIC 连接窗口"
@@ -1986,33 +1971,33 @@ msgstr "QUIC 连接窗口"
msgid "QUIC maximum concurrent bidirectional streams"
msgstr "QUIC 最大双向并发流"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1023
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1014
#: htdocs/luci-static/resources/view/homeproxy/server.js:300
msgid "QUIC stream receive window"
msgstr "QUIC 流接收窗口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:209
+#: htdocs/luci-static/resources/view/homeproxy/client.js:210
msgid "Quad9 Public DNS (DoH)"
msgstr "Quad9 公共DNS (DoH)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1112
msgid "Query type"
msgstr "请求类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1238
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1232
msgid "RCode"
msgstr "RCode"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:645
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1133
+#: htdocs/luci-static/resources/view/homeproxy/client.js:639
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1127
msgid "RDP"
msgstr "RDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:940
+#: htdocs/luci-static/resources/view/homeproxy/client.js:934
msgid "RDRC timeout"
msgstr "RDRC 超时"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1572
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1563
#: htdocs/luci-static/resources/view/homeproxy/server.js:709
msgid "REALITY"
msgstr "REALITY"
@@ -2021,17 +2006,17 @@ msgstr "REALITY"
msgid "REALITY private key"
msgstr "REALITY 私钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1577
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1568
#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid "REALITY public key"
msgstr "REALITY 公钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1583
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1574
#: htdocs/luci-static/resources/view/homeproxy/server.js:734
msgid "REALITY short ID"
msgstr "REALITY 标识符"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1785
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1776
msgid "RP"
msgstr "RP"
@@ -2044,31 +2029,31 @@ msgstr "RPC 失败"
msgid "RUNNING"
msgstr "运行中"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1095
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
msgid "Random version will be used if empty."
msgstr "如留空,则使用随机版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
+#: htdocs/luci-static/resources/view/homeproxy/client.js:505
msgid "Recursive outbound detected!"
msgstr "检测到递归出站!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1030
msgid "Recursive resolver detected!"
msgstr "检测到递归解析器!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:309
msgid "Redirect TCP"
msgstr "Redirect TCP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:310
+#: htdocs/luci-static/resources/view/homeproxy/client.js:311
msgid "Redirect TCP + TProxy UDP"
msgstr "Redirect TCP + TProxy UDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:313
msgid "Redirect TCP + Tun UDP"
msgstr "Redirect TCP + Tun UDP"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:219
+#: htdocs/luci-static/resources/view/homeproxy/status.js:270
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
@@ -2076,44 +2061,44 @@ msgstr "每 %s 秒刷新。"
msgid "Region ID"
msgstr "区域 ID"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:695
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
+#: htdocs/luci-static/resources/view/homeproxy/client.js:689
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1166
msgid "Reject"
msgstr "拒绝"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1353
msgid "Remote"
msgstr "远程"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1874
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1865
msgid "Remove %s nodes"
msgstr "移除 %s 个节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1864
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1855
msgid "Remove all nodes from subscriptions"
msgstr "移除所有订阅节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1226
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1220
msgid "Reply with REFUSED"
msgstr "回复 REFUSED"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:792
+#: htdocs/luci-static/resources/view/homeproxy/client.js:786
msgid "Reply with TCP RST / ICMP port unreachable"
msgstr "回复 TCP RST / ICMP 端口不可达"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1355
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1346
msgid "Reserved field bytes"
msgstr "保留字段字节"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
msgid "Resolve"
msgstr "解析"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:797
msgid "Resolve strategy"
msgstr "解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:241
+#: htdocs/luci-static/resources/view/homeproxy/status.js:128
msgid "Resources management"
msgstr "资源管理"
@@ -2125,115 +2110,115 @@ msgstr "复用地址"
msgid "Reuse listener address."
msgstr "复用监听地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/client.js:809
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1204
msgid "Rewrite TTL"
msgstr "重写 TTL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1211
+#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1205
msgid "Rewrite TTL in DNS responses."
msgstr "在 DNS 响应中重写 TTL。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:693
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:687
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1164
msgid "Route"
msgstr "路由"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:694
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:688
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1165
msgid "Route options"
msgstr "路由选项"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:413
msgid "Routing Nodes"
msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:590
+#: htdocs/luci-static/resources/view/homeproxy/client.js:584
msgid "Routing Rules"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:145
+#: htdocs/luci-static/resources/view/homeproxy/client.js:146
msgid "Routing Settings"
msgstr "路由设置"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:274
+#: htdocs/luci-static/resources/view/homeproxy/client.js:275
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:428
+#: htdocs/luci-static/resources/view/homeproxy/client.js:422
msgid "Routing node"
msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:287
+#: htdocs/luci-static/resources/view/homeproxy/client.js:288
msgid "Routing ports"
msgstr "路由端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:599
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
msgid "Routing rule"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1328
msgid "Rule Set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:669
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1142
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:663
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1136
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1337
msgid "Rule set"
msgstr "规则集"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:684
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:678
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1151
msgid "Rule set IP CIDR as source IP"
msgstr "规则集 IP CIDR 作为源 IP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1370
msgid "Rule set URL"
msgstr "规则集 URL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:646
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1134
+#: htdocs/luci-static/resources/view/homeproxy/client.js:640
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
#: htdocs/luci-static/resources/view/homeproxy/node.js:868
msgid "SSH"
msgstr "SSH"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:647
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1135
+#: htdocs/luci-static/resources/view/homeproxy/client.js:641
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1129
msgid "STUN"
msgstr "STUN"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1607
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1598
msgid "SUoT version"
msgstr "SUoT 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:649
msgid "Safari / Apple Network API"
msgstr "Safari / Apple Network API"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:999
+#: htdocs/luci-static/resources/view/homeproxy/node.js:990
#: htdocs/luci-static/resources/view/homeproxy/server.js:290
msgid "Salamander"
msgstr "Salamander"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:177
+#: htdocs/luci-static/resources/view/homeproxy/client.js:178
msgid "Same as main node"
msgstr "保持与主节点一致"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:267
-#: htdocs/luci-static/resources/view/homeproxy/status.js:273
+#: htdocs/luci-static/resources/view/homeproxy/status.js:305
+#: htdocs/luci-static/resources/view/homeproxy/status.js:311
msgid "Save"
msgstr "保存"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1837
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1828
msgid "Save current settings"
msgstr "保存当前设置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1834
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
msgid "Save subscriptions settings"
msgstr "保存订阅设置"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1178
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1172
#: htdocs/luci-static/resources/view/homeproxy/server.js:156
msgid "Server"
msgstr "服务器"
@@ -2256,7 +2241,7 @@ msgstr "服务器设置"
msgid "Service Status"
msgstr "服务状态"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1198
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1192
msgid "Set domain strategy for this query."
msgstr "为此查询设置域名策略。"
@@ -2264,7 +2249,7 @@ msgstr "为此查询设置域名策略。"
msgid "ShadowTLS"
msgstr "ShadowTLS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1074
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1065
msgid "ShadowTLS version"
msgstr "ShadowTLS 版本"
@@ -2273,12 +2258,12 @@ msgstr "ShadowTLS 版本"
msgid "Shadowsocks"
msgstr "Shadowsocks"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:651
+#: htdocs/luci-static/resources/view/homeproxy/client.js:645
msgid "Sniffed client type (QUIC client type or SSH client name)."
msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:639
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1128
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1122
msgid ""
"Sniffed protocol, see Sniff for details."
@@ -2291,48 +2276,52 @@ msgstr ""
msgid "Socks"
msgstr "Socks"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1084
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
msgid "Socks version"
msgstr "Socks 版本"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1085
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
msgid "Socks4"
msgstr "Socks4"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1086
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
msgid "Socks4A"
msgstr "Socks4A"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1087
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1078
msgid "Socks5"
msgstr "Socks5"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:845
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1282
+#: htdocs/luci-static/resources/view/homeproxy/status.js:104
+msgid "Source"
+msgstr "来源"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:839
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1276
msgid "Source IP CIDR"
msgstr "源 IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1365
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1359
msgid "Source file"
msgstr "源文件"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:861
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1299
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1293
msgid "Source port"
msgstr "源端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:866
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1304
+#: htdocs/luci-static/resources/view/homeproxy/client.js:860
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1298
msgid "Source port range"
msgstr "源端口范围"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:773
+#: htdocs/luci-static/resources/view/homeproxy/client.js:767
msgid ""
"Specifies DNS server tag to use instead of selecting through DNS routing."
msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1226
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1278
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1269
msgid ""
"Specifies the period of time (in seconds) after which a health check will be "
"performed using a ping frame if no frames have been received on the "
@@ -2353,8 +2342,8 @@ msgstr ""
"指定闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活"
"动。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1230
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1286
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1221
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
msgid ""
"Specifies the timeout duration (in seconds) after sending a PING frame, "
"within which a response must be received.
If a response to the PING "
@@ -2364,17 +2353,17 @@ msgstr ""
"指定发送 PING 帧后,在指定的超时时间(单位:秒)内必须接收到响应。
如果在"
"指定的超时时间内没有收到 PING 帧的响应,则连接将关闭。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:288
+#: htdocs/luci-static/resources/view/homeproxy/client.js:289
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:936
+#: htdocs/luci-static/resources/view/homeproxy/client.js:930
msgid "Store RDRC"
msgstr "存储 RDRC"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:937
+#: htdocs/luci-static/resources/view/homeproxy/client.js:931
msgid ""
"Store rejected DNS response cache.
The check results of Address "
"filter DNS rule items will be cached until expiration."
@@ -2382,20 +2371,20 @@ msgstr ""
"存储被拒绝的 DNS 响应缓存。
地址过滤 DNS 规则 的检查结果将被"
"缓存直到过期。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:987
+#: htdocs/luci-static/resources/view/homeproxy/node.js:978
#: htdocs/luci-static/resources/view/homeproxy/server.js:278
msgid "String"
msgstr "字符串"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1755
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1746
msgid "Sub (%s)"
msgstr "订阅(%s)"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1789
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1780
msgid "Subscription URL-s"
msgstr "订阅地址"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1766
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1757
msgid "Subscriptions"
msgstr "订阅"
@@ -2403,16 +2392,16 @@ msgstr "订阅"
msgid "Success"
msgstr "成功"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1706
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1697
msgid "Successfully imported %s nodes of total %s."
msgstr "成功导入 %s 个节点,共 %s 个。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:86
+#: htdocs/luci-static/resources/view/homeproxy/status.js:138
msgid "Successfully updated."
msgstr "更新成功。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1666
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1657
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1781
msgid ""
"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) "
"online configuration delivery standard."
@@ -2420,78 +2409,78 @@ msgstr ""
"支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在线配置交"
"付标准。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:205
+#: htdocs/luci-static/resources/view/homeproxy/client.js:206
msgid ""
"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified."
msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:336
+#: htdocs/luci-static/resources/view/homeproxy/client.js:337
msgid "System"
msgstr "系统"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:406
-#: htdocs/luci-static/resources/view/homeproxy/client.js:458
-#: htdocs/luci-static/resources/view/homeproxy/client.js:780
-#: htdocs/luci-static/resources/view/homeproxy/client.js:911
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1019
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1185
+#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:774
+#: htdocs/luci-static/resources/view/homeproxy/client.js:905
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1013
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1179
msgid "System DNS"
msgstr "系统 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:661
-#: htdocs/luci-static/resources/view/homeproxy/client.js:972
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1123
+#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:966
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1117
#: htdocs/luci-static/resources/view/homeproxy/server.js:867
msgid "TCP"
msgstr "TCP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1591
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1582
#: htdocs/luci-static/resources/view/homeproxy/server.js:845
msgid "TCP fast open"
msgstr "TCP 快速打开"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:330
+#: htdocs/luci-static/resources/view/homeproxy/client.js:331
msgid "TCP/IP stack"
msgstr "TCP/IP 协议栈"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:331
+#: htdocs/luci-static/resources/view/homeproxy/client.js:332
msgid "TCP/IP stack."
msgstr "TCP/IP 协议栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:648
-#: htdocs/luci-static/resources/view/homeproxy/client.js:973
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1136
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1433
+#: htdocs/luci-static/resources/view/homeproxy/client.js:642
+#: htdocs/luci-static/resources/view/homeproxy/client.js:967
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1130
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1424
#: htdocs/luci-static/resources/view/homeproxy/server.js:532
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1465
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1456
#: htdocs/luci-static/resources/view/homeproxy/server.js:565
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1003
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1460
+#: htdocs/luci-static/resources/view/homeproxy/client.js:997
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1451
#: htdocs/luci-static/resources/view/homeproxy/server.js:560
msgid "TLS SNI"
msgstr "TLS SNI"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:758
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "TLS fragment"
msgstr "TLS 分片"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1217
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1208
#: htdocs/luci-static/resources/view/homeproxy/server.js:413
msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used."
msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:752
-#: htdocs/luci-static/resources/view/homeproxy/client.js:760
+#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:754
msgid "TLS record fragment"
msgstr "TLS 记录分片"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1006
msgid ""
"Tag of a another server to resolve the domain name in the address. Required "
"if address contains domain."
@@ -2499,19 +2488,19 @@ msgstr ""
"用于解析本 DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名"
"则必须。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1051
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1045
msgid "Tag of an outbound for connecting to the dns server."
msgstr "用于连接到 DNS 服务器的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1399
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1393
msgid "Tag of the outbound to download rule set."
msgstr "用于下载规则集的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1173
msgid "Tag of the target dns server."
msgstr "目标 DNS 服务器标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:702
+#: htdocs/luci-static/resources/view/homeproxy/client.js:696
msgid "Tag of the target outbound."
msgstr "目标出站标签。"
@@ -2520,7 +2509,7 @@ msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr "让客户端使用 BBR 流控算法。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:245
+#: htdocs/luci-static/resources/view/homeproxy/client.js:246
msgid "Tencent Public DNS (DoH)"
msgstr "腾讯 公共DNS (DoH)"
@@ -2529,28 +2518,28 @@ msgstr "腾讯 公共DNS (DoH)"
msgid "Test"
msgstr "测试"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1924
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1928
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1915
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1919
msgid "Test Current List"
msgstr "测试当前列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:533
+#: htdocs/luci-static/resources/view/homeproxy/client.js:527
msgid "Test URL"
msgstr "测试 URL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:163
-#: htdocs/luci-static/resources/view/homeproxy/client.js:192
-#: htdocs/luci-static/resources/view/homeproxy/client.js:553
+#: htdocs/luci-static/resources/view/homeproxy/client.js:164
+#: htdocs/luci-static/resources/view/homeproxy/client.js:193
+#: htdocs/luci-static/resources/view/homeproxy/client.js:547
msgid "Test interval"
msgstr "测试间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:561
+#: htdocs/luci-static/resources/view/homeproxy/client.js:555
msgid "Test interval must be less or equal than idle timeout."
msgstr "测试间隔时间必须小于或等于空闲超时时间。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:169
-#: htdocs/luci-static/resources/view/homeproxy/client.js:198
-#: htdocs/luci-static/resources/view/homeproxy/client.js:569
+#: htdocs/luci-static/resources/view/homeproxy/client.js:170
+#: htdocs/luci-static/resources/view/homeproxy/client.js:199
+#: htdocs/luci-static/resources/view/homeproxy/client.js:563
msgid "Test tolerance"
msgstr "测试容差"
@@ -2559,7 +2548,7 @@ msgstr "测试容差"
msgid "Testing"
msgstr "测试中"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1917
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1908
msgid "Testing Current List..."
msgstr "当前列表测试中..."
@@ -2567,25 +2556,25 @@ msgstr "当前列表测试中..."
msgid "The ACME CA provider to use."
msgstr "使用的 ACME CA 颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:901
+#: htdocs/luci-static/resources/view/homeproxy/client.js:895
msgid "The DNS strategy for resolving the domain name in the address."
msgstr "解析域名的默认策略。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1030
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1021
#: htdocs/luci-static/resources/view/homeproxy/server.js:308
msgid "The QUIC connection-level flow control window for receiving data."
msgstr "用于接收数据的 QUIC 连接级流控制窗口。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1024
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1015
#: htdocs/luci-static/resources/view/homeproxy/server.js:301
msgid "The QUIC stream-level flow control window for receiving data."
msgstr "用于接收数据的 QUIC 流级流控制窗口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:534
+#: htdocs/luci-static/resources/view/homeproxy/client.js:528
msgid "The URL to test."
msgstr "用于测试的 URL。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:981
+#: htdocs/luci-static/resources/view/homeproxy/client.js:975
msgid "The address of the dns server."
msgstr "DNS 服务器的地址。"
@@ -2604,7 +2593,7 @@ msgid ""
msgstr ""
"用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:619
+#: htdocs/luci-static/resources/view/homeproxy/client.js:613
msgid ""
"The default rule uses the following matching logic:
(domain || "
"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
@@ -2621,7 +2610,7 @@ msgstr ""
"source_port_range) &&
其他字段。此外,包含的所有规则"
"集会被合并而不是独立生效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1099
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1093
msgid ""
"The default rule uses the following matching logic:
(domain || "
"domain_suffix || domain_keyword || domain_regex) &&
(port "
@@ -2636,17 +2625,17 @@ msgstr ""
">(source_port || source_port_range) &&
其他字段"
"code>。此外,包含的所有规则集会被合并而不是独立生效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:242
+#: htdocs/luci-static/resources/view/homeproxy/client.js:243
msgid ""
"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT."
msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:470
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
+#: htdocs/luci-static/resources/view/homeproxy/client.js:464
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1038
msgid "The domain strategy for resolving the domain name in the address."
msgstr "用于解析本 DNS 服务器的域名的策略。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1495
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1486
#: htdocs/luci-static/resources/view/homeproxy/server.js:587
msgid ""
"The elliptic curves that will be used in an ECDHE handshake, in preference "
@@ -2659,17 +2648,17 @@ msgid ""
"account."
msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
+#: htdocs/luci-static/resources/view/homeproxy/client.js:760
msgid ""
"The fallback value in milliseconds used when TLS segmentation cannot "
"automatically determine the wait time."
msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:577
+#: htdocs/luci-static/resources/view/homeproxy/client.js:571
msgid "The idle timeout in seconds."
msgstr "空闲超时时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1478
#: htdocs/luci-static/resources/view/homeproxy/server.js:579
msgid "The maximum TLS version that is acceptable."
msgstr "可接受的最高 TLS 版本。"
@@ -2684,32 +2673,32 @@ msgstr "允许对等点打开的 QUIC 并发双向流的最大数量。"
msgid "The maximum time difference between the server and the client."
msgstr "服务器和客户端之间的最大时间差。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1470
#: htdocs/luci-static/resources/view/homeproxy/server.js:571
msgid "The minimum TLS version that is acceptable."
msgstr "可接受的最低 TLS 版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:113
+#: htdocs/luci-static/resources/view/homeproxy/client.js:114
#: htdocs/luci-static/resources/view/homeproxy/server.js:130
msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:471
#: htdocs/luci-static/resources/view/homeproxy/server.js:875
msgid "The network interface to bind to."
msgstr "绑定到的网络接口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:991
+#: htdocs/luci-static/resources/view/homeproxy/client.js:985
msgid "The path of the DNS server."
msgstr "DNS 服务器的路径。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1529
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
msgid ""
"The path to the ECH config, in PEM format. If empty, load from DNS will be "
"attempted."
msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1508
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1499
msgid "The path to the server certificate, in PEM format."
msgstr "服务端证书路径,需要 PEM 格式。"
@@ -2717,11 +2706,11 @@ msgstr "服务端证书路径,需要 PEM 格式。"
msgid "The port must be unique."
msgstr "必须是唯一端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:986
+#: htdocs/luci-static/resources/view/homeproxy/client.js:980
msgid "The port of the DNS server."
msgstr "DNS 服务器的端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1239
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1233
msgid "The response code."
msgstr "响应代码。"
@@ -2733,25 +2722,25 @@ msgstr "服务端私钥,需要 PEM 格式。"
msgid "The server public key, in PEM format."
msgstr "服务端公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
+#: htdocs/luci-static/resources/view/homeproxy/client.js:478
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:164
-#: htdocs/luci-static/resources/view/homeproxy/client.js:193
-#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:165
+#: htdocs/luci-static/resources/view/homeproxy/client.js:194
+#: htdocs/luci-static/resources/view/homeproxy/client.js:548
msgid "The test interval in seconds."
msgstr "测试间隔时间(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:170
-#: htdocs/luci-static/resources/view/homeproxy/client.js:199
-#: htdocs/luci-static/resources/view/homeproxy/client.js:570
+#: htdocs/luci-static/resources/view/homeproxy/client.js:171
+#: htdocs/luci-static/resources/view/homeproxy/client.js:200
+#: htdocs/luci-static/resources/view/homeproxy/client.js:564
msgid "The test tolerance in milliseconds."
msgstr "测试容差时间(单位:毫秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1237
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1228
#: htdocs/luci-static/resources/view/homeproxy/server.js:465
msgid ""
"The timeout (in seconds) that after performing a keepalive check, the client "
@@ -2761,15 +2750,15 @@ msgstr ""
"经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如果没有"
"检测到任何活动,则会关闭连接。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1473
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1825
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1464
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1816
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
"这是危险行为,您的流量将几乎等同于明文!使用风险自负!"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1147
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
msgid ""
"This is the TUIC port of the UDP over TCP protocol, designed to provide a "
"QUIC stream based UDP relay mode that TUIC does not provide."
@@ -2777,7 +2766,7 @@ msgstr ""
"这是 TUIC 的 UDP over TCP 协议移植, 旨在提供 TUIC 不提供的基于 QUIC 流的 "
"UDP 中继模式。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:244
+#: htdocs/luci-static/resources/view/homeproxy/client.js:245
msgid "ThreatBook Public DNS (DoH)"
msgstr "微步 公共DNS (DoH)"
@@ -2785,13 +2774,13 @@ msgstr "微步 公共DNS (DoH)"
msgid "Timeout"
msgstr "超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:740
msgid ""
"Timeout for UDP connections.
Setting a larger value than the UDP timeout "
"in inbounds will have no effect."
msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+#: htdocs/luci-static/resources/view/homeproxy/client.js:935
msgid ""
"Timeout of rejected DNS response cache in seconds. 604800 (7d) "
"is used by default."
@@ -2806,18 +2795,18 @@ msgid ""
msgstr ""
"要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:316
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
"要启用 Tun 支持,您需要安装 ip-full 和 kmod-tun。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:135
+#: htdocs/luci-static/resources/view/homeproxy/status.js:186
msgid "Trace"
msgstr "跟踪"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1203
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
#: htdocs/luci-static/resources/view/homeproxy/server.js:399
msgid "Transport"
msgstr "传输层"
@@ -2832,130 +2821,134 @@ msgstr "Trojan"
msgid "Tuic"
msgstr "Tuic"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:313
+#: htdocs/luci-static/resources/view/homeproxy/client.js:314
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1357
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1351
#: htdocs/luci-static/resources/view/homeproxy/node.js:857
#: htdocs/luci-static/resources/view/homeproxy/server.js:175
msgid "Type"
msgstr "类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:662
-#: htdocs/luci-static/resources/view/homeproxy/client.js:971
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1124
+#: htdocs/luci-static/resources/view/homeproxy/client.js:656
+#: htdocs/luci-static/resources/view/homeproxy/client.js:965
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1118
#: htdocs/luci-static/resources/view/homeproxy/server.js:868
msgid "UDP"
msgstr "UDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1597
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1588
#: htdocs/luci-static/resources/view/homeproxy/server.js:854
msgid "UDP Fragment"
msgstr "UDP 分片"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:358
+#: htdocs/luci-static/resources/view/homeproxy/client.js:352
#: htdocs/luci-static/resources/view/homeproxy/server.js:859
msgid "UDP NAT expiration time"
msgstr "UDP NAT 过期时间"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1601
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1592
msgid "UDP over TCP"
msgstr "UDP over TCP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1146
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1137
msgid "UDP over stream"
msgstr "UDP over stream"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1139
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1130
msgid "UDP packet relay mode."
msgstr "UDP 包中继模式。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1129
msgid "UDP relay mode"
msgstr "UDP 中继模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:739
msgid "UDP timeout"
msgstr "UDP 超时"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:149
-#: htdocs/luci-static/resources/view/homeproxy/client.js:178
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:150
+#: htdocs/luci-static/resources/view/homeproxy/client.js:179
+#: htdocs/luci-static/resources/view/homeproxy/client.js:438
msgid "URLTest"
msgstr "URLTest"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:156
-#: htdocs/luci-static/resources/view/homeproxy/client.js:185
-#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:157
+#: htdocs/luci-static/resources/view/homeproxy/client.js:186
+#: htdocs/luci-static/resources/view/homeproxy/client.js:513
msgid "URLTest nodes"
msgstr "URLTest 节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:130
+#: htdocs/luci-static/resources/view/homeproxy/client.js:131
msgid "URLTest: %s"
msgstr "URLTest: %s"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1120
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1111
#: htdocs/luci-static/resources/view/homeproxy/server.js:346
msgid "UUID"
msgstr "UUID"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:98
+#: htdocs/luci-static/resources/view/homeproxy/status.js:151
msgid "Unknown error."
msgstr "未知错误。"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:195
+#: htdocs/luci-static/resources/view/homeproxy/status.js:246
msgid "Unknown error: %s"
msgstr "未知错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1565
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1556
msgid "Unsupported fingerprint!"
msgstr "不支持的指纹!"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1849
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1840
msgid "Update %s subscriptions"
msgstr "更新 %s 个订阅"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:89
+#: htdocs/luci-static/resources/view/homeproxy/status.js:160
+msgid "Update all"
+msgstr "全部更新"
+
+#: htdocs/luci-static/resources/view/homeproxy/status.js:141
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1415
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1410
msgid "Update interval"
msgstr "更新间隔"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1416
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1411
msgid "Update interval of rule set."
msgstr "规则集更新间隔。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1844
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1835
msgid "Update nodes from subscriptions"
msgstr "从订阅更新节点"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1779
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1770
msgid "Update subscriptions via proxy."
msgstr "使用代理更新订阅。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1778
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1769
msgid "Update via proxy"
msgstr "使用代理更新"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1525
msgid "Upload ECH config"
msgstr "上传 ECH 配置"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1425
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1416
#: htdocs/luci-static/resources/view/homeproxy/server.js:523
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1426
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1417
#: htdocs/luci-static/resources/view/homeproxy/server.js:524
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1515
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1506
#: htdocs/luci-static/resources/view/homeproxy/server.js:767
msgid "Upload certificate"
msgstr "上传证书"
@@ -2964,8 +2957,8 @@ msgstr "上传证书"
msgid "Upload key"
msgstr "上传密钥"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1518
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1537
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1509
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1528
#: htdocs/luci-static/resources/view/homeproxy/server.js:770
#: htdocs/luci-static/resources/view/homeproxy/server.js:789
msgid "Upload..."
@@ -2975,23 +2968,23 @@ msgstr "上传..."
msgid "Use ACME TLS certificate issuer."
msgstr "使用 ACME TLS 证书颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1461
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1452
#: htdocs/luci-static/resources/view/homeproxy/server.js:561
msgid ""
"Used to verify the hostname on the returned certificates unless insecure is "
"given."
msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1004
+#: htdocs/luci-static/resources/view/homeproxy/client.js:998
msgid "Used to verify the hostname on the returned certificates."
msgstr "用于验证返回证书上的主机名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1138
+#: htdocs/luci-static/resources/view/homeproxy/client.js:659
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1132
msgid "User"
msgstr "用户"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1819
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
msgid "User-Agent"
msgstr "用户代理"
@@ -3010,25 +3003,29 @@ msgstr "VLESS"
msgid "VMess"
msgstr "VMess"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:206
-#: htdocs/luci-static/resources/view/homeproxy/client.js:243
+#: htdocs/luci-static/resources/view/homeproxy/status.js:103
+msgid "Version"
+msgstr "版本"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:207
+#: htdocs/luci-static/resources/view/homeproxy/client.js:244
msgid "WAN DNS (read from interface)"
msgstr "WAN DNS(从接口获取)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1487
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1482
msgid "WAN IP Policy"
msgstr "WAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:138
+#: htdocs/luci-static/resources/view/homeproxy/status.js:189
msgid "Warn"
msgstr "警告"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1210
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1201
#: htdocs/luci-static/resources/view/homeproxy/server.js:406
msgid "WebSocket"
msgstr "WebSocket"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1810
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1801
msgid "Whitelist mode"
msgstr "白名单模式"
@@ -3036,24 +3033,20 @@ msgstr "白名单模式"
msgid "WireGuard"
msgstr "WireGuard"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1342
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1333
msgid "WireGuard peer public key."
msgstr "WireGuard 对端公钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1349
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1340
msgid "WireGuard pre-shared key."
msgstr "WireGuard 预共享密钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1334
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1325
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:928
-msgid "Write proxy protocol in the connection header."
-msgstr "在连接头中写入代理协议。"
-
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1319
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1832
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1310
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1823
msgid "Xudp (Xray-core)"
msgstr "Xudp (Xray-core)"
@@ -3065,17 +3058,17 @@ msgstr "您的 %s 已成功上传。大小:%sB。"
msgid "ZeroSSL"
msgstr "ZeroSSL"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1520
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1511
#: htdocs/luci-static/resources/view/homeproxy/server.js:772
msgid "certificate"
msgstr "证书"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:739
+#: htdocs/luci-static/resources/view/homeproxy/client.js:733
msgid "connect UDP connections"
msgstr "主动连接 UDP"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1480
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1488
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1471
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1479
#: htdocs/luci-static/resources/view/homeproxy/server.js:572
#: htdocs/luci-static/resources/view/homeproxy/server.js:580
msgid "default"
@@ -3085,44 +3078,44 @@ msgstr "默认"
msgid "failed"
msgstr "失败"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1206
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1197
#: htdocs/luci-static/resources/view/homeproxy/server.js:402
msgid "gRPC"
msgstr "gRPC"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1248
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1239
msgid "gRPC permit without stream"
msgstr "gRPC 允许无活动连接"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1243
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1234
#: htdocs/luci-static/resources/view/homeproxy/server.js:430
msgid "gRPC service name"
msgstr "gRPC 服务名称"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:334
+#: htdocs/luci-static/resources/view/homeproxy/client.js:335
msgid "gVisor"
msgstr "gVisor"
#: htdocs/luci-static/resources/homeproxy.js:306
#: htdocs/luci-static/resources/homeproxy.js:326
-#: htdocs/luci-static/resources/view/homeproxy/client.js:219
-#: htdocs/luci-static/resources/view/homeproxy/client.js:253
-#: htdocs/luci-static/resources/view/homeproxy/client.js:527
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1380
+#: htdocs/luci-static/resources/view/homeproxy/client.js:220
+#: htdocs/luci-static/resources/view/homeproxy/client.js:254
+#: htdocs/luci-static/resources/view/homeproxy/client.js:521
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1374
#: htdocs/luci-static/resources/view/homeproxy/node.js:918
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1561
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1552
#: htdocs/luci-static/resources/view/homeproxy/server.js:235
msgid "non-empty value"
msgstr "非空值"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1061
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1317
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1830
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1052
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1308
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1821
msgid "none"
msgstr "无"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1318
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1831
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1309
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1822
msgid "packet addr (v2ray-core v5+)"
msgstr "packet addr (v2ray-core v5+)"
@@ -3134,23 +3127,23 @@ msgstr "通过"
msgid "private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:648
msgid "quic-go / uquic chrome"
msgstr "quic-go / uquic chrome"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:285
+#: htdocs/luci-static/resources/view/homeproxy/status.js:323
msgid "sing-box client"
msgstr "sing-box 客户端"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:288
+#: htdocs/luci-static/resources/view/homeproxy/status.js:326
msgid "sing-box server"
msgstr "sing-box 服务端"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1543
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1534
msgid "uTLS fingerprint"
msgstr "uTLS 指纹"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1544
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1535
msgid ""
"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting "
"resistance."
@@ -3162,7 +3155,7 @@ msgid "unchecked"
msgstr "未检查"
#: htdocs/luci-static/resources/homeproxy.js:237
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1735
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1726
msgid "unique UCI identifier"
msgstr "独立 UCI 标识"
@@ -3170,35 +3163,33 @@ msgstr "独立 UCI 标识"
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:930
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1075
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1608
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1066
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1599
msgid "v1"
msgstr "v1"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:931
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1076
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1609
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1067
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1600
msgid "v2"
msgstr "v2"
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1077
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1068
msgid "v3"
msgstr "v3"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:231
-#: htdocs/luci-static/resources/view/homeproxy/client.js:235
-#: htdocs/luci-static/resources/view/homeproxy/client.js:264
-#: htdocs/luci-static/resources/view/homeproxy/client.js:268
+#: htdocs/luci-static/resources/view/homeproxy/client.js:232
+#: htdocs/luci-static/resources/view/homeproxy/client.js:236
+#: htdocs/luci-static/resources/view/homeproxy/client.js:265
+#: htdocs/luci-static/resources/view/homeproxy/client.js:269
msgid "valid DNS server address"
msgstr "有效 DNS 服务器地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:541
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1385
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1388
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1796
-#: htdocs/luci-static/resources/view/homeproxy/node.js:1799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:535
+#: htdocs/luci-static/resources/view/homeproxy/client.js:538
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1382
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1787
+#: htdocs/luci-static/resources/view/homeproxy/node.js:1790
msgid "valid URL"
msgstr "有效网址"
@@ -3206,8 +3197,8 @@ msgstr "有效网址"
msgid "valid base64 key with %d characters"
msgstr "包含 %d 个字符的有效 base64 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:1562
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1525
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1557
msgid "valid hostname"
msgstr "有效主机名"
@@ -3215,7 +3206,7 @@ msgstr "有效主机名"
msgid "valid port range (port1:port2)"
msgstr "有效端口范围(port1:port2)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:298
msgid "valid port value"
msgstr "有效端口值"
diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
index 5b8dbee3..d9d5aea9 100755
--- a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
@@ -14,7 +14,7 @@ import { cursor } from 'uci';
import {
isEmpty, parseURL, strToBool, strToInt, strToTime,
- removeBlankAttrs, validation, HP_DIR, RUN_DIR
+ removeBlankAttrs, renderEndpoint, renderOutbound, validation, HP_DIR, RUN_DIR
} from 'homeproxy';
const ubus = connect();
@@ -117,8 +117,7 @@ const proxy_mode = uci.get(uciconfig, ucimain, 'proxy_mode') || 'redirect_tproxy
const mixed_port = uci.get(uciconfig, uciinfra, 'mixed_port') || '5330';
let self_mark, redirect_port, tproxy_port, tun_name,
- tun_addr4, tun_addr6, tun_mtu, tcpip_stack,
- endpoint_independent_nat, udp_timeout;
+ tun_addr4, tun_addr6, tun_mtu, tcpip_stack, udp_timeout;
if (routing_mode === 'custom')
udp_timeout = uci.get(uciconfig, uciroutingsetting, 'udp_timeout');
@@ -140,7 +139,6 @@ if (match(proxy_mode, /tun/)) {
tcpip_stack = 'system';
if (routing_mode === 'custom') {
tcpip_stack = uci.get(uciconfig, uciroutingsetting, 'tcpip_stack') || 'system';
- endpoint_independent_nat = uci.get(uciconfig, uciroutingsetting, 'endpoint_independent_nat');
}
}
@@ -198,168 +196,10 @@ function filter_existing_nodes(nodes) {
});
}
-function generate_endpoint(node) {
- if (type(node) !== 'object' || isEmpty(node))
- return null;
-
- const endpoint = {
- type: node.type,
- tag: 'cfg-' + node['.name'] + '-out',
- address: node.wireguard_local_address,
- mtu: strToInt(node.wireguard_mtu),
- private_key: node.wireguard_private_key,
- peers: (node.type === 'wireguard') ? [
- {
- address: node.address,
- port: strToInt(node.port),
- allowed_ips: [
- '0.0.0.0/0',
- '::/0'
- ],
- persistent_keepalive_interval: strToInt(node.wireguard_persistent_keepalive_interval),
- public_key: node.wireguard_peer_public_key,
- pre_shared_key: node.wireguard_pre_shared_key,
- reserved: parse_port(node.wireguard_reserved),
- }
- ] : null,
- system: (node.type === 'wireguard') ? false : null,
- tcp_fast_open: strToBool(node.tcp_fast_open),
- tcp_multi_path: strToBool(node.tcp_multi_path),
- udp_fragment: strToBool(node.udp_fragment)
- };
-
- return endpoint;
-}
+const generate_endpoint = renderEndpoint;
function generate_outbound(node) {
- if (type(node) !== 'object' || isEmpty(node))
- return null;
-
- const tls_utls_value = (node.type === 'anytls' && isEmpty(node.tls_utls)) ? 'chrome' : node.tls_utls;
- const outbound = {
- type: node.type,
- tag: 'cfg-' + node['.name'] + '-out',
- routing_mark: strToInt(self_mark),
-
- server: node.address,
- server_port: strToInt(node.port),
- /* Hysteria(2) */
- server_ports: node.hysteria_hopping_port,
-
- username: (node.type !== 'ssh') ? node.username : null,
- user: (node.type === 'ssh') ? node.username : null,
- password: node.password,
-
- /* Direct */
- override_address: node.override_address,
- override_port: strToInt(node.override_port),
- proxy_protocol: strToInt(node.proxy_protocol),
- /* AnyTLS */
- idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval),
- idle_session_timeout: strToTime(node.anytls_idle_session_timeout),
- min_idle_session: strToInt(node.anytls_min_idle_session),
- /* Hysteria (2) */
- hop_interval: strToTime(node.hysteria_hop_interval),
- up_mbps: strToInt(node.hysteria_up_mbps),
- down_mbps: strToInt(node.hysteria_down_mbps),
- obfs: node.hysteria_obfs_type ? {
- type: node.hysteria_obfs_type,
- password: node.hysteria_obfs_password
- } : node.hysteria_obfs_password,
- auth: (node.hysteria_auth_type === 'base64') ? node.hysteria_auth_payload : null,
- auth_str: (node.hysteria_auth_type === 'string') ? node.hysteria_auth_payload : null,
- recv_window_conn: strToInt(node.hysteria_recv_window_conn),
- recv_window: strToInt(node.hysteria_revc_window),
- disable_mtu_discovery: strToBool(node.hysteria_disable_mtu_discovery),
- /* Shadowsocks */
- method: node.shadowsocks_encrypt_method,
- plugin: node.shadowsocks_plugin,
- plugin_opts: node.shadowsocks_plugin_opts,
- /* ShadowTLS / Socks */
- version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : null),
- /* SSH */
- client_version: node.ssh_client_version,
- host_key: node.ssh_host_key,
- host_key_algorithms: node.ssh_host_key_algo,
- private_key: node.ssh_priv_key,
- private_key_passphrase: node.ssh_priv_key_pp,
- /* Tuic */
- uuid: node.uuid,
- congestion_control: node.tuic_congestion_control,
- udp_relay_mode: node.tuic_udp_relay_mode,
- udp_over_stream: strToBool(node.tuic_udp_over_stream),
- zero_rtt_handshake: strToBool(node.tuic_enable_zero_rtt),
- heartbeat: strToTime(node.tuic_heartbeat),
- /* VLESS / VMess */
- flow: node.vless_flow,
- alter_id: strToInt(node.vmess_alterid),
- security: node.vmess_encrypt,
- global_padding: strToBool(node.vmess_global_padding),
- authenticated_length: strToBool(node.vmess_authenticated_length),
- packet_encoding: node.packet_encoding,
-
- multiplex: (node.multiplex === '1') ? {
- enabled: true,
- protocol: node.multiplex_protocol,
- max_connections: strToInt(node.multiplex_max_connections),
- min_streams: strToInt(node.multiplex_min_streams),
- max_streams: strToInt(node.multiplex_max_streams),
- padding: strToBool(node.multiplex_padding),
- brutal: (node.multiplex_brutal === '1') ? {
- enabled: true,
- up_mbps: strToInt(node.multiplex_brutal_up),
- down_mbps: strToInt(node.multiplex_brutal_down)
- } : null
- } : null,
- tls: (node.tls === '1') ? {
- enabled: true,
- server_name: node.tls_sni,
- insecure: strToBool(node.tls_insecure),
- alpn: node.tls_alpn,
- min_version: node.tls_min_version,
- max_version: node.tls_max_version,
- cipher_suites: node.tls_cipher_suites,
- certificate_path: node.tls_cert_path,
- ech: (node.tls_ech === '1') ? {
- enabled: true,
- config: node.tls_ech_config,
- config_path: node.tls_ech_config_path
- } : null,
- utls: !isEmpty(tls_utls_value) ? {
- enabled: true,
- fingerprint: tls_utls_value
- } : null,
- reality: (node.tls_reality === '1') ? {
- enabled: true,
- public_key: node.tls_reality_public_key,
- short_id: node.tls_reality_short_id
- } : null
- } : null,
- transport: !isEmpty(node.transport) ? {
- type: node.transport,
- host: node.http_host || node.httpupgrade_host,
- path: node.http_path || node.ws_path,
- headers: node.ws_host ? {
- Host: node.ws_host
- } : null,
- method: node.http_method,
- max_early_data: strToInt(node.websocket_early_data),
- early_data_header_name: node.websocket_early_data_header,
- service_name: node.grpc_servicename,
- idle_timeout: strToTime(node.http_idle_timeout),
- ping_timeout: strToTime(node.http_ping_timeout),
- permit_without_stream: strToBool(node.grpc_permit_without_stream)
- } : null,
- udp_over_tcp: (node.udp_over_tcp === '1') ? {
- enabled: true,
- version: strToInt(node.udp_over_tcp_version)
- } : null,
- tcp_fast_open: strToBool(node.tcp_fast_open),
- tcp_multi_path: strToBool(node.tcp_multi_path),
- udp_fragment: strToBool(node.udp_fragment)
- };
-
- return outbound;
+ return renderOutbound(node, self_mark);
}
function get_outbound(cfg) {
@@ -586,7 +426,6 @@ if (!isEmpty(main_node)) {
rule_set_ip_cidr_match_source: strToBool(cfg.rule_set_ip_cidr_match_source),
rule_set_ip_cidr_accept_empty: strToBool(cfg.rule_set_ip_cidr_accept_empty),
invert: strToBool(cfg.invert),
- outbound: get_outbound(cfg.outbound),
action: cfg.action,
server: get_resolver(cfg.server),
strategy: cfg.domain_strategy,
@@ -655,7 +494,6 @@ if (match(proxy_mode, /tun/))
address: (ipv6_support === '1') ? [tun_addr4, tun_addr6] : [tun_addr4],
mtu: strToInt(tun_mtu),
auto_route: false,
- endpoint_independent_nat: strToBool(endpoint_independent_nat),
udp_timeout: strToTime(udp_timeout),
stack: tcpip_stack
});
@@ -865,7 +703,6 @@ config.route = {
if (!isEmpty(main_node)) {
/* Avoid DNS loop */
config.route.default_domain_resolver = {
- action: 'route',
server: (routing_mode === 'bypass_mainland_china') ? 'china-dns' : 'default-dns',
strategy: (ipv6_support !== '1') ? 'prefer_ipv4' : null
};
@@ -919,21 +756,21 @@ if (!isEmpty(main_node)) {
tag: 'geoip-cn',
format: 'binary',
url: 'https://fastly.jsdelivr.net/gh/1715173329/IPCIDR-CHINA@rule-set/cn.srs',
- download_detour: 'main-out'
+ download_detour: 'direct-out'
});
push(config.route.rule_set, {
type: 'remote',
tag: 'geosite-cn',
format: 'binary',
url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-cn.srs',
- download_detour: 'main-out'
+ download_detour: 'direct-out'
});
push(config.route.rule_set, {
type: 'remote',
tag: 'geosite-noncn',
format: 'binary',
url: 'https://fastly.jsdelivr.net/gh/1715173329/sing-geosite@rule-set-unstable/geosite-geolocation-!cn.srs',
- download_detour: 'main-out'
+ download_detour: 'direct-out'
});
}
@@ -941,7 +778,6 @@ if (!isEmpty(main_node)) {
config.route.rule_set = null;
} else if (!isEmpty(default_outbound)) {
config.route.default_domain_resolver = {
- action: 'resolve',
server: get_resolver(default_outbound_dns)
};
@@ -1004,7 +840,7 @@ if (!isEmpty(main_node)) {
format: cfg.format,
path: cfg.path,
url: cfg.url,
- download_detour: get_outbound(cfg.outbound),
+ download_detour: get_outbound(cfg.outbound) || ((cfg.type === 'remote') ? 'direct-out' : null),
update_interval: cfg.update_interval
});
});
@@ -1019,7 +855,7 @@ if (routing_mode in ['bypass_mainland_china', 'custom']) {
},
cache_file: {
enabled: true,
- path: RUN_DIR + '/cache.db',
+ path: HP_DIR + '/cache/cache.db',
store_rdrc: strToBool(cache_file_store_rdrc),
rdrc_timeout: strToTime(cache_file_rdrc_timeout),
}
@@ -1028,4 +864,5 @@ if (routing_mode in ['bypass_mainland_china', 'custom']) {
/* Experimental end */
system('mkdir -p ' + RUN_DIR);
-writefile(RUN_DIR + '/sing-box-c.json', sprintf('%.J\n', removeBlankAttrs(config)));
+if (!writefile(RUN_DIR + '/sing-box-c.json.new', sprintf('%.J\n', removeBlankAttrs(config))))
+ exit(1);
diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
index 224d7250..550603b5 100755
--- a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
@@ -129,7 +129,7 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
email: cfg.tls_acme_email,
provider: cfg.tls_acme_provider,
disable_http_challenge: strToBool(cfg.tls_acme_dhc),
- disable_tls_alpn_challenge: (cfg.tls_acme_dtac),
+ disable_tls_alpn_challenge: strToBool(cfg.tls_acme_dtac),
alternative_http_port: strToInt(cfg.tls_acme_ahp),
alternative_tls_port: strToInt(cfg.tls_acme_atp),
external_account: (cfg.tls_acme_external_account === '1') ? {
@@ -182,4 +182,5 @@ if (length(config.inbounds) === 0)
exit(1);
system('mkdir -p ' + RUN_DIR);
-writefile(RUN_DIR + '/sing-box-s.json', sprintf('%.J\n', removeBlankAttrs(config)));
+if (!writefile(RUN_DIR + '/sing-box-s.json.new', sprintf('%.J\n', removeBlankAttrs(config))))
+ exit(1);
diff --git a/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc b/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
index fb274320..de326876 100755
--- a/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/homeproxy.uc
@@ -95,6 +95,161 @@ export function strToTime(str) {
return !isEmpty(str) ? (str + 's') : null;
};
+function strListToInts(value) {
+ if (type(value) !== 'array' || isEmpty(value))
+ return null;
+
+ return map(value, (item) => int(item));
+};
+
+export function renderEndpoint(node) {
+ if (type(node) !== 'object' || isEmpty(node))
+ return null;
+
+ return {
+ type: node.type,
+ tag: 'cfg-' + node['.name'] + '-out',
+ address: node.wireguard_local_address,
+ mtu: strToInt(node.wireguard_mtu),
+ private_key: node.wireguard_private_key,
+ peers: (node.type === 'wireguard') ? [
+ {
+ address: node.address,
+ port: strToInt(node.port),
+ allowed_ips: [
+ '0.0.0.0/0',
+ '::/0'
+ ],
+ persistent_keepalive_interval: strToInt(node.wireguard_persistent_keepalive_interval),
+ public_key: node.wireguard_peer_public_key,
+ pre_shared_key: node.wireguard_pre_shared_key,
+ reserved: strListToInts(node.wireguard_reserved)
+ }
+ ] : null,
+ system: (node.type === 'wireguard') ? false : null,
+ tcp_fast_open: strToBool(node.tcp_fast_open),
+ tcp_multi_path: strToBool(node.tcp_multi_path),
+ udp_fragment: strToBool(node.udp_fragment)
+ };
+};
+
+export function renderOutbound(node, routingMark) {
+ if (type(node) !== 'object' || isEmpty(node))
+ return null;
+
+ const tls_utls_value = (node.type === 'anytls' && isEmpty(node.tls_utls)) ? 'chrome' : node.tls_utls;
+ return {
+ type: node.type,
+ tag: 'cfg-' + node['.name'] + '-out',
+ routing_mark: strToInt(routingMark),
+
+ server: node.address,
+ server_port: strToInt(node.port),
+ server_ports: node.hysteria_hopping_port,
+
+ username: (node.type !== 'ssh') ? node.username : null,
+ user: (node.type === 'ssh') ? node.username : null,
+ password: node.password,
+
+ idle_session_check_interval: strToTime(node.anytls_idle_session_check_interval),
+ idle_session_timeout: strToTime(node.anytls_idle_session_timeout),
+ min_idle_session: strToInt(node.anytls_min_idle_session),
+ hop_interval: strToTime(node.hysteria_hop_interval),
+ up_mbps: strToInt(node.hysteria_up_mbps),
+ down_mbps: strToInt(node.hysteria_down_mbps),
+ obfs: node.hysteria_obfs_type ? {
+ type: node.hysteria_obfs_type,
+ password: node.hysteria_obfs_password
+ } : node.hysteria_obfs_password,
+ auth: (node.hysteria_auth_type === 'base64') ? node.hysteria_auth_payload : null,
+ auth_str: (node.hysteria_auth_type === 'string') ? node.hysteria_auth_payload : null,
+ recv_window_conn: strToInt(node.hysteria_recv_window_conn),
+ recv_window: strToInt(node.hysteria_revc_window),
+ disable_mtu_discovery: strToBool(node.hysteria_disable_mtu_discovery),
+ method: node.shadowsocks_encrypt_method,
+ plugin: node.shadowsocks_plugin,
+ plugin_opts: node.shadowsocks_plugin_opts,
+ version: (node.type === 'shadowtls') ? strToInt(node.shadowtls_version) : ((node.type === 'socks') ? node.socks_version : null),
+ client_version: node.ssh_client_version,
+ host_key: node.ssh_host_key,
+ host_key_algorithms: node.ssh_host_key_algo,
+ private_key: node.ssh_priv_key,
+ private_key_passphrase: node.ssh_priv_key_pp,
+ uuid: node.uuid,
+ congestion_control: node.tuic_congestion_control,
+ udp_relay_mode: node.tuic_udp_relay_mode,
+ udp_over_stream: strToBool(node.tuic_udp_over_stream),
+ zero_rtt_handshake: strToBool(node.tuic_enable_zero_rtt),
+ heartbeat: strToTime(node.tuic_heartbeat),
+ flow: node.vless_flow,
+ alter_id: strToInt(node.vmess_alterid),
+ security: node.vmess_encrypt,
+ global_padding: strToBool(node.vmess_global_padding),
+ authenticated_length: strToBool(node.vmess_authenticated_length),
+ packet_encoding: node.packet_encoding,
+
+ multiplex: (node.multiplex === '1') ? {
+ enabled: true,
+ protocol: node.multiplex_protocol,
+ max_connections: strToInt(node.multiplex_max_connections),
+ min_streams: strToInt(node.multiplex_min_streams),
+ max_streams: strToInt(node.multiplex_max_streams),
+ padding: strToBool(node.multiplex_padding),
+ brutal: (node.multiplex_brutal === '1') ? {
+ enabled: true,
+ up_mbps: strToInt(node.multiplex_brutal_up),
+ down_mbps: strToInt(node.multiplex_brutal_down)
+ } : null
+ } : null,
+ tls: (node.tls === '1') ? {
+ enabled: true,
+ server_name: node.tls_sni,
+ insecure: strToBool(node.tls_insecure),
+ alpn: node.tls_alpn,
+ min_version: node.tls_min_version,
+ max_version: node.tls_max_version,
+ cipher_suites: node.tls_cipher_suites,
+ certificate_path: node.tls_cert_path,
+ ech: (node.tls_ech === '1') ? {
+ enabled: true,
+ config: node.tls_ech_config,
+ config_path: node.tls_ech_config_path
+ } : null,
+ utls: !isEmpty(tls_utls_value) ? {
+ enabled: true,
+ fingerprint: tls_utls_value
+ } : null,
+ reality: (node.tls_reality === '1') ? {
+ enabled: true,
+ public_key: node.tls_reality_public_key,
+ short_id: node.tls_reality_short_id
+ } : null
+ } : null,
+ transport: !isEmpty(node.transport) ? {
+ type: node.transport,
+ host: node.http_host || node.httpupgrade_host,
+ path: node.http_path || node.ws_path,
+ headers: node.ws_host ? {
+ Host: node.ws_host
+ } : null,
+ method: node.http_method,
+ max_early_data: strToInt(node.websocket_early_data),
+ early_data_header_name: node.websocket_early_data_header,
+ service_name: node.grpc_servicename,
+ idle_timeout: strToTime(node.http_idle_timeout),
+ ping_timeout: strToTime(node.http_ping_timeout),
+ permit_without_stream: strToBool(node.grpc_permit_without_stream)
+ } : null,
+ udp_over_tcp: (node.udp_over_tcp === '1') ? {
+ enabled: true,
+ version: strToInt(node.udp_over_tcp_version)
+ } : null,
+ tcp_fast_open: strToBool(node.tcp_fast_open),
+ tcp_multi_path: strToBool(node.tcp_multi_path),
+ udp_fragment: strToBool(node.udp_fragment)
+ };
+};
+
export function removeBlankAttrs(res) {
let content;
diff --git a/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc b/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
index 88a3b0e3..7cde78f7 100755
--- a/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/migrate_config.uc
@@ -55,6 +55,10 @@ if (!uci.get(uciconfig, uciinfra, 'ntp_server'))
if (!isEmpty(uci.get(uciconfig, uciinfra, 'tun_gso')))
uci.delete(uciconfig, uciinfra, 'tun_gso');
+/* endpoint_independent_nat has been removed */
+if (!isEmpty(uci.get(uciconfig, ucirouting, 'endpoint_independent_nat')))
+ uci.delete(uciconfig, ucirouting, 'endpoint_independent_nat');
+
/* create migration section */
if (!uci.get(uciconfig, ucimigration))
uci.set(uciconfig, ucimigration, uciconfig);
@@ -99,6 +103,9 @@ uci.foreach(uciconfig, ucidnsserver, (cfg) => {
/* legacy format was deprecated in sb 1.12 */
if (cfg.address) {
const addr = parseURL((!match(cfg.address, /:\/\//) ? 'udp://' : '') + (validation('ip6addr', cfg.address) ? `[${cfg.address}]` : cfg.address));
+ if (!addr)
+ return;
+
/* RCode was moved into DNS rules */
if (addr.protocol === 'rcode') {
dns_server_migration[cfg['.name']] = { action: 'predefined' };
@@ -157,10 +164,11 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => {
/* outbound was removed in sb 1.12 */
if (cfg.outbound) {
uci.delete(uciconfig, cfg['.name']);
- if (!cfg.enabled)
+ if (cfg.enabled !== '1')
return;
- map(cfg.outbound, (outbound) => {
+ const outbounds = (type(cfg.outbound) === 'array') ? cfg.outbound : [ cfg.outbound ];
+ for (let outbound in outbounds) {
switch (outbound) {
case 'direct-out':
case 'block-out':
@@ -169,16 +177,16 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => {
uci.set(uciconfig, ucirouting, 'default_outbound_dns', cfg.server);
break;
default:
- uci.set(uciconfig, cfg.outbound, 'domain_resolver', cfg.server);
- break;
+ uci.set(uciconfig, outbound, 'domain_resolver', cfg.server);
+ break;
}
- });
+ }
return;
}
/* rule_set_ipcidr_match_source was renamed in sb 1.10 */
- if (cfg.rule_set_ipcidr_match_source === '1')
+ if (!isEmpty(cfg.rule_set_ipcidr_match_source))
uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source');
/* block-dns was moved into action in sb 1.11 */
@@ -208,6 +216,11 @@ uci.foreach(uciconfig, ucidnsrule, (cfg) => {
/* nodes options */
uci.foreach(uciconfig, ucinode, (cfg) => {
+ /* destination override and Proxy Protocol were removed from direct outbound */
+ for (let option in ['override_address', 'override_port', 'proxy_protocol'])
+ if (!isEmpty(cfg[option]))
+ uci.delete(uciconfig, cfg['.name'], option);
+
/* tls_ech_tls_disable_drs is useless and deprecated in sb 1.12 */
if (!isEmpty(cfg.tls_ech_tls_disable_drs))
uci.delete(uciconfig, cfg['.name'], 'tls_ech_tls_disable_drs');
@@ -224,7 +237,7 @@ uci.foreach(uciconfig, ucinode, (cfg) => {
/* routing rules options */
uci.foreach(uciconfig, uciroutingrule, (cfg) => {
/* rule_set_ipcidr_match_source was renamed in sb 1.10 */
- if (cfg.rule_set_ipcidr_match_source === '1')
+ if (!isEmpty(cfg.rule_set_ipcidr_match_source))
uci.rename(uciconfig, cfg['.name'], 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source');
/* block-out was moved into action in sb 1.11 */
diff --git a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
index d3c608ab..1cf89585 100755
--- a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
+++ b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
@@ -5,8 +5,6 @@
SCRIPTS_DIR="/etc/homeproxy/scripts"
-for i in "china_ip4" "china_ip6" "gfw_list" "china_list"; do
- "$SCRIPTS_DIR"/update_resources.sh "$i"
-done
+"$SCRIPTS_DIR"/update_resources.sh
"$SCRIPTS_DIR"/update_subscriptions.uc
diff --git a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh
index 85e4e170..2a6a0fe8 100755
--- a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh
+++ b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh
@@ -5,85 +5,102 @@
NAME="homeproxy"
-RESOURCES_DIR="/etc/$NAME/resources"
-mkdir -p "$RESOURCES_DIR"
-
-RUN_DIR="/var/run/$NAME"
+RESOURCES_DIR="${RESOURCES_DIR:-/etc/$NAME/resources}"
+RUN_DIR="${RUN_DIR:-/var/run/$NAME}"
LOG_PATH="$RUN_DIR/$NAME.log"
-mkdir -p "$RUN_DIR"
+REPO_NAME="Loyalsoldier/surge-rules"
+REPO_BRANCH="release"
+SOURCE_BASE="${SOURCE_BASE:-https://cdn.jsdelivr.net/gh/$REPO_NAME@$REPO_BRANCH}"
+RELEASE_API="${RELEASE_API:-https://api.github.com/repos/$REPO_NAME/releases/latest}"
+
+mkdir -p "$RESOURCES_DIR" "$RUN_DIR"
log() {
- echo -e "$(date "+%Y-%m-%d %H:%M:%S") $*" >> "$LOG_PATH"
+ printf '%s %s\n' "$(date "+%Y-%m-%d %H:%M:%S")" "$*" >> "$LOG_PATH"
}
to_upper() {
- echo -e "$1" | tr "[a-z]" "[A-Z]"
+ printf '%s\n' "$1" | tr '[:lower:]' '[:upper:]'
}
-check_list_update() {
- local LIST_FILE="$1"
- local REPO_NAME="$2"
- local REPO_BRANCH="$3"
- local REPO_FILE="$4"
- local LOCK_FILE="$RUN_DIR/update_resources-$LIST_FILE.lock"
- local GITHUB_TOKEN="$(uci -q get homeproxy.config.github_token)"
+download() {
+ local source_file="$1"
+ local target_file="$2"
- exec 200>"$LOCK_FILE"
- if ! flock -n 200 &> "/dev/null"; then
- log "[$(to_upper "$LIST_FILE")] A task is already running."
- return 2
- fi
-
- local NEW_VER=$(curl -sL ${GITHUB_TOKEN:+-H "Authorization: Bearer $GITHUB_TOKEN"} "https://api.github.com/repos/$REPO_NAME/releases/latest" | jsonfilter -e "@.tag_name")
- if [ -z "$NEW_VER" ]; then
- log "[$(to_upper "$LIST_FILE")] Failed to get the latest version, please retry later."
-
- return 1
- fi
-
- local OLD_VER=$(cat "$RESOURCES_DIR/$LIST_FILE.ver" 2>/dev/null || echo "NOT FOUND")
- if [ "$OLD_VER" = "$NEW_VER" ]; then
- log "[$(to_upper "$LIST_FILE")] Current version: $NEW_VER."
- log "[$(to_upper "$LIST_FILE")] You're already at the latest version."
-
- return 3
- else
- log "[$(to_upper "$LIST_FILE")] Local version: $OLD_VER, latest version: $NEW_VER."
- fi
-
- if ! curl -sL -o "$RUN_DIR/$REPO_FILE" "https://cdn.jsdelivr.net/gh/$REPO_NAME@$REPO_BRANCH/$REPO_FILE" || [ ! -s "$RUN_DIR/$REPO_FILE" ]; then
- rm -f "$RUN_DIR/$REPO_FILE"
- log "[$(to_upper "$LIST_FILE")] Update failed."
-
- return 1
- fi
-
- mv -f "$RUN_DIR/$REPO_FILE" "$RESOURCES_DIR/$LIST_FILE.${REPO_FILE##*.}"
- echo -e "$NEW_VER" > "$RESOURCES_DIR/$LIST_FILE.ver"
- log "[$(to_upper "$LIST_FILE")] Successfully updated."
-
- return 0
+ curl -fsSL --retry 2 --connect-timeout 10 --max-time 60 \
+ -o "$target_file" "$SOURCE_BASE/$source_file" && [ -s "$target_file" ]
}
-case "$1" in
-"china_ip4")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \
- sed -i "/IP-CIDR6,/d; s/IP-CIDR,//g" "$RESOURCES_DIR/china_ip4.txt"
- ;;
-"china_ip6")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "cncidr.txt" && \
- sed -i "/IP-CIDR,/d; s/IP-CIDR6,//g" "$RESOURCES_DIR/china_ip6.txt"
- ;;
-"gfw_list")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "gfw.txt" && \
- sed -i "s/^\.//g" "$RESOURCES_DIR/gfw_list.txt"
- ;;
-"china_list")
- check_list_update "$1" "Loyalsoldier/surge-rules" "release" "direct.txt" && \
- sed -i "s/^\.//g" "$RESOURCES_DIR/china_list.txt"
- ;;
-*)
- echo -e "Usage: $0 "
+exec 9>"$RUN_DIR/update_resources.lock"
+if ! flock -n 9 > "/dev/null" 2>&1; then
+ log "[RESOURCES] A task is already running."
+ exit 2
+fi
+
+GITHUB_TOKEN="${GITHUB_TOKEN:-$(uci -q get homeproxy.config.github_token)}"
+if [ -n "$GITHUB_TOKEN" ]; then
+ NEW_VER="$(curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 \
+ -H "Authorization: Bearer $GITHUB_TOKEN" \
+ "$RELEASE_API" | jsonfilter -e "@.tag_name")"
+else
+ NEW_VER="$(curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 \
+ "$RELEASE_API" | jsonfilter -e "@.tag_name")"
+fi
+if [ -z "$NEW_VER" ]; then
+ log "[RESOURCES] Failed to get the latest version, please retry later."
exit 1
- ;;
-esac
\ No newline at end of file
+fi
+
+CURRENT=1
+for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do
+ OLD_VER="$(cat "$RESOURCES_DIR/$RESOURCE.ver" 2>/dev/null || echo "NOT FOUND")"
+ if [ "$OLD_VER" = "$NEW_VER" ]; then
+ log "[$(to_upper "$RESOURCE")] Current version: $NEW_VER."
+ else
+ CURRENT=0
+ log "[$(to_upper "$RESOURCE")] Local version: $OLD_VER, latest version: $NEW_VER."
+ fi
+done
+[ "$CURRENT" -eq 0 ] || {
+ log "[RESOURCES] You're already at the latest version."
+ exit 3
+}
+
+TMP_DIR="$(mktemp -d "$RUN_DIR/resources-update.XXXXXX")" || exit 1
+trap 'rm -rf "$TMP_DIR"' EXIT INT TERM
+
+if ! download "cncidr.txt" "$TMP_DIR/cncidr.txt" || \
+ ! download "direct.txt" "$TMP_DIR/china_list.txt" || \
+ ! download "gfw.txt" "$TMP_DIR/gfw_list.txt"; then
+ log "[RESOURCES] Update failed while downloading source lists."
+ exit 1
+fi
+
+cp "$TMP_DIR/cncidr.txt" "$TMP_DIR/china_ip4.txt" && \
+cp "$TMP_DIR/cncidr.txt" "$TMP_DIR/china_ip6.txt" && \
+sed -i "/IP-CIDR6,/d; s/IP-CIDR,//g" "$TMP_DIR/china_ip4.txt" && \
+sed -i "/IP-CIDR,/d; s/IP-CIDR6,//g" "$TMP_DIR/china_ip6.txt" && \
+sed -i "s/^\\.//g" "$TMP_DIR/china_list.txt" "$TMP_DIR/gfw_list.txt"
+if [ "$?" -ne 0 ]; then
+ log "[RESOURCES] Update failed while processing source lists."
+ exit 1
+fi
+
+for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do
+ if [ ! -s "$TMP_DIR/$RESOURCE.txt" ] || grep -qi ' "$TMP_DIR/$RESOURCE.ver" || exit 1
+done
+
+for RESOURCE in china_ip4 china_ip6 china_list gfw_list; do
+ if ! mv -f "$TMP_DIR/$RESOURCE.txt" "$RESOURCES_DIR/$RESOURCE.txt" || \
+ ! mv -f "$TMP_DIR/$RESOURCE.ver" "$RESOURCES_DIR/$RESOURCE.ver"; then
+ log "[$(to_upper "$RESOURCE")] Update failed: unable to replace list."
+ exit 1
+ fi
+ log "[$(to_upper "$RESOURCE")] Successfully updated."
+done
+
+exit 0
diff --git a/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc b/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
index e0b827a2..f5d43dd0 100755
--- a/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
@@ -17,7 +17,7 @@ import { init_action } from 'luci.sys';
import {
wGET, decodeBase64Str, getTime, isEmpty, parseURL,
- validation, HP_DIR, RUN_DIR
+ shellQuote, validation, HP_DIR, RUN_DIR
} from 'homeproxy';
/* UCI config start */
@@ -80,6 +80,18 @@ function log(...args) {
logfile.close();
}
+if (getenv('HOMEPROXY_SUBSCRIPTION_LOCKED') !== '1') {
+ const lock_path = `${RUN_DIR}/update_subscriptions.lock`;
+ const script_path = `${HP_DIR}/scripts/update_subscriptions.uc`;
+ const status = system(sprintf(
+ 'HOMEPROXY_SUBSCRIPTION_LOCKED=1 flock -n %s %s',
+ shellQuote(lock_path), shellQuote(script_path)
+ ));
+ if (status !== 0)
+ log('Subscription update did not complete; another task may be running.');
+ exit(status);
+}
+
function has_value(value) {
return value !== null && value !== '' && value !== 'nil';
}
@@ -1000,7 +1012,8 @@ function main() {
const label = config.label;
config.label = null;
const confHash = md5(sprintf('%J', config)),
- nameHash = md5(label);
+ nameHash = md5(groupHash + ':' + label),
+ legacyNameHash = md5(label);
config.label = label;
if (filter_check(config.label))
@@ -1018,6 +1031,7 @@ function main() {
push(node_result[length(node_result)-1], config);
node_cache[groupHash][confHash] = config;
node_cache[groupHash][nameHash] = config;
+ node_cache[groupHash][legacyNameHash] = config;
count++;
}
@@ -1040,7 +1054,7 @@ function main() {
return false;
}
- let added = 0, removed = 0;
+ let added = 0, removed = 0, updated = 0;
uci.foreach(uciconfig, ucinode, (cfg) => {
/* Nodes created by the user */
if (!cfg.grouphash)
@@ -1054,50 +1068,54 @@ function main() {
uci.delete(uciconfig, cfg['.name']);
removed++;
- log(sprintf('Removing node: %s.', cfg.label || cfg['name']));
+ log(sprintf('Removing node: %s.', cfg.label || cfg['.name']));
} else {
- map(keys(cfg), (v) => {
- if (v in node_cache[cfg.grouphash][cfg['.name']])
- uci.set(uciconfig, cfg['.name'], v, node_cache[cfg.grouphash][cfg['.name']][v]);
- else
- uci.delete(uciconfig, cfg['.name'], v);
- });
- node_cache[cfg.grouphash][cfg['.name']].isExisting = true;
+ const next = node_cache[cfg.grouphash][cfg['.name']];
+ for (let option in keys(cfg))
+ if (!match(option, /^\./) && !(option in next))
+ uci.delete(uciconfig, cfg['.name'], option);
+
+ for (let option in keys(next))
+ if (option !== 'isExisting')
+ uci.set(uciconfig, cfg['.name'], option, next[option]);
+
+ next.isExisting = true;
+ updated++;
}
});
+
for (let nodes in node_result)
map(nodes, (node) => {
if (node.isExisting)
return null;
- const nameHash = md5(node.label);
+ const nameHash = md5(node.grouphash + ':' + node.label);
uci.set(uciconfig, nameHash, 'node');
map(keys(node), (v) => uci.set(uciconfig, nameHash, v, node[v]));
added++;
log(sprintf('Adding node: %s.', node.label));
});
- uci.commit(uciconfig);
- let need_restart = (via_proxy !== '1');
if (!isEmpty(main_node)) {
const first_server = uci.get_first(uciconfig, ucinode);
if (first_server) {
let main_urltest_nodes;
if (main_node === 'urltest') {
- main_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_urltest_nodes'), (v) => {
+ main_urltest_nodes = filter(normalize_list(uci.get(uciconfig, ucimain, 'main_urltest_nodes')) || [], (v) => {
if (!uci.get(uciconfig, v)) {
log(sprintf('Node %s is gone, removing from urltest list.', v));
return false;
}
return true;
});
+ if (length(main_urltest_nodes))
+ uci.set(uciconfig, ucimain, 'main_urltest_nodes', main_urltest_nodes);
}
if ((main_node === 'urltest') ? !length(main_urltest_nodes) : !uci.get(uciconfig, main_node)) {
uci.set(uciconfig, ucimain, 'main_node', first_server);
- uci.commit(uciconfig);
- need_restart = true;
+ uci.delete(uciconfig, ucimain, 'main_urltest_nodes');
log('Main node is gone, switching to the first node.');
}
@@ -1105,19 +1123,20 @@ function main() {
if (!isEmpty(main_udp_node) && main_udp_node !== 'same') {
let main_udp_urltest_nodes;
if (main_udp_node === 'urltest') {
- main_udp_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes'), (v) => {
+ main_udp_urltest_nodes = filter(normalize_list(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes')) || [], (v) => {
if (!uci.get(uciconfig, v)) {
log(sprintf('Node %s is gone, removing from urltest list.', v));
return false;
}
return true;
});
+ if (length(main_udp_urltest_nodes))
+ uci.set(uciconfig, ucimain, 'main_udp_urltest_nodes', main_udp_urltest_nodes);
}
if ((main_udp_node === 'urltest') ? !length(main_udp_urltest_nodes) : !uci.get(uciconfig, main_udp_node)) {
uci.set(uciconfig, ucimain, 'main_udp_node', first_server);
- uci.commit(uciconfig);
- need_restart = true;
+ uci.delete(uciconfig, ucimain, 'main_udp_urltest_nodes');
log('Main UDP node is gone, switching to the first node.');
}
@@ -1125,20 +1144,19 @@ function main() {
} else {
uci.set(uciconfig, ucimain, 'main_node', 'nil');
uci.set(uciconfig, ucimain, 'main_udp_node', 'nil');
- uci.commit(uciconfig);
- need_restart = true;
+ uci.delete(uciconfig, ucimain, 'main_urltest_nodes');
+ uci.delete(uciconfig, ucimain, 'main_udp_urltest_nodes');
log('No available node, disable tproxy.');
}
}
+ uci.commit(uciconfig);
- if (need_restart) {
- log('Restarting service...');
- init_action('homeproxy', 'stop');
- init_action('homeproxy', 'start');
- }
+ log('Restarting service...');
+ init_action('homeproxy', 'stop');
+ init_action('homeproxy', 'start');
- log(sprintf('%s nodes added, %s removed.', added, removed));
+ log(sprintf('%s nodes added, %s updated, %s removed.', added, updated, removed));
log('Successfully updated subscriptions.');
}
diff --git a/homeproxy/root/etc/init.d/homeproxy b/homeproxy/root/etc/init.d/homeproxy
index 03f4b672..44e291ca 100755
--- a/homeproxy/root/etc/init.d/homeproxy
+++ b/homeproxy/root/etc/init.d/homeproxy
@@ -14,6 +14,8 @@ PROG="/usr/bin/sing-box"
HP_DIR="/etc/homeproxy"
RUN_DIR="/var/run/homeproxy"
LOG_PATH="$RUN_DIR/homeproxy.log"
+CACHE_DIR="$HP_DIR/cache"
+CACHE_PATH="$CACHE_DIR/cache.db"
# we don't know which is the default server, just take the first one
DNSMASQ_UCI_CONFIG="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')"
@@ -27,6 +29,23 @@ log() {
echo -e "$(date "+%Y-%m-%d %H:%M:%S") [DAEMON] $*" >> "$LOG_PATH"
}
+validate_cron() {
+ local expression="$1" field
+
+ case "$expression" in
+ ""|*[!0-9*/?,\ -]*) return 1 ;;
+ esac
+
+ set -f
+ set -- $expression
+ set +f
+ [ "$#" -eq 5 ] || return 1
+
+ for field in "$@"; do
+ [ -n "$field" ] || return 1
+ done
+}
+
start_service() {
config_load "$CONF"
@@ -49,26 +68,65 @@ start_service() {
fi
mkdir -p "$RUN_DIR"
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
+ # Generate and validate every enabled instance before changing system state.
if [ "$outbound_node" != "nil" ]; then
- # Generate/Validate client config
- ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH"
-
- if [ ! -e "$RUN_DIR/sing-box-c.json" ]; then
+ if ! ucode -S "$HP_DIR/scripts/generate_client.uc" 2>>"$LOG_PATH" || \
+ [ ! -s "$RUN_DIR/sing-box-c.json.new" ]; then
log "Error: failed to generate client configuration."
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
return 1
- elif ! "$PROG" check --config "$RUN_DIR/sing-box-c.json" 2>>"$LOG_PATH"; then
+ elif ! "$PROG" check --config "$RUN_DIR/sing-box-c.json.new" 2>>"$LOG_PATH"; then
log "Error: wrong client configuration detected."
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
return 1
fi
+ fi
+ if [ "$server_enabled" = "1" ]; then
+ if ! ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH" || \
+ [ ! -s "$RUN_DIR/sing-box-s.json.new" ]; then
+ log "Error: failed to generate server configuration."
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
+ return 1
+ elif ! "$PROG" check --config "$RUN_DIR/sing-box-s.json.new" 2>>"$LOG_PATH"; then
+ log "Error: wrong server configuration detected."
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
+ return 1
+ fi
+ fi
+
+ if { [ "$outbound_node" = "nil" ] || mv -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-c.json"; } && \
+ { [ "$server_enabled" = "0" ] || mv -f "$RUN_DIR/sing-box-s.json.new" "$RUN_DIR/sing-box-s.json"; }; then
+ [ "$outbound_node" != "nil" ] || rm -f "$RUN_DIR/sing-box-c.json"
+ [ "$server_enabled" = "1" ] || rm -f "$RUN_DIR/sing-box-s.json"
+ else
+ log "Error: failed to install generated configuration."
+ rm -f "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-s.json.new"
+ return 1
+ fi
+
+ case "$routing_mode" in
+ "bypass_mainland_china"|"custom")
+ mkdir -p "$CACHE_DIR"
+ touch "$CACHE_PATH"
+ chown -R sing-box:sing-box "$CACHE_DIR"
+ ;;
+ esac
+
+ if [ "$outbound_node" != "nil" ]; then
# Auto update
local auto_update auto_update_time
config_get_bool auto_update "subscription" "auto_update" "0"
if [ "$auto_update" = "1" ]; then
config_get auto_update_time "subscription" "auto_update_time" "0 */6 * * *"
sed -i "/#${CONF}_autosetup/d" "/etc/crontabs/root" 2>"/dev/null"
- echo -e "$auto_update_time $HP_DIR/scripts/update_crond.sh #${CONF}_autosetup" >> "/etc/crontabs/root"
+ if validate_cron "$auto_update_time"; then
+ printf '%s %s #%s_autosetup\n' "$auto_update_time" "$HP_DIR/scripts/update_crond.sh" "$CONF" >> "/etc/crontabs/root"
+ else
+ log "Error: invalid subscription update schedule."
+ fi
/etc/init.d/cron restart
fi
@@ -79,7 +137,29 @@ start_service() {
mkdir -p "$DNSMASQ_DIR"
echo -e "conf-dir=$DNSMASQ_DIR" > "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf"
case "$routing_mode" in
- "bypass_mainland_china"|"custom"|"global")
+ "bypass_mainland_china")
+ cat <<-EOF >> "$DNSMASQ_DIR/redirect-dns.conf"
+ no-poll
+ no-resolv
+ server=127.0.0.1#$dns_port
+ EOF
+
+ local wan_interface wan_dns china_dns candidate
+ . /lib/functions/network.sh
+ if network_find_wan wan_interface && network_get_dnsserver wan_dns "$wan_interface"; then
+ for candidate in $wan_dns; do
+ case "$candidate" in
+ *:*) ;;
+ *) china_dns="$candidate"; break ;;
+ esac
+ done
+ [ -n "$china_dns" ] || china_dns="${wan_dns%% *}"
+ fi
+ china_dns="${china_dns:-223.5.5.5}"
+ sed -r -e '/^\s*$/d' -e "s|(.*)|server=/\1/$china_dns|g" \
+ "$HP_DIR/resources/china_list.txt" > "$DNSMASQ_DIR/china_list.conf"
+ ;;
+ "custom"|"global")
cat <<-EOF >> "$DNSMASQ_DIR/redirect-dns.conf"
no-poll
no-resolv
@@ -156,7 +236,7 @@ start_service() {
procd_add_jail "sing-box-c" log procfs
procd_add_jail_mount "$RUN_DIR/sing-box-c.json"
procd_add_jail_mount_rw "$RUN_DIR/sing-box-c.log"
- [ "$routing_mode" != "bypass_mainland_china" ] || procd_add_jail_mount_rw "$RUN_DIR/cache.db"
+ [ "$routing_mode" != "bypass_mainland_china" ] || procd_add_jail_mount_rw "$CACHE_PATH"
procd_add_jail_mount "$HP_DIR/certs/"
procd_add_jail_mount "/etc/ssl/"
procd_add_jail_mount "/etc/localtime"
@@ -176,17 +256,6 @@ start_service() {
fi
if [ "$server_enabled" = "1" ]; then
- # Generate/Validate server config
- ucode -S "$HP_DIR/scripts/generate_server.uc" 2>>"$LOG_PATH"
-
- if [ ! -e "$RUN_DIR/sing-box-s.json" ]; then
- log "Error: failed to generate server configuration."
- return 1
- elif ! "$PROG" check --config "$RUN_DIR/sing-box-s.json" 2>>"$LOG_PATH"; then
- log "Error: wrong server configuration detected."
- return 1
- fi
-
# sing-box (server)
procd_open_instance "sing-box-s"
@@ -226,10 +295,6 @@ start_service() {
procd_close_instance
case "$routing_mode" in
- "bypass_mainland_china")
- # Prepare cache db
- [ -e "$RUN_DIR/cache.db" ] || touch "$RUN_DIR/cache.db"
- ;;
"custom")
# Prepare ruleset directory
[ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset"
@@ -308,8 +373,8 @@ stop_service() {
rm -rf "$DNSMASQ_DIR/../dnsmasq-homeproxy.conf" "$DNSMASQ_DIR"
/etc/init.d/dnsmasq restart >"/dev/null" 2>&1
- rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-c.log" \
- "$RUN_DIR/sing-box-s.json" "$RUN_DIR/sing-box-s.log"
+ rm -f "$RUN_DIR/sing-box-c.json" "$RUN_DIR/sing-box-c.json.new" "$RUN_DIR/sing-box-c.log" \
+ "$RUN_DIR/sing-box-s.json" "$RUN_DIR/sing-box-s.json.new" "$RUN_DIR/sing-box-s.log"
log "Service stopped."
}
diff --git a/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration b/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration
index a2082d0c..a629e5e3 100755
--- a/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration
+++ b/homeproxy/root/etc/uci-defaults/luci-homeproxy-migration
@@ -1,5 +1,3 @@
#!/bin/sh
-ucode "/etc/homeproxy/scripts/migrate_config.uc"
-
-exit 0
+exec ucode "/etc/homeproxy/scripts/migrate_config.uc"
diff --git a/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json b/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
index b4b97ea8..ff37cd0b 100644
--- a/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
+++ b/homeproxy/root/usr/share/rpcd/acl.d/luci-app-homeproxy.json
@@ -3,21 +3,30 @@
"description": "Grant access to homeproxy configuration",
"read": {
"file": {
- "/etc/homeproxy/scripts/update_subscriptions.uc": [ "exec" ],
"/var/run/homeproxy/homeproxy.log": [ "read" ],
"/var/run/homeproxy/sing-box-c.log": [ "read" ],
"/var/run/homeproxy/sing-box-s.log": [ "read" ]
},
"ubus": {
"service": [ "list" ],
- "luci.homeproxy": [ "*" ]
+ "luci.homeproxy": [
+ "acllist_read", "connection_check", "current_node_get",
+ "node_latency_test", "resources_get",
+ "singbox_generator", "singbox_get_features"
+ ]
},
"uci": [ "homeproxy" ]
},
"write": {
"file": {
+ "/etc/homeproxy/scripts/update_subscriptions.uc": [ "exec" ],
"/tmp/homeproxy_certificate.tmp": [ "write" ]
},
+ "ubus": {
+ "luci.homeproxy": [
+ "acllist_write", "certificate_write", "log_clean", "resources_update"
+ ]
+ },
"uci": [ "homeproxy" ]
}
}
diff --git a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
index 59bdbac3..9dd555e1 100644
--- a/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
+++ b/homeproxy/root/usr/share/rpcd/ucode/luci.homeproxy
@@ -7,9 +7,13 @@
'use strict';
-import { access, error, lstat, popen, readfile, writefile } from 'fs';
+import { access, lstat, popen, readfile, writefile } from 'fs';
import { cursor } from 'uci';
+import {
+ removeBlankAttrs, renderEndpoint, renderOutbound
+} from '/etc/homeproxy/scripts/homeproxy.uc';
+
/* Kanged from ucode/luci */
function shellquote(s) {
return `'${replace(s, "'", "'\\''")}'`;
@@ -21,6 +25,12 @@ function hasKernelModule(kmod) {
const HP_DIR = '/etc/homeproxy';
const RUN_DIR = '/var/run/homeproxy';
+const RESOURCE_SOURCES = {
+ china_ip4: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/cncidr.txt',
+ china_ip6: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/cncidr.txt',
+ china_list: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/direct.txt',
+ gfw_list: 'https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/gfw.txt'
+};
const methods = {
acllist_read: {
@@ -60,7 +70,7 @@ const methods = {
certificate_write: {
args: { filename: 'filename' },
call: function(req) {
- const writeCertificate = (filename, priv) => {
+ const writeCertificate = (filename, kind) => {
const tmpcert = '/tmp/homeproxy_certificate.tmp';
const filestat = lstat(tmpcert);
@@ -76,8 +86,10 @@ const methods = {
}
/* Kanged from luci-proto-openconnect */
- const beg = priv ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ : /^-----BEGIN CERTIFICATE-----$/,
- end = priv ? /^-----END (RSA|EC) PRIVATE KEY-----$/ : /^-----END CERTIFICATE-----$/,
+ const beg = (kind === 'private') ? /^-----BEGIN (RSA|EC) PRIVATE KEY-----$/ :
+ ((kind === 'ech') ? /^-----BEGIN ECH CONFIGS-----$/ : /^-----BEGIN CERTIFICATE-----$/),
+ end = (kind === 'private') ? /^-----END (RSA|EC) PRIVATE KEY-----$/ :
+ ((kind === 'ech') ? /^-----END ECH CONFIGS-----$/ : /^-----END CERTIFICATE-----$/),
lines = split(trim(filecontent), /[\r\n]/);
let start = false, i;
@@ -100,7 +112,10 @@ const methods = {
filecontent += '\n';
system(`mkdir -p ${HP_DIR}/certs`);
- writefile(`${HP_DIR}/certs/${filename}.pem`, filecontent);
+ const certfile = `${HP_DIR}/certs/${filename}.pem`;
+ writefile(certfile, filecontent);
+ if (kind === 'private')
+ system(`chmod 600 ${certfile}`);
system(`rm -f ${tmpcert}`);
return { result: true };
@@ -110,10 +125,13 @@ const methods = {
switch (filename) {
case 'client_ca':
case 'server_publickey':
- return writeCertificate(filename, false);
+ return writeCertificate(filename, 'certificate');
+ break;
+ case 'client_ech_conf':
+ return writeCertificate(filename, 'ech');
break;
case 'server_privatekey':
- return writeCertificate(filename, true);
+ return writeCertificate(filename, 'private');
break;
default:
return { result: false, error: 'illegal cerificate filename' };
@@ -155,8 +173,8 @@ const methods = {
if (!section || section['.type'] !== 'node')
return { id: section_id, label: fallback_name || section_id, type: null };
- const address = trim(section.override_address || section.address || '');
- const port = trim(section.override_port || section.port || '');
+ const address = trim(section.address || '');
+ const port = trim(section.port || '');
const label = trim(section.label || '') || ((address && port) ? `${address}:${port}` : section_id);
return {
id: section_id,
@@ -248,195 +266,6 @@ const methods = {
rp_runtime: (extras && extras.rp_runtime) ? extras.rp_runtime : null
});
- const strToBool = (str) => ((str === '1') || null);
- const strToInt = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (int(str) || null) : null;
- const strToTime = (str) => (str != null && trim(sprintf('%s', str)) !== '') ? (str + 's') : null;
-
- function removeBlankAttrs(res) {
- let content;
-
- if (type(res) === 'object') {
- content = {};
- map(keys(res), (k) => {
- if (type(res[k]) in ['array', 'object'])
- content[k] = removeBlankAttrs(res[k]);
- else if (res[k] !== null && res[k] !== '')
- content[k] = res[k];
- });
- } else if (type(res) === 'array') {
- content = [];
- map(res, (k) => {
- if (type(k) in ['array', 'object'])
- push(content, removeBlankAttrs(k));
- else if (k !== null && k !== '')
- push(content, k);
- });
- } else
- return res;
-
- return content;
- }
-
- const parse_port = (strport) => {
- if (type(strport) !== 'array' || length(strport) === 0)
- return null;
-
- let ports = [];
- for (let i = 0; i < length(strport); i++)
- push(ports, int(strport[i]));
-
- return ports;
- };
-
- const generate_endpoint = (node_cfg) => {
- if (type(node_cfg) !== 'object' || length(node_cfg) === 0)
- return null;
-
- return {
- type: node_cfg.type,
- tag: 'cfg-' + node_cfg['.name'] + '-out',
- address: node_cfg.wireguard_local_address,
- mtu: strToInt(node_cfg.wireguard_mtu),
- private_key: node_cfg.wireguard_private_key,
- peers: (node_cfg.type === 'wireguard') ? [
- {
- address: node_cfg.address,
- port: strToInt(node_cfg.port),
- allowed_ips: [
- '0.0.0.0/0',
- '::/0'
- ],
- persistent_keepalive_interval: strToInt(node_cfg.wireguard_persistent_keepalive_interval),
- public_key: node_cfg.wireguard_peer_public_key,
- pre_shared_key: node_cfg.wireguard_pre_shared_key,
- reserved: parse_port(node_cfg.wireguard_reserved)
- }
- ] : null,
- system: (node_cfg.type === 'wireguard') ? false : null,
- tcp_fast_open: strToBool(node_cfg.tcp_fast_open),
- tcp_multi_path: strToBool(node_cfg.tcp_multi_path),
- udp_fragment: strToBool(node_cfg.udp_fragment)
- };
- };
-
- const generate_outbound = (node_cfg) => {
- if (type(node_cfg) !== 'object' || length(node_cfg) === 0)
- return null;
-
- return {
- type: node_cfg.type,
- tag: 'cfg-' + node_cfg['.name'] + '-out',
-
- server: node_cfg.address,
- server_port: strToInt(node_cfg.port),
- server_ports: node_cfg.hysteria_hopping_port,
-
- username: (node_cfg.type !== 'ssh') ? node_cfg.username : null,
- user: (node_cfg.type === 'ssh') ? node_cfg.username : null,
- password: node_cfg.password,
-
- override_address: node_cfg.override_address,
- override_port: strToInt(node_cfg.override_port),
- proxy_protocol: strToInt(node_cfg.proxy_protocol),
- idle_session_check_interval: strToTime(node_cfg.anytls_idle_session_check_interval),
- idle_session_timeout: strToTime(node_cfg.anytls_idle_session_timeout),
- min_idle_session: strToInt(node_cfg.anytls_min_idle_session),
- hop_interval: strToTime(node_cfg.hysteria_hop_interval),
- up_mbps: strToInt(node_cfg.hysteria_up_mbps),
- down_mbps: strToInt(node_cfg.hysteria_down_mbps),
- obfs: node_cfg.hysteria_obfs_type ? {
- type: node_cfg.hysteria_obfs_type,
- password: node_cfg.hysteria_obfs_password
- } : node_cfg.hysteria_obfs_password,
- auth: (node_cfg.hysteria_auth_type === 'base64') ? node_cfg.hysteria_auth_payload : null,
- auth_str: (node_cfg.hysteria_auth_type === 'string') ? node_cfg.hysteria_auth_payload : null,
- recv_window_conn: strToInt(node_cfg.hysteria_recv_window_conn),
- recv_window: strToInt(node_cfg.hysteria_revc_window),
- disable_mtu_discovery: strToBool(node_cfg.hysteria_disable_mtu_discovery),
- method: node_cfg.shadowsocks_encrypt_method,
- plugin: node_cfg.shadowsocks_plugin,
- plugin_opts: node_cfg.shadowsocks_plugin_opts,
- version: (node_cfg.type === 'shadowtls') ? strToInt(node_cfg.shadowtls_version) : ((node_cfg.type === 'socks') ? node_cfg.socks_version : null),
- client_version: node_cfg.ssh_client_version,
- host_key: node_cfg.ssh_host_key,
- host_key_algorithms: node_cfg.ssh_host_key_algo,
- private_key: node_cfg.ssh_priv_key,
- private_key_passphrase: node_cfg.ssh_priv_key_pp,
- uuid: node_cfg.uuid,
- congestion_control: node_cfg.tuic_congestion_control,
- udp_relay_mode: node_cfg.tuic_udp_relay_mode,
- udp_over_stream: strToBool(node_cfg.tuic_udp_over_stream),
- zero_rtt_handshake: strToBool(node_cfg.tuic_enable_zero_rtt),
- heartbeat: strToTime(node_cfg.tuic_heartbeat),
- flow: node_cfg.vless_flow,
- alter_id: strToInt(node_cfg.vmess_alterid),
- security: node_cfg.vmess_encrypt,
- global_padding: strToBool(node_cfg.vmess_global_padding),
- authenticated_length: strToBool(node_cfg.vmess_authenticated_length),
- packet_encoding: node_cfg.packet_encoding,
-
- multiplex: (node_cfg.multiplex === '1') ? {
- enabled: true,
- protocol: node_cfg.multiplex_protocol,
- max_connections: strToInt(node_cfg.multiplex_max_connections),
- min_streams: strToInt(node_cfg.multiplex_min_streams),
- max_streams: strToInt(node_cfg.multiplex_max_streams),
- padding: strToBool(node_cfg.multiplex_padding),
- brutal: (node_cfg.multiplex_brutal === '1') ? {
- enabled: true,
- up_mbps: strToInt(node_cfg.multiplex_brutal_up),
- down_mbps: strToInt(node_cfg.multiplex_brutal_down)
- } : null
- } : null,
- tls: (node_cfg.tls === '1') ? {
- enabled: true,
- server_name: node_cfg.tls_sni,
- insecure: strToBool(node_cfg.tls_insecure),
- alpn: node_cfg.tls_alpn,
- min_version: node_cfg.tls_min_version,
- max_version: node_cfg.tls_max_version,
- cipher_suites: node_cfg.tls_cipher_suites,
- certificate_path: node_cfg.tls_cert_path,
- ech: (node_cfg.tls_ech === '1') ? {
- enabled: true,
- config: node_cfg.tls_ech_config,
- config_path: node_cfg.tls_ech_config_path
- } : null,
- utls: node_cfg.tls_utls ? {
- enabled: true,
- fingerprint: node_cfg.tls_utls
- } : null,
- reality: (node_cfg.tls_reality === '1') ? {
- enabled: true,
- public_key: node_cfg.tls_reality_public_key,
- short_id: node_cfg.tls_reality_short_id
- } : null
- } : null,
- transport: node_cfg.transport ? {
- type: node_cfg.transport,
- host: node_cfg.http_host || node_cfg.httpupgrade_host,
- path: node_cfg.http_path || node_cfg.ws_path,
- headers: node_cfg.ws_host ? {
- Host: node_cfg.ws_host
- } : null,
- method: node_cfg.http_method,
- max_early_data: strToInt(node_cfg.websocket_early_data),
- early_data_header_name: node_cfg.websocket_early_data_header,
- service_name: node_cfg.grpc_servicename,
- idle_timeout: node_cfg.http_idle_timeout,
- ping_timeout: node_cfg.http_ping_timeout,
- permit_without_stream: strToBool(node_cfg.grpc_permit_without_stream)
- } : null,
- udp_over_tcp: (node_cfg.udp_over_tcp === '1') ? {
- enabled: true,
- version: strToInt(node_cfg.udp_over_tcp_version)
- } : null,
- tcp_fast_open: strToBool(node_cfg.tcp_fast_open),
- tcp_multi_path: strToBool(node_cfg.tcp_multi_path),
- udp_fragment: strToBool(node_cfg.udp_fragment)
- };
- };
-
const isControllerPortBusy = (port) => {
const hex_port = sprintf('%04X', int(port));
const tcp_v4 = readfile('/proc/net/tcp') || '';
@@ -645,7 +474,7 @@ const methods = {
}
};
- const rendered_outbound = (node_cfg.type === 'wireguard') ? generate_endpoint(node_cfg) : generate_outbound(node_cfg);
+ const rendered_outbound = (node_cfg.type === 'wireguard') ? renderEndpoint(node_cfg) : renderOutbound(node_cfg);
if (rendered_outbound && type(rendered_outbound) === 'object')
rendered_outbound.tag = selected_tag;
@@ -1104,22 +933,23 @@ const methods = {
}
},
- resources_get_version: {
- args: { type: 'type' },
- call: function(req) {
- const version = trim(readfile(`${HP_DIR}/resources/${req.args?.type}.ver`));
- return { version: version, error: error() };
+ resources_get: {
+ call: function() {
+ let resources = [];
+ for (let resource_type in keys(RESOURCE_SOURCES)) {
+ const version = trim(readfile(`${HP_DIR}/resources/${resource_type}.ver`) || '');
+ push(resources, {
+ type: resource_type,
+ version: version || null,
+ source: RESOURCE_SOURCES[resource_type]
+ });
+ }
+ return { resources };
}
},
resources_update: {
- args: { type: 'type' },
- call: function(req) {
- if (req.args?.type) {
- const type = shellquote(req.args?.type);
- const exit_code = system(`${HP_DIR}/scripts/update_resources.sh ${type}`);
- return { status: exit_code };
- } else
- return { status: 255, error: 'illegal type' };
+ call: function() {
+ return { status: system(`${HP_DIR}/scripts/update_resources.sh`) };
}
}
};
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 ccd1d34f..2fddbb8f 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
@@ -1479,6 +1479,7 @@ if is_finded("xray") then
o:value("qq", translate("qq"))
o:value("random", translate("random"))
o:value("randomized", translate("randomized"))
+ o:value("unsafe", translate("unsafe"))
o:value("", translate("disable"))
o:depends({type = "v2ray", tls = true})
o:depends({type = "v2ray", reality = true})
diff --git a/rblibtorrent/Makefile b/rblibtorrent/Makefile
index 237ee7ae..f576172a 100644
--- a/rblibtorrent/Makefile
+++ b/rblibtorrent/Makefile
@@ -1,12 +1,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=rblibtorrent
-PKG_VERSION:=2.1.0
+PKG_VERSION:=2.0.13
PKG_RELEASE:=1
PKG_SOURCE:=libtorrent-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/arvidn/libtorrent/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=5d5b264eb960fafe4a5c935f6c71bc00e02d3dab8872e76dee9dadb27282f912
+PKG_HASH:=86207fbe502153568bb4b11d11bb881d6c1388962e852ee0caacf1c07adeb161
PKG_BUILD_DIR:=$(BUILD_DIR)/libtorrent-$(PKG_VERSION)
PKG_LICENSE:=BSD
diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile
index aac1861f..b6590237 100644
--- a/v2ray-geodata/Makefile
+++ b/v2ray-geodata/Makefile
@@ -21,13 +21,13 @@ define Download/geoip
HASH:=b71d1999439dde2de2d2b6844a2befa50c50211ff739785c005ca7c230a17d6a
endef
-GEOSITE_VER:=20260711034308
+GEOSITE_VER:=20260711103457
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:=356743c9d1ac82ba9c2ed725cc11e8175d431ca5d327bd1ce457edbba70ffd7c
+ HASH:=1d09df82a533dd9bcdeaa8ddabb81be4cfa031dea211102ab09d115f984fbe36
endef
GEOSITE_IRAN_VER:=202607060129