diff --git a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua
index 17630423f..bb19eb7d3 100644
--- a/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua
+++ b/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua
@@ -89,6 +89,12 @@ if uci:get_first("shadowsocksr", 'global', 'netflix_enable', '0') == '1' then
o.default = "0"
end
+-- [[ Use nftables/iptables ]]--
+o = s:option(ListValue, "prefer_nft", translate("Prefer firewall tools"))
+o.default = "1"
+o:value("0", "Iptables")
+o:value("1", "Nftables")
+
o = s:option(ListValue, "threads", translate("Multi Threads Option"))
o:value("0", translate("Auto Threads"))
o:value("1", translate("1 Thread"))
diff --git a/luci-app-ssr-plus/po/templates/ssr-plus.pot b/luci-app-ssr-plus/po/templates/ssr-plus.pot
index 582732f0f..ea1616ed5 100644
--- a/luci-app-ssr-plus/po/templates/ssr-plus.pot
+++ b/luci-app-ssr-plus/po/templates/ssr-plus.pot
@@ -22,11 +22,11 @@ msgstr ""
msgid "0"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:94
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:100
msgid "1 Thread"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:101
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:107
msgid "128 Threads"
msgstr ""
@@ -34,15 +34,15 @@ msgstr ""
msgid "16"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:98
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:104
msgid "16 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:101
msgid "2 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:99
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:105
msgid "32 Threads"
msgstr ""
@@ -50,19 +50,19 @@ msgstr ""
msgid "360"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:264
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:270
msgid "360 Security DNS (China Telecom) (101.226.4.6)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:265
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:271
msgid "360 Security DNS (China Unicom) (123.125.81.6)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:96
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:102
msgid "4 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:100
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:106
msgid "64 Threads"
msgstr ""
@@ -70,7 +70,7 @@ msgstr ""
msgid "8"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:97
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:103
msgid "8 Threads"
msgstr ""
@@ -96,9 +96,9 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1391
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1404
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1417
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:182
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:188
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
msgid "
- "
msgstr ""
@@ -107,7 +107,7 @@ msgid "Access Control"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:200
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
msgid "AdGuard DNSCrypt SDNS"
msgstr ""
@@ -119,7 +119,7 @@ msgstr ""
msgid "Advertising Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:262
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:268
msgid "AliYun Public DNS (223.5.5.5)"
msgstr ""
@@ -131,7 +131,7 @@ msgstr ""
msgid "Alias(optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:113
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:119
msgid "All Ports"
msgstr ""
@@ -153,10 +153,10 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:141
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:143
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:164
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:229
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:235
msgid "Anti-pollution DNS Server"
msgstr ""
@@ -198,7 +198,7 @@ msgstr ""
msgid "Auto Switch"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:93
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:99
msgid "Auto Threads"
msgstr ""
@@ -232,7 +232,7 @@ msgstr ""
msgid "Baidu Connectivity"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:263
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:269
msgid "Baidu Public DNS (180.76.76.76)"
msgstr ""
@@ -261,7 +261,7 @@ msgstr ""
msgid "CLOSE WIN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:272
msgid "CNNIC SDNS (1.2.4.8)"
msgstr ""
@@ -311,7 +311,7 @@ msgstr ""
msgid "China IP Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:255
msgid "ChinaDNS-NG query protocol"
msgstr ""
@@ -336,7 +336,7 @@ msgid "Clear logs"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:192
msgid "Click here to view or manage the DNS list file"
msgstr ""
@@ -348,19 +348,19 @@ msgid "Click to the page"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:176
msgid "Cloudflare DNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:246
msgid "Cloudflare DNS (1.1.1.1)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:207
msgid "Cloudflare DNSCrypt SDNS"
msgstr ""
@@ -418,7 +418,7 @@ msgid "Custom"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
msgid ""
"Custom DNS Server (support: IP:Port or tls://IP:Port or https://IP/dns-query "
"and other format)."
@@ -426,17 +426,17 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
msgid "Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:272
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:278
msgid "Custom DNS Server format as IP:PORT (default: disabled)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:178
msgid ""
"Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT "
"(tcp://8.8.8.8 or tls://dns.google:853)"
@@ -446,7 +446,7 @@ msgstr ""
msgid "Custom Plugin Path"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:115
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:121
msgid "Custom Ports"
msgstr ""
@@ -466,7 +466,7 @@ msgstr ""
msgid "DNS Query Mode For Shunt Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:261
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:267
msgid "DNSPod Public DNS (119.29.29.29)"
msgstr ""
@@ -503,12 +503,12 @@ msgid ""
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:212
msgid "Defines the upstreams logic mode"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
msgid ""
"Defines the upstreams logic mode, possible values: load_balance, parallel, "
"fastest_addr (default: load_balance)."
@@ -533,7 +533,7 @@ msgstr ""
msgid "Disable"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:263
msgid "Disable ChinaDNS-NG"
msgstr ""
@@ -541,12 +541,12 @@ msgstr ""
msgid "Disable IPv6 In MosDNS Query Mode (Shunt Mode)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:180
msgid "Disable IPv6 in MOSDNS query mode"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:196
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:226
msgid "Disable IPv6 query mode"
msgstr ""
@@ -575,7 +575,7 @@ msgid "Do you want to restore the client to default settings?"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:253
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
msgid "DoT upstream (Need use wolfssl version)"
msgstr ""
@@ -583,7 +583,7 @@ msgstr ""
msgid "Domain Strategy"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:262
msgid "Domestic DNS Server"
msgstr ""
@@ -722,7 +722,7 @@ msgstr ""
msgid "Encrypt Method"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:116
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:122
msgid "Enter Custom Ports"
msgstr ""
@@ -758,7 +758,7 @@ msgstr ""
msgid "Every Wednesday"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:283
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:289
msgid "Expecting: %s"
msgstr ""
@@ -830,7 +830,7 @@ msgstr ""
msgid "GFW List Data"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:106
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:112
msgid "GFW List Mode"
msgstr ""
@@ -858,7 +858,7 @@ msgstr ""
msgid "Global Client"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:108
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:114
msgid "Global Mode"
msgstr ""
@@ -876,26 +876,26 @@ msgid "Google Connectivity"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
msgid "Google DNSCrypt SDNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:165
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:171
msgid "Google Public DNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:230
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
msgid "Google Public DNS (8.8.4.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:145
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:231
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
msgid "Google Public DNS (8.8.8.8)"
msgstr ""
@@ -967,7 +967,7 @@ msgstr ""
msgid "Hysterir QUIC parameters"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:107
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:113
msgid "IP Route Mode"
msgstr ""
@@ -1085,58 +1085,58 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:148
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:234
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
msgid "Level 3 Public DNS (209.244.0.3)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:235
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:241
msgid "Level 3 Public DNS (209.244.0.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:242
msgid "Level 3 Public DNS (4.2.2.1)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:157
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
msgid "Level 3 Public DNS (4.2.2.2)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:158
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
msgid "Level 3 Public DNS (4.2.2.3)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:159
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
msgid "Level 3 Public DNS (4.2.2.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:167
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:173
msgid "Level 3 Public DNS-1 (209.244.0.3-4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:168
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
msgid "Level 3 Public DNS-2 (4.2.2.1-2)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:169
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:175
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
msgstr ""
@@ -1225,7 +1225,7 @@ msgid "Move up"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
msgid "Muitiple DNS server can saperate with ','"
msgstr ""
@@ -1233,7 +1233,7 @@ msgstr ""
msgid "Multi"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:92
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:98
msgid "Multi Threads Option"
msgstr ""
@@ -1253,7 +1253,7 @@ msgstr ""
msgid "NaiveProxy"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:260
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:266
msgid "Nanjing Xinfeng 114DNS (114.114.114.114)"
msgstr ""
@@ -1364,7 +1364,7 @@ msgstr ""
msgid "Obfuscation Type"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:114
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:120
msgid "Only Common Ports"
msgstr ""
@@ -1377,33 +1377,33 @@ msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
msgid "OpenDNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:147
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
msgid "OpenDNS (208.67.220.220)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:146
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:232
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
msgid "OpenDNS (208.67.222.222)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:109
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:115
msgid "Oversea Mode"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:161
msgid "Oversea Mode DNS-1 (114.114.114.114)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:162
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
@@ -1465,6 +1465,10 @@ msgstr ""
msgid "Pre-shared key"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:93
+msgid "Prefer firewall tools"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
msgid "Private key"
msgstr ""
@@ -1479,7 +1483,7 @@ msgstr ""
msgid "Protocol param (optional)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:112
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:118
msgid "Proxy Ports"
msgstr ""
@@ -1516,7 +1520,7 @@ msgid "QUIC maxStreamReceiveWindow"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:199
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:205
msgid "Quad9 DNSCrypt SDNS"
msgstr ""
@@ -1601,7 +1605,7 @@ msgstr ""
msgid "Reset to defaults"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:121
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:127
msgid "Resolve Dns Mode"
msgstr ""
@@ -1631,7 +1635,7 @@ msgstr ""
msgid "Running"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:111
msgid "Running Mode"
msgstr ""
@@ -1658,7 +1662,7 @@ msgid "Save Words splited by /"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:180
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
msgid "Select DNS parse Mode"
msgstr ""
@@ -1720,7 +1724,7 @@ msgid "Session Ticket"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:166
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
msgid "Set Single DNS"
msgstr ""
@@ -1856,7 +1860,7 @@ msgid ""
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
msgid "TCP upstream"
msgstr ""
@@ -1909,7 +1913,7 @@ msgid "TUIC send window"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:203
msgid "TWNIC-101 DNSCrypt SDNS"
msgstr ""
@@ -1947,7 +1951,7 @@ msgid "Timeout for establishing a connection to server(second)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:184
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr ""
@@ -2006,12 +2010,12 @@ msgid "UDP relay mode"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:252
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
msgid "UDP upstream"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
msgid "UDP/TCP upstream"
msgstr ""
@@ -2055,47 +2059,47 @@ msgid "Upload"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:138
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
msgid "Use ChinaDNS-NG query and cache"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
msgid "Use DNS List File"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:264
msgid "Use DNS from WAN"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:265
msgid "Use DNS from WAN and 114DNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:126
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
msgid "Use DNS2SOCKS query and cache"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
msgid "Use DNS2SOCKS-RUST query and cache"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:123
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:129
msgid "Use DNS2TCP query"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:141
msgid "Use DNSPROXY query and cache"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:140
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:146
msgid "Use Local DNS Service listen port 5335"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:138
msgid "Use MOSDNS query (Not Support Oversea Mode)"
msgstr ""
@@ -2203,17 +2207,17 @@ msgid "When disabled shunt mode, will same time stopped shunt service."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:227
msgid "When disabled, all AAAA requests are not resolved."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:216
msgid "When two or more DNS servers are deployed, enable this function."
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
msgid ""
"When use DNS list file, please ensure list file exists and is formatted "
"correctly."
@@ -2311,7 +2315,7 @@ msgid "chrome"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
msgid "cloudflare-dns.com DNSCrypt SDNS"
msgstr ""
@@ -2336,7 +2340,7 @@ msgid "disable"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:198
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
msgid "dns.sb DNSCrypt SDNS"
msgstr ""
@@ -2345,7 +2349,7 @@ msgid "edge"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
msgid "fastest_addr"
msgstr ""
@@ -2382,7 +2386,7 @@ msgid "ios"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:189
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:213
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:219
msgid "load_balance"
msgstr ""
@@ -2408,7 +2412,7 @@ msgid "obfs-local"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
msgid "parallel"
msgstr ""
@@ -2466,7 +2470,7 @@ msgstr ""
msgid "v2ray-plugin"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:283
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:289
msgid "valid address:port"
msgstr ""
diff --git a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
index ba3d20a64..28d06cc3e 100644
--- a/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
+++ b/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
@@ -24,11 +24,11 @@ msgstr "%s 节点使用版本"
msgid "0"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:94
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:100
msgid "1 Thread"
msgstr "单线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:101
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:107
msgid "128 Threads"
msgstr "128 线程"
@@ -36,15 +36,15 @@ msgstr "128 线程"
msgid "16"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:98
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:104
msgid "16 Threads"
msgstr "16 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:95
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:101
msgid "2 Threads"
msgstr "2 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:99
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:105
msgid "32 Threads"
msgstr "32 线程"
@@ -52,19 +52,19 @@ msgstr "32 线程"
msgid "360"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:264
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:270
msgid "360 Security DNS (China Telecom) (101.226.4.6)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:265
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:271
msgid "360 Security DNS (China Unicom) (123.125.81.6)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:96
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:102
msgid "4 Threads"
msgstr "4 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:100
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:106
msgid "64 Threads"
msgstr "64 线程"
@@ -72,7 +72,7 @@ msgstr "64 线程"
msgid "8"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:97
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:103
msgid "8 Threads"
msgstr "8 线程"
@@ -100,9 +100,9 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1391
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1404
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1417
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:182
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:188
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
msgid "
- "
msgstr ""
@@ -111,7 +111,7 @@ msgid "Access Control"
msgstr "访问控制"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:177
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:200
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
msgid "AdGuard DNSCrypt SDNS"
msgstr ""
@@ -123,7 +123,7 @@ msgstr "高级设置"
msgid "Advertising Data"
msgstr "【广告屏蔽】数据库"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:262
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:268
msgid "AliYun Public DNS (223.5.5.5)"
msgstr ""
@@ -135,7 +135,7 @@ msgstr "别名"
msgid "Alias(optional)"
msgstr "别名(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:113
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:119
msgid "All Ports"
msgstr "所有端口(默认)"
@@ -157,10 +157,10 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:141
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:172
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:143
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:164
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:229
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:235
msgid "Anti-pollution DNS Server"
msgstr "访问国外域名 DNS 服务器"
@@ -202,7 +202,7 @@ msgstr "是否真的要恢复客户端默认配置?"
msgid "Auto Switch"
msgstr "自动切换"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:93
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:99
msgid "Auto Threads"
msgstr "自动(CPU 线程数)"
@@ -236,7 +236,7 @@ msgstr "备份或还原客户端及服务端配置。"
msgid "Baidu Connectivity"
msgstr "【百度】连通性检查"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:263
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:269
msgid "Baidu Public DNS (180.76.76.76)"
msgstr ""
@@ -265,7 +265,7 @@ msgstr "不走代理的域名"
msgid "CLOSE WIN"
msgstr "关闭窗口"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:266
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:272
msgid "CNNIC SDNS (1.2.4.8)"
msgstr ""
@@ -315,7 +315,7 @@ msgstr "正在检查..."
msgid "China IP Data"
msgstr "【中国大陆 IP 段】数据库"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:249
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:255
msgid "ChinaDNS-NG query protocol"
msgstr "ChinaDNS-NG 查询协议"
@@ -340,7 +340,7 @@ msgid "Clear logs"
msgstr "清空日志"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:163
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:192
msgid "Click here to view or manage the DNS list file"
msgstr "点击此处查看或管理 DNS 列表文件"
@@ -352,19 +352,19 @@ msgid "Click to the page"
msgstr "点击前往"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:147
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:170
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:176
msgid "Cloudflare DNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:135
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:216
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:246
msgid "Cloudflare DNS (1.1.1.1)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:178
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:201
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:207
msgid "Cloudflare DNSCrypt SDNS"
msgstr ""
@@ -422,7 +422,7 @@ msgid "Custom"
msgstr "自定义"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:181
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
msgid ""
"Custom DNS Server (support: IP:Port or tls://IP:Port or https://IP/dns-query "
"and other format)."
@@ -432,17 +432,17 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:160
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
msgid "Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)"
msgstr "格式为 IP:Port(默认:8.8.4.4:53)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:272
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:278
msgid "Custom DNS Server format as IP:PORT (default: disabled)"
msgstr "格式为 IP:PORT(默认:禁用)"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:178
msgid ""
"Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT "
"(tcp://8.8.8.8 or tls://dns.google:853)"
@@ -453,7 +453,7 @@ msgstr ""
msgid "Custom Plugin Path"
msgstr "自定义插件路径"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:115
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:121
msgid "Custom Ports"
msgstr "自定义端口"
@@ -475,7 +475,7 @@ msgstr "DNS 防污染服务"
msgid "DNS Query Mode For Shunt Mode"
msgstr "分流模式下的 DNS 查询模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:261
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:267
msgid "DNSPod Public DNS (119.29.29.29)"
msgstr ""
@@ -514,12 +514,12 @@ msgstr ""
"的 UDP 传输方式。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:183
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:206
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:212
msgid "Defines the upstreams logic mode"
msgstr "定义上游逻辑模式"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:209
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
msgid ""
"Defines the upstreams logic mode, possible values: load_balance, parallel, "
"fastest_addr (default: load_balance)."
@@ -546,7 +546,7 @@ msgstr "禁止连接的域名"
msgid "Disable"
msgstr "停用"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:263
msgid "Disable ChinaDNS-NG"
msgstr "直通模式(禁用 ChinaDNS-NG)"
@@ -554,12 +554,12 @@ msgstr "直通模式(禁用 ChinaDNS-NG)"
msgid "Disable IPv6 In MosDNS Query Mode (Shunt Mode)"
msgstr "禁止 MosDNS 返回 IPv6 记录 (分流模式)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:180
msgid "Disable IPv6 in MOSDNS query mode"
msgstr "禁止 MOSDNS 返回 IPv6 记录"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:196
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:226
msgid "Disable IPv6 query mode"
msgstr "禁止返回 IPv6 记录"
@@ -588,7 +588,7 @@ msgid "Do you want to restore the client to default settings?"
msgstr "是否要恢复客户端默认配置?"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:229
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:253
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
msgid "DoT upstream (Need use wolfssl version)"
msgstr "DoT 上游(需使用 wolfssl 版本)"
@@ -596,7 +596,7 @@ msgstr "DoT 上游(需使用 wolfssl 版本)"
msgid "Domain Strategy"
msgstr "域名解析策略"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:262
msgid "Domestic DNS Server"
msgstr "国内 DNS 服务器"
@@ -735,7 +735,7 @@ msgstr "启用 TCP 快速打开需要服务端支持。"
msgid "Encrypt Method"
msgstr "加密方式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:116
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:122
msgid "Enter Custom Ports"
msgstr "输入自定义端口"
@@ -771,7 +771,7 @@ msgstr "每周二"
msgid "Every Wednesday"
msgstr "每周三"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:283
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:289
msgid "Expecting: %s"
msgstr "应为:%s"
@@ -843,7 +843,7 @@ msgstr "分片包长 (byte)"
msgid "GFW List Data"
msgstr "【GFW 列表】数据库"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:106
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:112
msgid "GFW List Mode"
msgstr "GFW 列表模式"
@@ -871,7 +871,7 @@ msgstr "UDP 数据包残片在服务器的保留时间(单位:秒)"
msgid "Global Client"
msgstr "TCP 透明代理"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:108
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:114
msgid "Global Mode"
msgstr "全局模式"
@@ -889,26 +889,26 @@ msgid "Google Connectivity"
msgstr "【谷歌】连通性检查"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:173
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
msgid "Google DNSCrypt SDNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:142
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:165
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:171
msgid "Google Public DNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:125
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:206
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:230
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
msgid "Google Public DNS (8.8.4.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:126
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:207
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:145
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:231
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
msgid "Google Public DNS (8.8.8.8)"
msgstr ""
@@ -980,7 +980,7 @@ msgstr ""
msgid "Hysterir QUIC parameters"
msgstr "QUIC 参数"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:107
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:113
msgid "IP Route Mode"
msgstr "绕过中国大陆 IP 模式"
@@ -1099,58 +1099,58 @@ msgstr "LAN IP 访问控制"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:129
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:210
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:148
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:234
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:154
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:240
msgid "Level 3 Public DNS (209.244.0.3)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:130
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:211
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:149
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:235
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:241
msgid "Level 3 Public DNS (209.244.0.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:131
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:212
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:150
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:236
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:242
msgid "Level 3 Public DNS (4.2.2.1)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:132
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:213
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:151
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:237
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:157
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:243
msgid "Level 3 Public DNS (4.2.2.2)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:133
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:214
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:158
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:244
msgid "Level 3 Public DNS (4.2.2.3)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:134
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:215
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:159
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
msgid "Level 3 Public DNS (4.2.2.4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:144
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:167
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:173
msgid "Level 3 Public DNS-1 (209.244.0.3-4)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:145
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:168
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:174
msgid "Level 3 Public DNS-2 (4.2.2.1-2)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:146
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:169
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:175
msgid "Level 3 Public DNS-3 (4.2.2.3-4)"
msgstr ""
@@ -1241,7 +1241,7 @@ msgid "Move up"
msgstr "上移"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:221
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:245
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
msgid "Muitiple DNS server can saperate with ','"
msgstr "多个上游 DNS 服务器请用 ',' 分隔(注意用英文逗号)"
@@ -1249,7 +1249,7 @@ msgstr "多个上游 DNS 服务器请用 ',' 分隔(注意用英文逗号)"
msgid "Multi"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:92
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:98
msgid "Multi Threads Option"
msgstr "多线程并发转发"
@@ -1269,7 +1269,7 @@ msgstr "未运行"
msgid "NaiveProxy"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:260
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:266
msgid "Nanjing Xinfeng 114DNS (114.114.114.114)"
msgstr ""
@@ -1380,7 +1380,7 @@ msgstr "混淆密码"
msgid "Obfuscation Type"
msgstr "混淆类型"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:114
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:120
msgid "Only Common Ports"
msgstr "仅常用端口(不走 P2P 流量到代理)"
@@ -1393,33 +1393,33 @@ msgid "Only when Socks5 Auth Mode is password valid, Not mandatory."
msgstr "仅当 Socks5 认证方式为 Password 时有效,非必填。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:143
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:166
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
msgid "OpenDNS"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:128
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:209
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:147
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:233
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:153
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:239
msgid "OpenDNS (208.67.220.220)"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:127
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:208
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:146
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:232
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:152
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:238
msgid "OpenDNS (208.67.222.222)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:109
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:115
msgid "Oversea Mode"
msgstr "海外用户回国模式"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:155
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:161
msgid "Oversea Mode DNS-1 (114.114.114.114)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:156
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:162
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
@@ -1481,6 +1481,10 @@ msgstr "预连接"
msgid "Pre-shared key"
msgstr "预共享密钥"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:93
+msgid "Prefer firewall tools"
+msgstr "首选防火墙工具"
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1179
msgid "Private key"
msgstr "私钥"
@@ -1495,7 +1499,7 @@ msgstr "传输协议"
msgid "Protocol param (optional)"
msgstr "传输协议参数(可选)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:112
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:118
msgid "Proxy Ports"
msgstr "需要代理的端口"
@@ -1532,7 +1536,7 @@ msgid "QUIC maxStreamReceiveWindow"
msgstr "QUIC 最大的流接收窗口大小"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:176
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:199
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:205
msgid "Quad9 DNSCrypt SDNS"
msgstr ""
@@ -1617,7 +1621,7 @@ msgstr "重置完成"
msgid "Reset to defaults"
msgstr "恢复出厂设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:121
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:127
msgid "Resolve Dns Mode"
msgstr "DNS 解析方式"
@@ -1647,7 +1651,7 @@ msgstr "恢复默认配置"
msgid "Running"
msgstr "运行中"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:105
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:111
msgid "Running Mode"
msgstr "运行模式"
@@ -1675,7 +1679,7 @@ msgstr ""
"命中关键字的节点将被保留。多个关键字用 / 分隔。此项为空则不启用保留匹配"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:157
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:180
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:186
msgid "Select DNS parse Mode"
msgstr "选择 DNS 解析方式"
@@ -1737,7 +1741,7 @@ msgid "Session Ticket"
msgstr "会话凭据"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:166
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:195
msgid "Set Single DNS"
msgstr "设置单个 DNS"
@@ -1873,7 +1877,7 @@ msgid ""
msgstr "TCP 分片,在某些情况下可以欺骗审查系统,比如绕过 SNI 黑名单。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:227
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:251
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:257
msgid "TCP upstream"
msgstr "TCP 上游"
@@ -1926,7 +1930,7 @@ msgid "TUIC send window"
msgstr "发送窗口(无需确认即可发送的最大字节数:默认8Mb*2)"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:174
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:197
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:203
msgid "TWNIC-101 DNSCrypt SDNS"
msgstr ""
@@ -1966,7 +1970,7 @@ msgid "Timeout for establishing a connection to server(second)"
msgstr "连接超时时间(单位:秒)"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:161
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:184
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr "提示:Dnsproxy 的 DNS 解析列表路径:"
@@ -2025,12 +2029,12 @@ msgid "UDP relay mode"
msgstr "UDP 中继模式"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:228
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:252
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
msgid "UDP upstream"
msgstr "UDP 上游"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:226
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:250
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:256
msgid "UDP/TCP upstream"
msgstr "UDP/TCP 上游"
@@ -2074,47 +2078,47 @@ msgid "Upload"
msgstr "上传"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:119
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:138
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:144
msgid "Use ChinaDNS-NG query and cache"
msgstr "使用 ChinaDNS-NG 查询并缓存"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:167
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:190
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:196
msgid "Use DNS List File"
msgstr "使用 DNS 列表文件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:258
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:264
msgid "Use DNS from WAN"
msgstr "使用 WAN 下发的 DNS"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:259
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:265
msgid "Use DNS from WAN and 114DNS"
msgstr "使用 WAN 下发的 DNS 和 114DNS"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:107
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:126
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
msgid "Use DNS2SOCKS query and cache"
msgstr "使用 DNS2SOCKS 查询并缓存"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:110
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:129
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
msgid "Use DNS2SOCKS-RUST query and cache"
msgstr "使用 DNS2SOCKS-RUST 查询并缓存"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:123
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:129
msgid "Use DNS2TCP query"
msgstr "使用 DNS2TCP 查询"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:116
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:135
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:141
msgid "Use DNSPROXY query and cache"
msgstr "使用 DNSPROXY 查询并缓存"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:140
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:146
msgid "Use Local DNS Service listen port 5335"
msgstr "使用本机端口为 5335 的 DNS 服务"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:132
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:138
msgid "Use MOSDNS query (Not Support Oversea Mode)"
msgstr "使用 MOSDNS 查询 (不支持海外用户回国模式)"
@@ -2224,17 +2228,17 @@ msgid "When disabled shunt mode, will same time stopped shunt service."
msgstr "当停用分流模式时,将同时停止分流服务。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:197
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:227
msgid "When disabled, all AAAA requests are not resolved."
msgstr "当禁用时,不解析所有 AAAA 请求。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:186
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:210
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:216
msgid "When two or more DNS servers are deployed, enable this function."
msgstr "当部署两台或两台以上 DNS 服务器时,需要启用该功能。"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:160
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:183
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:189
msgid ""
"When use DNS list file, please ensure list file exists and is formatted "
"correctly."
@@ -2332,7 +2336,7 @@ msgid "chrome"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:179
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:202
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:208
msgid "cloudflare-dns.com DNSCrypt SDNS"
msgstr ""
@@ -2357,7 +2361,7 @@ msgid "disable"
msgstr "禁用"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:175
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:198
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:204
msgid "dns.sb DNSCrypt SDNS"
msgstr ""
@@ -2366,7 +2370,7 @@ msgid "edge"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:191
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:215
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:221
msgid "fastest_addr"
msgstr "最快响应"
@@ -2403,7 +2407,7 @@ msgid "ios"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:189
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:213
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:219
msgid "load_balance"
msgstr "负载均衡"
@@ -2429,7 +2433,7 @@ msgid "obfs-local"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:190
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:214
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:220
msgid "parallel"
msgstr "并行查询"
@@ -2488,7 +2492,7 @@ msgstr ""
msgid "v2ray-plugin"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:283
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:289
msgid "valid address:port"
msgstr "有效的地址:端口"
diff --git a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
index 740888fab..c97d9d011 100755
--- a/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
+++ b/luci-app-ssr-plus/root/etc/init.d/shadowsocksr
@@ -57,6 +57,15 @@ redir_udp=0
local_enable=0
kcp_enable_flag=0
pdnsd_enable_flag=0
+
+USE_TABLES=""
+HAS_NFT=0
+HAS_IPSET=0
+HAS_IPT=0
+HAS_FW4=0
+DNSMASQ_IPSET=0
+DNSMASQ_NFTSET=0
+
switch_server=$1
CRON_FILE=/etc/crontabs/root
EXTRA_COMMANDS='reset'
@@ -190,6 +199,65 @@ ln_start_bin() {
${file_func:-echolog " - ${ln_name}"} "$@" >/dev/null 2>&1 &
}
+check_run_environment() {
+ local prefer_nft="$(uci_get_by_type global prefer_nft 1)"
+ local dnsmasq_info=$(dnsmasq -v 2>/dev/null)
+ local dnsmasq_ver=$(echo "$dnsmasq_info" | sed -n '1s/.*version \([0-9.]*\).*/\1/p')
+
+ DNSMASQ_IPSET=0; [[ "$dnsmasq_info" == *" ipset"* ]] && DNSMASQ_IPSET=1
+ DNSMASQ_NFTSET=0; [[ "$dnsmasq_info" == *" nftset"* ]] && DNSMASQ_NFTSET=1
+ HAS_IPT=0; { command -v iptables-legacy || command -v iptables; } >/dev/null && HAS_IPT=1
+ HAS_IPSET=$(command -v ipset >/dev/null && echo 1 || echo 0)
+ HAS_FW4=$(command -v fw4 >/dev/null && echo 1 || echo 0)
+ HAS_NFT=$(command -v nft >/dev/null && echo 1 || echo 0)
+
+ # 重置 USE_TABLES
+ USE_TABLES=""
+
+ if [ "$prefer_nft" = "1" ]; then
+ echolog "提示:优先使用 nftables..."
+ if [ "$DNSMASQ_NFTSET" -eq 1 ] && [ "$HAS_NFT" -eq 1 ] && [ "$HAS_FW4" -eq 1 ]; then
+ USE_TABLES="nftables"
+ elif [ "$HAS_IPSET" -eq 1 ] && [ "$HAS_IPT" -eq 1 ] && [ "$DNSMASQ_IPSET" -eq 1 ]; then
+ echolog "警告:nftables (fw4) 应用环境不完整,切换至 iptables。(has_fw4:$HAS_FW4/dnsmasq_nftset:$DNSMASQ_NFTSET)"
+ USE_TABLES="iptables"
+ fi
+ else
+ echolog "提示:优先使用 iptables..."
+ if [ "$HAS_IPSET" -eq 1 ] && [ "$HAS_IPT" -eq 1 ] && [ "$DNSMASQ_IPSET" -eq 1 ]; then
+ USE_TABLES="iptables"
+ elif [ "$DNSMASQ_NFTSET" -eq 1 ] && [ "$HAS_FW4" -eq 1 ]; then
+ echolog "警告:iptables (fw3) 应用环境不完整,切换至 nftables。(has_ipt:$HAS_IPT/has_ipset:$HAS_IPSET/dnsmasq_ipset:$DNSMASQ_IPSET)"
+ USE_TABLES="nftables"
+ fi
+ fi
+
+ if [ -n "$USE_TABLES" ]; then
+ local dep_list
+ local file_path="/usr/lib/opkg/info"
+ local file_ext=".control"
+ [ -d "/lib/apk/packages" ] && { file_path="/lib/apk/packages"; file_ext=".list"; }
+
+ if [ "$USE_TABLES" = "iptables" ]; then
+ dep_list="iptables-mod-tproxy iptables-mod-socket iptables-mod-iprange iptables-mod-conntrack-extra kmod-ipt-nat"
+ else
+ dep_list="kmod-nft-socket kmod-nft-tproxy kmod-nft-nat"
+ local v_num=$(echo "$dnsmasq_ver" | tr -cd '0-9')
+ if [ "${v_num:-0}" -lt 290 ]; then
+ echolog "提示:Dnsmasq ($dnsmasq_ver) 低于 2.90,建议升级以增强稳定性。"
+ fi
+ fi
+ local pkg
+ for pkg in $dep_list; do
+ if [ ! -s "${file_path}/${pkg}${file_ext}" ]; then
+ echolog "警告:${USE_TABLES} 透明代理缺失基础依赖 ${pkg}!"
+ fi
+ done
+ else
+ echolog "警告:不满足任何透明代理系统环境。"
+ fi
+}
+
add_dns_into_ipset() {
case "$1" in
gfw) ipset add gfwlist ${2%:*} 2>/dev/null ;;
@@ -211,7 +279,7 @@ start_dns() {
local run_mode="$(uci_get_by_type global run_mode)"
if [ "$ssrplus_dns" != "0" ]; then
- if command -v ipset >/dev/null 2>&1; then
+ if [ "$HAS_IPSET" -eq 1 ]; then
if [ -n "$dnsserver" ]; then
add_dns_into_ipset $run_mode $dnsserver
fi
@@ -238,7 +306,7 @@ start_dns() {
output=$(for i in $(echo $mosdns_dnsserver | sed "s/,/ /g"); do
dnsserver=${i%:*}
dnsserver=${i##*/}
- if command -v ipset >/dev/null 2>&1; then
+ if [ "$HAS_IPSET" -eq 1 ]; then
add_dns_into_ipset $run_mode $dnsserver
fi
echo " - addr: $i"
@@ -1042,10 +1110,10 @@ Start_Run() {
tcp_config_file=$TMP_PATH/local-ssr-retcp.json
[ "$mode" == "tcp,udp" ] && tcp_config_file=$TMP_PATH/local-udp-ssr-retcp.json
#[ "$mode" == "tcp,udp" ] && {
- # if command -v nft >/dev/null 2>&1; then
+ # if [ "$USE_TABLES" = "nftables" ]; then
# # nftables / fw4
# tcp_config_file=$TMP_PATH/local-nft-ssr-retcp.json
- # else
+ # elif [ "$USE_TABLES" = "iptables" ]; then
# # iptables / fw3
# tcp_config_file=$TMP_PATH/local-udp-ssr-retcp.json
# fi
@@ -1276,7 +1344,7 @@ start_server() {
[ "$(uci_get_by_name $1 enable 0)" == "0" ] && return 1
let server_count=server_count+1
if [ "$server_count" == "1" ]; then
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
# nftables / fw4
if nft list table inet fw4 >/dev/null 2>&1; then
if ! nft list chain inet fw4 SSR-SERVER-RULE >/dev/null 2>&1; then
@@ -1287,7 +1355,7 @@ start_server() {
fi
nft flush chain inet fw4 SSR-SERVER-RULE 2>/dev/null
fi
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
# iptables / fw3
if ! (iptables-save -t filter | grep -q "SSR-SERVER-RULE"); then
iptables -N SSR-SERVER-RULE
@@ -1327,11 +1395,11 @@ start_server() {
;;
esac
server_port=$(uci_get_by_name $1 server_port)
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
# nftables / fw4
nft add rule inet fw4 SSR-SERVER-RULE tcp dport $server_port accept
nft add rule inet fw4 SSR-SERVER-RULE udp dport $server_port accept
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
# iptables / fw3
iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $server_port -j ACCEPT
iptables -t filter -A SSR-SERVER-RULE -p udp --dport $server_port -j ACCEPT
@@ -1344,7 +1412,7 @@ start_server() {
if [ ! -f $FWI ]; then
echo '#!/bin/sh' >$FWI
fi
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
# nftables / fw4
cat <<-'EOF' >>"$FWI"
# 确保表存在
@@ -1352,6 +1420,7 @@ start_server() {
# 如果不存在 SSR-SERVER-RULE 链,则创建
if ! nft list chain inet fw4 SSR-SERVER-RULE >/dev/null 2>&1; then
nft add chain inet fw4 SSR-SERVER-RULE 2>/dev/null
+ fi
# 从 input 链跳转到 SSR-SERVER-RULE(如果未添加)
if ! nft list chain inet fw4 input | grep -q 'jump SSR-SERVER-RULE'; then
nft insert rule inet fw4 input jump SSR-SERVER-RULE comment \"SSR Server Input Hook\" 2>/dev/null
@@ -1360,7 +1429,7 @@ start_server() {
nft flush chain inet fw4 SSR-SERVER-RULE 2>/dev/null
fi
EOF
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
# iptables / fw3
extract_rules() {
echo "*filter"
@@ -1482,9 +1551,9 @@ start_rules() {
2) echo "-O" ;;
esac
}
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
ARG_A="-A"
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
ARG_A=""
fi
/usr/share/shadowsocksr/gfw2ipset.sh
@@ -1516,12 +1585,13 @@ start() {
echolog "----------start------------"
mkdir -p /var/run /var/lock /var/log $DNSMASQ_CONF_DIR $TMP_BIN_PATH $TMP_DNSMASQ_PATH
echo "conf-dir=${TMP_DNSMASQ_PATH}" >"$DNSMASQ_CONF_DIR/dnsmasq-ssrplus.conf"
+ check_run_environment
if load_config; then
Start_Run
start_xhttp_addr
start_rules
# Restore ipsets after rules creation
- if command -v ipset >/dev/null 2>&1; then
+ if [ "$HAS_IPSET" -eq 1 ]; then
for setname in gfwlist china blacklist whitelist netflix; do
if [ -f "/tmp/ssrplus_save/${setname}.save" ]; then
ipset restore -! < "/tmp/ssrplus_save/${setname}.save" 2>/dev/null
@@ -1557,7 +1627,7 @@ start() {
fi
/etc/init.d/dnsmasq restart >/dev/null 2>&1
check_server
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
local CURRENT_SERVER="$(uci_get_by_type global global_server nil)"
if [ "$CURRENT_SERVER" != "nil" ]; then
uci set shadowsocksr.@global[0].old_global_server="$CURRENT_SERVER"
@@ -1578,8 +1648,9 @@ boot() {
}
stop() {
+ check_run_environment
# Save ipsets before stopping to persist transparent proxy state
- if command -v ipset >/dev/null 2>&1; then
+ if [ "$HAS_IPSET" -eq 1 ]; then
mkdir -p /tmp/ssrplus_save
ipset save gfwlist > /tmp/ssrplus_save/gfwlist.save 2>/dev/null
ipset save china > /tmp/ssrplus_save/china.save 2>/dev/null
@@ -1589,7 +1660,7 @@ stop() {
fi
unlock
set_lock
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
/usr/bin/ssr-rules -K
local OLD_SERVER="$(uci_get_by_type global old_global_server nil)"
local NEW_SERVER="$(uci_get_by_type global global_server nil)"
@@ -1601,18 +1672,18 @@ stop() {
fi
/usr/bin/ssr-rules -f
local srulecount=0
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
# nftables / fw4
#local srulecount=$(nft list ruleset 2>/dev/null | grep -c 'SSR-SERVER-RULE')
if nft list chain inet fw4 SSR-SERVER-RULE >/dev/null 2>&1; then
srulecount=$(nft list chain inet fw4 SSR-SERVER-RULE | grep SSR-SERVER-RULE | wc -l)
fi
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
# iptables / fw3
srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l)
fi
if [ $srulecount -gt 0 ]; then
- if command -v nft >/dev/null 2>&1; then
+ if [ "$USE_TABLES" = "nftables" ]; then
# nftables / fw4
if nft list table inet fw4 >/dev/null 2>&1; then
if nft list chain inet fw4 SSR-SERVER-RULE >/dev/null 2>&1; then
@@ -1624,7 +1695,7 @@ stop() {
nft delete chain inet fw4 SSR-SERVER-RULE 2>/dev/null || true
fi
fi
- else
+ elif [ "$USE_TABLES" = "iptables" ]; then
# iptables / fw3
if iptables-save -t filter | grep -q "SSR-SERVER-RULE"; then
logger -t ssr-rules "Flushing and deleting SSR-SERVER-RULE chain (iptables)"
diff --git a/luci-app-ssr-plus/root/usr/bin/ssr-rules b/luci-app-ssr-plus/root/usr/bin/ssr-rules
index 3a0f65bac..523f6ca70 100755
--- a/luci-app-ssr-plus/root/usr/bin/ssr-rules
+++ b/luci-app-ssr-plus/root/usr/bin/ssr-rules
@@ -7,21 +7,29 @@
# See /LICENSE for more information.
#
+. $IPKG_INSTROOT/etc/init.d/shadowsocksr
+
# Detect firewall version and set appropriate tools
detect_firewall() {
- if command -v nft >/dev/null 2>&1 && \
- { [ -n "$(uci get firewall.@defaults[0].syn_flood 2>/dev/null)" ] || \
- [ -n "$(uci get firewall.@defaults[0].synflood_protect 2>/dev/null)" ]; } && \
- ! grep -q "fw3" /etc/init.d/firewall 2>/dev/null; then
+ check_run_environment
+ case "$USE_TABLES" in
+ nftables)
USE_NFT=1
NFT="nft"
- FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) # firewall include file
- else
- USE_NFT=0
- IPT="iptables -t nat" # alias of iptables TCP
- ipt="iptables -t mangle" # alias of iptables UDP
- FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) # firewall include file
- fi
+ echolog "ssr-rules: Using nftables"
+ ;;
+ iptables)
+ USE_NFT=0
+ IPT="iptables -t nat" # alias of iptables TCP
+ ipt="iptables -t mangle" # alias of iptables UDP
+ echolog "ssr-rules: Using iptables"
+ ;;
+ *)
+ echolog "ERROR: No supported firewall backend"
+ return 1
+ ;;
+ esac
+ FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) # firewall include file
}
# Initialize firewall detection
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh
index b9372d511..87e760b5b 100755
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh
@@ -2,9 +2,22 @@
. $IPKG_INSTROOT/etc/init.d/shadowsocksr
-if command -v nft >/dev/null 2>&1; then
- nft_support=1
-fi
+check_run_environment
+
+case "$USE_TABLES" in
+ nftables)
+ nft_support=1
+ echolog "gfw2ipset: Using nftables"
+ ;;
+ iptables)
+ nft_support=0
+ echolog "gfw2ipset: Using iptables"
+ ;;
+ *)
+ echolog "ERROR: No supported firewall backend detected"
+ exit 1
+ ;;
+esac
netflix() {
local port="$1"
@@ -23,7 +36,7 @@ netflix() {
if [ "$nft_support" = "1" ]; then
# 移除 ipset
cat /etc/ssrplus/netflix.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$port\nnftset=\/&\/inet#ss_spec#netflix/" >$TMP_DNSMASQ_PATH/netflix_forward.conf
- else
+ elif [ "$nft_support" = "0" ]; then
cat /etc/ssrplus/netflix.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$port\nipset=\/&\/netflix/" >$TMP_DNSMASQ_PATH/netflix_forward.conf
fi
}
@@ -88,7 +101,7 @@ esac
if [ "$nft_support" = "1" ]; then
cat /etc/ssrplus/black.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$dns_port\nnftset=\/&\/inet#ss_spec#blacklist/" >$TMP_DNSMASQ_PATH/blacklist_forward.conf
cat /etc/ssrplus/white.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1\nnftset=\/&\/inet#ss_spec#whitelist/" >$TMP_DNSMASQ_PATH/whitelist_forward.conf
-else
+elif [ "$nft_support" = "0" ]; then
cat /etc/ssrplus/black.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1#$dns_port\nipset=\/&\/blacklist/" >$TMP_DNSMASQ_PATH/blacklist_forward.conf
cat /etc/ssrplus/white.list | sed '/^$/d' | sed '/#/d' | sed "/.*/s/.*/server=\/&\/127.0.0.1\nipset=\/&\/whitelist/" >$TMP_DNSMASQ_PATH/whitelist_forward.conf
fi
diff --git a/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config b/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
index d542098b5..8fd94d856 100644
--- a/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
+++ b/luci-app-ssr-plus/root/usr/share/shadowsocksr/shadowsocksr.config
@@ -8,6 +8,7 @@ config global
option dports '2'
option custom_ports '80,443'
option pdnsd_enable '1'
+ option prefer_nft '1'
option tunnel_forward '8.8.4.4:53'
option monitor_enable '1'
option enable_switch '1'