diff --git a/homeproxy/Makefile b/homeproxy/Makefile
index 5b72fd02e..dd7293642 100644
--- a/homeproxy/Makefile
+++ b/homeproxy/Makefile
@@ -17,12 +17,10 @@ PKG_NAME:=luci-app-homeproxy
define Package/luci-app-homeproxy/conffiles
/etc/config/homeproxy
/etc/homeproxy/certs/
-/etc/homeproxy/resources/geoip.db
-/etc/homeproxy/resources/geoip.ver
-/etc/homeproxy/resources/geosite.db
-/etc/homeproxy/resources/geosite.ver
+/etc/homeproxy/ruleset/
/etc/homeproxy/resources/direct_list.txt
/etc/homeproxy/resources/proxy_list.txt
+/etc/homeproxy/cache.db
endef
include $(TOPDIR)/feeds/luci/luci.mk
diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
index 44a211675..7716141d2 100644
--- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
+++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
@@ -287,8 +287,6 @@ return view.extend({
desc.innerHTML = _('Mixed system
TCP stack and gVisor
UDP stack.')
else if (value === 'gvisor')
desc.innerHTML = _('Based on google/gvisor.');
- else if (value === 'lwip')
- desc.innerHTML = _('Upstream archived. Not recommended.');
else if (value === 'system')
desc.innerHTML = _('Less compatibility and sometimes better performance.');
}
@@ -430,9 +428,9 @@ return view.extend({
so = ss.option(form.ListValue, 'mode', _('Mode'),
_('The default rule uses the following matching logic:
' +
- '(domain || domain_suffix || domain_keyword || domain_regex || geosite || geoip || ip_cidr)
&&
' +
+ '(domain || domain_suffix || domain_keyword || domain_regex || ip_cidr || ip_is_private)
&&
' +
'(port || port_range)
&&
' +
- '(source_geoip || source_ip_cidr)
&&
' +
+ '(source_ip_cidr || source_ip_is_private)
&&
' +
'(source_port || source_port_range)
&&
' +
'other fields
.'));
so.value('default', _('Default'));
@@ -476,28 +474,28 @@ return view.extend({
_('Match domain using regular expression.'));
so.modalonly = true;
- so = ss.option(form.DynamicList, 'geosite', _('Geosite'),
- _('Match geosite.'));
- so.modalonly = true;
-
- so = ss.option(form.DynamicList, 'source_geoip', _('Source GeoIP'),
- _('Match source GeoIP.'));
- so.modalonly = true;
-
- so = ss.option(form.DynamicList, 'geoip', _('GeoIP'),
- _('Match GeoIP.'));
- so.modalonly = true;
-
so = ss.option(form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
+ so = ss.option(form.Flag, 'source_ip_is_private', _('Private source IP'),
+ _('Match private source IP.'));
+ so.default = so.disabled;
+ so.rmempty = false;
+ so.modalonly = true;
+
so = ss.option(form.DynamicList, 'ip_cidr', _('IP CIDR'),
_('Match IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
+ so = ss.option(form.Flag, 'ip_is_private', _('Private IP'),
+ _('Match private IP.'));
+ so.default = so.disabled;
+ so.rmempty = false;
+ so.modalonly = true;
+
so = ss.option(form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
@@ -530,6 +528,28 @@ return view.extend({
_('Match user name.'));
so.modalonly = true;
+ so = ss.option(form.MultiValue, 'rule_set', _('Rule set'),
+ _('Match rule set.'));
+ so.load = function(section_id) {
+ delete this.keylist;
+ delete this.vallist;
+
+ this.value('', _('-- Please choose --'));
+ uci.sections(data[0], 'ruleset', (res) => {
+ if (res.enabled === '1')
+ this.value(res['.name'], res.label);
+ });
+
+ return this.super('load', section_id);
+ }
+ so.modalonly = true;
+
+ so = ss.option(form.Flag, 'rule_set_ipcidr_match_source', _('Match source IP via rule set'),
+ _('Make IP CIDR in rule set used to match the source IP.'));
+ so.default = so.disabled;
+ so.rmempty = false;
+ so.modalonly = true;
+
so = ss.option(form.Flag, 'invert', _('Invert'),
_('Invert match result.'));
so.default = so.disabled;
@@ -712,9 +732,9 @@ return view.extend({
so = ss.option(form.ListValue, 'mode', _('Mode'),
_('The default rule uses the following matching logic:
' +
- '(domain || domain_suffix || domain_keyword || domain_regex || geosite)
&&
' +
+ '(domain || domain_suffix || domain_keyword || domain_regex)
&&
' +
'(port || port_range)
&&
' +
- '(source_geoip || source_ip_cidr)
&&
' +
+ '(source_ip_cidr || source_ip_is_private)
&&
' +
'(source_port || source_port_range)
&&
' +
'other fields
.'));
so.value('default', _('Default'));
@@ -762,10 +782,6 @@ return view.extend({
_('Match domain using regular expression.'));
so.modalonly = true;
- so = ss.option(form.DynamicList, 'geosite', _('Geosite'),
- _('Match geosite.'));
- so.modalonly = true;
-
so = ss.option(form.DynamicList, 'port', _('Port'),
_('Match port.'));
so.datatype = 'port';
@@ -776,15 +792,17 @@ return view.extend({
so.validate = validatePortRange;
so.modalonly = true;
- so = ss.option(form.DynamicList, 'source_geoip', _('Source GeoIP'),
- _('Match source GeoIP.'));
- so.modalonly = true;
-
so = ss.option(form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
+ so = ss.option(form.Flag, 'source_ip_is_private', _('Private source IP'),
+ _('Match private source IP.'));
+ so.default = so.disabled;
+ so.rmempty = false;
+ so.modalonly = true;
+
so = ss.option(form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
@@ -807,6 +825,22 @@ return view.extend({
_('Match user name.'));
so.modalonly = true;
+ so = ss.option(form.MultiValue, 'rule_set', _('Rule set'),
+ _('Match rule set.'));
+ so.load = function(section_id) {
+ delete this.keylist;
+ delete this.vallist;
+
+ this.value('', _('-- Please choose --'));
+ uci.sections(data[0], 'ruleset', (res) => {
+ if (res.enabled === '1')
+ this.value(res['.name'], res.label);
+ });
+
+ return this.super('load', section_id);
+ }
+ so.modalonly = true;
+
so = ss.option(form.Flag, 'invert', _('Invert'),
_('Invert match result.'));
so.default = so.disabled;
@@ -861,6 +895,94 @@ return view.extend({
/* DNS rules end */
/* Custom routing settings end */
+ /* Rule set settings start */
+ s.tab('ruleset', _('Rule set'));
+ o = s.taboption('ruleset', form.SectionValue, '_ruleset', form.GridSection, 'ruleset');
+ o.depends('routing_mode', 'custom');
+
+ ss = o.subsection;
+ ss.addremove = true;
+ ss.rowcolors = true;
+ ss.sortable = true;
+ ss.nodescriptions = true;
+ ss.modaltitle = L.bind(hp.loadModalTitle, this, _('Rule set'), _('Add a rule set'), data[0]);
+ ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, data[0]);
+ ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss);
+
+ so = ss.option(form.Value, 'label', _('Label'));
+ so.load = L.bind(hp.loadDefaultLabel, this, data[0]);
+ so.validate = L.bind(hp.validateUniqueValue, this, data[0], 'ruleset', 'label');
+ so.modalonly = true;
+
+ so = ss.option(form.Flag, 'enabled', _('Enable'));
+ so.default = o.enabled;
+ so.rmempty = false;
+ so.editable = true;
+
+ so = ss.option(form.ListValue, 'type', _('Type'));
+ so.value('local', _('Local'));
+ so.value('remote', _('Remote'));
+ so.default = 'remote';
+ so.rmempty = false;
+
+ so = ss.option(form.ListValue, 'format', _('Format'));
+ so.value('source', _('Source file'));
+ so.value('binary', _('Binary file'));
+ so.default = 'source';
+ so.rmempty = false;
+
+ so = ss.option(form.Value, 'path', _('Path'));
+ so.datatype = 'file';
+ so.placeholder = '/etc/homeproxy/ruleset/example.json';
+ so.rmempty = false;
+ so.depends('type', 'local');
+ so.modalonly = true;
+
+ so = ss.option(form.Value, 'url', _('Rule set URL'));
+ so.validate = function(section_id, value) {
+ if (section_id) {
+ if (!value)
+ return _('Expecting: %s').format(_('non-empty value'));
+
+ try {
+ var url = new URL(value);
+ if (!url.hostname)
+ return _('Expecting: %s').format(_('valid URL'));
+ }
+ catch(e) {
+ return _('Expecting: %s').format(_('valid URL'));
+ }
+ }
+
+ return true;
+ }
+ so.rmempty = false;
+ so.depends('type', 'remote');
+ so.modalonly = true;
+
+ so = ss.option(form.ListValue, 'outbound', _('Outbound'),
+ _('Tag of the outbound to download rule set.'));
+ so.load = function(section_id) {
+ delete this.keylist;
+ delete this.vallist;
+
+ this.value('direct-out', _('Direct'));
+ uci.sections(data[0], 'routing_node', (res) => {
+ if (res.enabled === '1')
+ this.value(res['.name'], res.label);
+ });
+
+ return this.super('load', section_id);
+ }
+ so.default = 'direct-out';
+ so.rmempty = false;
+ so.depends('type', 'remote');
+
+ so = ss.option(form.Value, 'update_interval', _('Update interval'),
+ _('Update interval of rule set.
1d
will be used if empty.'));
+ so.depends('type', 'remote');
+ /* Rule set settings end */
+
/* ACL settings start */
s.tab('control', _('Access Control'));
diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
index f1f2b9381..d645db446 100644
--- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
+++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js
@@ -1252,7 +1252,7 @@ return view.extend({
s.tab('subscription', _('Subscriptions'));
o = s.taboption('subscription', form.Flag, 'auto_update', _('Auto update'),
- _('Auto update subscriptions, GeoIP and GeoSite.'));
+ _('Auto update subscriptions.'));
o.default = o.disabled;
o.rmempty = false;
diff --git a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
index 34fd3b19e..e02c1b8cd 100644
--- a/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
+++ b/homeproxy/htdocs/luci-static/resources/view/homeproxy/status.js
@@ -200,16 +200,6 @@ return view.extend({
s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management'));
s.anonymous = true;
- if (routing_mode === 'custom') {
- o = s.option(form.DummyValue, '_geoip_version', _('GeoIP version'));
- o.cfgvalue = function() { return getResVersion(this, 'geoip') };
- o.rawhtml = true;
-
- o = s.option(form.DummyValue, '_geosite_version', _('GeoSite version'));
- o.cfgvalue = function() { return getResVersion(this, 'geosite') };
- o.rawhtml = true;
- }
-
o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version'));
o.cfgvalue = function() { return getResVersion(this, 'china_ip4') };
o.rawhtml = true;
diff --git a/homeproxy/po/templates/homeproxy.pot b/homeproxy/po/templates/homeproxy.pot
index f0cc7278d..ec451afc0 100644
--- a/homeproxy/po/templates/homeproxy.pot
+++ b/homeproxy/po/templates/homeproxy.pot
@@ -9,7 +9,12 @@ msgstr ""
msgid "%s nodes removed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:834
+msgid "-- Please choose --"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:442
msgid "4 or 6. Not limited if empty."
msgstr ""
@@ -27,7 +32,7 @@ msgstr ""
msgid "Accept any if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:865
+#: htdocs/luci-static/resources/view/homeproxy/client.js:987
msgid "Access Control"
msgstr ""
@@ -39,11 +44,11 @@ msgstr ""
msgid "Access key secret"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:699
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
msgid "Add a DNS rule"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:609
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
msgid "Add a DNS server"
msgstr ""
@@ -51,28 +56,32 @@ msgstr ""
msgid "Add a node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:341
+#: htdocs/luci-static/resources/view/homeproxy/client.js:339
msgid "Add a routing node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:417
+#: htdocs/luci-static/resources/view/homeproxy/client.js:415
msgid "Add a routing rule"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:908
+msgid "Add a rule set"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/server.js:88
msgid "Add a server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:623
+#: htdocs/luci-static/resources/view/homeproxy/client.js:643
#: htdocs/luci-static/resources/view/homeproxy/node.js:529
msgid "Address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:647
msgid "Address resolver"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:659
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "Address strategy"
msgstr ""
@@ -132,7 +141,7 @@ msgstr ""
msgid "An error occurred during updating subscriptions: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:821
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
msgid "Any"
msgstr ""
@@ -180,7 +189,7 @@ msgid "Auto update"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/node.js:1255
-msgid "Auto update subscriptions, GeoIP and GeoSite."
+msgid "Auto update subscriptions."
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/node.js:749
@@ -200,12 +209,16 @@ msgstr ""
msgid "Based on google/gvisor."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:368
-#: htdocs/luci-static/resources/view/homeproxy/client.js:878
+#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+msgid "Binary file"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1000
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:879
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1001
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr ""
@@ -214,26 +227,26 @@ msgstr ""
msgid "Blacklist mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:319
-#: htdocs/luci-static/resources/view/homeproxy/client.js:545
-#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:317
+#: htdocs/luci-static/resources/view/homeproxy/client.js:565
+#: htdocs/luci-static/resources/view/homeproxy/client.js:857
msgid "Block"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:575
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
+#: htdocs/luci-static/resources/view/homeproxy/client.js:595
+#: htdocs/luci-static/resources/view/homeproxy/client.js:875
msgid "Block DNS queries"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:447
-#: htdocs/luci-static/resources/view/homeproxy/client.js:460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:728
-#: htdocs/luci-static/resources/view/homeproxy/client.js:738
+#: htdocs/luci-static/resources/view/homeproxy/client.js:445
+#: htdocs/luci-static/resources/view/homeproxy/client.js:458
+#: htdocs/luci-static/resources/view/homeproxy/client.js:748
+#: htdocs/luci-static/resources/view/homeproxy/client.js:758
#: htdocs/luci-static/resources/view/homeproxy/server.js:733
msgid "Both"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:302
+#: htdocs/luci-static/resources/view/homeproxy/client.js:300
msgid "Bypass CN traffic"
msgstr ""
@@ -241,7 +254,7 @@ msgstr ""
msgid "Bypass mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:303
+#: htdocs/luci-static/resources/view/homeproxy/client.js:301
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr ""
@@ -278,15 +291,15 @@ msgstr ""
msgid "China DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:213
+#: htdocs/luci-static/resources/view/homeproxy/status.js:203
msgid "China IPv4 list version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:217
+#: htdocs/luci-static/resources/view/homeproxy/status.js:207
msgid "China IPv6 list version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:221
+#: htdocs/luci-static/resources/view/homeproxy/status.js:211
msgid "China list version"
msgstr ""
@@ -342,19 +355,19 @@ msgstr ""
msgid "Custom routing"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:765
msgid "DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:710
msgid "DNS Rules"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:600
+#: htdocs/luci-static/resources/view/homeproxy/client.js:620
msgid "DNS Servers"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:558
+#: htdocs/luci-static/resources/view/homeproxy/client.js:578
msgid "DNS Settings"
msgstr ""
@@ -362,12 +375,12 @@ msgstr ""
msgid "DNS provider"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:699
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
msgid "DNS rule"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/client.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client.js:609
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
msgid "DNS server"
msgstr ""
@@ -376,31 +389,31 @@ msgid "DNS01 challenge"
msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:438
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:740
#: htdocs/luci-static/resources/view/homeproxy/node.js:757
msgid "Default"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:573
-#: htdocs/luci-static/resources/view/homeproxy/client.js:634
-#: htdocs/luci-static/resources/view/homeproxy/client.js:839
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
+#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:873
msgid "Default DNS (issued by WAN)"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:568
+#: htdocs/luci-static/resources/view/homeproxy/client.js:588
msgid "Default DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:563
+#: htdocs/luci-static/resources/view/homeproxy/client.js:583
msgid "Default DNS strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
+#: htdocs/luci-static/resources/view/homeproxy/client.js:686
msgid "Default domain strategy for resolving the domain names."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:310
msgid "Default outbound"
msgstr ""
@@ -412,38 +425,39 @@ msgstr ""
msgid "Default server name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:318
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:676
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:316
+#: htdocs/luci-static/resources/view/homeproxy/client.js:379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:564
+#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:856
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
#: htdocs/luci-static/resources/view/homeproxy/node.js:510
msgid "Direct"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:977
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1099
msgid "Direct Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:894
-#: htdocs/luci-static/resources/view/homeproxy/client.js:939
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1016
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1061
msgid "Direct IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:897
-#: htdocs/luci-static/resources/view/homeproxy/client.js:942
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1019
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1064
msgid "Direct IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1022
msgid "Direct MAC-s"
msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/client.js:142
#: htdocs/luci-static/resources/view/homeproxy/client.js:150
#: htdocs/luci-static/resources/view/homeproxy/client.js:187
-#: htdocs/luci-static/resources/view/homeproxy/client.js:317
-#: htdocs/luci-static/resources/view/homeproxy/client.js:888
+#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1010
#: htdocs/luci-static/resources/view/homeproxy/node.js:604
#: htdocs/luci-static/resources/view/homeproxy/node.js:616
#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
@@ -453,7 +467,7 @@ msgstr ""
msgid "Disable"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:586
+#: htdocs/luci-static/resources/view/homeproxy/client.js:606
msgid "Disable DNS cache"
msgstr ""
@@ -470,15 +484,15 @@ msgstr ""
msgid "Disable TLS ALPN challenge"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:853
+#: htdocs/luci-static/resources/view/homeproxy/client.js:887
msgid "Disable cache and save cache in this query."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:589
+#: htdocs/luci-static/resources/view/homeproxy/client.js:609
msgid "Disable cache expire"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:886
msgid "Disable dns cache"
msgstr ""
@@ -493,28 +507,28 @@ msgid ""
"(IPv4) / 1232 (IPv6) bytes in size."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:471
-#: htdocs/luci-static/resources/view/homeproxy/client.js:757
+#: htdocs/luci-static/resources/view/homeproxy/client.js:469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:777
msgid "Domain keyword"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:462
-#: htdocs/luci-static/resources/view/homeproxy/client.js:748
+#: htdocs/luci-static/resources/view/homeproxy/client.js:460
+#: htdocs/luci-static/resources/view/homeproxy/client.js:768
msgid "Domain name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:475
-#: htdocs/luci-static/resources/view/homeproxy/client.js:761
+#: htdocs/luci-static/resources/view/homeproxy/client.js:473
+#: htdocs/luci-static/resources/view/homeproxy/client.js:781
msgid "Domain regex"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:362
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
#: htdocs/luci-static/resources/view/homeproxy/server.js:724
msgid "Domain strategy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:467
-#: htdocs/luci-static/resources/view/homeproxy/client.js:753
+#: htdocs/luci-static/resources/view/homeproxy/client.js:465
+#: htdocs/luci-static/resources/view/homeproxy/client.js:773
msgid "Domain suffix"
msgstr ""
@@ -583,10 +597,11 @@ msgstr ""
msgid "Email"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:350
-#: htdocs/luci-static/resources/view/homeproxy/client.js:426
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:708
+#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:424
+#: htdocs/luci-static/resources/view/homeproxy/client.js:638
+#: htdocs/luci-static/resources/view/homeproxy/client.js:728
+#: htdocs/luci-static/resources/view/homeproxy/client.js:917
#: htdocs/luci-static/resources/view/homeproxy/server.js:75
#: htdocs/luci-static/resources/view/homeproxy/server.js:98
msgid "Enable"
@@ -632,7 +647,7 @@ msgstr ""
msgid "Enable UDP fragmentation."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:296
+#: htdocs/luci-static/resources/view/homeproxy/client.js:294
msgid "Enable endpoint-independent NAT"
msgstr ""
@@ -668,8 +683,11 @@ msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/client.js:200
#: htdocs/luci-static/resources/view/homeproxy/client.js:229
#: htdocs/luci-static/resources/view/homeproxy/client.js:234
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:999
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
#: htdocs/luci-static/resources/view/homeproxy/node.js:465
#: htdocs/luci-static/resources/view/homeproxy/node.js:572
#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
@@ -710,11 +728,15 @@ msgstr ""
msgid "Flow"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:928
+msgid "Format"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:893
msgid "GET"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:225
+#: htdocs/luci-static/resources/view/homeproxy/status.js:215
msgid "GFW list version"
msgstr ""
@@ -722,15 +744,15 @@ msgstr ""
msgid "GFWList"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:912
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1034
msgid "Gaming mode IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:914
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
msgid "Gaming mode IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:917
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1039
msgid "Gaming mode MAC-s"
msgstr ""
@@ -739,23 +761,6 @@ msgstr ""
msgid "Generic segmentation offload"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:487
-msgid "GeoIP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:204
-msgid "GeoIP version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:208
-msgid "GeoSite version"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:479
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
-msgid "Geosite"
-msgstr ""
-
#: htdocs/luci-static/resources/view/homeproxy/client.js:212
msgid "Global"
msgstr ""
@@ -764,15 +769,15 @@ msgstr ""
msgid "Global padding"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:919
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1041
msgid "Global proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
msgid "Global proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1047
msgid "Global proxy MAC-s"
msgstr ""
@@ -792,8 +797,8 @@ msgstr ""
msgid "Grant access to homeproxy configuration"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:452
-#: htdocs/luci-static/resources/view/homeproxy/client.js:742
+#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:762
#: htdocs/luci-static/resources/view/homeproxy/node.js:511
#: htdocs/luci-static/resources/view/homeproxy/node.js:827
#: htdocs/luci-static/resources/view/homeproxy/server.js:104
@@ -828,7 +833,7 @@ msgstr ""
#: htdocs/luci-static/resources/view/homeproxy/client.js:55
#: htdocs/luci-static/resources/view/homeproxy/client.js:57
#: htdocs/luci-static/resources/view/homeproxy/client.js:109
-#: htdocs/luci-static/resources/view/homeproxy/status.js:233
+#: htdocs/luci-static/resources/view/homeproxy/status.js:223
#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
msgid "HomeProxy"
msgstr ""
@@ -872,17 +877,17 @@ msgstr ""
msgid "Hysteria2"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:488
msgid "IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
-#: htdocs/luci-static/resources/view/homeproxy/client.js:725
+#: htdocs/luci-static/resources/view/homeproxy/client.js:441
+#: htdocs/luci-static/resources/view/homeproxy/client.js:745
msgid "IP version"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:445
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:746
msgid "IPv4"
msgstr ""
@@ -890,8 +895,8 @@ msgstr ""
msgid "IPv4 only"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:446
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:747
msgid "IPv6"
msgstr ""
@@ -919,7 +924,7 @@ msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:363
+#: htdocs/luci-static/resources/view/homeproxy/client.js:361
msgid ""
"If set, the server domain name will be resolved to IP before connecting.
dns.strategy will be used if empty."
@@ -952,11 +957,11 @@ msgstr ""
msgid "Import share links"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:593
+#: htdocs/luci-static/resources/view/homeproxy/client.js:613
msgid "Independent cache per server"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
+#: htdocs/luci-static/resources/view/homeproxy/client.js:993
msgid "Interface Control"
msgstr ""
@@ -967,13 +972,13 @@ msgid ""
"seconds)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:533
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:553
+#: htdocs/luci-static/resources/view/homeproxy/client.js:844
msgid "Invert"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:534
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:845
msgid "Invert match result."
msgstr ""
@@ -981,14 +986,15 @@ msgstr ""
msgid "Key path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1007
msgid "LAN IP Policy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:345
-#: htdocs/luci-static/resources/view/homeproxy/client.js:421
-#: htdocs/luci-static/resources/view/homeproxy/client.js:613
-#: htdocs/luci-static/resources/view/homeproxy/client.js:703
+#: htdocs/luci-static/resources/view/homeproxy/client.js:343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:723
+#: htdocs/luci-static/resources/view/homeproxy/client.js:912
#: htdocs/luci-static/resources/view/homeproxy/node.js:504
#: htdocs/luci-static/resources/view/homeproxy/server.js:92
msgid "Label"
@@ -1001,7 +1007,7 @@ msgid ""
"compatibility purposes only, use of alterId > 1 is not recommended."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:293
+#: htdocs/luci-static/resources/view/homeproxy/client.js:291
msgid "Less compatibility and sometimes better performance."
msgstr ""
@@ -1023,7 +1029,7 @@ msgstr ""
msgid "Listen address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:873
+#: htdocs/luci-static/resources/view/homeproxy/client.js:995
msgid "Listen interfaces"
msgstr ""
@@ -1035,6 +1041,10 @@ msgstr ""
msgid "Loading"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:923
+msgid "Local"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:953
msgid "Local address"
msgstr ""
@@ -1059,7 +1069,11 @@ msgstr ""
msgid "Main node"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:594
+#: htdocs/luci-static/resources/view/homeproxy/client.js:548
+msgid "Make IP CIDR in rule set used to match the source IP."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:614
msgid ""
"Make each DNS server's cache independent for special purposes. If enabled, "
"will slightly degrade performance."
@@ -1069,89 +1083,93 @@ msgstr ""
msgid "Masquerade"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:488
-msgid "Match GeoIP."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:497
+#: htdocs/luci-static/resources/view/homeproxy/client.js:489
msgid "Match IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:468
-#: htdocs/luci-static/resources/view/homeproxy/client.js:754
+#: htdocs/luci-static/resources/view/homeproxy/client.js:466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:774
msgid "Match domain suffix."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:472
-#: htdocs/luci-static/resources/view/homeproxy/client.js:758
+#: htdocs/luci-static/resources/view/homeproxy/client.js:470
+#: htdocs/luci-static/resources/view/homeproxy/client.js:778
msgid "Match domain using keyword."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:762
+#: htdocs/luci-static/resources/view/homeproxy/client.js:474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:782
msgid "Match domain using regular expression."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:749
+#: htdocs/luci-static/resources/view/homeproxy/client.js:461
+#: htdocs/luci-static/resources/view/homeproxy/client.js:769
msgid "Match full domain."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:480
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
-msgid "Match geosite."
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:850
msgid "Match outbound."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:517
-#: htdocs/luci-static/resources/view/homeproxy/client.js:775
+#: htdocs/luci-static/resources/view/homeproxy/client.js:515
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid "Match port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:512
-#: htdocs/luci-static/resources/view/homeproxy/client.js:770
+#: htdocs/luci-static/resources/view/homeproxy/client.js:510
+#: htdocs/luci-static/resources/view/homeproxy/client.js:786
msgid "Match port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:522
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:494
+msgid "Match private IP."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:483
+#: htdocs/luci-static/resources/view/homeproxy/client.js:801
+msgid "Match private source IP."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:817
msgid "Match process name."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:526
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:524
+#: htdocs/luci-static/resources/view/homeproxy/client.js:821
msgid "Match process path."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:732
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "Match query type."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
-#: htdocs/luci-static/resources/view/homeproxy/client.js:780
-msgid "Match source GeoIP."
+#: htdocs/luci-static/resources/view/homeproxy/client.js:532
+#: htdocs/luci-static/resources/view/homeproxy/client.js:829
+msgid "Match rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:492
-#: htdocs/luci-static/resources/view/homeproxy/client.js:784
+#: htdocs/luci-static/resources/view/homeproxy/client.js:478
+#: htdocs/luci-static/resources/view/homeproxy/client.js:796
msgid "Match source IP CIDR."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:507
-#: htdocs/luci-static/resources/view/homeproxy/client.js:794
+#: htdocs/luci-static/resources/view/homeproxy/client.js:547
+msgid "Match source IP via rule set"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:812
msgid "Match source port range. Format as START:/:END/START:END."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:502
-#: htdocs/luci-static/resources/view/homeproxy/client.js:789
+#: htdocs/luci-static/resources/view/homeproxy/client.js:500
+#: htdocs/luci-static/resources/view/homeproxy/client.js:807
msgid "Match source port."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:807
+#: htdocs/luci-static/resources/view/homeproxy/client.js:528
+#: htdocs/luci-static/resources/view/homeproxy/client.js:825
msgid "Match user name."
msgstr ""
@@ -1226,8 +1244,8 @@ msgstr ""
msgid "Mixed system
TCP stack and gVisor
UDP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:431
-#: htdocs/luci-static/resources/view/homeproxy/client.js:713
+#: htdocs/luci-static/resources/view/homeproxy/client.js:429
+#: htdocs/luci-static/resources/view/homeproxy/client.js:733
msgid "Mode"
msgstr ""
@@ -1262,8 +1280,8 @@ msgstr ""
msgid "NaïveProxy"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:735
+#: htdocs/luci-static/resources/view/homeproxy/client.js:455
+#: htdocs/luci-static/resources/view/homeproxy/client.js:755
#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid "Network"
msgstr ""
@@ -1296,7 +1314,7 @@ msgstr ""
msgid "No valid share link found."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:355
+#: htdocs/luci-static/resources/view/homeproxy/client.js:353
#: htdocs/luci-static/resources/view/homeproxy/node.js:389
msgid "Node"
msgstr ""
@@ -1309,7 +1327,7 @@ msgstr ""
msgid "Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:653
#: htdocs/luci-static/resources/view/homeproxy/node.js:786
#: htdocs/luci-static/resources/view/homeproxy/node.js:825
#: htdocs/luci-static/resources/view/homeproxy/server.js:304
@@ -1327,7 +1345,7 @@ msgstr ""
msgid "Obfuscate type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:874
+#: htdocs/luci-static/resources/view/homeproxy/client.js:996
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr ""
@@ -1335,14 +1353,15 @@ msgstr ""
msgid "Only proxy mainland China"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
-#: htdocs/luci-static/resources/view/homeproxy/client.js:538
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
+#: htdocs/luci-static/resources/view/homeproxy/client.js:373
+#: htdocs/luci-static/resources/view/homeproxy/client.js:558
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:849
+#: htdocs/luci-static/resources/view/homeproxy/client.js:963
msgid "Outbound"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:356
+#: htdocs/luci-static/resources/view/homeproxy/client.js:354
msgid "Outbound node"
msgstr ""
@@ -1350,7 +1369,7 @@ msgstr ""
msgid "Override address"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:305
#: htdocs/luci-static/resources/view/homeproxy/server.js:720
msgid "Override destination"
msgstr ""
@@ -1359,7 +1378,7 @@ msgstr ""
msgid "Override port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:306
#: htdocs/luci-static/resources/view/homeproxy/server.js:721
msgid "Override the connection destination address with the sniffed domain."
msgstr ""
@@ -1385,6 +1404,7 @@ msgstr ""
msgid "Password"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:934
#: htdocs/luci-static/resources/view/homeproxy/node.js:887
#: htdocs/luci-static/resources/view/homeproxy/node.js:920
#: htdocs/luci-static/resources/view/homeproxy/server.js:365
@@ -1396,7 +1416,7 @@ msgstr ""
msgid "Peer pubkic key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:295
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
@@ -1415,8 +1435,8 @@ msgstr ""
msgid "Plugin opts"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
-#: htdocs/luci-static/resources/view/homeproxy/client.js:769
+#: htdocs/luci-static/resources/view/homeproxy/client.js:509
+#: htdocs/luci-static/resources/view/homeproxy/client.js:785
#: htdocs/luci-static/resources/view/homeproxy/node.js:534
msgid "Port"
msgstr ""
@@ -1425,8 +1445,8 @@ msgstr ""
msgid "Port %s alrealy exists!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:516
-#: htdocs/luci-static/resources/view/homeproxy/client.js:774
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
+#: htdocs/luci-static/resources/view/homeproxy/client.js:790
msgid "Port range"
msgstr ""
@@ -1442,6 +1462,10 @@ msgstr ""
msgid "Prefer IPv6"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:493
+msgid "Private IP"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:726
#: htdocs/luci-static/resources/view/homeproxy/node.js:960
msgid "Private key"
@@ -1451,18 +1475,23 @@ msgstr ""
msgid "Private key passphrase"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:521
-#: htdocs/luci-static/resources/view/homeproxy/client.js:798
+#: htdocs/luci-static/resources/view/homeproxy/client.js:482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:800
+msgid "Private source IP"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
msgid "Process name"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:525
-#: htdocs/luci-static/resources/view/homeproxy/client.js:802
+#: htdocs/luci-static/resources/view/homeproxy/client.js:523
+#: htdocs/luci-static/resources/view/homeproxy/client.js:820
msgid "Process path"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
-#: htdocs/luci-static/resources/view/homeproxy/client.js:740
+#: htdocs/luci-static/resources/view/homeproxy/client.js:448
+#: htdocs/luci-static/resources/view/homeproxy/client.js:760
#: htdocs/luci-static/resources/view/homeproxy/node.js:592
#: htdocs/luci-static/resources/view/homeproxy/node.js:1004
#: htdocs/luci-static/resources/view/homeproxy/server.js:168
@@ -1479,33 +1508,33 @@ msgid ""
"default in v2ray and cannot be disabled)."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:948
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
msgid "Proxy Domain List"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:903
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1025
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1054
msgid "Proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:906
-#: htdocs/luci-static/resources/view/homeproxy/client.js:935
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1028
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1057
msgid "Proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:909
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1031
msgid "Proxy MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
msgid "Proxy all except listed"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:887
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1009
msgid "Proxy filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
msgid "Proxy listed only"
msgstr ""
@@ -1513,8 +1542,8 @@ msgstr ""
msgid "Proxy mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:744
+#: htdocs/luci-static/resources/view/homeproxy/client.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:764
#: htdocs/luci-static/resources/view/homeproxy/node.js:759
#: htdocs/luci-static/resources/view/homeproxy/node.js:829
#: htdocs/luci-static/resources/view/homeproxy/server.js:323
@@ -1540,7 +1569,7 @@ msgstr ""
msgid "QUIC stream receive window"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:731
+#: htdocs/luci-static/resources/view/homeproxy/client.js:751
msgid "Query type"
msgstr ""
@@ -1571,11 +1600,11 @@ msgstr ""
msgid "Random version will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:398
msgid "Recursive outbound detected!"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:672
msgid "Recursive resolver detected!"
msgstr ""
@@ -1599,6 +1628,10 @@ msgstr ""
msgid "Region ID"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+msgid "Remote"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1352
msgid "Remove %s nodes"
msgstr ""
@@ -1611,7 +1644,7 @@ msgstr ""
msgid "Reserved field bytes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
+#: htdocs/luci-static/resources/view/homeproxy/client.js:685
msgid "Resolve strategy"
msgstr ""
@@ -1619,19 +1652,19 @@ msgstr ""
msgid "Resources management"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:857
+#: htdocs/luci-static/resources/view/homeproxy/client.js:891
msgid "Rewrite TTL"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
+#: htdocs/luci-static/resources/view/homeproxy/client.js:892
msgid "Rewrite TTL in DNS responses."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:332
+#: htdocs/luci-static/resources/view/homeproxy/client.js:330
msgid "Routing Nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:408
+#: htdocs/luci-static/resources/view/homeproxy/client.js:406
msgid "Routing Rules"
msgstr ""
@@ -1643,7 +1676,7 @@ msgstr ""
msgid "Routing mode"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:341
+#: htdocs/luci-static/resources/view/homeproxy/client.js:339
msgid "Routing node"
msgstr ""
@@ -1651,16 +1684,27 @@ msgstr ""
msgid "Routing ports"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:417
+#: htdocs/luci-static/resources/view/homeproxy/client.js:415
msgid "Routing rule"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:531
+#: htdocs/luci-static/resources/view/homeproxy/client.js:828
+#: htdocs/luci-static/resources/view/homeproxy/client.js:899
+#: htdocs/luci-static/resources/view/homeproxy/client.js:908
+msgid "Rule set"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+msgid "Rule set URL"
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:519
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:455
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
+#: htdocs/luci-static/resources/view/homeproxy/client.js:766
msgid "STUN"
msgstr ""
@@ -1685,7 +1729,7 @@ msgstr ""
msgid "Save subscriptions settings"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
+#: htdocs/luci-static/resources/view/homeproxy/client.js:867
#: htdocs/luci-static/resources/view/homeproxy/server.js:88
msgid "Server"
msgstr ""
@@ -1721,8 +1765,8 @@ msgstr ""
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:741
+#: htdocs/luci-static/resources/view/homeproxy/client.js:449
+#: htdocs/luci-static/resources/view/homeproxy/client.js:761
msgid ""
"Sniffed protocol, see Sniff for details."
@@ -1749,23 +1793,22 @@ msgstr ""
msgid "Socks5"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-msgid "Source GeoIP"
-msgstr ""
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:491
-#: htdocs/luci-static/resources/view/homeproxy/client.js:783
+#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:795
msgid "Source IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:501
-#: htdocs/luci-static/resources/view/homeproxy/client.js:788
+#: htdocs/luci-static/resources/view/homeproxy/client.js:929
+msgid "Source file"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:806
msgid "Source port"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:506
-#: htdocs/luci-static/resources/view/homeproxy/client.js:793
+#: htdocs/luci-static/resources/view/homeproxy/client.js:504
+#: htdocs/luci-static/resources/view/homeproxy/client.js:811
msgid "Source port range"
msgstr ""
@@ -1833,14 +1876,14 @@ msgstr ""
msgid "System"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:574
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:840
+#: htdocs/luci-static/resources/view/homeproxy/client.js:594
+#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:874
msgid "System DNS"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:458
-#: htdocs/luci-static/resources/view/homeproxy/client.js:736
+#: htdocs/luci-static/resources/view/homeproxy/client.js:456
+#: htdocs/luci-static/resources/view/homeproxy/client.js:756
#: htdocs/luci-static/resources/view/homeproxy/server.js:731
msgid "TCP"
msgstr ""
@@ -1858,8 +1901,8 @@ msgstr ""
msgid "TCP/IP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:453
-#: htdocs/luci-static/resources/view/homeproxy/client.js:743
+#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:763
#: htdocs/luci-static/resources/view/homeproxy/node.js:1057
#: htdocs/luci-static/resources/view/homeproxy/server.js:453
msgid "TLS"
@@ -1880,21 +1923,25 @@ msgstr ""
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:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:648
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:671
+#: htdocs/luci-static/resources/view/homeproxy/client.js:691
msgid "Tag of an outbound for connecting to the dns server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
+msgid "Tag of the outbound to download rule set."
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:868
msgid "Tag of the target dns server."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:539
+#: htdocs/luci-static/resources/view/homeproxy/client.js:559
msgid "Tag of the target outbound."
msgstr ""
@@ -1912,7 +1959,7 @@ msgstr ""
msgid "The ACME CA provider to use."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:564
+#: htdocs/luci-static/resources/view/homeproxy/client.js:584
msgid "The DNS strategy for resolving the domain name in the address."
msgstr ""
@@ -1926,7 +1973,7 @@ msgstr ""
msgid "The QUIC stream-level flow control window for receiving data."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:624
+#: htdocs/luci-static/resources/view/homeproxy/client.js:644
msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode."
msgstr ""
@@ -1942,25 +1989,26 @@ msgid ""
"forward 443 to this port for challenge to succeed."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
+#: htdocs/luci-static/resources/view/homeproxy/client.js:430
msgid ""
"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex || geosite || geoip || "
-"ip_cidr)
&&
(port || port_range)
&&
(source_geoip || source_ip_cidr)
&&
(source_port || "
-"source_port_range)
&&
other fields
."
+"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
+"ip_is_private) &&
(port || port_range)
&&
(source_ip_cidr || source_ip_is_private)
&&
(source_port || source_port_range)
&&
other fields"
+"code>."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:714
+#: htdocs/luci-static/resources/view/homeproxy/client.js:734
msgid ""
"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex || geosite)
&&
(port || port_range)
&&
(source_geoip || "
-"source_ip_cidr)
&&
(source_port || source_port_range)"
-"code> &&
other fields
."
+"domain_suffix || domain_keyword || domain_regex)
&&
(port "
+"|| port_range)
&&
(source_ip_cidr || source_ip_is_private)"
+"code> &&
(source_port || source_port_range)
&&
other fields
."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:680
msgid ""
"The domain strategy for resolving the domain name in the address. dns."
"strategy will be used if empty."
@@ -2004,7 +2052,7 @@ msgstr ""
msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:369
+#: htdocs/luci-static/resources/view/homeproxy/client.js:367
msgid "The network interface to bind to."
msgstr ""
@@ -2024,7 +2072,7 @@ msgstr ""
msgid "The server public key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
@@ -2082,13 +2130,14 @@ msgstr ""
msgid "Tun TCP/UDP"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
#: htdocs/luci-static/resources/view/homeproxy/node.js:509
#: htdocs/luci-static/resources/view/homeproxy/server.js:103
msgid "Type"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:459
-#: htdocs/luci-static/resources/view/homeproxy/client.js:737
+#: htdocs/luci-static/resources/view/homeproxy/client.js:457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:757
#: htdocs/luci-static/resources/view/homeproxy/server.js:732
msgid "UDP"
msgstr ""
@@ -2139,6 +2188,14 @@ msgstr ""
msgid "Update failed."
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:981
+msgid "Update interval"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:982
+msgid "Update interval of rule set.
1d
will be used if empty."
+msgstr ""
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1322
msgid "Update nodes from subscriptions"
msgstr ""
@@ -2180,10 +2237,6 @@ msgstr ""
msgid "Upload..."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:291
-msgid "Upstream archived. Not recommended."
-msgstr ""
-
#: htdocs/luci-static/resources/view/homeproxy/server.js:517
msgid "Use ACME TLS certificate issuer."
msgstr ""
@@ -2204,8 +2257,8 @@ msgid ""
"given."
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:529
-#: htdocs/luci-static/resources/view/homeproxy/client.js:806
+#: htdocs/luci-static/resources/view/homeproxy/client.js:527
+#: htdocs/luci-static/resources/view/homeproxy/client.js:824
msgid "User"
msgstr ""
@@ -2224,7 +2277,7 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1052
msgid "WAN IP Policy"
msgstr ""
@@ -2316,6 +2369,7 @@ msgstr ""
#: htdocs/luci-static/resources/homeproxy.js:248
#: htdocs/luci-static/resources/homeproxy.js:266
#: htdocs/luci-static/resources/view/homeproxy/client.js:176
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
#: htdocs/luci-static/resources/view/homeproxy/node.js:572
#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
#: htdocs/luci-static/resources/view/homeproxy/server.js:159
@@ -2341,11 +2395,11 @@ msgstr ""
msgid "private key"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:236
+#: htdocs/luci-static/resources/view/homeproxy/status.js:226
msgid "sing-box client"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/status.js:239
+#: htdocs/luci-static/resources/view/homeproxy/status.js:229
msgid "sing-box server"
msgstr ""
@@ -2391,6 +2445,8 @@ msgstr ""
msgid "valid IP address"
msgstr ""
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
#: htdocs/luci-static/resources/view/homeproxy/node.js:1280
msgid "valid URL"
@@ -2400,8 +2456,8 @@ msgstr ""
msgid "valid base64 key with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:999
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
msgid "valid hostname"
msgstr ""
diff --git a/homeproxy/po/zh_Hans/homeproxy.po b/homeproxy/po/zh_Hans/homeproxy.po
index bc8afcbd9..dc772c626 100644
--- a/homeproxy/po/zh_Hans/homeproxy.po
+++ b/homeproxy/po/zh_Hans/homeproxy.po
@@ -16,7 +16,12 @@ msgstr "%s 日志"
msgid "%s nodes removed"
msgstr "移除了 %s 个节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:537
+#: htdocs/luci-static/resources/view/homeproxy/client.js:834
+msgid "-- Please choose --"
+msgstr "-- 请选择 --"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:442
msgid "4 or 6. Not limited if empty."
msgstr "4 或 6。留空不限制。"
@@ -34,7 +39,7 @@ msgstr "API 令牌"
msgid "Accept any if empty."
msgstr "留空则不校验。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:865
+#: htdocs/luci-static/resources/view/homeproxy/client.js:987
msgid "Access Control"
msgstr "访问控制"
@@ -46,11 +51,11 @@ msgstr "访问密钥 ID"
msgid "Access key secret"
msgstr "访问密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:699
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
msgid "Add a DNS rule"
msgstr "新增 DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:609
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
msgid "Add a DNS server"
msgstr "新增 DNS 服务器"
@@ -58,28 +63,32 @@ msgstr "新增 DNS 服务器"
msgid "Add a node"
msgstr "新增节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:341
+#: htdocs/luci-static/resources/view/homeproxy/client.js:339
msgid "Add a routing node"
msgstr "新增路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:417
+#: htdocs/luci-static/resources/view/homeproxy/client.js:415
msgid "Add a routing rule"
msgstr "新增路由规则"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:908
+msgid "Add a rule set"
+msgstr "新增规则集"
+
#: htdocs/luci-static/resources/view/homeproxy/server.js:88
msgid "Add a server"
msgstr "新增服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:623
+#: htdocs/luci-static/resources/view/homeproxy/client.js:643
#: htdocs/luci-static/resources/view/homeproxy/node.js:529
msgid "Address"
msgstr "地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:627
+#: htdocs/luci-static/resources/view/homeproxy/client.js:647
msgid "Address resolver"
msgstr "地址解析器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:659
+#: htdocs/luci-static/resources/view/homeproxy/client.js:679
msgid "Address strategy"
msgstr "地址解析策略"
@@ -139,7 +148,7 @@ msgstr "替代 HTTPS 端口"
msgid "An error occurred during updating subscriptions: %s"
msgstr "更新订阅时发生错误:%s"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:821
+#: htdocs/luci-static/resources/view/homeproxy/client.js:855
msgid "Any"
msgstr "任何"
@@ -187,8 +196,8 @@ msgid "Auto update"
msgstr "自动更新"
#: htdocs/luci-static/resources/view/homeproxy/node.js:1255
-msgid "Auto update subscriptions, GeoIP and GeoSite."
-msgstr "自动更新订阅、GeoIP 和 GeoSite。"
+msgid "Auto update subscriptions."
+msgstr "自动更新订阅。"
#: htdocs/luci-static/resources/view/homeproxy/node.js:749
msgid "BBR"
@@ -207,12 +216,16 @@ msgstr "Base64"
msgid "Based on google/gvisor."
msgstr "基于 google/gvisor。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:368
-#: htdocs/luci-static/resources/view/homeproxy/client.js:878
+#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+msgid "Binary file"
+msgstr "二进制文件"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:366
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1000
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:879
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1001
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "绑定出站流量至指定端口。留空自动检测。"
@@ -221,26 +234,26 @@ msgstr "绑定出站流量至指定端口。留空自动检测。"
msgid "Blacklist mode"
msgstr "黑名单模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:319
-#: htdocs/luci-static/resources/view/homeproxy/client.js:545
-#: htdocs/luci-static/resources/view/homeproxy/client.js:823
+#: htdocs/luci-static/resources/view/homeproxy/client.js:317
+#: htdocs/luci-static/resources/view/homeproxy/client.js:565
+#: htdocs/luci-static/resources/view/homeproxy/client.js:857
msgid "Block"
msgstr "封锁"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:575
-#: htdocs/luci-static/resources/view/homeproxy/client.js:841
+#: htdocs/luci-static/resources/view/homeproxy/client.js:595
+#: htdocs/luci-static/resources/view/homeproxy/client.js:875
msgid "Block DNS queries"
msgstr "封锁 DNS 请求"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:447
-#: htdocs/luci-static/resources/view/homeproxy/client.js:460
-#: htdocs/luci-static/resources/view/homeproxy/client.js:728
-#: htdocs/luci-static/resources/view/homeproxy/client.js:738
+#: htdocs/luci-static/resources/view/homeproxy/client.js:445
+#: htdocs/luci-static/resources/view/homeproxy/client.js:458
+#: htdocs/luci-static/resources/view/homeproxy/client.js:748
+#: htdocs/luci-static/resources/view/homeproxy/client.js:758
#: htdocs/luci-static/resources/view/homeproxy/server.js:733
msgid "Both"
msgstr "全部"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:302
+#: htdocs/luci-static/resources/view/homeproxy/client.js:300
msgid "Bypass CN traffic"
msgstr "绕过中国流量"
@@ -248,7 +261,7 @@ msgstr "绕过中国流量"
msgid "Bypass mainland China"
msgstr "大陆白名单"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:303
+#: htdocs/luci-static/resources/view/homeproxy/client.js:301
msgid "Bypass mainland China traffic via firewall rules by default."
msgstr "默认使用防火墙规则绕过中国大陆流量。"
@@ -285,15 +298,15 @@ msgstr "检查更新"
msgid "China DNS server"
msgstr "国内 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:213
+#: htdocs/luci-static/resources/view/homeproxy/status.js:203
msgid "China IPv4 list version"
msgstr "大陆 IPv4 库版本"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:217
+#: htdocs/luci-static/resources/view/homeproxy/status.js:207
msgid "China IPv6 list version"
msgstr "大陆 IPv6 库版本"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:221
+#: htdocs/luci-static/resources/view/homeproxy/status.js:211
msgid "China list version"
msgstr "大陆域名列表版本"
@@ -349,19 +362,19 @@ msgstr "连接检查"
msgid "Custom routing"
msgstr "自定义路由"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:745
+#: htdocs/luci-static/resources/view/homeproxy/client.js:765
msgid "DNS"
msgstr "DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:710
msgid "DNS Rules"
msgstr "DNS 规则"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:600
+#: htdocs/luci-static/resources/view/homeproxy/client.js:620
msgid "DNS Servers"
msgstr "DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:558
+#: htdocs/luci-static/resources/view/homeproxy/client.js:578
msgid "DNS Settings"
msgstr "DNS 设置"
@@ -369,12 +382,12 @@ msgstr "DNS 设置"
msgid "DNS provider"
msgstr "DNS 提供商"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:699
+#: htdocs/luci-static/resources/view/homeproxy/client.js:719
msgid "DNS rule"
msgstr "DNS 规则"
#: htdocs/luci-static/resources/view/homeproxy/client.js:158
-#: htdocs/luci-static/resources/view/homeproxy/client.js:609
+#: htdocs/luci-static/resources/view/homeproxy/client.js:629
msgid "DNS server"
msgstr "DNS 服务器"
@@ -383,31 +396,31 @@ msgid "DNS01 challenge"
msgstr "DNS01 验证"
#: htdocs/luci-static/resources/homeproxy.js:17
-#: htdocs/luci-static/resources/view/homeproxy/client.js:438
-#: htdocs/luci-static/resources/view/homeproxy/client.js:720
+#: htdocs/luci-static/resources/view/homeproxy/client.js:436
+#: htdocs/luci-static/resources/view/homeproxy/client.js:740
#: htdocs/luci-static/resources/view/homeproxy/node.js:757
msgid "Default"
msgstr "默认"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:573
-#: htdocs/luci-static/resources/view/homeproxy/client.js:634
-#: htdocs/luci-static/resources/view/homeproxy/client.js:839
+#: htdocs/luci-static/resources/view/homeproxy/client.js:593
+#: htdocs/luci-static/resources/view/homeproxy/client.js:654
+#: htdocs/luci-static/resources/view/homeproxy/client.js:873
msgid "Default DNS (issued by WAN)"
msgstr "默认 DNS(由 WAN 下发)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:568
+#: htdocs/luci-static/resources/view/homeproxy/client.js:588
msgid "Default DNS server"
msgstr "默认 DNS 服务器"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:563
+#: htdocs/luci-static/resources/view/homeproxy/client.js:583
msgid "Default DNS strategy"
msgstr "默认 DNS 解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:666
+#: htdocs/luci-static/resources/view/homeproxy/client.js:686
msgid "Default domain strategy for resolving the domain names."
msgstr "默认域名解析策略。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:312
+#: htdocs/luci-static/resources/view/homeproxy/client.js:310
msgid "Default outbound"
msgstr "默认出站"
@@ -419,38 +432,39 @@ msgstr "默认包封装格式"
msgid "Default server name"
msgstr "默认服务器名称"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:318
-#: htdocs/luci-static/resources/view/homeproxy/client.js:381
-#: htdocs/luci-static/resources/view/homeproxy/client.js:544
-#: htdocs/luci-static/resources/view/homeproxy/client.js:676
-#: htdocs/luci-static/resources/view/homeproxy/client.js:822
+#: htdocs/luci-static/resources/view/homeproxy/client.js:316
+#: htdocs/luci-static/resources/view/homeproxy/client.js:379
+#: htdocs/luci-static/resources/view/homeproxy/client.js:564
+#: htdocs/luci-static/resources/view/homeproxy/client.js:696
+#: htdocs/luci-static/resources/view/homeproxy/client.js:856
+#: htdocs/luci-static/resources/view/homeproxy/client.js:969
#: htdocs/luci-static/resources/view/homeproxy/node.js:510
msgid "Direct"
msgstr "直连"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:977
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1099
msgid "Direct Domain List"
msgstr "直连域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:894
-#: htdocs/luci-static/resources/view/homeproxy/client.js:939
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1016
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1061
msgid "Direct IPv4 IP-s"
msgstr "直连 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:897
-#: htdocs/luci-static/resources/view/homeproxy/client.js:942
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1019
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1064
msgid "Direct IPv6 IP-s"
msgstr "直连 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:900
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1022
msgid "Direct MAC-s"
msgstr "直连 MAC 地址"
#: htdocs/luci-static/resources/view/homeproxy/client.js:142
#: htdocs/luci-static/resources/view/homeproxy/client.js:150
#: htdocs/luci-static/resources/view/homeproxy/client.js:187
-#: htdocs/luci-static/resources/view/homeproxy/client.js:317
-#: htdocs/luci-static/resources/view/homeproxy/client.js:888
+#: htdocs/luci-static/resources/view/homeproxy/client.js:315
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1010
#: htdocs/luci-static/resources/view/homeproxy/node.js:604
#: htdocs/luci-static/resources/view/homeproxy/node.js:616
#: htdocs/luci-static/resources/view/homeproxy/node.js:1173
@@ -460,7 +474,7 @@ msgstr "直连 MAC 地址"
msgid "Disable"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:586
+#: htdocs/luci-static/resources/view/homeproxy/client.js:606
msgid "Disable DNS cache"
msgstr "禁用 DNS 缓存"
@@ -477,15 +491,15 @@ msgstr "禁用路径 MTU 探测"
msgid "Disable TLS ALPN challenge"
msgstr "禁用 TLS ALPN 认证"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:853
+#: htdocs/luci-static/resources/view/homeproxy/client.js:887
msgid "Disable cache and save cache in this query."
msgstr "在本次查询中禁用缓存。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:589
+#: htdocs/luci-static/resources/view/homeproxy/client.js:609
msgid "Disable cache expire"
msgstr "缓存永不过期"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:852
+#: htdocs/luci-static/resources/view/homeproxy/client.js:886
msgid "Disable dns cache"
msgstr "禁用 DNS 缓存"
@@ -502,28 +516,28 @@ msgstr ""
"禁用路径 MTU 发现 (RFC 8899)。 数据包的大小最多为 1252 (IPv4) / 1232 (IPv6) "
"字节。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:471
-#: htdocs/luci-static/resources/view/homeproxy/client.js:757
+#: htdocs/luci-static/resources/view/homeproxy/client.js:469
+#: htdocs/luci-static/resources/view/homeproxy/client.js:777
msgid "Domain keyword"
msgstr "域名关键词"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:462
-#: htdocs/luci-static/resources/view/homeproxy/client.js:748
+#: htdocs/luci-static/resources/view/homeproxy/client.js:460
+#: htdocs/luci-static/resources/view/homeproxy/client.js:768
msgid "Domain name"
msgstr "域名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:475
-#: htdocs/luci-static/resources/view/homeproxy/client.js:761
+#: htdocs/luci-static/resources/view/homeproxy/client.js:473
+#: htdocs/luci-static/resources/view/homeproxy/client.js:781
msgid "Domain regex"
msgstr "域名正则表达式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:362
+#: htdocs/luci-static/resources/view/homeproxy/client.js:360
#: htdocs/luci-static/resources/view/homeproxy/server.js:724
msgid "Domain strategy"
msgstr "域名解析策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:467
-#: htdocs/luci-static/resources/view/homeproxy/client.js:753
+#: htdocs/luci-static/resources/view/homeproxy/client.js:465
+#: htdocs/luci-static/resources/view/homeproxy/client.js:773
msgid "Domain suffix"
msgstr "域名后缀"
@@ -600,10 +614,11 @@ msgstr "修改节点"
msgid "Email"
msgstr "Email"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:350
-#: htdocs/luci-static/resources/view/homeproxy/client.js:426
-#: htdocs/luci-static/resources/view/homeproxy/client.js:618
-#: htdocs/luci-static/resources/view/homeproxy/client.js:708
+#: htdocs/luci-static/resources/view/homeproxy/client.js:348
+#: htdocs/luci-static/resources/view/homeproxy/client.js:424
+#: htdocs/luci-static/resources/view/homeproxy/client.js:638
+#: htdocs/luci-static/resources/view/homeproxy/client.js:728
+#: htdocs/luci-static/resources/view/homeproxy/client.js:917
#: htdocs/luci-static/resources/view/homeproxy/server.js:75
#: htdocs/luci-static/resources/view/homeproxy/server.js:98
msgid "Enable"
@@ -651,7 +666,7 @@ msgstr "启用 TCP Brutal 拥塞控制算法。"
msgid "Enable UDP fragmentation."
msgstr "启用 UDP 分片。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:296
+#: htdocs/luci-static/resources/view/homeproxy/client.js:294
msgid "Enable endpoint-independent NAT"
msgstr "启用端点独立 NAT"
@@ -687,8 +702,11 @@ msgstr "加密方式"
#: htdocs/luci-static/resources/view/homeproxy/client.js:200
#: htdocs/luci-static/resources/view/homeproxy/client.js:229
#: htdocs/luci-static/resources/view/homeproxy/client.js:234
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:999
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
#: htdocs/luci-static/resources/view/homeproxy/node.js:465
#: htdocs/luci-static/resources/view/homeproxy/node.js:572
#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
@@ -729,11 +747,15 @@ msgstr "过滤节点"
msgid "Flow"
msgstr "流控"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:928
+msgid "Format"
+msgstr "格式"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:893
msgid "GET"
msgstr "GET"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:225
+#: htdocs/luci-static/resources/view/homeproxy/status.js:215
msgid "GFW list version"
msgstr "GFW 域名列表版本"
@@ -741,15 +763,15 @@ msgstr "GFW 域名列表版本"
msgid "GFWList"
msgstr "GFWList"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:912
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1034
msgid "Gaming mode IPv4 IP-s"
msgstr "游戏模式 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:914
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1036
msgid "Gaming mode IPv6 IP-s"
msgstr "游戏模式 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:917
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1039
msgid "Gaming mode MAC-s"
msgstr "游戏模式 MAC 地址"
@@ -758,23 +780,6 @@ msgstr "游戏模式 MAC 地址"
msgid "Generic segmentation offload"
msgstr "通用分段卸载(GSO)"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:487
-msgid "GeoIP"
-msgstr "GeoIP"
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:204
-msgid "GeoIP version"
-msgstr "GeoIP 版本"
-
-#: htdocs/luci-static/resources/view/homeproxy/status.js:208
-msgid "GeoSite version"
-msgstr "GeoSite 版本"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:479
-#: htdocs/luci-static/resources/view/homeproxy/client.js:765
-msgid "Geosite"
-msgstr "Geosite"
-
#: htdocs/luci-static/resources/view/homeproxy/client.js:212
msgid "Global"
msgstr "全局"
@@ -783,15 +788,15 @@ msgstr "全局"
msgid "Global padding"
msgstr "全局填充"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:919
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1041
msgid "Global proxy IPv4 IP-s"
msgstr "全局代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:922
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1044
msgid "Global proxy IPv6 IP-s"
msgstr "全局代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:925
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1047
msgid "Global proxy MAC-s"
msgstr "全局代理 MAC 地址"
@@ -811,8 +816,8 @@ msgstr "谷歌公共 DNS(8.8.8.8)"
msgid "Grant access to homeproxy configuration"
msgstr "授予 homeproxy 访问 UCI 配置的权限"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:452
-#: htdocs/luci-static/resources/view/homeproxy/client.js:742
+#: htdocs/luci-static/resources/view/homeproxy/client.js:450
+#: htdocs/luci-static/resources/view/homeproxy/client.js:762
#: htdocs/luci-static/resources/view/homeproxy/node.js:511
#: htdocs/luci-static/resources/view/homeproxy/node.js:827
#: htdocs/luci-static/resources/view/homeproxy/server.js:104
@@ -847,7 +852,7 @@ msgstr "心跳间隔"
#: htdocs/luci-static/resources/view/homeproxy/client.js:55
#: htdocs/luci-static/resources/view/homeproxy/client.js:57
#: htdocs/luci-static/resources/view/homeproxy/client.js:109
-#: htdocs/luci-static/resources/view/homeproxy/status.js:233
+#: htdocs/luci-static/resources/view/homeproxy/status.js:223
#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3
msgid "HomeProxy"
msgstr "HomeProxy"
@@ -891,17 +896,17 @@ msgstr "Hysteria"
msgid "Hysteria2"
msgstr "Hysteria2"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:496
+#: htdocs/luci-static/resources/view/homeproxy/client.js:488
msgid "IP CIDR"
msgstr "IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:443
-#: htdocs/luci-static/resources/view/homeproxy/client.js:725
+#: htdocs/luci-static/resources/view/homeproxy/client.js:441
+#: htdocs/luci-static/resources/view/homeproxy/client.js:745
msgid "IP version"
msgstr "IP 版本"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:445
-#: htdocs/luci-static/resources/view/homeproxy/client.js:726
+#: htdocs/luci-static/resources/view/homeproxy/client.js:443
+#: htdocs/luci-static/resources/view/homeproxy/client.js:746
msgid "IPv4"
msgstr "IPv4"
@@ -909,8 +914,8 @@ msgstr "IPv4"
msgid "IPv4 only"
msgstr "仅 IPv4"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:446
-#: htdocs/luci-static/resources/view/homeproxy/client.js:727
+#: htdocs/luci-static/resources/view/homeproxy/client.js:444
+#: htdocs/luci-static/resources/view/homeproxy/client.js:747
msgid "IPv6"
msgstr "IPv6"
@@ -938,7 +943,7 @@ msgid ""
"If set, the requested domain name will be resolved to IP before routing."
msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:363
+#: htdocs/luci-static/resources/view/homeproxy/client.js:361
msgid ""
"If set, the server domain name will be resolved to IP before connecting.
dns.strategy will be used if empty."
@@ -974,11 +979,11 @@ msgstr "导入"
msgid "Import share links"
msgstr "导入分享链接"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:593
+#: htdocs/luci-static/resources/view/homeproxy/client.js:613
msgid "Independent cache per server"
msgstr "独立缓存"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:871
+#: htdocs/luci-static/resources/view/homeproxy/client.js:993
msgid "Interface Control"
msgstr "接口控制"
@@ -989,13 +994,13 @@ msgid ""
"seconds)."
msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:533
-#: htdocs/luci-static/resources/view/homeproxy/client.js:810
+#: htdocs/luci-static/resources/view/homeproxy/client.js:553
+#: htdocs/luci-static/resources/view/homeproxy/client.js:844
msgid "Invert"
msgstr "反转"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:534
-#: htdocs/luci-static/resources/view/homeproxy/client.js:811
+#: htdocs/luci-static/resources/view/homeproxy/client.js:554
+#: htdocs/luci-static/resources/view/homeproxy/client.js:845
msgid "Invert match result."
msgstr "反转匹配结果"
@@ -1003,14 +1008,15 @@ msgstr "反转匹配结果"
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:885
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1007
msgid "LAN IP Policy"
msgstr "LAN IP 策略"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:345
-#: htdocs/luci-static/resources/view/homeproxy/client.js:421
-#: htdocs/luci-static/resources/view/homeproxy/client.js:613
-#: htdocs/luci-static/resources/view/homeproxy/client.js:703
+#: htdocs/luci-static/resources/view/homeproxy/client.js:343
+#: htdocs/luci-static/resources/view/homeproxy/client.js:419
+#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:723
+#: htdocs/luci-static/resources/view/homeproxy/client.js:912
#: htdocs/luci-static/resources/view/homeproxy/node.js:504
#: htdocs/luci-static/resources/view/homeproxy/server.js:92
msgid "Label"
@@ -1025,7 +1031,7 @@ msgstr ""
"提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > "
"1。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:293
+#: htdocs/luci-static/resources/view/homeproxy/client.js:291
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
@@ -1047,7 +1053,7 @@ msgstr "支持的应用层协议协商列表,按顺序排列。"
msgid "Listen address"
msgstr "监听地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:873
+#: htdocs/luci-static/resources/view/homeproxy/client.js:995
msgid "Listen interfaces"
msgstr "监听接口"
@@ -1059,6 +1065,10 @@ msgstr "监听端口"
msgid "Loading"
msgstr "加载中"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:923
+msgid "Local"
+msgstr "本地"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:953
msgid "Local address"
msgstr "本地地址"
@@ -1083,7 +1093,11 @@ msgstr "主 UDP 节点"
msgid "Main node"
msgstr "主节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:594
+#: htdocs/luci-static/resources/view/homeproxy/client.js:548
+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:614
msgid ""
"Make each DNS server's cache independent for special purposes. If enabled, "
"will slightly degrade performance."
@@ -1093,89 +1107,93 @@ msgstr "独立缓存每个 DNS 服务器的结果以供特殊用途。启用后
msgid "Masquerade"
msgstr "伪装"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:488
-msgid "Match GeoIP."
-msgstr "匹配 GeoIP。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:497
+#: htdocs/luci-static/resources/view/homeproxy/client.js:489
msgid "Match IP CIDR."
msgstr "匹配 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:468
-#: htdocs/luci-static/resources/view/homeproxy/client.js:754
+#: htdocs/luci-static/resources/view/homeproxy/client.js:466
+#: htdocs/luci-static/resources/view/homeproxy/client.js:774
msgid "Match domain suffix."
msgstr "匹配域名后缀。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:472
-#: htdocs/luci-static/resources/view/homeproxy/client.js:758
+#: htdocs/luci-static/resources/view/homeproxy/client.js:470
+#: htdocs/luci-static/resources/view/homeproxy/client.js:778
msgid "Match domain using keyword."
msgstr "使用关键词匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:476
-#: htdocs/luci-static/resources/view/homeproxy/client.js:762
+#: htdocs/luci-static/resources/view/homeproxy/client.js:474
+#: htdocs/luci-static/resources/view/homeproxy/client.js:782
msgid "Match domain using regular expression."
msgstr "使用正则表达式匹配域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:463
-#: htdocs/luci-static/resources/view/homeproxy/client.js:749
+#: htdocs/luci-static/resources/view/homeproxy/client.js:461
+#: htdocs/luci-static/resources/view/homeproxy/client.js:769
msgid "Match full domain."
msgstr "匹配完整域名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:480
-#: htdocs/luci-static/resources/view/homeproxy/client.js:766
-msgid "Match geosite."
-msgstr "匹配 geosite。"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:816
+#: htdocs/luci-static/resources/view/homeproxy/client.js:850
msgid "Match outbound."
msgstr "匹配出站。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:517
-#: htdocs/luci-static/resources/view/homeproxy/client.js:775
+#: htdocs/luci-static/resources/view/homeproxy/client.js:515
+#: htdocs/luci-static/resources/view/homeproxy/client.js:791
msgid "Match port range. Format as START:/:END/START:END."
msgstr "匹配端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:512
-#: htdocs/luci-static/resources/view/homeproxy/client.js:770
+#: htdocs/luci-static/resources/view/homeproxy/client.js:510
+#: htdocs/luci-static/resources/view/homeproxy/client.js:786
msgid "Match port."
msgstr "匹配端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:522
-#: htdocs/luci-static/resources/view/homeproxy/client.js:799
+#: htdocs/luci-static/resources/view/homeproxy/client.js:494
+msgid "Match private IP."
+msgstr "匹配私有 IP。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:483
+#: htdocs/luci-static/resources/view/homeproxy/client.js:801
+msgid "Match private source IP."
+msgstr "匹配私有源 IP。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:520
+#: htdocs/luci-static/resources/view/homeproxy/client.js:817
msgid "Match process name."
msgstr "匹配进程名。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:526
-#: htdocs/luci-static/resources/view/homeproxy/client.js:803
+#: htdocs/luci-static/resources/view/homeproxy/client.js:524
+#: htdocs/luci-static/resources/view/homeproxy/client.js:821
msgid "Match process path."
msgstr "匹配进程路径。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:732
+#: htdocs/luci-static/resources/view/homeproxy/client.js:752
msgid "Match query type."
msgstr "匹配请求类型。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:484
-#: htdocs/luci-static/resources/view/homeproxy/client.js:780
-msgid "Match source GeoIP."
-msgstr "匹配源 GeoIP。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:532
+#: htdocs/luci-static/resources/view/homeproxy/client.js:829
+msgid "Match rule set."
+msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:492
-#: htdocs/luci-static/resources/view/homeproxy/client.js:784
+#: htdocs/luci-static/resources/view/homeproxy/client.js:478
+#: htdocs/luci-static/resources/view/homeproxy/client.js:796
msgid "Match source IP CIDR."
msgstr "匹配源 IP CIDR。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:507
-#: htdocs/luci-static/resources/view/homeproxy/client.js:794
+#: htdocs/luci-static/resources/view/homeproxy/client.js:547
+msgid "Match source IP via rule set"
+msgstr "通过规则集匹配源 IP"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:505
+#: htdocs/luci-static/resources/view/homeproxy/client.js:812
msgid "Match source port range. Format as START:/:END/START:END."
msgstr "匹配源端口范围。格式为 START:/:END/START:END。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:502
-#: htdocs/luci-static/resources/view/homeproxy/client.js:789
+#: htdocs/luci-static/resources/view/homeproxy/client.js:500
+#: htdocs/luci-static/resources/view/homeproxy/client.js:807
msgid "Match source port."
msgstr "匹配源端口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:530
-#: htdocs/luci-static/resources/view/homeproxy/client.js:807
+#: htdocs/luci-static/resources/view/homeproxy/client.js:528
+#: htdocs/luci-static/resources/view/homeproxy/client.js:825
msgid "Match user name."
msgstr "匹配用户名。"
@@ -1252,8 +1270,8 @@ msgstr "混合"
msgid "Mixed system
TCP stack and gVisor
UDP stack."
msgstr "混合系统
TCP 栈和 gVisor
UDP 栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:431
-#: htdocs/luci-static/resources/view/homeproxy/client.js:713
+#: htdocs/luci-static/resources/view/homeproxy/client.js:429
+#: htdocs/luci-static/resources/view/homeproxy/client.js:733
msgid "Mode"
msgstr "模式"
@@ -1288,8 +1306,8 @@ msgstr "原生"
msgid "NaïveProxy"
msgstr "NaïveProxy"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:457
-#: htdocs/luci-static/resources/view/homeproxy/client.js:735
+#: htdocs/luci-static/resources/view/homeproxy/client.js:455
+#: htdocs/luci-static/resources/view/homeproxy/client.js:755
#: htdocs/luci-static/resources/view/homeproxy/server.js:730
msgid "Network"
msgstr "网络"
@@ -1322,7 +1340,7 @@ msgstr "无订阅节点"
msgid "No valid share link found."
msgstr "找不到有效分享链接。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:355
+#: htdocs/luci-static/resources/view/homeproxy/client.js:353
#: htdocs/luci-static/resources/view/homeproxy/node.js:389
msgid "Node"
msgstr "节点"
@@ -1335,7 +1353,7 @@ msgstr "节点设置"
msgid "Nodes"
msgstr "节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:633
+#: htdocs/luci-static/resources/view/homeproxy/client.js:653
#: htdocs/luci-static/resources/view/homeproxy/node.js:786
#: htdocs/luci-static/resources/view/homeproxy/node.js:825
#: htdocs/luci-static/resources/view/homeproxy/server.js:304
@@ -1353,7 +1371,7 @@ msgstr "混淆密码"
msgid "Obfuscate type"
msgstr "混淆类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:874
+#: htdocs/luci-static/resources/view/homeproxy/client.js:996
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只处理来自指定接口的流量。留空表示全部。"
@@ -1361,14 +1379,15 @@ msgstr "只处理来自指定接口的流量。留空表示全部。"
msgid "Only proxy mainland China"
msgstr "仅代理中国大陆"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:375
-#: htdocs/luci-static/resources/view/homeproxy/client.js:538
-#: htdocs/luci-static/resources/view/homeproxy/client.js:670
-#: htdocs/luci-static/resources/view/homeproxy/client.js:815
+#: htdocs/luci-static/resources/view/homeproxy/client.js:373
+#: htdocs/luci-static/resources/view/homeproxy/client.js:558
+#: htdocs/luci-static/resources/view/homeproxy/client.js:690
+#: htdocs/luci-static/resources/view/homeproxy/client.js:849
+#: htdocs/luci-static/resources/view/homeproxy/client.js:963
msgid "Outbound"
msgstr "出站"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:356
+#: htdocs/luci-static/resources/view/homeproxy/client.js:354
msgid "Outbound node"
msgstr "出站节点"
@@ -1376,7 +1395,7 @@ msgstr "出站节点"
msgid "Override address"
msgstr "覆盖地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:307
+#: htdocs/luci-static/resources/view/homeproxy/client.js:305
#: htdocs/luci-static/resources/view/homeproxy/server.js:720
msgid "Override destination"
msgstr "覆盖目标地址"
@@ -1385,7 +1404,7 @@ msgstr "覆盖目标地址"
msgid "Override port"
msgstr "覆盖端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:308
+#: htdocs/luci-static/resources/view/homeproxy/client.js:306
#: htdocs/luci-static/resources/view/homeproxy/server.js:721
msgid "Override the connection destination address with the sniffed domain."
msgstr "使用嗅探到的域名覆盖连接目标。"
@@ -1411,6 +1430,7 @@ msgstr "数据包编码"
msgid "Password"
msgstr "密码"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:934
#: htdocs/luci-static/resources/view/homeproxy/node.js:887
#: htdocs/luci-static/resources/view/homeproxy/node.js:920
#: htdocs/luci-static/resources/view/homeproxy/server.js:365
@@ -1422,7 +1442,7 @@ msgstr "路径"
msgid "Peer pubkic key"
msgstr "对端公钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:297
+#: htdocs/luci-static/resources/view/homeproxy/client.js:295
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
@@ -1441,8 +1461,8 @@ msgstr "插件"
msgid "Plugin opts"
msgstr "插件参数"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:511
-#: htdocs/luci-static/resources/view/homeproxy/client.js:769
+#: htdocs/luci-static/resources/view/homeproxy/client.js:509
+#: htdocs/luci-static/resources/view/homeproxy/client.js:785
#: htdocs/luci-static/resources/view/homeproxy/node.js:534
msgid "Port"
msgstr "端口"
@@ -1451,8 +1471,8 @@ msgstr "端口"
msgid "Port %s alrealy exists!"
msgstr "端口 %s 已存在!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:516
-#: htdocs/luci-static/resources/view/homeproxy/client.js:774
+#: htdocs/luci-static/resources/view/homeproxy/client.js:514
+#: htdocs/luci-static/resources/view/homeproxy/client.js:790
msgid "Port range"
msgstr "端口范围"
@@ -1468,6 +1488,10 @@ msgstr "优先 IPv4"
msgid "Prefer IPv6"
msgstr "优先 IPv6"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:493
+msgid "Private IP"
+msgstr "私有 IP"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:726
#: htdocs/luci-static/resources/view/homeproxy/node.js:960
msgid "Private key"
@@ -1477,18 +1501,23 @@ msgstr "私钥"
msgid "Private key passphrase"
msgstr "私钥指纹"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:521
-#: htdocs/luci-static/resources/view/homeproxy/client.js:798
+#: htdocs/luci-static/resources/view/homeproxy/client.js:482
+#: htdocs/luci-static/resources/view/homeproxy/client.js:800
+msgid "Private source IP"
+msgstr "私有源 IP"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:519
+#: htdocs/luci-static/resources/view/homeproxy/client.js:816
msgid "Process name"
msgstr "进程名"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:525
-#: htdocs/luci-static/resources/view/homeproxy/client.js:802
+#: htdocs/luci-static/resources/view/homeproxy/client.js:523
+#: htdocs/luci-static/resources/view/homeproxy/client.js:820
msgid "Process path"
msgstr "进程路径"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:450
-#: htdocs/luci-static/resources/view/homeproxy/client.js:740
+#: htdocs/luci-static/resources/view/homeproxy/client.js:448
+#: htdocs/luci-static/resources/view/homeproxy/client.js:760
#: htdocs/luci-static/resources/view/homeproxy/node.js:592
#: htdocs/luci-static/resources/view/homeproxy/node.js:1004
#: htdocs/luci-static/resources/view/homeproxy/server.js:168
@@ -1505,33 +1534,33 @@ msgid ""
"default in v2ray and cannot be disabled)."
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:948
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1070
msgid "Proxy Domain List"
msgstr "代理域名列表"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:903
-#: htdocs/luci-static/resources/view/homeproxy/client.js:932
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1025
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1054
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:906
-#: htdocs/luci-static/resources/view/homeproxy/client.js:935
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1028
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1057
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:909
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1031
msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:890
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1012
msgid "Proxy all except listed"
msgstr "仅允许列表外"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:887
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1009
msgid "Proxy filter mode"
msgstr "代理过滤模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:889
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1011
msgid "Proxy listed only"
msgstr "仅允许列表内"
@@ -1539,8 +1568,8 @@ msgstr "仅允许列表内"
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:454
-#: htdocs/luci-static/resources/view/homeproxy/client.js:744
+#: htdocs/luci-static/resources/view/homeproxy/client.js:452
+#: htdocs/luci-static/resources/view/homeproxy/client.js:764
#: htdocs/luci-static/resources/view/homeproxy/node.js:759
#: htdocs/luci-static/resources/view/homeproxy/node.js:829
#: htdocs/luci-static/resources/view/homeproxy/server.js:323
@@ -1566,7 +1595,7 @@ msgstr "QUIC 最大双向并发流"
msgid "QUIC stream receive window"
msgstr "QUIC 流接收窗口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:731
+#: htdocs/luci-static/resources/view/homeproxy/client.js:751
msgid "Query type"
msgstr "请求类型"
@@ -1597,11 +1626,11 @@ msgstr "运行中"
msgid "Random version will be used if empty."
msgstr "如留空,则使用随机版本。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:400
+#: htdocs/luci-static/resources/view/homeproxy/client.js:398
msgid "Recursive outbound detected!"
msgstr "检测到递归出站!"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:652
+#: htdocs/luci-static/resources/view/homeproxy/client.js:672
msgid "Recursive resolver detected!"
msgstr "检测到递归解析器!"
@@ -1625,6 +1654,10 @@ msgstr "每 %s 秒刷新。"
msgid "Region ID"
msgstr "区域 ID"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:924
+msgid "Remote"
+msgstr "远程"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1352
msgid "Remove %s nodes"
msgstr "移除 %s 个节点"
@@ -1637,7 +1670,7 @@ msgstr "移除所有订阅节点"
msgid "Reserved field bytes"
msgstr "保留字段字节"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:665
+#: htdocs/luci-static/resources/view/homeproxy/client.js:685
msgid "Resolve strategy"
msgstr "解析策略"
@@ -1645,19 +1678,19 @@ msgstr "解析策略"
msgid "Resources management"
msgstr "资源管理"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:857
+#: htdocs/luci-static/resources/view/homeproxy/client.js:891
msgid "Rewrite TTL"
msgstr "重写 TTL"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:858
+#: htdocs/luci-static/resources/view/homeproxy/client.js:892
msgid "Rewrite TTL in DNS responses."
msgstr "在 DNS 响应中重写 TTL。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:332
+#: htdocs/luci-static/resources/view/homeproxy/client.js:330
msgid "Routing Nodes"
msgstr "路由节点"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:408
+#: htdocs/luci-static/resources/view/homeproxy/client.js:406
msgid "Routing Rules"
msgstr "路由规则"
@@ -1669,7 +1702,7 @@ msgstr "路由设置"
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:341
+#: htdocs/luci-static/resources/view/homeproxy/client.js:339
msgid "Routing node"
msgstr "路由节点"
@@ -1677,16 +1710,27 @@ msgstr "路由节点"
msgid "Routing ports"
msgstr "路由端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:417
+#: htdocs/luci-static/resources/view/homeproxy/client.js:415
msgid "Routing rule"
msgstr "路由规则"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:531
+#: htdocs/luci-static/resources/view/homeproxy/client.js:828
+#: htdocs/luci-static/resources/view/homeproxy/client.js:899
+#: htdocs/luci-static/resources/view/homeproxy/client.js:908
+msgid "Rule set"
+msgstr "规则集"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:941
+msgid "Rule set URL"
+msgstr "规则集 URL"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:519
msgid "SSH"
msgstr "SSH"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:455
-#: htdocs/luci-static/resources/view/homeproxy/client.js:746
+#: htdocs/luci-static/resources/view/homeproxy/client.js:453
+#: htdocs/luci-static/resources/view/homeproxy/client.js:766
msgid "STUN"
msgstr "STUN"
@@ -1711,7 +1755,7 @@ msgstr "保存当前设置"
msgid "Save subscriptions settings"
msgstr "保存订阅设置"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:833
+#: htdocs/luci-static/resources/view/homeproxy/client.js:867
#: htdocs/luci-static/resources/view/homeproxy/server.js:88
msgid "Server"
msgstr "服务器"
@@ -1747,8 +1791,8 @@ msgstr "ShadowTLS 版本"
msgid "Shadowsocks"
msgstr "Shadowsocks"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:451
-#: htdocs/luci-static/resources/view/homeproxy/client.js:741
+#: htdocs/luci-static/resources/view/homeproxy/client.js:449
+#: htdocs/luci-static/resources/view/homeproxy/client.js:761
msgid ""
"Sniffed protocol, see Sniff for details."
@@ -1777,23 +1821,22 @@ msgstr "Socks4A"
msgid "Socks5"
msgstr "Socks5"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:483
-#: htdocs/luci-static/resources/view/homeproxy/client.js:779
-msgid "Source GeoIP"
-msgstr "源 GeoIP"
-
-#: htdocs/luci-static/resources/view/homeproxy/client.js:491
-#: htdocs/luci-static/resources/view/homeproxy/client.js:783
+#: htdocs/luci-static/resources/view/homeproxy/client.js:477
+#: htdocs/luci-static/resources/view/homeproxy/client.js:795
msgid "Source IP CIDR"
msgstr "源 IP CIDR"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:501
-#: htdocs/luci-static/resources/view/homeproxy/client.js:788
+#: htdocs/luci-static/resources/view/homeproxy/client.js:929
+msgid "Source file"
+msgstr "源文件"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:499
+#: htdocs/luci-static/resources/view/homeproxy/client.js:806
msgid "Source port"
msgstr "源端口"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:506
-#: htdocs/luci-static/resources/view/homeproxy/client.js:793
+#: htdocs/luci-static/resources/view/homeproxy/client.js:504
+#: htdocs/luci-static/resources/view/homeproxy/client.js:811
msgid "Source port range"
msgstr "源端口范围"
@@ -1870,14 +1913,14 @@ msgstr ""
msgid "System"
msgstr "系统"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:574
-#: htdocs/luci-static/resources/view/homeproxy/client.js:635
-#: htdocs/luci-static/resources/view/homeproxy/client.js:840
+#: htdocs/luci-static/resources/view/homeproxy/client.js:594
+#: htdocs/luci-static/resources/view/homeproxy/client.js:655
+#: htdocs/luci-static/resources/view/homeproxy/client.js:874
msgid "System DNS"
msgstr "系统 DNS"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:458
-#: htdocs/luci-static/resources/view/homeproxy/client.js:736
+#: htdocs/luci-static/resources/view/homeproxy/client.js:456
+#: htdocs/luci-static/resources/view/homeproxy/client.js:756
#: htdocs/luci-static/resources/view/homeproxy/server.js:731
msgid "TCP"
msgstr "TCP"
@@ -1895,8 +1938,8 @@ msgstr "TCP/IP 协议栈"
msgid "TCP/IP stack."
msgstr "TCP/IP 协议栈。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:453
-#: htdocs/luci-static/resources/view/homeproxy/client.js:743
+#: htdocs/luci-static/resources/view/homeproxy/client.js:451
+#: htdocs/luci-static/resources/view/homeproxy/client.js:763
#: htdocs/luci-static/resources/view/homeproxy/node.js:1057
#: htdocs/luci-static/resources/view/homeproxy/server.js:453
msgid "TLS"
@@ -1917,7 +1960,7 @@ msgstr "TLS SNI"
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:628
+#: htdocs/luci-static/resources/view/homeproxy/client.js:648
msgid ""
"Tag of a another server to resolve the domain name in the address. Required "
"if address contains domain."
@@ -1925,15 +1968,19 @@ msgstr ""
"用于解析本 DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名"
"则必须。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:671
+#: htdocs/luci-static/resources/view/homeproxy/client.js:691
msgid "Tag of an outbound for connecting to the dns server."
msgstr "用于连接到 DNS 服务器的出站标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:834
+#: htdocs/luci-static/resources/view/homeproxy/client.js:964
+msgid "Tag of the outbound to download rule set."
+msgstr "用于下载规则集的出站标签。"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:868
msgid "Tag of the target dns server."
msgstr "目标 DNS 服务器标签。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:539
+#: htdocs/luci-static/resources/view/homeproxy/client.js:559
msgid "Tag of the target outbound."
msgstr "目标出站标签。"
@@ -1951,7 +1998,7 @@ msgstr "腾讯公共 DNS(119.29.29.29)"
msgid "The ACME CA provider to use."
msgstr "使用的 ACME CA 颁发机构。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:564
+#: htdocs/luci-static/resources/view/homeproxy/client.js:584
msgid "The DNS strategy for resolving the domain name in the address."
msgstr "解析域名的默认策略。"
@@ -1965,7 +2012,7 @@ msgstr "用于接收数据的 QUIC 连接级流控制窗口。"
msgid "The QUIC stream-level flow control window for receiving data."
msgstr "用于接收数据的 QUIC 流级流控制窗口。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:624
+#: htdocs/luci-static/resources/view/homeproxy/client.js:644
msgid "The address of the dns server. Support UDP, TCP, DoT, DoH and RCode."
msgstr "DNS 服务器的地址。支持 UDP、TCP、DoT、DoH 和 RCode。"
@@ -1984,35 +2031,36 @@ msgid ""
msgstr ""
"用于 ACME TLS-ALPN 质询的备用端口; 系统必须将 443 转发到此端口以使质询成功。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:432
+#: htdocs/luci-static/resources/view/homeproxy/client.js:430
msgid ""
"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex || geosite || geoip || "
-"ip_cidr)
&&
(port || port_range)
&&
(source_geoip || source_ip_cidr)
&&
(source_port || "
-"source_port_range)
&&
other fields
."
+"domain_suffix || domain_keyword || domain_regex || ip_cidr || "
+"ip_is_private)
&&
(port || port_range)
&&
(source_ip_cidr || source_ip_is_private)
&&
(source_port || source_port_range)
&&
other fields"
+"code>."
msgstr ""
"默认规则使用以下匹配逻辑:
(domain || domain_suffix || "
-"domain_keyword || domain_regex || geosite || geoip || ip_cidr)
&&
(port || port_range)
&&
(source_geoip || "
-"source_ip_cidr)
&&
(source_port || source_port_range)"
-"code> &&
其他字段
."
+"domain_keyword || domain_regex || ip_cidr || ip_is_private)
&&
(port || port_range)
&&
(source_ip_cidr || "
+"source_ip_is_private)
&&
(source_port || "
+"source_port_range)
&&
other fields
。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:714
+#: htdocs/luci-static/resources/view/homeproxy/client.js:734
msgid ""
"The default rule uses the following matching logic:
(domain || "
-"domain_suffix || domain_keyword || domain_regex || geosite)
&&
(port || port_range)
&&
(source_geoip || "
-"source_ip_cidr)
&&
(source_port || source_port_range)"
-"code> &&
other fields
."
+"domain_suffix || domain_keyword || domain_regex)
&&
(port "
+"|| port_range)
&&
(source_ip_cidr || source_ip_is_private)"
+"code> &&
(source_port || source_port_range)
&&
other fields
."
msgstr ""
"默认规则使用以下匹配逻辑:
(domain || domain_suffix || "
-"domain_keyword || domain_regex || geosite)
&&
(port || "
-"port_range)
&&
(source_geoip || source_ip_cidr)
"
-"&&
(source_port || source_port_range)
&&
other "
-"fields
."
+"domain_keyword || domain_regex)
&&
(port || port_range)"
+"code> &&
(source_ip_cidr || source_ip_is_private)
&&
(source_port || source_port_range)
&&
other fields"
+"code>。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:660
+#: htdocs/luci-static/resources/view/homeproxy/client.js:680
msgid ""
"The domain strategy for resolving the domain name in the address. dns."
"strategy will be used if empty."
@@ -2056,7 +2104,7 @@ msgstr "可接受的最低 TLS 版本。"
msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64."
msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:369
+#: htdocs/luci-static/resources/view/homeproxy/client.js:367
msgid "The network interface to bind to."
msgstr "绑定到的网络接口。"
@@ -2076,7 +2124,7 @@ msgstr "服务端私钥,需要 PEM 格式。"
msgid "The server public key, in PEM format."
msgstr "服务端公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:376
+#: htdocs/luci-static/resources/view/homeproxy/client.js:374
msgid ""
"The tag of the upstream outbound.
Other dial fields will be ignored when "
"enabled."
@@ -2141,13 +2189,14 @@ msgstr "Tuic"
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:922
#: htdocs/luci-static/resources/view/homeproxy/node.js:509
#: htdocs/luci-static/resources/view/homeproxy/server.js:103
msgid "Type"
msgstr "类型"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:459
-#: htdocs/luci-static/resources/view/homeproxy/client.js:737
+#: htdocs/luci-static/resources/view/homeproxy/client.js:457
+#: htdocs/luci-static/resources/view/homeproxy/client.js:757
#: htdocs/luci-static/resources/view/homeproxy/server.js:732
msgid "UDP"
msgstr "UDP"
@@ -2198,6 +2247,14 @@ msgstr "更新 %s 个订阅"
msgid "Update failed."
msgstr "更新失败。"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:981
+msgid "Update interval"
+msgstr "更新间隔"
+
+#: htdocs/luci-static/resources/view/homeproxy/client.js:982
+msgid "Update interval of rule set.
1d
will be used if empty."
+msgstr "规则集更新间隔。
留空使用 1d
。"
+
#: htdocs/luci-static/resources/view/homeproxy/node.js:1322
msgid "Update nodes from subscriptions"
msgstr "从订阅更新节点"
@@ -2239,10 +2296,6 @@ msgstr "上传密钥"
msgid "Upload..."
msgstr "上传..."
-#: htdocs/luci-static/resources/view/homeproxy/client.js:291
-msgid "Upstream archived. Not recommended."
-msgstr "上游已存档。不建议。"
-
#: htdocs/luci-static/resources/view/homeproxy/server.js:517
msgid "Use ACME TLS certificate issuer."
msgstr "使用 ACME TLS 证书颁发机构。"
@@ -2263,8 +2316,8 @@ msgid ""
"given."
msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:529
-#: htdocs/luci-static/resources/view/homeproxy/client.js:806
+#: htdocs/luci-static/resources/view/homeproxy/client.js:527
+#: htdocs/luci-static/resources/view/homeproxy/client.js:824
msgid "User"
msgstr "用户"
@@ -2283,7 +2336,7 @@ msgstr "VLESS"
msgid "VMess"
msgstr "VMess"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:930
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1052
msgid "WAN IP Policy"
msgstr "WAN IP 策略"
@@ -2375,6 +2428,7 @@ msgstr "gVisor"
#: htdocs/luci-static/resources/homeproxy.js:248
#: htdocs/luci-static/resources/homeproxy.js:266
#: htdocs/luci-static/resources/view/homeproxy/client.js:176
+#: htdocs/luci-static/resources/view/homeproxy/client.js:945
#: htdocs/luci-static/resources/view/homeproxy/node.js:572
#: htdocs/luci-static/resources/view/homeproxy/node.js:1194
#: htdocs/luci-static/resources/view/homeproxy/server.js:159
@@ -2400,11 +2454,11 @@ msgstr "通过"
msgid "private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:236
+#: htdocs/luci-static/resources/view/homeproxy/status.js:226
msgid "sing-box client"
msgstr "sing-box 客户端"
-#: htdocs/luci-static/resources/view/homeproxy/status.js:239
+#: htdocs/luci-static/resources/view/homeproxy/status.js:229
msgid "sing-box server"
msgstr "sing-box 服务端"
@@ -2451,6 +2505,8 @@ msgstr "v3"
msgid "valid IP address"
msgstr "有效 IP 地址"
+#: htdocs/luci-static/resources/view/homeproxy/client.js:950
+#: htdocs/luci-static/resources/view/homeproxy/client.js:953
#: htdocs/luci-static/resources/view/homeproxy/node.js:1277
#: htdocs/luci-static/resources/view/homeproxy/node.js:1280
msgid "valid URL"
@@ -2460,8 +2516,8 @@ msgstr "有效网址"
msgid "valid base64 key with %d characters"
msgstr "包含 %d 个字符的有效 base64 密钥"
-#: htdocs/luci-static/resources/view/homeproxy/client.js:970
-#: htdocs/luci-static/resources/view/homeproxy/client.js:999
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1092
+#: htdocs/luci-static/resources/view/homeproxy/client.js:1121
msgid "valid hostname"
msgstr "有效主机名"
diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
index 050281d03..d308a517c 100755
--- a/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/generate_client.uc
@@ -25,6 +25,7 @@ uci.load(uciconfig);
const uciinfra = 'infra',
ucimain = 'config',
+ uciexp = 'experimental',
ucicontrol = 'control';
const ucidnssetting = 'dns',
@@ -36,6 +37,7 @@ const uciroutingsetting = 'routing',
uciroutingrule = 'routing_rule';
const ucinode = 'node';
+const uciruleset = 'ruleset';
const routing_mode = uci.get(uciconfig, ucimain, 'routing_mode') || 'bypass_mainland_china';
@@ -207,8 +209,8 @@ function generate_outbound(node) {
padding: (node.multiplex_padding === '1'),
brutal: (node.multiplex_brutal === '1') ? {
enabled: true,
- up_mbps: node.multiplex_brutal_up,
- down_mbps: node.multiplex_brutal_down
+ up_mbps: strToInt(node.multiplex_brutal_up),
+ down_mbps: strToInt(node.multiplex_brutal_down)
} : null
} : null,
tls: (node.tls === '1') ? {
@@ -297,6 +299,16 @@ function get_resolver(cfg) {
else
return 'cfg-' + cfg + '-dns';
}
+
+function get_ruleset(cfg) {
+ if (isEmpty(cfg))
+ return null;
+
+ let rules = [];
+ for (let i in cfg)
+ push(rules, isEmpty(i) ? null : 'cfg-' + i + '-rule');
+ return rules;
+}
/* Config helper end */
const config = {};
@@ -407,16 +419,16 @@ if (!isEmpty(main_node)) {
domain_suffix: cfg.domain_suffix,
domain_keyword: cfg.domain_keyword,
domain_regex: cfg.domain_regex,
- geosite: cfg.geosite,
port: parse_port(cfg.port),
port_range: cfg.port_range,
- source_geoip: cfg.source_geoip,
source_ip_cidr: cfg.source_ip_cidr,
+ source_ip_is_private: (cfg.source_ip_is_private === '1') || null,
source_port: parse_port(cfg.source_port),
source_port_range: cfg.source_port_range,
process_name: cfg.process_name,
process_path: cfg.process_path,
user: cfg.user,
+ rule_set: get_ruleset(cfg.rule_set),
invert: (cfg.invert === '1') || null,
outbound: get_outbound(cfg.outbound),
server: get_resolver(cfg.server),
@@ -536,16 +548,6 @@ if (!isEmpty(main_node)) {
/* Routing rules start */
/* Default settings */
config.route = {
- geoip: !isEmpty(default_outbound) ? {
- path: HP_DIR + '/resources/geoip.db',
- download_url: 'https://github.com/1715173329/sing-geoip/releases/latest/download/geoip.db',
- download_detour: get_outbound(default_outbound)
- } : null,
- geosite: !isEmpty(default_outbound) ? {
- path: HP_DIR + '/resources/geosite.db',
- download_url: 'https://github.com/1715173329/sing-geosite/releases/latest/download/geosite.db',
- download_detour: get_outbound(default_outbound)
- } : null,
rules: [
{
inbound: 'dns-in',
@@ -556,6 +558,7 @@ config.route = {
outbound: 'dns-out'
}
],
+ rule_set: [],
auto_detect_interface: isEmpty(default_interface) ? true : null,
default_interface: default_interface
};
@@ -590,11 +593,10 @@ if (!isEmpty(main_node)) {
domain_suffix: cfg.domain_suffix,
domain_keyword: cfg.domain_keyword,
domain_regex: cfg.domain_regex,
- geosite: cfg.geosite,
- source_geoip: cfg.source_geoip,
- geoip: cfg.geoip,
source_ip_cidr: cfg.source_ip_cidr,
+ source_ip_is_private: (cfg.source_ip_is_private === '1') || null,
ip_cidr: cfg.ip_cidr,
+ ip_is_private: (cfg.ip_is_private === '1') || null,
source_port: parse_port(cfg.source_port),
source_port_range: cfg.source_port_range,
port: parse_port(cfg.port),
@@ -602,14 +604,45 @@ if (!isEmpty(main_node)) {
process_name: cfg.process_name,
process_path: cfg.process_path,
user: cfg.user,
+ rule_set: get_ruleset(cfg.rule_set),
+ rule_set_ipcidr_match_source: (cfg.rule_set_ipcidr_match_source === '1') || null,
invert: (cfg.invert === '1') || null,
outbound: get_outbound(cfg.outbound)
});
});
config.route.final = get_outbound(default_outbound);
+};
+
+/* Rule set */
+if (routing_mode === 'custom') {
+ uci.foreach(uciconfig, uciruleset, (cfg) => {
+ if (cfg.enabled !== '1')
+ return null;
+
+ push(config.route.rule_set, {
+ type: cfg.type,
+ tag: 'cfg-' + cfg['.name'] + '-rule',
+ format: cfg.format,
+ path: cfg.path,
+ url: cfg.url,
+ download_detour: get_outbound(cfg.outbound),
+ update_interval: cfg.update_interval
+ });
+ });
}
/* Routing rules end */
+/* Experimental start */
+if (routing_mode === 'custom') {
+ config.experimental = {
+ cache_file: {
+ enabled: true,
+ path: HP_DIR + '/cache.db'
+ }
+ };
+}
+/* Experimental end */
+
system('mkdir -p ' + RUN_DIR);
writefile(RUN_DIR + '/sing-box-c.json', sprintf('%.J\n', removeBlankAttrs(config)));
diff --git a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
index eb462e29e..c8f212544 100755
--- a/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
+++ b/homeproxy/root/etc/homeproxy/scripts/generate_server.uc
@@ -103,8 +103,8 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
padding: (cfg.multiplex_padding === '1'),
brutal: (cfg.multiplex_brutal === '1') ? {
enabled: true,
- up_mbps: cfg.multiplex_brutal_up,
- down_mbps: cfg.multiplex_brutal_down
+ up_mbps: strToInt(cfg.multiplex_brutal_up),
+ down_mbps: strToInt(cfg.multiplex_brutal_down)
} : null
} : null,
diff --git a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
index ddb6589b8..d3c608ab7 100755
--- a/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
+++ b/homeproxy/root/etc/homeproxy/scripts/update_crond.sh
@@ -9,10 +9,4 @@ for i in "china_ip4" "china_ip6" "gfw_list" "china_list"; do
"$SCRIPTS_DIR"/update_resources.sh "$i"
done
-if [ "$(uci -q get homeproxy.config.routing_mode)" = "custom" ]; then
- for i in "geoip" "geosite"; do
- "$SCRIPTS_DIR"/update_resources.sh "$i"
- done
-fi
-
"$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 4c9c494dd..6e80fdd19 100755
--- a/homeproxy/root/etc/homeproxy/scripts/update_resources.sh
+++ b/homeproxy/root/etc/homeproxy/scripts/update_resources.sh
@@ -37,51 +37,6 @@ to_upper() {
echo -e "$1" | tr "[a-z]" "[A-Z]"
}
-check_geodata_update() {
- local geotype="$1"
- local georepo="$2"
- local wget="wget --timeout=10 -q"
-
- set_lock "set" "$geotype"
-
- local geodata_ver="$($wget -O- "https://api.github.com/repos/$georepo/releases/latest" | jsonfilter -e "@.tag_name")"
- if [ -z "$geodata_ver" ]; then
- log "[$(to_upper "$geotype")] Failed to get the latest version, please retry later."
-
- set_lock "remove" "$geotype"
- return 1
- fi
-
- local local_geodata_ver="$(cat "$RESOURCES_DIR/$geotype.ver" 2>"/dev/null" || echo "NOT FOUND")"
- if [ "$local_geodata_ver" = "$geodata_ver" ]; then
- log "[$(to_upper "$geotype")] Current version: $geodata_ver."
- log "[$(to_upper "$geotype")] You're already at the latest version."
-
- set_lock "remove" "$geotype"
- return 3
- else
- log "[$(to_upper "$geotype")] Local version: $local_geodata_ver, latest version: $geodata_ver."
- fi
-
- local geodata_hash
- $wget "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.db" -O "$RUN_DIR/$geotype.db"
- geodata_hash="$($wget -O- "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.db.sha256sum" | awk '{print $1}')"
- if ! echo -e "$geodata_hash $RUN_DIR/$geotype.db" | sha256sum -s -c -; then
- rm -f "$RUN_DIR/$geotype.db"
- log "[$(to_upper "$geotype")] Update failed."
-
- set_lock "remove" "$geotype"
- return 1
- fi
-
- mv -f "$RUN_DIR/$geotype.db" "$RESOURCES_DIR/$geotype.db"
- echo -e "$geodata_ver" > "$RESOURCES_DIR/$geotype.ver"
- log "[$(to_upper "$geotype")] Successfully updated."
-
- set_lock "remove" "$geotype"
- return 0
-}
-
check_list_update() {
local listtype="$1"
local listrepo="$2"
@@ -130,12 +85,6 @@ check_list_update() {
}
case "$1" in
-"geoip")
- check_geodata_update "$1" "1715173329/sing-geoip"
- ;;
-"geosite")
- check_geodata_update "$1" "1715173329/sing-geosite"
- ;;
"china_ip4")
check_list_update "$1" "1715173329/IPCIDR-CHINA" "master" "ipv4.txt"
;;
@@ -149,7 +98,7 @@ case "$1" in
check_list_update "$1" "Loyalsoldier/v2ray-rules-dat" "release" "direct-list.txt"
;;
*)
- echo -e "Usage: $0 "
+ echo -e "Usage: $0 "
exit 1
;;
esac
diff --git a/homeproxy/root/etc/init.d/homeproxy b/homeproxy/root/etc/init.d/homeproxy
index 7b13b8268..9e56c64e3 100755
--- a/homeproxy/root/etc/init.d/homeproxy
+++ b/homeproxy/root/etc/init.d/homeproxy
@@ -258,6 +258,11 @@ start_service() {
procd_set_param respawn
procd_close_instance
+ # Prepare ruleset directory for custom routing mode
+ if [ "$routing_mode" = "custom" ]; then
+ [ -d "$HP_DIR/ruleset" ] || mkdir -p "$HP_DIR/ruleset"
+ fi
+
# Update permissions for ujail
if [ "$outbound_node" != "nil" ]; then
echo > "$RUN_DIR/sing-box-c.log"
diff --git a/luci-app-smartdns/Makefile b/luci-app-smartdns/Makefile
index 2c3f9f868..7e362a21f 100644
--- a/luci-app-smartdns/Makefile
+++ b/luci-app-smartdns/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+# Copyright (C) 2018-2024 Ruilin Peng (Nick) .
#
# smartdns is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/luci-app-smartdns/luasrc/controller/smartdns.lua b/luci-app-smartdns/luasrc/controller/smartdns.lua
index be70065f8..616fdb9c0 100644
--- a/luci-app-smartdns/luasrc/controller/smartdns.lua
+++ b/luci-app-smartdns/luasrc/controller/smartdns.lua
@@ -1,5 +1,5 @@
--
--- Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+-- Copyright (C) 2018-2024 Ruilin Peng (Nick) .
--
-- smartdns is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua
index 64f05c1d5..ed8b40e5e 100644
--- a/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua
+++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/smartdns.lua
@@ -1,5 +1,5 @@
--
--- Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+-- Copyright (C) 2018-2024 Ruilin Peng (Nick) .
--
-- smartdns is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua
index 02b7a5f4b..f2fc1d23b 100644
--- a/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua
+++ b/luci-app-smartdns/luasrc/model/cbi/smartdns/upstream.lua
@@ -1,5 +1,5 @@
--
--- Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+-- Copyright (C) 2018-2024 Ruilin Peng (Nick) .
--
-- smartdns is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
@@ -155,4 +155,4 @@ o = s:option(Value, "addition_arg", translate("Additional Server Args"), transla
o.default = ""
o.rempty = true
-return m
\ No newline at end of file
+return m
diff --git a/luci-app-smartdns/luasrc/model/smartdns.lua b/luci-app-smartdns/luasrc/model/smartdns.lua
index d71742b74..777b775c4 100644
--- a/luci-app-smartdns/luasrc/model/smartdns.lua
+++ b/luci-app-smartdns/luasrc/model/smartdns.lua
@@ -1,5 +1,5 @@
--
--- Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+-- Copyright (C) 2018-2024 Ruilin Peng (Nick) .
--
-- smartdns is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns
index 88efcacb5..8c9580c1b 100644
--- a/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns
+++ b/luci-app-smartdns/root/etc/uci-defaults/50_luci-smartdns
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2018-2023 Ruilin Peng (Nick) .
+# Copyright (C) 2018-2024 Ruilin Peng (Nick) .
#
# smartdns is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by