luci-app-homeproxy: sync upstream

last commit: 6d520efc09
This commit is contained in:
gitea-action 2025-03-11 21:30:19 +08:00
parent dfa706623c
commit 23ba57f710
18 changed files with 3747 additions and 3920 deletions

View File

@ -194,7 +194,7 @@ return view.extend({
if (!value) if (!value)
return _('Expecting: %s').format(_('non-empty value')); return _('Expecting: %s').format(_('non-empty value'));
let ipv6_support = this.map.lookupOption('ipv6_support', section_id)[0].formvalue(section_id); let ipv6_support = this.section.formvalue(section_id, 'ipv6_support');
try { try {
let url = new URL(value.replace(/^.*:\/\//, 'http://')); let url = new URL(value.replace(/^.*:\/\//, 'http://'));
if (stubValidator.apply('hostname', url.hostname)) if (stubValidator.apply('hostname', url.hostname))
@ -305,7 +305,6 @@ return view.extend({
ss = o.subsection; ss = o.subsection;
so = ss.option(form.Flag, 'tun_gso', _('Generic segmentation offload')); so = ss.option(form.Flag, 'tun_gso', _('Generic segmentation offload'));
so.default = so.disabled;
so.depends('homeproxy.config.proxy_mode', 'redirect_tun'); so.depends('homeproxy.config.proxy_mode', 'redirect_tun');
so.depends('homeproxy.config.proxy_mode', 'tun'); so.depends('homeproxy.config.proxy_mode', 'tun');
so.rmempty = false; so.rmempty = false;
@ -349,7 +348,6 @@ return view.extend({
so = ss.option(form.Flag, 'bypass_cn_traffic', _('Bypass CN traffic'), so = ss.option(form.Flag, 'bypass_cn_traffic', _('Bypass CN traffic'),
_('Bypass mainland China traffic via firewall rules by default.')); _('Bypass mainland China traffic via firewall rules by default.'));
so.default = so.disabled;
so.rmempty = false; so.rmempty = false;
so = ss.option(form.ListValue, 'domain_strategy', _('Domain strategy'), so = ss.option(form.ListValue, 'domain_strategy', _('Domain strategy'),
@ -369,7 +367,6 @@ return view.extend({
this.value('nil', _('Disable')); this.value('nil', _('Disable'));
this.value('direct-out', _('Direct')); this.value('direct-out', _('Direct'));
this.value('block-out', _('Block'));
uci.sections(data[0], 'routing_node', (res) => { uci.sections(data[0], 'routing_node', (res) => {
if (res.enabled === '1') if (res.enabled === '1')
this.value(res['.name'], res.label); this.value(res['.name'], res.label);
@ -443,7 +440,7 @@ return view.extend({
} }
so.validate = function(section_id, value) { so.validate = function(section_id, value) {
if (section_id && value) { if (section_id && value) {
let node = this.map.lookupOption('node', section_id)[0].formvalue(section_id); let node = this.section.formvalue(section_id, 'node');
let conflict = false; let conflict = false;
uci.sections(data[0], 'routing_node', (res) => { uci.sections(data[0], 'routing_node', (res) => {
@ -497,7 +494,7 @@ return view.extend({
so.placeholder = '180'; so.placeholder = '180';
so.validate = function(section_id, value) { so.validate = function(section_id, value) {
if (section_id && value) { if (section_id && value) {
let idle_timeout = this.map.lookupOption('urltest_idle_timeout', section_id)[0].formvalue(section_id) || '1800'; let idle_timeout = this.section.formvalue(section_id, 'idle_timeout') || '1800';
if (parseInt(value) > parseInt(idle_timeout)) if (parseInt(value) > parseInt(idle_timeout))
return _('Test interval must be less or equal than idle timeout.'); return _('Test interval must be less or equal than idle timeout.');
} }
@ -523,7 +520,6 @@ return view.extend({
so = ss.option(form.Flag, 'urltest_interrupt_exist_connections', _('Interrupt existing connections'), so = ss.option(form.Flag, 'urltest_interrupt_exist_connections', _('Interrupt existing connections'),
_('Interrupt existing connections when the selected outbound has changed.')); _('Interrupt existing connections when the selected outbound has changed.'));
so.default = so.disabled;
so.depends('node', 'urltest'); so.depends('node', 'urltest');
so.modalonly = true; so.modalonly = true;
/* Routing nodes end */ /* Routing nodes end */
@ -543,10 +539,9 @@ return view.extend({
ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss); ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss);
ss.tab('field_other', _('Other fields')); ss.tab('field_other', _('Other fields'));
ss.tab('field_host', _('Host fields')); ss.tab('field_host', _('Host/IP fields'));
ss.tab('field_port', _('Port fields')); ss.tab('field_port', _('Port fields'));
ss.tab('field_source_ip', _('SRC-IP fields')); ss.tab('fields_process', _('Process fields'));
ss.tab('field_source_port', _('SRC-Port fields'));
so = ss.taboption('field_other', form.Value, 'label', _('Label')); so = ss.taboption('field_other', form.Value, 'label', _('Label'));
so.load = L.bind(hp.loadDefaultLabel, this, data[0]); so.load = L.bind(hp.loadDefaultLabel, this, data[0]);
@ -605,75 +600,6 @@ return view.extend({
so.value('udp', _('UDP')); so.value('udp', _('UDP'));
so.value('', _('Both')); so.value('', _('Both'));
so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'),
_('Match full domain.'));
so.datatype = 'hostname';
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_suffix', _('Domain suffix'),
_('Match domain suffix.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_keyword', _('Domain keyword'),
_('Match domain using keyword.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_regex', _('Domain regex'),
_('Match domain using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_source_ip', form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_source_ip', form.Flag, 'source_ip_is_private', _('Private source IP'),
_('Match private source IP.'));
so.default = so.disabled;
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'ip_cidr', _('IP CIDR'),
_('Match IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_host', form.Flag, 'ip_is_private', _('Private IP'),
_('Match private IP.'));
so.default = so.disabled;
so.modalonly = true;
so = ss.taboption('field_source_port', form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_source_port', form.DynamicList, 'source_port_range', _('Source port range'),
_('Match source port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port', _('Port'),
_('Match port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port_range', _('Port range'),
_('Match port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_name', _('Process name'),
_('Match process name.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_path', _('Process path'),
_('Match process path.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_path_regex', _('Process path (regex)'),
_('Match process path using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'user', _('User'), so = ss.taboption('field_other', form.DynamicList, 'user', _('User'),
_('Match user name.')); _('Match user name.'));
so.modalonly = true; so.modalonly = true;
@ -695,12 +621,10 @@ return view.extend({
so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_match_source', _('Rule set IP CIDR as source IP'), so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_match_source', _('Rule set IP CIDR as source IP'),
_('Make IP CIDR in rule set used to match the source IP.')); _('Make IP CIDR in rule set used to match the source IP.'));
so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.Flag, 'invert', _('Invert'), so = ss.taboption('field_other', form.Flag, 'invert', _('Invert'),
_('Invert match result.')); _('Invert match result.'));
so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.ListValue, 'outbound', _('Outbound'), so = ss.taboption('field_other', form.ListValue, 'outbound', _('Outbound'),
@ -720,6 +644,81 @@ return view.extend({
} }
so.rmempty = false; so.rmempty = false;
so.editable = true; so.editable = true;
so = ss.taboption('field_other', form.Value, 'override_address', _('Override address'),
_('Override the connection destination address.'));
so.datatype = 'ipaddr';
so.modalonly = true;
so = ss.taboption('field_other', form.Value, 'override_port', _('Override port'),
_('Override the connection destination port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'),
_('Match full domain.'));
so.datatype = 'hostname';
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_suffix', _('Domain suffix'),
_('Match domain suffix.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_keyword', _('Domain keyword'),
_('Match domain using keyword.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_regex', _('Domain regex'),
_('Match domain using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_host', form.Flag, 'source_ip_is_private', _('Match private source IP'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'ip_cidr', _('IP CIDR'),
_('Match IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_host', form.Flag, 'ip_is_private', _('Match private IP'));
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'source_port_range', _('Source port range'),
_('Match source port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port', _('Port'),
_('Match port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port_range', _('Port range'),
_('Match port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_name', _('Process name'),
_('Match process name.'));
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_path', _('Process path'),
_('Match process path.'));
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_path_regex', _('Process path (regex)'),
_('Match process path using regular expression.'));
so.modalonly = true;
/* Routing rules end */ /* Routing rules end */
/* DNS settings start */ /* DNS settings start */
@ -740,7 +739,6 @@ return view.extend({
this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('default-dns', _('Default DNS (issued by WAN)'));
this.value('system-dns', _('System DNS')); this.value('system-dns', _('System DNS'));
this.value('block-dns', _('Block DNS queries'));
uci.sections(data[0], 'dns_server', (res) => { uci.sections(data[0], 'dns_server', (res) => {
if (res.enabled === '1') if (res.enabled === '1')
this.value(res['.name'], res.label); this.value(res['.name'], res.label);
@ -752,15 +750,12 @@ return view.extend({
so.rmempty = false; so.rmempty = false;
so = ss.option(form.Flag, 'disable_cache', _('Disable DNS cache')); so = ss.option(form.Flag, 'disable_cache', _('Disable DNS cache'));
so.default = so.disabled;
so = ss.option(form.Flag, 'disable_cache_expire', _('Disable cache expire')); so = ss.option(form.Flag, 'disable_cache_expire', _('Disable cache expire'));
so.default = so.disabled;
so.depends('disable_cache', '0'); so.depends('disable_cache', '0');
so = ss.option(form.Flag, 'independent_cache', _('Independent cache per server'), so = ss.option(form.Flag, 'independent_cache', _('Independent cache per server'),
_('Make each DNS server\'s cache independent for special purposes. If enabled, will slightly degrade performance.')); _('Make each DNS server\'s cache independent for special purposes. If enabled, will slightly degrade performance.'));
so.default = so.disabled;
so.depends('disable_cache', '0'); so.depends('disable_cache', '0');
so = ss.option(form.Value, 'client_subnet', _('EDNS Client subnet'), so = ss.option(form.Value, 'client_subnet', _('EDNS Client subnet'),
@ -771,7 +766,6 @@ return view.extend({
so = ss.option(form.Flag, 'cache_file_store_rdrc', _('Store RDRC'), so = ss.option(form.Flag, 'cache_file_store_rdrc', _('Store RDRC'),
_('Store rejected DNS response cache.<br/>' + _('Store rejected DNS response cache.<br/>' +
'The check results of <code>Address filter DNS rule items</code> will be cached until expiration.')); 'The check results of <code>Address filter DNS rule items</code> will be cached until expiration.'));
so.default = so.disabled;
so = ss.option(form.Value, 'cache_file_rdrc_timeout', _('RDRC timeout'), so = ss.option(form.Value, 'cache_file_rdrc_timeout', _('RDRC timeout'),
_('Timeout of rejected DNS response cache in seconds. <code>604800 (7d)</code> is used by default.')); _('Timeout of rejected DNS response cache in seconds. <code>604800 (7d)</code> is used by default.'));
@ -913,10 +907,9 @@ return view.extend({
ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss); ss.renderSectionAdd = L.bind(hp.renderSectionAdd, this, ss);
ss.tab('field_other', _('Other fields')); ss.tab('field_other', _('Other fields'));
ss.tab('field_host', _('Host fields')); ss.tab('field_host', _('Host/IP fields'));
ss.tab('field_port', _('Port fields')); ss.tab('field_port', _('Port fields'));
ss.tab('field_source_ip', _('SRC-IP fields')); ss.tab('fields_process', _('Process fields'));
ss.tab('field_source_port', _('SRC-Port fields'));
so = ss.taboption('field_other', form.Value, 'label', _('Label')); so = ss.taboption('field_other', form.Value, 'label', _('Label'));
so.load = L.bind(hp.loadDefaultLabel, this, data[0]); so.load = L.bind(hp.loadDefaultLabel, this, data[0]);
@ -967,75 +960,6 @@ return view.extend({
so.value('stun', _('STUN')); so.value('stun', _('STUN'));
so.value('tls', _('TLS')); so.value('tls', _('TLS'));
so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'),
_('Match full domain.'));
so.datatype = 'hostname';
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_suffix', _('Domain suffix'),
_('Match domain suffix.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_keyword', _('Domain keyword'),
_('Match domain using keyword.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_regex', _('Domain regex'),
_('Match domain using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port', _('Port'),
_('Match port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port_range', _('Port range'),
_('Match port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_source_ip', form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_source_ip', form.Flag, 'source_ip_is_private', _('Private source IP'),
_('Match private source IP.'));
so.default = so.disabled;
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'ip_cidr', _('IP CIDR'),
_('Match IP CIDR with query response.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_other', form.Flag, 'ip_is_private', _('Private IP'),
_('Match private IP with query response.'));
so.default = so.disabled;
so.modalonly = true;
so = ss.taboption('field_source_port', form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_source_port', form.DynamicList, 'source_port_range', _('Source port range'),
_('Match source port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_name', _('Process name'),
_('Match process name.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_path', _('Process path'),
_('Match process path.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'process_path_regex', _('Process path (regex)'),
_('Match process path using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_other', form.DynamicList, 'user', _('User'), so = ss.taboption('field_other', form.DynamicList, 'user', _('User'),
_('Match user name.')); _('Match user name.'));
so.modalonly = true; so.modalonly = true;
@ -1057,17 +981,14 @@ return view.extend({
so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_match_source', _('Rule set IP CIDR as source IP'), so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_match_source', _('Rule set IP CIDR as source IP'),
_('Make IP CIDR in rule sets match the source IP.')); _('Make IP CIDR in rule sets match the source IP.'));
so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_accept_empty', _('Accept empty query response'), so = ss.taboption('field_other', form.Flag, 'rule_set_ip_cidr_accept_empty', _('Accept empty query response'),
_('Make IP CIDR in rule-sets accept empty query response.')); _('Make IP CIDR in rule-sets accept empty query response.'));
so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.Flag, 'invert', _('Invert'), so = ss.taboption('field_other', form.Flag, 'invert', _('Invert'),
_('Invert match result.')); _('Invert match result.'));
so.default = so.disabled;
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.MultiValue, 'outbound', _('Outbound'), so = ss.taboption('field_other', form.MultiValue, 'outbound', _('Outbound'),
@ -1109,18 +1030,86 @@ return view.extend({
so = ss.taboption('field_other', form.Flag, 'dns_disable_cache', _('Disable dns cache'), so = ss.taboption('field_other', form.Flag, 'dns_disable_cache', _('Disable dns cache'),
_('Disable cache and save cache in this query.')); _('Disable cache and save cache in this query.'));
so.default = so.disabled; so.depends({'server': 'block-dns', '!reverse': true});
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.Value, 'rewrite_ttl', _('Rewrite TTL'), so = ss.taboption('field_other', form.Value, 'rewrite_ttl', _('Rewrite TTL'),
_('Rewrite TTL in DNS responses.')); _('Rewrite TTL in DNS responses.'));
so.datatype = 'uinteger'; so.datatype = 'uinteger';
so.depends({'server': 'block-dns', '!reverse': true});
so.modalonly = true; so.modalonly = true;
so = ss.taboption('field_other', form.Value, 'client_subnet', _('EDNS Client subnet'), so = ss.taboption('field_other', form.Value, 'client_subnet', _('EDNS Client subnet'),
_('Append a <code>edns0-subnet</code> OPT extra record with the specified IP prefix to every query by default.<br/>' + _('Append a <code>edns0-subnet</code> OPT extra record with the specified IP prefix to every query by default.<br/>' +
'If value is an IP address instead of prefix, <code>/32</code> or <code>/128</code> will be appended automatically.')); 'If value is an IP address instead of prefix, <code>/32</code> or <code>/128</code> will be appended automatically.'));
so.datatype = 'or(cidr, ipaddr)'; so.datatype = 'or(cidr, ipaddr)';
so.depends({'server': 'block-dns', '!reverse': true});
so = ss.taboption('field_host', form.DynamicList, 'domain', _('Domain name'),
_('Match full domain.'));
so.datatype = 'hostname';
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_suffix', _('Domain suffix'),
_('Match domain suffix.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_keyword', _('Domain keyword'),
_('Match domain using keyword.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'domain_regex', _('Domain regex'),
_('Match domain using regular expression.'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'source_ip_cidr', _('Source IP CIDR'),
_('Match source IP CIDR.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_host', form.Flag, 'source_ip_is_private', _('Match private source IP'));
so.modalonly = true;
so = ss.taboption('field_host', form.DynamicList, 'ip_cidr', _('IP CIDR'),
_('Match IP CIDR with query response. Current rule will be skipped if not match.'));
so.datatype = 'or(cidr, ipaddr)';
so.modalonly = true;
so = ss.taboption('field_host', form.Flag, 'ip_is_private', _('Match private IP'),
_('Match private IP with query response.'));
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'source_port', _('Source port'),
_('Match source port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'source_port_range', _('Source port range'),
_('Match source port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port', _('Port'),
_('Match port.'));
so.datatype = 'port';
so.modalonly = true;
so = ss.taboption('field_port', form.DynamicList, 'port_range', _('Port range'),
_('Match port range. Format as START:/:END/START:END.'));
so.validate = hp.validatePortRange;
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_name', _('Process name'),
_('Match process name.'));
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_path', _('Process path'),
_('Match process path.'));
so.modalonly = true;
so = ss.taboption('fields_process', form.DynamicList, 'process_path_regex', _('Process path (regex)'),
_('Match process path using regular expression.'));
so.modalonly = true;
/* DNS rules end */ /* DNS rules end */
/* Custom routing settings end */ /* Custom routing settings end */
@ -1312,8 +1301,7 @@ return view.extend({
return callWriteDomainList('proxy_list', value); return callWriteDomainList('proxy_list', value);
} }
so.remove = function(/* ... */) { so.remove = function(/* ... */) {
let routing_mode = this.map.lookupOption('routing_mode', 'config')[0].formvalue('config'); let routing_mode = this.section.formvalue('config', 'routing_mode');
if (routing_mode !== 'custom') if (routing_mode !== 'custom')
return callWriteDomainList('proxy_list', ''); return callWriteDomainList('proxy_list', '');
return true; return true;
@ -1345,8 +1333,7 @@ return view.extend({
return callWriteDomainList('direct_list', value); return callWriteDomainList('direct_list', value);
} }
so.remove = function(/* ... */) { so.remove = function(/* ... */) {
let routing_mode = this.map.lookupOption('routing_mode', 'config')[0].formvalue('config'); let routing_mode = this.section.formvalue('config', 'routing_mode');
if (routing_mode !== 'custom') if (routing_mode !== 'custom')
return callWriteDomainList('direct_list', ''); return callWriteDomainList('direct_list', '');
return true; return true;

View File

@ -448,12 +448,12 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.depends({'type': 'socks', 'socks_version': '5'}); o.depends({'type': 'socks', 'socks_version': '5'});
o.validate = function(section_id, value) { o.validate = function(section_id, value) {
if (section_id) { if (section_id) {
let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id); let type = this.section.formvalue(section_id, 'type');
let required_type = [ 'shadowsocks', 'shadowtls', 'trojan' ]; let required_type = [ 'shadowsocks', 'shadowtls', 'trojan' ];
if (required_type.includes(type)) { if (required_type.includes(type)) {
if (type === 'shadowsocks') { if (type === 'shadowsocks') {
let encmode = this.map.lookupOption('shadowsocks_encrypt_method', section_id)[0].formvalue(section_id); let encmode = this.section.formvalue(section_id, 'shadowsocks_encrypt_method');
if (encmode === 'none') if (encmode === 'none')
return true; return true;
} }
@ -467,16 +467,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.modalonly = true; o.modalonly = true;
/* Direct config */ /* Direct config */
o = s.option(form.Value, 'override_address', _('Override address'),
_('Override the connection destination address.'));
o.datatype = 'host';
o.depends('type', 'direct');
o = s.option(form.Value, 'override_port', _('Override port'),
_('Override the connection destination port.'));
o.datatype = 'port';
o.depends('type', 'direct');
o = s.option(form.ListValue, 'proxy_protocol', _('Proxy protocol'), o = s.option(form.ListValue, 'proxy_protocol', _('Proxy protocol'),
_('Write proxy protocol in the connection header.')); _('Write proxy protocol in the connection header.'));
o.value('', _('Disable')); o.value('', _('Disable'));
@ -1044,7 +1034,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
_('The path to the server certificate, in PEM format.')); _('The path to the server certificate, in PEM format.'));
o.value('/etc/homeproxy/certs/client_ca.pem'); o.value('/etc/homeproxy/certs/client_ca.pem');
o.depends('tls_self_sign', '1'); o.depends('tls_self_sign', '1');
o.validate = L.bind(hp.validateCertificatePath, this); o.validate = hp.validateCertificatePath;
o.rmempty = false; o.rmempty = false;
o.modalonly = true; o.modalonly = true;
@ -1063,11 +1053,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.default = o.disabled; o.default = o.disabled;
o.modalonly = true; o.modalonly = true;
o = s.option(form.Flag, 'tls_ech_tls_disable_drs', _('Disable dynamic record sizing'));
o.depends('tls_ech', '1');
o.default = o.disabled;
o.modalonly = true;
o = s.option(form.Flag, 'tls_ech_enable_pqss', _('Enable PQ signature schemes')); o = s.option(form.Flag, 'tls_ech_enable_pqss', _('Enable PQ signature schemes'));
o.depends('tls_ech', '1'); o.depends('tls_ech', '1');
o.default = o.disabled; o.default = o.disabled;

View File

@ -195,12 +195,12 @@ return view.extend({
} }
o.validate = function(section_id, value) { o.validate = function(section_id, value) {
if (section_id) { if (section_id) {
let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id); let type = this.section.formvalue(section_id, 'type');
let required_type = [ 'http', 'mixed', 'naive', 'socks', 'shadowsocks' ]; let required_type = [ 'http', 'mixed', 'naive', 'socks', 'shadowsocks' ];
if (required_type.includes(type)) { if (required_type.includes(type)) {
if (type === 'shadowsocks') { if (type === 'shadowsocks') {
let encmode = this.map.lookupOption('shadowsocks_encrypt_method', section_id)[0].formvalue(section_id); let encmode = this.section.formvalue(section_id, 'shadowsocks_encrypt_method');
if (encmode === 'none') if (encmode === 'none')
return true; return true;
else if (encmode === '2022-blake3-aes-128-gcm') else if (encmode === '2022-blake3-aes-128-gcm')
@ -745,7 +745,7 @@ return view.extend({
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'}); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': null}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': null});
o.validate = L.bind(hp.validateCertificatePath, this); o.validate = hp.validateCertificatePath;
o.rmempty = false; o.rmempty = false;
o.modalonly = true; o.modalonly = true;
@ -764,7 +764,7 @@ return view.extend({
o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null}); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'});
o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': null}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': null});
o.validate = L.bind(hp.validateCertificatePath, this); o.validate = hp.validateCertificatePath;
o.rmempty = false; o.rmempty = false;
o.modalonly = true; o.modalonly = true;
@ -802,16 +802,6 @@ return view.extend({
o.depends({'network': 'tcp', '!reverse': true}); o.depends({'network': 'tcp', '!reverse': true});
o.modalonly = true; o.modalonly = true;
o = s.option(form.Flag, 'sniff_override', _('Override destination'),
_('Override the connection destination address with the sniffed domain.'));
o.rmempty = false;
o = s.option(form.ListValue, 'domain_strategy', _('Domain strategy'),
_('If set, the requested domain name will be resolved to IP before routing.'));
for (let i in hp.dns_strategy)
o.value(i, hp.dns_strategy[i])
o.modalonly = true;
o = s.option(form.ListValue, 'network', _('Network')); o = s.option(form.ListValue, 'network', _('Network'));
o.value('tcp', _('TCP')); o.value('tcp', _('TCP'));
o.value('udp', _('UDP')); o.value('udp', _('UDP'));

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -32,8 +32,11 @@
5.154.132.0/23 5.154.132.0/23
5.154.136.0/22 5.154.136.0/22
5.154.140.0/23 5.154.140.0/23
5.175.237.0/24
5.175.239.0/24
5.180.98.0/23 5.180.98.0/23
5.181.219.0/24 5.181.219.0/24
5.231.96.0/24
8.25.82.0/24 8.25.82.0/24
8.38.121.0/24 8.38.121.0/24
8.45.52.0/24 8.45.52.0/24
@ -45,8 +48,11 @@
8.136.0.0/13 8.136.0.0/13
8.144.0.0/14 8.144.0.0/14
8.148.0.0/19 8.148.0.0/19
8.148.32.0/21 8.148.32.0/22
8.148.40.0/22 8.148.36.0/23
8.148.38.0/24
8.148.41.0/24
8.148.42.0/23
8.148.64.0/18 8.148.64.0/18
8.148.128.0/17 8.148.128.0/17
8.149.0.0/16 8.149.0.0/16
@ -68,7 +74,7 @@
16.2.142.0/23 16.2.142.0/23
23.0.0.0/24 23.0.0.0/24
23.3.99.0/24 23.3.99.0/24
23.26.132.0/24 23.36.65.0/24
23.48.160.0/24 23.48.160.0/24
23.53.220.0/24 23.53.220.0/24
23.54.75.0/24 23.54.75.0/24
@ -77,7 +83,6 @@
23.61.203.0/24 23.61.203.0/24
23.63.29.0/24 23.63.29.0/24
23.63.98.0/23 23.63.98.0/23
23.184.136.0/24
23.216.52.0/23 23.216.52.0/23
23.225.71.0/24 23.225.71.0/24
23.247.128.0/24 23.247.128.0/24
@ -160,7 +165,6 @@
36.255.128.0/22 36.255.128.0/22
36.255.164.0/24 36.255.164.0/24
36.255.192.0/24 36.255.192.0/24
38.12.36.0/23
38.12.39.0/24 38.12.39.0/24
38.46.5.0/24 38.46.5.0/24
38.46.6.0/24 38.46.6.0/24
@ -170,7 +174,7 @@
38.47.122.0/23 38.47.122.0/23
38.55.135.0/24 38.55.135.0/24
38.71.124.0/24 38.71.124.0/24
38.71.126.0/24 38.71.126.0/23
38.77.248.0/24 38.77.248.0/24
38.95.118.0/23 38.95.118.0/23
38.95.121.0/24 38.95.121.0/24
@ -180,7 +184,7 @@
38.105.26.0/23 38.105.26.0/23
38.105.28.0/22 38.105.28.0/22
38.111.220.0/23 38.111.220.0/23
38.134.56.0/23 38.134.56.0/22
38.147.168.0/23 38.147.168.0/23
38.147.174.0/23 38.147.174.0/23
38.196.176.0/24 38.196.176.0/24
@ -256,10 +260,6 @@
42.242.0.0/15 42.242.0.0/15
42.244.0.0/14 42.244.0.0/14
42.248.0.0/15 42.248.0.0/15
43.16.0.0/12
43.32.0.0/11
43.64.0.0/14
43.68.0.0/15
43.136.0.0/13 43.136.0.0/13
43.144.0.0/15 43.144.0.0/15
43.192.0.0/16 43.192.0.0/16
@ -320,7 +320,6 @@
43.231.160.0/21 43.231.160.0/21
43.231.168.0/23 43.231.168.0/23
43.231.170.0/24 43.231.170.0/24
43.231.184.0/24
43.231.186.0/24 43.231.186.0/24
43.239.120.0/22 43.239.120.0/22
43.240.0.0/22 43.240.0.0/22
@ -399,6 +398,7 @@
43.250.236.0/22 43.250.236.0/22
43.250.244.0/22 43.250.244.0/22
43.251.4.0/22 43.251.4.0/22
43.251.8.0/24
43.251.16.0/23 43.251.16.0/23
43.251.36.0/22 43.251.36.0/22
43.251.100.0/22 43.251.100.0/22
@ -444,7 +444,6 @@
45.12.88.0/24 45.12.88.0/24
45.12.90.0/24 45.12.90.0/24
45.40.192.0/18 45.40.192.0/18
45.41.8.0/23
45.61.200.0/23 45.61.200.0/23
45.61.224.0/21 45.61.224.0/21
45.64.74.0/23 45.64.74.0/23
@ -479,7 +478,6 @@
45.119.60.0/22 45.119.60.0/22
45.119.68.0/22 45.119.68.0/22
45.119.104.0/23 45.119.104.0/23
45.119.106.0/24
45.119.116.0/22 45.119.116.0/22
45.120.100.0/22 45.120.100.0/22
45.120.164.0/22 45.120.164.0/22
@ -511,18 +509,15 @@
45.150.236.0/23 45.150.236.0/23
45.151.47.0/24 45.151.47.0/24
45.153.128.0/22 45.153.128.0/22
45.157.70.0/23
45.157.88.0/24 45.157.88.0/24
45.192.64.0/19
45.195.6.0/24 45.195.6.0/24
45.199.167.0/24 45.199.167.0/24
45.202.209.0/24 45.202.209.0/24
45.202.210.0/23 45.202.210.0/23
45.202.212.0/24 45.202.212.0/24
45.204.112.0/20
45.248.8.0/22 45.248.8.0/22
45.248.108.0/24 45.248.108.0/24
45.248.204.0/22 45.249.208.0/23
45.249.212.0/22 45.249.212.0/22
45.250.32.0/21 45.250.32.0/21
45.250.40.0/22 45.250.40.0/22
@ -532,11 +527,11 @@
45.251.8.0/22 45.251.8.0/22
45.251.20.0/22 45.251.20.0/22
45.251.88.0/21 45.251.88.0/21
45.251.96.0/21 45.251.100.0/22
45.251.120.0/22 45.251.120.0/22
45.251.138.0/23
45.251.242.0/23 45.251.242.0/23
45.252.0.0/22 45.252.0.0/22
45.252.48.0/22
45.252.104.0/22 45.252.104.0/22
45.253.24.0/22 45.253.24.0/22
45.253.32.0/24 45.253.32.0/24
@ -588,8 +583,8 @@
47.246.50.0/24 47.246.50.0/24
47.246.57.0/24 47.246.57.0/24
47.246.58.0/24 47.246.58.0/24
47.246.61.0/24 47.246.60.0/23
47.246.62.0/23 47.246.63.0/24
49.4.0.0/18 49.4.0.0/18
49.4.64.0/19 49.4.64.0/19
49.4.96.0/21 49.4.96.0/21
@ -654,6 +649,7 @@
54.222.88.0/22 54.222.88.0/22
54.222.96.0/23 54.222.96.0/23
54.222.100.0/22 54.222.100.0/22
54.222.104.0/21
54.222.112.0/22 54.222.112.0/22
54.222.116.0/23 54.222.116.0/23
54.222.128.0/17 54.222.128.0/17
@ -667,8 +663,9 @@
58.68.234.0/24 58.68.234.0/24
58.68.236.0/24 58.68.236.0/24
58.68.247.0/24 58.68.247.0/24
58.82.0.0/17 58.82.0.0/23
58.83.0.0/16 58.83.17.0/24
58.83.128.0/17
58.87.64.0/18 58.87.64.0/18
58.99.128.0/17 58.99.128.0/17
58.100.0.0/15 58.100.0.0/15
@ -689,7 +686,6 @@
59.81.40.0/23 59.81.40.0/23
59.81.46.0/24 59.81.46.0/24
59.81.64.0/23 59.81.64.0/23
59.81.72.0/23
59.81.82.0/23 59.81.82.0/23
59.81.94.0/23 59.81.94.0/23
59.81.102.0/23 59.81.102.0/23
@ -770,14 +766,12 @@
59.153.164.0/22 59.153.164.0/22
59.153.168.0/24 59.153.168.0/24
59.172.0.0/14 59.172.0.0/14
59.191.0.0/17
59.252.0.0/16 59.252.0.0/16
60.0.0.0/11 60.0.0.0/11
60.63.0.0/16 60.63.0.0/16
60.160.0.0/11 60.160.0.0/11
60.194.0.0/15 60.194.0.0/15
60.200.0.0/18 60.200.0.0/24
60.200.128.0/19
60.204.0.0/14 60.204.0.0/14
60.208.0.0/12 60.208.0.0/12
60.232.0.0/16 60.232.0.0/16
@ -823,17 +817,17 @@
64.188.38.0/23 64.188.38.0/23
64.188.40.0/22 64.188.40.0/22
64.188.44.0/23 64.188.44.0/23
65.49.130.0/23
66.102.240.0/21 66.102.240.0/21
66.102.248.0/22 66.102.248.0/22
66.102.252.0/24 66.102.252.0/24
66.102.254.0/23 66.102.254.0/23
67.229.241.0/24
68.79.0.0/18 68.79.0.0/18
69.163.104.0/24 69.163.104.0/24
69.163.106.0/24 69.163.106.0/24
69.163.123.0/24 69.163.123.0/24
69.165.78.0/23
69.172.70.0/24 69.172.70.0/24
69.194.0.0/23
69.230.192.0/18 69.230.192.0/18
69.231.128.0/18 69.231.128.0/18
69.234.192.0/18 69.234.192.0/18
@ -854,10 +848,13 @@
81.173.20.0/22 81.173.20.0/22
81.173.28.0/24 81.173.28.0/24
82.156.0.0/15 82.156.0.0/15
84.54.2.0/23
85.237.205.0/24 85.237.205.0/24
87.254.207.0/24 87.254.207.0/24
88.221.162.0/23 88.221.162.0/23
89.106.207.0/24 89.106.207.0/24
89.144.38.0/24
92.118.189.0/24
92.123.94.0/23 92.123.94.0/23
93.177.76.0/23 93.177.76.0/23
93.183.14.0/24 93.183.14.0/24
@ -886,7 +883,7 @@
101.52.112.0/21 101.52.112.0/21
101.52.124.0/22 101.52.124.0/22
101.52.128.0/20 101.52.128.0/20
101.52.200.0/21 101.52.204.0/22
101.52.212.0/22 101.52.212.0/22
101.52.216.0/21 101.52.216.0/21
101.52.232.0/23 101.52.232.0/23
@ -908,7 +905,10 @@
101.104.144.0/20 101.104.144.0/20
101.104.160.0/20 101.104.160.0/20
101.106.0.0/19 101.106.0.0/19
101.124.0.0/16 101.124.0.0/20
101.124.19.0/24
101.124.22.0/24
101.124.62.0/24
101.125.0.0/22 101.125.0.0/22
101.125.4.0/23 101.125.4.0/23
101.125.6.0/24 101.125.6.0/24
@ -928,7 +928,6 @@
101.128.0.0/22 101.128.0.0/22
101.129.0.0/16 101.129.0.0/16
101.132.0.0/15 101.132.0.0/15
101.144.0.0/12
101.197.0.0/16 101.197.0.0/16
101.198.0.0/22 101.198.0.0/22
101.198.160.0/19 101.198.160.0/19
@ -1038,6 +1037,7 @@
103.27.24.0/22 103.27.24.0/22
103.27.240.0/22 103.27.240.0/22
103.28.8.0/24 103.28.8.0/24
103.28.54.0/24
103.28.204.0/22 103.28.204.0/22
103.28.212.0/22 103.28.212.0/22
103.29.16.0/22 103.29.16.0/22
@ -1058,7 +1058,8 @@
103.36.132.0/22 103.36.132.0/22
103.36.136.0/22 103.36.136.0/22
103.36.164.0/22 103.36.164.0/22
103.36.168.0/21 103.36.168.0/23
103.36.172.0/22
103.36.192.0/20 103.36.192.0/20
103.36.208.0/22 103.36.208.0/22
103.36.220.0/22 103.36.220.0/22
@ -1096,7 +1097,6 @@
103.41.232.0/23 103.41.232.0/23
103.42.8.0/22 103.42.8.0/22
103.42.76.0/22 103.42.76.0/22
103.43.133.0/24
103.43.134.0/23 103.43.134.0/23
103.43.184.0/21 103.43.184.0/21
103.44.56.0/22 103.44.56.0/22
@ -1137,7 +1137,6 @@
103.53.124.0/22 103.53.124.0/22
103.53.208.0/24 103.53.208.0/24
103.53.211.0/24 103.53.211.0/24
103.54.48.0/22
103.55.172.0/22 103.55.172.0/22
103.55.228.0/22 103.55.228.0/22
103.56.32.0/22 103.56.32.0/22
@ -1244,6 +1243,7 @@
103.87.132.0/22 103.87.132.0/22
103.88.32.0/21 103.88.32.0/21
103.88.64.0/22 103.88.64.0/22
103.88.96.0/22
103.89.184.0/21 103.89.184.0/21
103.89.192.0/19 103.89.192.0/19
103.89.224.0/21 103.89.224.0/21
@ -1285,7 +1285,6 @@
103.99.104.0/22 103.99.104.0/22
103.99.178.0/24 103.99.178.0/24
103.100.64.0/22 103.100.64.0/22
103.100.158.0/23
103.101.124.0/23 103.101.124.0/23
103.101.180.0/22 103.101.180.0/22
103.102.196.0/22 103.102.196.0/22
@ -1315,7 +1314,6 @@
103.109.106.0/23 103.109.106.0/23
103.110.132.0/22 103.110.132.0/22
103.110.136.0/22 103.110.136.0/22
103.110.156.0/22
103.111.64.0/24 103.111.64.0/24
103.112.68.0/22 103.112.68.0/22
103.112.172.0/22 103.112.172.0/22
@ -1323,7 +1321,7 @@
103.113.4.0/22 103.113.4.0/22
103.114.72.0/22 103.114.72.0/22
103.114.100.0/22 103.114.100.0/22
103.114.156.0/22 103.114.158.0/23
103.114.212.0/23 103.114.212.0/23
103.114.236.0/22 103.114.236.0/22
103.115.40.0/21 103.115.40.0/21
@ -1362,8 +1360,10 @@
103.121.250.0/24 103.121.250.0/24
103.121.252.0/22 103.121.252.0/22
103.122.48.0/22 103.122.48.0/22
103.122.179.0/24
103.122.243.0/24 103.122.243.0/24
103.123.4.0/23 103.123.4.0/23
103.125.236.0/22
103.126.1.0/24 103.126.1.0/24
103.126.18.0/23 103.126.18.0/23
103.126.101.0/24 103.126.101.0/24
@ -1386,7 +1386,6 @@
103.137.60.0/24 103.137.60.0/24
103.138.156.0/23 103.138.156.0/23
103.139.136.0/23 103.139.136.0/23
103.139.172.0/23
103.139.212.0/23 103.139.212.0/23
103.140.14.0/23 103.140.14.0/23
103.140.126.0/23 103.140.126.0/23
@ -1399,17 +1398,13 @@
103.142.234.0/23 103.142.234.0/23
103.143.16.0/22 103.143.16.0/22
103.143.92.0/23 103.143.92.0/23
103.143.230.0/24 103.143.231.0/24
103.143.238.0/24
103.144.28.0/24
103.144.52.0/23 103.144.52.0/23
103.144.66.0/23 103.144.66.0/23
103.144.70.0/24 103.144.70.0/24
103.144.148.0/23
103.144.158.0/23 103.144.158.0/23
103.144.245.0/24 103.144.245.0/24
103.145.42.0/23 103.145.42.0/23
103.145.60.0/23
103.145.90.0/24 103.145.90.0/24
103.145.92.0/24 103.145.92.0/24
103.145.106.0/23 103.145.106.0/23
@ -1464,9 +1459,10 @@
103.174.94.0/23 103.174.94.0/23
103.175.197.0/24 103.175.197.0/24
103.177.28.0/23 103.177.28.0/23
103.177.44.0/24
103.177.80.0/23 103.177.80.0/23
103.179.78.0/23 103.179.78.0/23
103.180.108.0/24 103.180.109.0/24
103.181.234.0/24 103.181.234.0/24
103.183.66.0/23 103.183.66.0/23
103.183.122.0/23 103.183.122.0/23
@ -1562,7 +1558,7 @@
103.219.176.0/22 103.219.176.0/22
103.219.184.0/22 103.219.184.0/22
103.220.52.0/22 103.220.52.0/22
103.220.56.0/21 103.220.56.0/22
103.220.64.0/22 103.220.64.0/22
103.220.92.0/22 103.220.92.0/22
103.220.124.0/22 103.220.124.0/22
@ -1577,8 +1573,8 @@
103.222.216.0/22 103.222.216.0/22
103.223.132.0/22 103.223.132.0/22
103.224.80.0/22 103.224.80.0/22
103.224.220.0/22
103.224.232.0/22 103.224.232.0/22
103.225.86.0/23
103.226.57.0/24 103.226.57.0/24
103.226.124.0/22 103.226.124.0/22
103.227.76.0/22 103.227.76.0/22
@ -1617,10 +1613,13 @@
103.234.56.0/22 103.234.56.0/22
103.234.128.0/22 103.234.128.0/22
103.235.85.0/24 103.235.85.0/24
103.235.102.0/23
103.235.136.0/22 103.235.136.0/22
103.235.144.0/24 103.235.144.0/24
103.235.220.0/22 103.235.220.0/22
103.235.224.0/19 103.235.224.0/20
103.235.244.0/22
103.235.248.0/21
103.236.120.0/22 103.236.120.0/22
103.236.244.0/22 103.236.244.0/22
103.236.248.0/21 103.236.248.0/21
@ -1641,7 +1640,7 @@
103.238.132.0/22 103.238.132.0/22
103.238.144.0/22 103.238.144.0/22
103.238.160.0/22 103.238.160.0/22
103.238.180.0/22 103.238.180.0/23
103.238.184.0/23 103.238.184.0/23
103.238.188.0/22 103.238.188.0/22
103.238.204.0/22 103.238.204.0/22
@ -1722,12 +1721,9 @@
104.233.144.0/21 104.233.144.0/21
104.233.157.0/24 104.233.157.0/24
104.233.159.0/24 104.233.159.0/24
104.233.224.0/20
104.233.240.0/22
104.245.96.0/21 104.245.96.0/21
106.0.4.0/22 106.0.4.0/22
106.2.37.0/24 106.2.37.0/24
106.2.38.0/23
106.2.40.0/23 106.2.40.0/23
106.2.42.0/24 106.2.42.0/24
106.2.45.0/24 106.2.45.0/24
@ -1797,14 +1793,11 @@
106.228.0.0/15 106.228.0.0/15
106.230.0.0/16 106.230.0.0/16
107.148.84.0/23 107.148.84.0/23
107.148.92.0/23
107.148.150.0/23 107.148.150.0/23
107.148.160.0/22 107.148.160.0/22
107.149.198.0/23 107.149.198.0/23
107.149.208.0/23
107.151.208.0/20 107.151.208.0/20
107.190.229.0/24 107.190.229.0/24
109.176.254.0/23
109.206.244.0/22 109.206.244.0/22
109.244.0.0/16 109.244.0.0/16
110.6.0.0/15 110.6.0.0/15
@ -1826,10 +1819,9 @@
110.41.216.0/21 110.41.216.0/21
110.41.224.0/19 110.41.224.0/19
110.42.0.0/15 110.42.0.0/15
110.44.144.0/20
110.51.0.0/16 110.51.0.0/16
110.52.0.0/15 110.52.0.0/15
110.56.0.0/13 110.56.0.0/16
110.64.0.0/15 110.64.0.0/15
110.72.0.0/15 110.72.0.0/15
110.75.0.0/16 110.75.0.0/16
@ -1854,7 +1846,7 @@
110.100.200.0/21 110.100.200.0/21
110.100.208.0/20 110.100.208.0/20
110.100.224.0/20 110.100.224.0/20
110.112.0.0/15 110.113.0.0/16
110.114.0.0/16 110.114.0.0/16
110.116.0.0/19 110.116.0.0/19
110.116.48.0/20 110.116.48.0/20
@ -1870,7 +1862,6 @@
110.152.0.0/14 110.152.0.0/14
110.156.0.0/15 110.156.0.0/15
110.166.0.0/15 110.166.0.0/15
110.172.200.0/21
110.173.8.0/21 110.173.8.0/21
110.173.16.0/20 110.173.16.0/20
110.173.32.0/20 110.173.32.0/20
@ -1909,6 +1900,7 @@
111.142.0.0/15 111.142.0.0/15
111.144.0.0/14 111.144.0.0/14
111.148.0.0/16 111.148.0.0/16
111.149.0.0/24
111.160.0.0/13 111.160.0.0/13
111.170.0.0/16 111.170.0.0/16
111.172.0.0/14 111.172.0.0/14
@ -1919,6 +1911,7 @@
111.208.254.0/24 111.208.254.0/24
111.210.0.0/20 111.210.0.0/20
111.210.16.0/24 111.210.16.0/24
111.211.192.0/18
111.212.0.0/14 111.212.0.0/14
111.221.28.0/24 111.221.28.0/24
111.221.128.0/17 111.221.128.0/17
@ -1964,7 +1957,6 @@
113.31.96.0/19 113.31.96.0/19
113.31.144.0/20 113.31.144.0/20
113.31.160.0/19 113.31.160.0/19
113.31.192.0/18
113.44.0.0/16 113.44.0.0/16
113.45.0.0/18 113.45.0.0/18
113.45.64.0/19 113.45.64.0/19
@ -1979,7 +1971,10 @@
113.46.240.0/21 113.46.240.0/21
113.47.0.0/18 113.47.0.0/18
113.47.64.0/19 113.47.64.0/19
113.47.96.0/21
113.47.104.0/22
113.47.112.0/20 113.47.112.0/20
113.47.128.0/18
113.47.204.0/22 113.47.204.0/22
113.47.220.0/22 113.47.220.0/22
113.47.234.0/23 113.47.234.0/23
@ -2045,7 +2040,14 @@
114.67.60.0/23 114.67.60.0/23
114.67.62.0/24 114.67.62.0/24
114.67.64.0/18 114.67.64.0/18
114.67.128.0/17 114.67.131.0/24
114.67.136.0/24
114.67.150.0/24
114.67.152.0/22
114.67.156.0/24
114.67.159.0/24
114.67.160.0/19
114.67.192.0/18
114.80.0.0/12 114.80.0.0/12
114.96.0.0/13 114.96.0.0/13
114.104.0.0/14 114.104.0.0/14
@ -2088,7 +2090,6 @@
114.119.36.0/24 114.119.36.0/24
114.119.117.0/24 114.119.117.0/24
114.119.119.0/24 114.119.119.0/24
114.119.204.0/22
114.132.0.0/16 114.132.0.0/16
114.135.0.0/16 114.135.0.0/16
114.138.0.0/15 114.138.0.0/15
@ -2121,6 +2122,7 @@
115.174.64.0/19 115.174.64.0/19
115.175.0.0/18 115.175.0.0/18
115.175.64.0/19 115.175.64.0/19
115.175.120.0/21
115.182.0.0/15 115.182.0.0/15
115.190.0.0/17 115.190.0.0/17
115.190.128.0/19 115.190.128.0/19
@ -2138,8 +2140,8 @@
116.56.0.0/15 116.56.0.0/15
116.62.0.0/15 116.62.0.0/15
116.66.36.0/24 116.66.36.0/24
116.66.48.0/22 116.66.48.0/23
116.66.52.0/23 116.66.53.0/24
116.66.98.0/24 116.66.98.0/24
116.66.120.0/22 116.66.120.0/22
116.68.136.0/21 116.68.136.0/21
@ -2147,7 +2149,12 @@
116.70.64.0/18 116.70.64.0/18
116.76.0.0/15 116.76.0.0/15
116.78.0.0/16 116.78.0.0/16
116.85.0.0/16 116.85.0.0/22
116.85.13.0/24
116.85.14.0/23
116.85.16.0/22
116.85.64.0/20
116.85.240.0/20
116.89.240.0/22 116.89.240.0/22
116.90.80.0/20 116.90.80.0/20
116.90.192.0/20 116.90.192.0/20
@ -2256,7 +2263,6 @@
117.72.32.0/20 117.72.32.0/20
117.72.48.0/21 117.72.48.0/21
117.72.64.0/18 117.72.64.0/18
117.72.248.0/22
117.72.255.0/24 117.72.255.0/24
117.73.0.0/20 117.73.0.0/20
117.73.16.0/21 117.73.16.0/21
@ -2268,7 +2274,6 @@
117.79.80.0/20 117.79.80.0/20
117.79.128.0/21 117.79.128.0/21
117.79.144.0/20 117.79.144.0/20
117.79.160.0/21
117.79.224.0/20 117.79.224.0/20
117.79.241.0/24 117.79.241.0/24
117.79.242.0/24 117.79.242.0/24
@ -2281,7 +2286,7 @@
117.124.98.0/24 117.124.98.0/24
117.124.231.0/24 117.124.231.0/24
117.124.232.0/22 117.124.232.0/22
117.124.237.0/24 117.124.236.0/23
117.126.0.0/16 117.126.0.0/16
117.128.0.0/10 117.128.0.0/10
118.24.0.0/15 118.24.0.0/15
@ -2302,7 +2307,7 @@
118.26.200.0/21 118.26.200.0/21
118.26.208.0/20 118.26.208.0/20
118.26.224.0/19 118.26.224.0/19
118.30.0.0/15 118.31.0.0/16
118.64.0.0/21 118.64.0.0/21
118.64.248.0/21 118.64.248.0/21
118.66.112.0/23 118.66.112.0/23
@ -2367,12 +2372,11 @@
118.186.80.0/20 118.186.80.0/20
118.186.96.0/20 118.186.96.0/20
118.186.112.0/21 118.186.112.0/21
118.186.128.0/18 118.186.160.0/19
118.186.208.0/21 118.186.208.0/21
118.186.240.0/21 118.186.240.0/21
118.187.0.0/18 118.187.0.0/18
118.187.64.0/19 118.187.64.0/19
118.187.254.0/23
118.188.18.0/23 118.188.18.0/23
118.188.20.0/22 118.188.20.0/22
118.188.24.0/23 118.188.24.0/23
@ -2403,9 +2407,8 @@
118.193.188.0/22 118.193.188.0/22
118.194.32.0/19 118.194.32.0/19
118.194.128.0/21 118.194.128.0/21
118.194.164.0/22
118.194.240.0/21 118.194.240.0/21
118.195.0.0/16 118.195.128.0/17
118.196.0.0/19 118.196.0.0/19
118.196.32.0/20 118.196.32.0/20
118.199.0.0/16 118.199.0.0/16
@ -2775,7 +2778,7 @@
123.58.188.0/22 123.58.188.0/22
123.58.224.0/19 123.58.224.0/19
123.59.0.0/16 123.59.0.0/16
123.60.0.0/15 123.60.0.0/16
123.64.0.0/15 123.64.0.0/15
123.66.0.0/16 123.66.0.0/16
123.77.0.0/19 123.77.0.0/19
@ -2974,7 +2977,7 @@
139.148.0.0/16 139.148.0.0/16
139.155.0.0/16 139.155.0.0/16
139.159.0.0/19 139.159.0.0/19
139.159.32.0/20 139.159.32.0/22
139.159.96.0/20 139.159.96.0/20
139.159.112.0/22 139.159.112.0/22
139.159.132.0/22 139.159.132.0/22
@ -2991,7 +2994,8 @@
139.208.0.0/13 139.208.0.0/13
139.217.0.0/16 139.217.0.0/16
139.219.0.0/16 139.219.0.0/16
139.220.128.0/17 139.220.192.0/22
139.220.240.0/22
139.224.0.0/16 139.224.0.0/16
139.226.0.0/15 139.226.0.0/15
140.75.0.0/16 140.75.0.0/16
@ -3014,7 +3018,6 @@
140.249.0.0/16 140.249.0.0/16
140.250.0.0/16 140.250.0.0/16
140.255.0.0/16 140.255.0.0/16
141.11.50.0/23
143.64.0.0/16 143.64.0.0/16
143.92.44.0/22 143.92.44.0/22
144.0.0.0/16 144.0.0.0/16
@ -3042,7 +3045,7 @@
146.56.192.0/18 146.56.192.0/18
146.196.56.0/22 146.196.56.0/22
146.196.68.0/22 146.196.68.0/22
146.196.80.0/23 146.196.80.0/22
146.196.112.0/21 146.196.112.0/21
146.222.79.0/24 146.222.79.0/24
146.222.81.0/24 146.222.81.0/24
@ -3057,18 +3060,6 @@
149.87.239.0/24 149.87.239.0/24
149.87.240.0/23 149.87.240.0/23
149.87.242.0/24 149.87.242.0/24
149.115.227.0/24
149.115.228.0/24
149.115.233.0/24
149.115.234.0/23
149.115.239.0/24
149.115.240.0/23
149.115.243.0/24
149.115.244.0/24
149.115.246.0/24
149.115.248.0/24
149.115.255.0/24
149.134.158.0/24
150.129.80.0/22 150.129.80.0/22
150.129.136.0/22 150.129.136.0/22
150.129.192.0/22 150.129.192.0/22
@ -3102,9 +3093,7 @@
154.8.48.0/20 154.8.48.0/20
154.8.128.0/17 154.8.128.0/17
154.9.244.0/22 154.9.244.0/22
154.19.64.0/22
154.19.72.0/21 154.19.72.0/21
154.19.80.0/22
154.19.88.0/22 154.19.88.0/22
154.19.100.0/22 154.19.100.0/22
154.19.112.0/20 154.19.112.0/20
@ -3117,36 +3106,30 @@
154.83.28.0/24 154.83.28.0/24
154.89.32.0/20 154.89.32.0/20
154.91.158.0/23 154.91.158.0/23
154.195.64.0/19 154.197.137.0/24
154.197.153.0/24 154.197.153.0/24
154.197.156.0/24 154.197.156.0/24
154.197.163.0/24 154.197.163.0/24
154.197.168.0/24 154.197.168.0/24
154.197.172.0/24 154.197.172.0/24
154.197.189.0/24
154.197.192.0/24 154.197.192.0/24
154.197.206.0/24
154.197.208.0/24 154.197.208.0/24
154.197.212.0/24 154.197.212.0/24
154.197.224.0/24 154.197.224.0/24
154.197.232.0/24 154.197.232.0/24
154.197.240.0/24 154.197.240.0/24
154.205.64.0/20 154.197.248.0/24
154.205.80.0/22
154.205.84.0/23
154.205.87.0/24
154.205.88.0/21
154.205.96.0/20
154.205.112.0/21
154.205.124.0/22
154.208.140.0/22 154.208.140.0/22
154.208.144.0/20 154.208.144.0/20
154.208.160.0/21 154.208.160.0/21
154.208.172.0/23 154.208.172.0/23
154.213.4.0/23 154.213.4.0/23
154.223.96.0/19
155.102.0.0/22 155.102.0.0/22
155.102.4.0/23 155.102.4.0/23
155.102.9.0/24 155.102.9.0/24
155.102.10.0/24 155.102.10.0/23
155.102.12.0/22 155.102.12.0/22
155.102.16.0/22 155.102.16.0/22
155.102.20.0/24 155.102.20.0/24
@ -3155,11 +3138,7 @@
155.102.27.0/24 155.102.27.0/24
155.102.28.0/23 155.102.28.0/23
155.102.30.0/24 155.102.30.0/24
155.102.32.0/23 155.102.32.0/20
155.102.34.0/24
155.102.36.0/24
155.102.38.0/23
155.102.40.0/21
155.102.49.0/24 155.102.49.0/24
155.102.50.0/23 155.102.50.0/23
155.102.52.0/22 155.102.52.0/22
@ -3185,21 +3164,15 @@
156.224.200.0/24 156.224.200.0/24
156.224.224.0/24 156.224.224.0/24
156.224.232.0/24 156.224.232.0/24
156.227.40.0/21
156.227.48.0/20
156.230.11.0/24 156.230.11.0/24
156.230.12.0/23 156.230.12.0/23
156.232.9.0/24 156.232.9.0/24
156.232.10.0/23 156.232.10.0/23
156.236.119.0/24
156.237.104.0/23 156.237.104.0/23
156.239.0.0/20
156.239.64.0/18
156.239.224.0/19
156.242.5.0/24 156.242.5.0/24
156.242.6.0/24 156.242.6.0/24
156.247.8.0/22 156.247.8.0/22
156.247.12.0/23 156.247.12.0/24
156.247.14.0/24 156.247.14.0/24
156.255.2.0/23 156.255.2.0/23
157.0.0.0/16 157.0.0.0/16
@ -3220,33 +3193,36 @@
158.26.192.0/24 158.26.192.0/24
158.26.194.0/24 158.26.194.0/24
158.140.252.0/23 158.140.252.0/23
158.140.254.0/24
159.27.0.0/16 159.27.0.0/16
159.75.0.0/16 159.75.0.0/16
159.226.0.0/16 159.226.0.0/16
160.19.76.0/23 160.19.76.0/23
160.19.208.0/21 160.19.208.0/22
160.20.18.0/23 160.20.18.0/23
160.22.188.0/24 160.22.188.0/24
160.22.244.0/23 160.22.244.0/23
160.25.20.0/23 160.25.20.0/23
160.30.230.0/23
160.83.110.0/24 160.83.110.0/24
160.191.0.0/24 160.191.0.0/24
160.191.194.0/23 160.191.194.0/23
160.202.212.0/22 160.202.212.0/22
160.202.224.0/19 160.202.224.0/19
160.250.10.0/24
160.250.14.0/23 160.250.14.0/23
160.250.18.0/24 160.250.18.0/24
161.163.0.0/21 161.163.0.0/21
161.163.28.0/23 161.163.28.0/23
161.189.0.0/16 161.189.0.0/16
161.207.0.0/16 161.207.0.0/16
162.0.152.0/24
162.14.0.0/16 162.14.0.0/16
162.105.0.0/16 162.105.0.0/16
162.248.72.0/21 162.248.72.0/21
163.0.0.0/16 163.0.0.0/16
163.5.166.0/24 163.5.166.0/24
163.47.4.0/22 163.47.4.0/22
163.53.44.0/24
163.53.46.0/23 163.53.46.0/23
163.53.60.0/22 163.53.60.0/22
163.53.88.0/21 163.53.88.0/21
@ -3322,13 +3298,16 @@
163.181.204.0/22 163.181.204.0/22
163.181.209.0/24 163.181.209.0/24
163.181.210.0/23 163.181.210.0/23
163.181.212.0/22 163.181.212.0/23
163.181.214.0/24
163.181.216.0/21 163.181.216.0/21
163.181.224.0/23 163.181.224.0/23
163.181.228.0/22 163.181.228.0/22
163.181.232.0/24 163.181.232.0/24
163.181.234.0/24 163.181.234.0/24
163.181.236.0/22 163.181.236.0/22
163.181.241.0/24
163.181.242.0/23
163.181.244.0/23 163.181.244.0/23
163.181.246.0/24 163.181.246.0/24
163.181.248.0/22 163.181.248.0/22
@ -3338,7 +3317,6 @@
164.155.133.0/24 164.155.133.0/24
166.111.0.0/16 166.111.0.0/16
167.139.0.0/16 167.139.0.0/16
167.189.0.0/16
167.220.244.0/22 167.220.244.0/22
168.159.144.0/21 168.159.144.0/21
168.159.152.0/22 168.159.152.0/22
@ -3379,8 +3357,7 @@
175.46.0.0/15 175.46.0.0/15
175.102.0.0/19 175.102.0.0/19
175.102.32.0/22 175.102.32.0/22
175.102.128.0/20 175.102.128.0/21
175.102.144.0/21
175.102.178.0/23 175.102.178.0/23
175.102.180.0/22 175.102.180.0/22
175.102.184.0/24 175.102.184.0/24
@ -3524,8 +3501,6 @@
185.227.152.0/22 185.227.152.0/22
185.232.92.0/23 185.232.92.0/23
185.234.212.0/24 185.234.212.0/24
185.238.248.0/24
185.238.250.0/24
185.239.84.0/22 185.239.84.0/22
185.242.232.0/22 185.242.232.0/22
185.243.240.0/22 185.243.240.0/22
@ -3547,9 +3522,9 @@
192.232.97.0/24 192.232.97.0/24
193.9.44.0/24 193.9.44.0/24
193.9.46.0/24 193.9.46.0/24
193.22.152.0/24
193.112.0.0/16 193.112.0.0/16
193.119.10.0/24 193.119.10.0/24
193.119.13.0/24
193.119.20.0/24 193.119.20.0/24
193.119.30.0/24 193.119.30.0/24
194.15.39.0/24 194.15.39.0/24
@ -3566,7 +3541,6 @@
194.169.180.0/23 194.169.180.0/23
196.50.192.0/18 196.50.192.0/18
198.175.100.0/22 198.175.100.0/22
198.187.64.0/18
198.208.17.0/24 198.208.17.0/24
198.208.19.0/24 198.208.19.0/24
198.208.30.0/24 198.208.30.0/24
@ -3628,8 +3602,11 @@
202.60.112.0/20 202.60.112.0/20
202.60.132.0/22 202.60.132.0/22
202.61.88.0/22 202.61.88.0/22
202.61.128.0/21 202.61.128.0/23
202.61.136.0/22 202.61.131.0/24
202.61.132.0/22
202.61.136.0/24
202.61.138.0/23
202.61.140.0/24 202.61.140.0/24
202.61.142.0/23 202.61.142.0/23
202.61.144.0/21 202.61.144.0/21
@ -3656,7 +3633,7 @@
202.81.176.0/20 202.81.176.0/20
202.84.17.0/24 202.84.17.0/24
202.85.208.0/20 202.85.208.0/20
202.89.96.0/22 202.89.96.0/24
202.89.232.0/21 202.89.232.0/21
202.90.20.0/22 202.90.20.0/22
202.90.96.0/20 202.90.96.0/20
@ -3942,7 +3919,7 @@
203.107.108.0/23 203.107.108.0/23
203.110.160.0/19 203.110.160.0/19
203.110.208.0/20 203.110.208.0/20
203.110.232.0/23 203.110.232.0/24
203.114.244.0/22 203.114.244.0/22
203.118.248.0/22 203.118.248.0/22
203.119.25.0/24 203.119.25.0/24
@ -3994,7 +3971,6 @@
203.168.8.0/24 203.168.8.0/24
203.168.16.0/23 203.168.16.0/23
203.168.18.0/24 203.168.18.0/24
203.170.58.0/23
203.174.4.0/24 203.174.4.0/24
203.174.96.0/19 203.174.96.0/19
203.175.128.0/19 203.175.128.0/19
@ -4053,7 +4029,6 @@
206.54.1.128/25 206.54.1.128/25
206.237.8.0/23 206.237.8.0/23
206.237.16.0/20 206.237.16.0/20
206.237.112.0/20
207.226.153.0/24 207.226.153.0/24
207.226.154.0/24 207.226.154.0/24
210.2.0.0/23 210.2.0.0/23
@ -4300,17 +4275,13 @@
211.160.204.0/23 211.160.204.0/23
211.160.240.0/20 211.160.240.0/20
211.161.0.0/20 211.161.0.0/20
211.161.20.0/22
211.161.24.0/22 211.161.24.0/22
211.161.32.0/20 211.161.32.0/20
211.161.52.0/22 211.161.60.0/22
211.161.56.0/21
211.161.80.0/20
211.161.97.0/24 211.161.97.0/24
211.161.101.0/24 211.161.101.0/24
211.161.102.0/23 211.161.102.0/23
211.161.120.0/21 211.161.120.0/21
211.161.128.0/20
211.161.192.0/22 211.161.192.0/22
211.161.203.0/24 211.161.203.0/24
211.161.209.0/24 211.161.209.0/24
@ -4321,7 +4292,6 @@
211.162.112.0/20 211.162.112.0/20
211.162.192.0/22 211.162.192.0/22
211.162.200.0/22 211.162.200.0/22
211.162.240.0/20
211.165.0.0/16 211.165.0.0/16
211.166.0.0/16 211.166.0.0/16
211.167.64.0/18 211.167.64.0/18
@ -4354,7 +4324,7 @@
218.98.111.0/24 218.98.111.0/24
218.98.112.0/20 218.98.112.0/20
218.98.160.0/24 218.98.160.0/24
218.98.176.0/20 218.98.176.0/21
218.98.192.0/24 218.98.192.0/24
218.100.88.0/21 218.100.88.0/21
218.104.0.0/15 218.104.0.0/15
@ -4373,7 +4343,6 @@
218.240.184.0/24 218.240.184.0/24
218.240.255.0/24 218.240.255.0/24
218.241.16.0/21 218.241.16.0/21
218.241.24.0/22
218.241.96.0/19 218.241.96.0/19
218.241.128.0/17 218.241.128.0/17
218.242.0.0/16 218.242.0.0/16
@ -4391,6 +4360,7 @@
218.245.0.0/17 218.245.0.0/17
218.246.0.0/19 218.246.0.0/19
218.246.32.0/22 218.246.32.0/22
218.246.48.0/22
218.246.59.0/24 218.246.59.0/24
218.246.64.0/18 218.246.64.0/18
218.246.160.0/19 218.246.160.0/19
@ -4434,7 +4404,8 @@
219.235.0.0/20 219.235.0.0/20
219.235.32.0/19 219.235.32.0/19
219.235.64.0/18 219.235.64.0/18
219.235.128.0/19 219.235.128.0/20
219.235.144.0/21
219.235.192.0/23 219.235.192.0/23
219.235.207.0/24 219.235.207.0/24
219.235.224.0/22 219.235.224.0/22
@ -4451,21 +4422,12 @@
220.101.192.0/18 220.101.192.0/18
220.112.0.0/18 220.112.0.0/18
220.112.192.0/20 220.112.192.0/20
220.112.224.0/19 220.113.0.0/19
220.113.0.0/18 220.113.32.0/20
220.113.96.0/21 220.113.96.0/21
220.113.128.0/21 220.113.150.0/23
220.113.136.0/22 220.113.152.0/21
220.113.144.0/20
220.113.168.0/21
220.113.180.0/22
220.113.184.0/22
220.114.250.0/23 220.114.250.0/23
220.115.8.0/21
220.115.16.0/20
220.115.228.0/22
220.115.232.0/21
220.115.240.0/21
220.152.128.0/17 220.152.128.0/17
220.160.0.0/12 220.160.0.0/12
220.176.0.0/14 220.176.0.0/14
@ -4540,8 +4502,7 @@
221.133.232.0/22 221.133.232.0/22
221.133.244.0/23 221.133.244.0/23
221.137.0.0/16 221.137.0.0/16
221.172.0.0/16 221.174.0.0/17
221.174.0.0/16
221.176.0.0/13 221.176.0.0/13
221.192.0.0/14 221.192.0.0/14
221.196.0.0/15 221.196.0.0/15

View File

@ -1 +1 @@
20250127031156 20250311032050

View File

@ -28,11 +28,10 @@
2400:5a60:100::/48 2400:5a60:100::/48
2400:5f60::/32 2400:5f60::/32
2400:6000::/32 2400:6000::/32
2400:6460::/40 2400:6460::/39
2400:6600::/32 2400:6600::/32
2400:6e60:1301::/48 2400:6e60:1301::/48
2400:7100::/32 2400:7100::/32
2400:73e0::/32
2400:75aa::/32 2400:75aa::/32
2400:7bc0:20::/43 2400:7bc0:20::/43
2400:7fc0::/40 2400:7fc0::/40
@ -109,7 +108,6 @@
2400:da00::/32 2400:da00::/32
2400:dd00::/28 2400:dd00::/28
2400:ebc0::/32 2400:ebc0::/32
2400:ed60::/48
2400:ee00::/32 2400:ee00::/32
2400:f6e0::/32 2400:f6e0::/32
2400:f720::/32 2400:f720::/32
@ -119,6 +117,7 @@
2401:800::/32 2401:800::/32
2401:ba0::/32 2401:ba0::/32
2401:1160::/32 2401:1160::/32
2401:11a0:10::/44
2401:11a0:1500::/40 2401:11a0:1500::/40
2401:11a0:d150::/48 2401:11a0:d150::/48
2401:11a0:d152::/48 2401:11a0:d152::/48
@ -150,6 +149,7 @@
2401:4780::/32 2401:4780::/32
2401:4880::/32 2401:4880::/32
2401:4a80::/32 2401:4a80::/32
2401:5c20:10::/48
2401:70e0::/32 2401:70e0::/32
2401:71c0::/48 2401:71c0::/48
2401:7700::/32 2401:7700::/32
@ -195,6 +195,7 @@
2402:1440::/32 2402:1440::/32
2402:2000::/32 2402:2000::/32
2402:3180::/48 2402:3180::/48
2402:3180:2::/47
2402:3180:8000::/33 2402:3180:8000::/33
2402:3c00::/32 2402:3c00::/32
2402:3f80:1400::/40 2402:3f80:1400::/40
@ -220,6 +221,7 @@
2402:b8c0:6::/48 2402:b8c0:6::/48
2402:b8c0:86::/48 2402:b8c0:86::/48
2402:b8c0:106::/48 2402:b8c0:106::/48
2402:b8c0:186::/48
2402:d340::/32 2402:d340::/32
2402:db40:5100::/48 2402:db40:5100::/48
2402:db40:5900::/48 2402:db40:5900::/48
@ -313,6 +315,8 @@
2404:2280:160::/48 2404:2280:160::/48
2404:2280:170::/48 2404:2280:170::/48
2404:2280:177::/48 2404:2280:177::/48
2404:2280:17a::/47
2404:2280:17c::/48
2404:2280:17e::/47 2404:2280:17e::/47
2404:2280:180::/47 2404:2280:180::/47
2404:2280:183::/48 2404:2280:183::/48
@ -340,7 +344,7 @@
2404:2280:1d0::/47 2404:2280:1d0::/47
2404:2280:1d3::/48 2404:2280:1d3::/48
2404:2280:1d4::/48 2404:2280:1d4::/48
2404:2280:1d6::/48 2404:2280:1d6::/47
2404:2280:1d8::/45 2404:2280:1d8::/45
2404:2280:1e0::/45 2404:2280:1e0::/45
2404:2280:1e8::/46 2404:2280:1e8::/46
@ -349,6 +353,7 @@
2404:2280:1f0::/45 2404:2280:1f0::/45
2404:2280:1f8::/46 2404:2280:1f8::/46
2404:3700::/48 2404:3700::/48
2404:4dc0::/32
2404:6380::/48 2404:6380::/48
2404:6380:1000::/48 2404:6380:1000::/48
2404:6380:8001::/48 2404:6380:8001::/48
@ -386,9 +391,6 @@
2404:e280::/47 2404:e280::/47
2404:e8c0::/32 2404:e8c0::/32
2404:f4c0:f000::/44 2404:f4c0:f000::/44
2404:f4c0:fa00::/48
2404:f4c0:fa02::/48
2404:f4c0:fa0b::/48
2405:80:1::/48 2405:80:1::/48
2405:80:13::/48 2405:80:13::/48
2405:6c0:2::/48 2405:6c0:2::/48
@ -425,28 +427,26 @@
2406:280::/32 2406:280::/32
2406:840:9000::/44 2406:840:9000::/44
2406:840:9961::/48 2406:840:9961::/48
2406:840:9962::/47 2406:840:9962::/48
2406:840:996c::/48 2406:840:996c::/48
2406:840:e031::/48 2406:840:e031::/48
2406:840:e033::/48 2406:840:e033::/48
2406:840:e03f::/48 2406:840:e03f::/48
2406:840:e080::/44 2406:840:e080::/44
2406:840:e0cf::/48 2406:840:e0cf::/48
2406:840:e0e0::/47 2406:840:e0e1::/48
2406:840:e0e2::/48 2406:840:e0e2::/48
2406:840:e0e4::/47 2406:840:e0e5::/48
2406:840:e0e8::/48
2406:840:e10f::/48 2406:840:e10f::/48
2406:840:e14f::/48 2406:840:e14f::/48
2406:840:e20f::/48
2406:840:e230::/44 2406:840:e230::/44
2406:840:e36f::/48
2406:840:e500::/47 2406:840:e500::/47
2406:840:e621::/48 2406:840:e621::/48
2406:840:e666::/47 2406:840:e666::/47
2406:840:e720::/44 2406:840:e720::/44
2406:840:e80f::/48 2406:840:e80f::/48
2406:840:eab0::/48 2406:840:eab0::/48
2406:840:eab4::/48
2406:840:eabb::/48 2406:840:eabb::/48
2406:840:eabc::/47 2406:840:eabc::/47
2406:840:eabe::/48 2406:840:eabe::/48
@ -465,15 +465,13 @@
2406:840:f380::/44 2406:840:f380::/44
2406:840:fc80::/44 2406:840:fc80::/44
2406:840:fcd0::/48 2406:840:fcd0::/48
2406:840:fd00::/47
2406:840:fd03::/48
2406:840:fd1f::/48
2406:840:fd40::/42 2406:840:fd40::/42
2406:840:fd80::/42 2406:840:fd80::/42
2406:840:fdc0::/44 2406:840:fdc0::/44
2406:840:fdd1::/48 2406:840:fdd1::/48
2406:840:fe27::/48 2406:840:fe27::/48
2406:840:fe90::/46 2406:840:fe90::/46
2406:840:fe94::/48
2406:840:fe96::/47 2406:840:fe96::/47
2406:840:fe98::/46 2406:840:fe98::/46
2406:840:feab::/48 2406:840:feab::/48
@ -521,6 +519,7 @@
2407:2840::/48 2407:2840::/48
2407:3740::/48 2407:3740::/48
2407:37c0::/32 2407:37c0::/32
2407:4980::/32
2407:5380::/32 2407:5380::/32
2407:6c40:1100::/48 2407:6c40:1100::/48
2407:6c40:1210::/48 2407:6c40:1210::/48
@ -1160,7 +1159,6 @@
240c:c000::/20 240c:c000::/20
240d:4000::/21 240d:4000::/21
240e::/20 240e::/20
2601:1d08:4000::/44
2602:2e0:ff::/48 2602:2e0:ff::/48
2602:f7ee:ee::/48 2602:f7ee:ee::/48
2602:f9ba:a8::/48 2602:f9ba:a8::/48
@ -1173,8 +1171,8 @@
2602:feda:1bf::/48 2602:feda:1bf::/48
2602:feda:1d1::/48 2602:feda:1d1::/48
2602:feda:1df::/48 2602:feda:1df::/48
2602:feda:2d0::/47 2602:feda:2d0::/44
2602:feda:2f0::/48 2602:feda:2f0::/44
2602:feda:bd0::/48 2602:feda:bd0::/48
2602:feda:d80::/48 2602:feda:d80::/48
2605:9d80:8001::/48 2605:9d80:8001::/48
@ -1218,25 +1216,23 @@
2a04:f580:9270::/48 2a04:f580:9270::/48
2a04:f580:9280::/48 2a04:f580:9280::/48
2a04:f580:9290::/48 2a04:f580:9290::/48
2a05:dfc7:4000::/34 2a05:b900::/29
2a06:1281::/36
2a06:1281:b100::/40 2a06:1281:b100::/40
2a06:1281:b200::/39 2a06:1281:b200::/39
2a06:1281:b400::/38 2a06:1281:b400::/38
2a06:1281:b800::/39 2a06:1281:b800::/39
2a06:3601::/32 2a06:3601::/32
2a06:3602::/31 2a06:3603::/32
2a06:9f81:4600::/44 2a06:3607::/32
2a06:9f81:4600::/43
2a06:9f81:4620::/44 2a06:9f81:4620::/44
2a06:9f81:4640::/43 2a06:9f81:4640::/43
2a06:9f81:4660::/44 2a06:9f81:4660::/44
2a06:9f81:5100::/40 2a06:9f81:5100::/40
2a06:9f81:5400::/40
2a06:9f81:6100::/40 2a06:9f81:6100::/40
2a06:9f81:640b::/48 2a06:9f81:640b::/48
2a06:9f81:6455::/48 2a06:9f81:6455::/48
2a06:9f81:6488::/48 2a06:9f81:6488::/48
2a06:9f81:649f::/48
2a06:9f81:64a1::/48 2a06:9f81:64a1::/48
2a06:a005:260::/43 2a06:a005:260::/43
2a06:a005:280::/43 2a06:a005:280::/43
@ -1247,31 +1243,23 @@
2a06:a005:a13::/48 2a06:a005:a13::/48
2a06:a005:e80::/43 2a06:a005:e80::/43
2a06:a005:1c40::/44 2a06:a005:1c40::/44
2a09:54c6:2000::/36 2a09:54c6:4000::/36
2a09:54c6:4000::/35
2a09:54c6:c100::/40 2a09:54c6:c100::/40
2a09:54c6:c200::/39 2a09:54c6:c200::/40
2a09:54c6:c400::/39 2a09:54c6:c400::/40
2a09:b280:ff83::/48 2a09:b280:ff83::/48
2a09:b280:ff84::/47 2a09:b280:ff84::/47
2a0a:2840:20::/43 2a0a:2840:20::/43
2a0a:2845:aab8::/46 2a0a:2845:aab8::/46
2a0a:6040:3410::/48
2a0a:6040:3430::/48
2a0a:6040:34ff::/48
2a0a:6040:ec00::/40 2a0a:6040:ec00::/40
2a0a:6044:6600::/40 2a0a:6044:6600::/40
2a0a:6044:6e00::/47
2a0a:6044:6e02::/48
2a0a:6044:b800::/40
2a0b:b87:ffb5::/48 2a0b:b87:ffb5::/48
2a0b:2542::/48 2a0b:2542::/48
2a0b:4340:a6::/48
2a0b:4e07:b8::/47 2a0b:4e07:b8::/47
2a0c:9a40:84e0::/48
2a0c:9a46:800::/43 2a0c:9a46:800::/43
2a0c:b641:571::/48 2a0c:b641:571::/48
2a0e:8f02:2182::/47 2a0e:8f02:2182::/47
2a0e:8f02:f055::/48
2a0e:8f02:f067::/48 2a0e:8f02:f067::/48
2a0e:97c0:550::/44 2a0e:97c0:550::/44
2a0e:97c0:83f::/48 2a0e:97c0:83f::/48
@ -1281,7 +1269,6 @@
2a0e:aa06:490::/44 2a0e:aa06:490::/44
2a0e:aa06:500::/44 2a0e:aa06:500::/44
2a0e:aa06:520::/48 2a0e:aa06:520::/48
2a0e:aa06:525::/48
2a0e:aa06:541::/48 2a0e:aa06:541::/48
2a0e:aa07:e01b::/48 2a0e:aa07:e01b::/48
2a0e:aa07:e024::/47 2a0e:aa07:e024::/47
@ -1289,48 +1276,55 @@
2a0e:aa07:e035::/48 2a0e:aa07:e035::/48
2a0e:aa07:e039::/48 2a0e:aa07:e039::/48
2a0e:aa07:e044::/48 2a0e:aa07:e044::/48
2a0e:aa07:e150::/44 2a0e:aa07:e151::/48
2a0e:aa07:e16a::/48 2a0e:aa07:e16a::/48
2a0e:aa07:e1a0::/43 2a0e:aa07:e1a0::/43
2a0e:aa07:e1e1::/48 2a0e:aa07:e1e2::/48
2a0e:aa07:e1e2::/47 2a0e:aa07:e1e4::/47
2a0e:aa07:e1e4::/48 2a0e:aa07:e200::/43
2a0e:aa07:e200::/44 2a0e:aa07:e220::/44
2a0e:aa07:f0d0::/47 2a0e:aa07:f0d1::/48
2a0e:aa07:f0d2::/48 2a0e:aa07:f0d2::/48
2a0e:aa07:f0d4::/47 2a0e:aa07:f0d5::/48
2a0e:aa07:f0d8::/48
2a0e:aa07:f0de::/48
2a0e:b107:12b::/48 2a0e:b107:12b::/48
2a0e:b107:272::/48 2a0e:b107:272::/48
2a0e:b107:740::/44 2a0e:b107:740::/44
2a0e:b107:c10::/48 2a0e:b107:c10::/48
2a0e:b107:dce::/48 2a0e:b107:dce::/48
2a0e:b107:16b0::/44 2a0e:b107:16b0::/44
2a0e:b107:16c0::/44 2a0e:b107:178c::/47
2a0e:b107:178d::/48 2a0f:1f80::/29
2a0f:5707:ac00::/47 2a0f:5707:ac00::/47
2a0f:7803:dd00::/42 2a0f:7803:dd00::/42
2a0f:7803:f5d0::/44
2a0f:7803:f5e0::/43
2a0f:7803:f680::/43 2a0f:7803:f680::/43
2a0f:7803:f6a0::/44 2a0f:7803:f6a0::/44
2a0f:7803:f7c0::/44 2a0f:7803:f7c0::/42
2a0f:7803:f7e0::/43
2a0f:7803:f800::/43 2a0f:7803:f800::/43
2a0f:7803:f840::/44 2a0f:7803:f840::/44
2a0f:7803:f860::/44 2a0f:7803:f860::/44
2a0f:7803:f8b0::/44 2a0f:7803:f8b0::/44
2a0f:7803:f970::/44 2a0f:7803:fa21::/48
2a0f:7803:fe22::/48 2a0f:7803:fa22::/47
2a0f:7803:fa24::/46
2a0f:7803:faf3::/48
2a0f:7803:faf7::/48
2a0f:7803:fe81::/48 2a0f:7803:fe81::/48
2a0f:7803:fe82::/48 2a0f:7803:fe82::/48
2a0f:7803:fe84::/48 2a0f:7804:da00::/40
2a0f:7807::/32 2a0f:7807::/32
2a0f:7d07::/32 2a0f:7d07::/32
2a0f:85c1:816::/48 2a0f:85c1:816::/48
2a0f:85c1:8f4::/48
2a0f:85c1:b3a::/48 2a0f:85c1:b3a::/48
2a0f:9400:6110::/48
2a0f:9400:7700::/48 2a0f:9400:7700::/48
2a0f:ac00::/29 2a0f:ac00::/29
2a10:2f00:15a::/48 2a10:2f00:15a::/48
2a10:cc40:190::/48 2a10:cc40:190::/48
2a12:4ac0::/29
2a12:f8c0:1000::/40 2a12:f8c0:1000::/40
2a12:f8c3::/36 2a12:f8c3::/36
2a13:1800::/48 2a13:1800::/48
@ -1338,44 +1332,37 @@
2a13:1800:80::/44 2a13:1800:80::/44
2a13:1800:300::/44 2a13:1800:300::/44
2a13:1801:180::/43 2a13:1801:180::/43
2a13:a5c3:ff10::/44
2a13:a5c3:ff21::/48 2a13:a5c3:ff21::/48
2a13:a5c3:ff50::/44 2a13:a5c3:ff50::/44
2a13:a5c7:1800::/40 2a13:a5c7:1800::/40
2a13:a5c7:2100::/48 2a13:a5c7:2100::/48
2a13:a5c7:2102::/48 2a13:a5c7:2102::/48
2a13:a5c7:2109::/48
2a13:a5c7:2110::/48 2a13:a5c7:2110::/48
2a13:a5c7:2117::/48
2a13:a5c7:2118::/48
2a13:a5c7:2121::/48 2a13:a5c7:2121::/48
2a13:a5c7:2200::/40
2a13:a5c7:2801::/48 2a13:a5c7:2801::/48
2a13:a5c7:2803::/48 2a13:a5c7:2803::/48
2a13:aac4:f000::/44 2a13:aac4:f000::/44
2a14:7c0:4a01::/48 2a14:7c0:4a01::/48
2a14:4c41::/32 2a14:4c41::/32
2a14:67c1:20::/44
2a14:67c1:70::/46 2a14:67c1:70::/46
2a14:67c1:510::/44
2a14:67c1:520::/44
2a14:67c1:610::/44
2a14:67c1:701::/48
2a14:67c1:703::/48 2a14:67c1:703::/48
2a14:67c1:704::/48 2a14:67c1:704::/48
2a14:67c1:800::/48 2a14:67c1:800::/48
2a14:67c1:802::/48
2a14:67c1:804::/48
2a14:67c1:80b::/48
2a14:67c1:1000::/37
2a14:67c1:a010::/44 2a14:67c1:a010::/44
2a14:67c1:a020::/47
2a14:67c1:a024::/48 2a14:67c1:a024::/48
2a14:67c1:a02a::/48
2a14:67c1:a02f::/48 2a14:67c1:a02f::/48
2a14:7580:9200::/40 2a14:67c1:b066::/48
2a14:67c1:b100::/47
2a14:67c5:1000::/36
2a14:7580:9202::/47
2a14:7580:9204::/46
2a14:7580:9400::/39 2a14:7580:9400::/39
2a14:7580:c000::/35 2a14:7580:d000::/36
2a14:7580:e200::/40 2a14:7580:e200::/40
2a14:7581:9010::/44 2a14:7581:9010::/44
2a14:7584:9000::/36
2c0f:f7a8:8011::/48 2c0f:f7a8:8011::/48
2c0f:f7a8:8050::/48 2c0f:f7a8:8050::/48
2c0f:f7a8:805f::/48 2c0f:f7a8:805f::/48

View File

@ -1 +1 @@
20250127031156 20250311032050

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
202501262210 202503102212

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
202501262210 202503102212

View File

@ -1,8 +1,6 @@
#!/usr/bin/utpl #!/usr/bin/utpl -S
{%- {%-
'use strict';
import { readfile } from 'fs'; import { readfile } from 'fs';
import { cursor } from 'uci'; import { cursor } from 'uci';
import { isEmpty } from '/etc/homeproxy/scripts/homeproxy.uc'; import { isEmpty } from '/etc/homeproxy/scripts/homeproxy.uc';

View File

@ -2,7 +2,7 @@
/* /*
* SPDX-License-Identifier: GPL-2.0-only * SPDX-License-Identifier: GPL-2.0-only
* *
* Copyright (C) 2023-2024 ImmortalWrt.org * Copyright (C) 2023-2025 ImmortalWrt.org
*/ */
'use strict'; 'use strict';
@ -20,7 +20,7 @@ import {
const ubus = connect(); const ubus = connect();
const features = ubus.call('luci.homeproxy', 'singbox_get_features') || {}; /* const features = ubus.call('luci.homeproxy', 'singbox_get_features') || {}; */
/* UCI config start */ /* UCI config start */
const uci = cursor(); const uci = cursor();
@ -247,7 +247,6 @@ function generate_outbound(node) {
certificate_path: node.tls_cert_path, certificate_path: node.tls_cert_path,
ech: (node.tls_ech === '1') ? { ech: (node.tls_ech === '1') ? {
enabled: true, enabled: true,
dynamic_record_sizing_disabled: (node.tls_ech_tls_disable_drs === '1'),
pq_signature_schemes_enabled: (node.tls_ech_enable_pqss === '1'), pq_signature_schemes_enabled: (node.tls_ech_enable_pqss === '1'),
config: node.tls_ech_config, config: node.tls_ech_config,
config_path: node.tls_ech_config_path config_path: node.tls_ech_config_path
@ -302,9 +301,12 @@ function get_outbound(cfg) {
push(outbounds, get_outbound(i)); push(outbounds, get_outbound(i));
return outbounds; return outbounds;
} else { } else {
if (cfg in ['direct-out', 'block-out']) { switch (cfg) {
case 'block-out':
return null;
case 'direct-out':
return cfg; return cfg;
} else { default:
const node = uci.get(uciconfig, cfg, 'node'); const node = uci.get(uciconfig, cfg, 'node');
if (isEmpty(node)) if (isEmpty(node))
die(sprintf("%s's node is missing, please check your configuration.", cfg)); die(sprintf("%s's node is missing, please check your configuration.", cfg));
@ -320,11 +322,16 @@ function get_resolver(cfg) {
if (isEmpty(cfg)) if (isEmpty(cfg))
return null; return null;
if (cfg in ['default-dns', 'system-dns', 'block-dns']) switch (cfg) {
case 'block-dns':
return null;
case 'default-dns':
case 'system-dns':
return cfg; return cfg;
else default:
return 'cfg-' + cfg + '-dns'; return 'cfg-' + cfg + '-dns';
} }
}
function get_ruleset(cfg) { function get_ruleset(cfg) {
if (isEmpty(cfg)) if (isEmpty(cfg))
@ -360,10 +367,6 @@ config.dns = {
tag: 'system-dns', tag: 'system-dns',
address: 'local', address: 'local',
detour: 'direct-out' detour: 'direct-out'
},
{
tag: 'block-dns',
address: 'rcode://name_error'
} }
], ],
rules: [], rules: [],
@ -389,12 +392,14 @@ if (!isEmpty(main_node)) {
/* Avoid DNS loop */ /* Avoid DNS loop */
push(config.dns.rules, { push(config.dns.rules, {
outbound: 'any', outbound: 'any',
action: 'route',
server: 'default-dns' server: 'default-dns'
}); });
if (length(direct_domain_list)) if (length(direct_domain_list))
push(config.dns.rules, { push(config.dns.rules, {
rule_set: 'direct-domain', rule_set: 'direct-domain',
action: 'route',
server: (routing_mode === 'bypass_mainland_china' ) ? 'china-dns' : 'default-dns' server: (routing_mode === 'bypass_mainland_china' ) ? 'china-dns' : 'default-dns'
}); });
@ -403,7 +408,7 @@ if (!isEmpty(main_node)) {
push(config.dns.rules, { push(config.dns.rules, {
rule_set: (routing_mode !== 'gfwlist') ? 'proxy-domain' : null, rule_set: (routing_mode !== 'gfwlist') ? 'proxy-domain' : null,
query_type: [64, 65], query_type: [64, 65],
server: 'block-dns' action: 'reject'
}); });
if (routing_mode === 'bypass_mainland_china') { if (routing_mode === 'bypass_mainland_china') {
@ -417,11 +422,13 @@ if (!isEmpty(main_node)) {
if (length(proxy_domain_list)) if (length(proxy_domain_list))
push(config.dns.rules, { push(config.dns.rules, {
rule_set: 'proxy-domain', rule_set: 'proxy-domain',
action: 'route',
server: 'main-dns' server: 'main-dns'
}); });
push(config.dns.rules, { push(config.dns.rules, {
rule_set: 'geosite-cn', rule_set: 'geosite-cn',
action: 'route',
server: 'china-dns' server: 'china-dns'
}); });
push(config.dns.rules, { push(config.dns.rules, {
@ -436,6 +443,7 @@ if (!isEmpty(main_node)) {
rule_set: 'geoip-cn' rule_set: 'geoip-cn'
} }
], ],
action: 'route',
server: 'china-dns' server: 'china-dns'
}); });
} }
@ -487,10 +495,12 @@ if (!isEmpty(main_node)) {
rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null, rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null,
invert: (cfg.invert === '1') || null, invert: (cfg.invert === '1') || null,
outbound: get_outbound(cfg.outbound), outbound: get_outbound(cfg.outbound),
action: (cfg.server === 'block-dns') ? 'reject' : 'route',
server: get_resolver(cfg.server), server: get_resolver(cfg.server),
disable_cache: (cfg.dns_disable_cache === '1') || null, disable_cache: (cfg.dns_disable_cache === '1') || null,
rewrite_ttl: strToInt(cfg.rewrite_ttl), rewrite_ttl: strToInt(cfg.rewrite_ttl),
client_subnet: cfg.client_subnet client_subnet: cfg.client_subnet
}); });
}); });
@ -519,7 +529,6 @@ push(config.inbounds, {
udp_timeout: udp_timeout ? (udp_timeout + 's') : null, udp_timeout: udp_timeout ? (udp_timeout + 's') : null,
sniff: true, sniff: true,
sniff_override_destination: (sniff_override === '1'), sniff_override_destination: (sniff_override === '1'),
domain_strategy: domain_strategy,
set_system_proxy: false set_system_proxy: false
}); });
@ -531,8 +540,7 @@ if (match(proxy_mode, /redirect/))
listen: '::', listen: '::',
listen_port: int(redirect_port), listen_port: int(redirect_port),
sniff: true, sniff: true,
sniff_override_destination: (sniff_override === '1'), sniff_override_destination: (sniff_override === '1')
domain_strategy: domain_strategy,
}); });
if (match(proxy_mode, /tproxy/)) if (match(proxy_mode, /tproxy/))
push(config.inbounds, { push(config.inbounds, {
@ -544,8 +552,7 @@ if (match(proxy_mode, /tproxy/))
network: 'udp', network: 'udp',
udp_timeout: udp_timeout ? (udp_timeout + 's') : null, udp_timeout: udp_timeout ? (udp_timeout + 's') : null,
sniff: true, sniff: true,
sniff_override_destination: (sniff_override === '1'), sniff_override_destination: (sniff_override === '1')
domain_strategy: domain_strategy,
}); });
if (match(proxy_mode, /tun/)) if (match(proxy_mode, /tun/))
push(config.inbounds, { push(config.inbounds, {
@ -561,8 +568,7 @@ if (match(proxy_mode, /tun/))
udp_timeout: udp_timeout ? (udp_timeout + 's') : null, udp_timeout: udp_timeout ? (udp_timeout + 's') : null,
stack: tcpip_stack, stack: tcpip_stack,
sniff: true, sniff: true,
sniff_override_destination: (sniff_override === '1'), sniff_override_destination: (sniff_override === '1')
domain_strategy: domain_strategy,
}); });
/* Inbound end */ /* Inbound end */
@ -573,14 +579,6 @@ config.outbounds = [
type: 'direct', type: 'direct',
tag: 'direct-out', tag: 'direct-out',
routing_mark: strToInt(self_mark) routing_mark: strToInt(self_mark)
},
{
type: 'block',
tag: 'block-out'
},
{
type: 'dns',
tag: 'dns-out'
} }
]; ];
@ -675,8 +673,14 @@ config.route = {
rules: [ rules: [
{ {
inbound: 'dns-in', inbound: 'dns-in',
outbound: 'dns-out' action: 'hijack-dns'
} }
/*
* leave for sing-box 1.13.0
* {
* action: 'sniff'
* }
*/
], ],
rule_set: [], rule_set: [],
auto_detect_interface: isEmpty(default_interface) ? true : null, auto_detect_interface: isEmpty(default_interface) ? true : null,
@ -689,6 +693,7 @@ if (!isEmpty(main_node)) {
if (length(direct_domain_list)) if (length(direct_domain_list))
push(config.route.rules, { push(config.route.rules, {
rule_set: 'direct-domain', rule_set: 'direct-domain',
action: 'route',
outbound: 'direct-out' outbound: 'direct-out'
}); });
@ -696,6 +701,7 @@ if (!isEmpty(main_node)) {
if (dedicated_udp_node) if (dedicated_udp_node)
push(config.route.rules, { push(config.route.rules, {
network: 'udp', network: 'udp',
action: 'route',
outbound: 'main-udp-out' outbound: 'main-udp-out'
}); });
@ -753,6 +759,12 @@ if (!isEmpty(main_node)) {
if (isEmpty(config.route.rule_set)) if (isEmpty(config.route.rule_set))
config.route.rule_set = null; config.route.rule_set = null;
} else if (!isEmpty(default_outbound)) { } else if (!isEmpty(default_outbound)) {
if (domain_strategy)
push(config.route.rules, {
action: 'resolve',
strategy: domain_strategy
});
uci.foreach(uciconfig, uciroutingrule, (cfg) => { uci.foreach(uciconfig, uciroutingrule, (cfg) => {
if (cfg.enabled !== '1') if (cfg.enabled !== '1')
return null; return null;
@ -781,7 +793,10 @@ if (!isEmpty(main_node)) {
rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null, rule_set_ip_cidr_match_source: (cfg.rule_set_ip_cidr_match_source === '1') || null,
rule_set_ip_cidr_accept_empty: (cfg.rule_set_ip_cidr_accept_empty === '1') || null, rule_set_ip_cidr_accept_empty: (cfg.rule_set_ip_cidr_accept_empty === '1') || null,
invert: (cfg.invert === '1') || null, invert: (cfg.invert === '1') || null,
outbound: get_outbound(cfg.outbound) action: (cfg.outbound === 'block-out') ? 'reject' : 'route',
override_address: cfg.override_address,
override_port: strToInt(cfg.override_port),
outbound: get_outbound(cfg.outbound),
}); });
}); });

View File

@ -49,9 +49,6 @@ uci.foreach(uciconfig, uciserver, (cfg) => {
tcp_multi_path: strToBool(cfg.tcp_multi_path), tcp_multi_path: strToBool(cfg.tcp_multi_path),
udp_fragment: strToBool(cfg.udp_fragment), udp_fragment: strToBool(cfg.udp_fragment),
udp_timeout: cfg.udp_timeout ? (cfg.udp_timeout + 's') : null, udp_timeout: cfg.udp_timeout ? (cfg.udp_timeout + 's') : null,
sniff: true,
sniff_override_destination: (cfg.sniff_override === '1'),
domain_strategy: cfg.domain_strategy,
network: cfg.network, network: cfg.network,
/* Hysteria */ /* Hysteria */

View File

@ -0,0 +1,91 @@
#!/usr/bin/ucode
/*
* SPDX-License-Identifier: GPL-2.0-only
*
* Copyright (C) 2025 ImmortalWrt.org
*/
'use strict';
import { cursor } from 'uci';
import { isEmpty } from 'homeproxy';
const uci = cursor();
const uciconfig = 'homeproxy';
uci.load(uciconfig);
const uciinfra = 'infra',
ucimain = 'config',
ucinode = 'node',
ucidns = 'dns',
ucidnsrule = 'dns_rule',
ucirouting = 'routing',
uciroutingnode = 'routing_node',
uciroutingrule = 'routing_rule',
uciserver = 'server';
/* chinadns-ng has been removed */
if (uci.get(uciconfig, uciinfra, 'china_dns_port'))
uci.delete(uciconfig, uciinfra, 'china_dns_port');
/* chinadns server now only accepts single server */
const china_dns_server = uci.get(uciconfig, ucimain, 'china_dns_server');
if (china_dns_server === 'wan_114')
uci.set(uciconfig, ucimain, 'china_dns_server', '114.114.114.114');
else if (match(china_dns_server, /,/))
uci.set(uciconfig, ucimain, 'china_dns_server', split(china_dns_server, ',')[0]);
else if (match(china_dns_server, / /))
uci.set(uciconfig, ucimain, 'china_dns_server', split(china_dns_server, ' ')[0]);
/* empty value defaults to all ports now */
if (uci.get(uciconfig, ucimain, 'routing_port') === 'all')
uci.delete(uciconfig, ucimain, 'routing_port');
/* experimental section was removed */
if (uci.get(uciconfig, 'experimental'))
uci.delete(uciconfig, 'experimental');
/* block-dns was removed from built-in dns servers */
if (uci.get(uciconfig, ucidns, 'default_server') === 'block-dns')
uci.set(uciconfig, ucidns, 'default_server', 'default-dns');
/* block-out was removed from built-in outbounds */
if (uci.get(uciconfig, ucirouting, 'default_outbound') === 'block-out')
uci.set(uciconfig, ucirouting, 'default_outbound', 'nil');
/* DNS rules options */
uci.foreach(uciconfig, ucidnsrule, (cfg) => {
/* rule_set_ipcidr_match_source was renamed in sb 1.10 */
if (cfg.rule_set_ipcidr_match_source === '1')
uci.rename(uciconfig, cfg, 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source');
});
/* nodes options */
uci.foreach(uciconfig, ucinode, (cfg) => {
/* tls_ech_tls_disable_drs is useless and deprecated in sb 1.12 */
if (!isEmpty(cfg.tls_ech_tls_disable_drs))
uci.delete(uciconfig, cfg, 'tls_ech_tls_disable_drs');
});
/* routing rules options */
uci.foreach(uciconfig, uciroutingrule, (cfg) => {
/* rule_set_ipcidr_match_source was renamed in sb 1.10 */
if (cfg.rule_set_ipcidr_match_source === '1')
uci.rename(uciconfig, cfg, 'rule_set_ipcidr_match_source', 'rule_set_ip_cidr_match_source');
});
/* server options */
uci.foreach(uciconfig, uciserver, (cfg) => {
/* sniff_override was deprecated in sb 1.11 */
if (!isEmpty(cfg.sniff_override))
uci.delete(uciconfig, cfg, 'sniff_override');
/* domain_strategy is now pointless without sniff override */
if (!isEmpty(cfg.domain_strategy))
uci.delete(uciconfig, cfg, 'domain_strategy');
});
if (!isEmpty(uci.changes(uciconfig)))
uci.commit(uciconfig);

View File

@ -1,26 +1,5 @@
#!/bin/sh #!/bin/sh
china_dns_server="$(uci -q get "homeproxy.config.china_dns_server")" ucode "/etc/homeproxy/scripts/migrate_config.uc"
if [ "$china_dns_server" = "wan_114" ]; then
uci -q delete "homeproxy.config.china_dns_server"
uci -q set "homeproxy.config.china_dns_server"="114.114.114.114"
elif echo "$china_dns_server" | grep -q ","; then
uci -q delete "homeproxy.config.china_dns_server"
uci -q set "homeproxy.config.china_dns_server"="${china_dns_server%%,*}"
elif echo "$china_dns_server" | grep -q " "; then
uci -q delete "homeproxy.config.china_dns_server"
uci -q set "homeproxy.config.china_dns_server"="${china_dns_server%% *}"
fi
if [ "$(uci -q get homeproxy.config.routing_port)" = "all" ]; then
uci -q delete "homeproxy.config.routing_port"
fi
[ -z "$(uci -q show homeproxy.experimental)" ] || uci -q delete "homeproxy.experimental"
[ -z "$(uci -q changes "homeproxy")" ] || uci -q commit "homeproxy"
sed -i "s/rule_set_ipcidr_match_source/rule_set_ip_cidr_match_source/g" "/etc/config/homeproxy"
sed -i "/china_dns_port/d" "/etc/config/homeproxy"
exit 0 exit 0