update 2023-04-02 09:22:12

This commit is contained in:
github-actions[bot]
2023-04-02 09:22:12 +08:00
parent b46bfccbb7
commit c8f19a6b52
15 changed files with 876 additions and 847 deletions

View File

@@ -10,12 +10,12 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=haproxy PKG_NAME:=haproxy
PKG_VERSION:=2.6.11 PKG_VERSION:=2.6.12
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://www.haproxy.org/download/2.6/src PKG_SOURCE_URL:=https://www.haproxy.org/download/2.6/src
PKG_HASH:=e0bc430ac407747b077bc88ee6922b4616fa55a9e0f3ec84438dfb055eb9a715 PKG_HASH:=58f9edb26bf3288f4b502658399281cc5d6478468bd178eafe579c8f41895854
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>, \ PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>, \
Christian Lachner <gladiac@gmail.com> Christian Lachner <gladiac@gmail.com>

View File

@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
CLONEURL=https://git.haproxy.org/git/haproxy-2.6.git CLONEURL=https://git.haproxy.org/git/haproxy-2.6.git
BASE_TAG=v2.6.11 BASE_TAG=v2.6.12
TMP_REPODIR=tmprepo TMP_REPODIR=tmprepo
PATCHESDIR=patches PATCHESDIR=patches

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-homeproxy PKG_NAME:=luci-app-homeproxy
PKG_VERSION:=usertesting-0328 PKG_VERSION:=dev-230402
LUCI_TITLE:=The modern ImmortalWrt proxy platform for ARM64/AMD64 LUCI_TITLE:=The modern ImmortalWrt proxy platform for ARM64/AMD64
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
@@ -18,7 +18,12 @@ LUCI_DEPENDS:= \
define Package/luci-app-homeproxy/conffiles define Package/luci-app-homeproxy/conffiles
/etc/config/homeproxy /etc/config/homeproxy
/etc/homeproxy/certs/ /etc/homeproxy/certs/
/etc/homeproxy/resources/ /etc/homeproxy/resources/geoip.db
/etc/homeproxy/resources/geoip.ver
/etc/homeproxy/resources/geosite.db
/etc/homeproxy/resources/geosite.ver
/etc/homeproxy/resources/direct_list.txt
/etc/homeproxy/resources/proxy_list.txt
endef endef
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk

View File

@@ -14,6 +14,7 @@
'require view'; 'require view';
'require homeproxy as hp'; 'require homeproxy as hp';
'require tools.firewall as fwtool';
'require tools.widgets as widgets'; 'require tools.widgets as widgets';
var callServiceList = rpc.declare({ var callServiceList = rpc.declare({
@@ -217,7 +218,8 @@ return view.extend({
o = s.taboption('routing', form.ListValue, 'proxy_mode', _('Proxy mode')); o = s.taboption('routing', form.ListValue, 'proxy_mode', _('Proxy mode'));
o.value('redirect', _('Redirect TCP')); o.value('redirect', _('Redirect TCP'));
o.value('redirect_tproxy', _('Redirect TCP + TProxy UDP')); if (features.hp_has_tproxy)
o.value('redirect_tproxy', _('Redirect TCP + TProxy UDP'));
if (features.hp_has_tun) { if (features.hp_has_tun) {
o.value('redirect_tun', _('Redirect TCP + Tun UDP')); o.value('redirect_tun', _('Redirect TCP + Tun UDP'));
o.value('tun', _('Tun TCP/UDP')); o.value('tun', _('Tun TCP/UDP'));
@@ -824,20 +826,6 @@ return view.extend({
/* LAN IP policy start */ /* LAN IP policy start */
ss.tab('lan_ip_policy', _('LAN IP Policy')); ss.tab('lan_ip_policy', _('LAN IP Policy'));
var ipaddrs = {}, ip6addrs = {};
Object.keys(hosts).forEach(function(mac) {
var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4);
for (var i = 0; i < addrs.length; i++)
ipaddrs[addrs[i]] = hosts[mac].name || mac;
});
Object.keys(hosts).forEach(function(mac) {
var addrs = L.toArray(hosts[mac].ip6addrs || hosts[mac].ipv6);
for (var i = 0; i < addrs.length; i++)
ip6addrs[addrs[i]] = hosts[mac].name || mac;
});
so = ss.taboption('lan_ip_policy', form.ListValue, 'lan_proxy_mode', _('Proxy filter mode')); so = ss.taboption('lan_ip_policy', form.ListValue, 'lan_proxy_mode', _('Proxy filter mode'));
so.value('disabled', _('Disable')); so.value('disabled', _('Disable'));
so.value('listed_only', _('Proxy listed only')); so.value('listed_only', _('Proxy listed only'));
@@ -845,62 +833,39 @@ return view.extend({
so.default = 'disabled'; so.default = 'disabled';
so.rmempty = false; so.rmempty = false;
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_direct_ipv4_ips', _('Direct IPv4 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_direct_ipv4_ips', _('Direct IPv4 IP-s'), null, 'ipv4', hosts, true);
so.datatype = 'or(ip4addr, cidr4)';
so.depends('lan_proxy_mode', 'except_listed'); so.depends('lan_proxy_mode', 'except_listed');
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
});
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_direct_ipv6_ips', _('Direct IPv6 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_direct_ipv6_ips', _('Direct IPv6 IP-s'), null, 'ipv6', hosts, true);
so.datatype = 'or(ip6addr, cidr6)'; so.depends({'lan_proxy_mode': 'except_listed', 'homeproxy.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_direct_mac_addrs', _('Direct MAC-s'), null, hosts);
so.depends('lan_proxy_mode', 'except_listed'); so.depends('lan_proxy_mode', 'except_listed');
L.sortedKeys(ip6addrs, null, 'addr').forEach(function(ipv6) {
so.value(ipv6, '%s (%s)'.format(ipv6, ip6addrs[ipv6]));
});
so.depends('homeproxy.config.ipv6_support', '1');
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_proxy_ipv4_ips', _('Proxy IPv4 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_proxy_ipv4_ips', _('Proxy IPv4 IP-s'), null, 'ipv4', hosts, true);
so.datatype = 'or(ip4addr, cidr4)';
so.depends('lan_proxy_mode', 'listed_only'); so.depends('lan_proxy_mode', 'listed_only');
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
});
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_proxy_ipv6_ips', _('Proxy IPv6 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_proxy_ipv6_ips', _('Proxy IPv6 IP-s'), null, 'ipv6', hosts, true);
so.datatype = 'or(ip6addr, cidr6)'; so.depends({'lan_proxy_mode': 'listed_only', 'homeproxy.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_proxy_mac_addrs', _('Proxy MAC-s'), null, hosts);
so.depends('lan_proxy_mode', 'listed_only'); so.depends('lan_proxy_mode', 'listed_only');
L.sortedKeys(ip6addrs, null, 'addr').forEach(function(ipv6) {
so.value(ipv6, '%s (%s)'.format(ipv6, ip6addrs[ipv6])); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv4_ips', _('Gaming mode IPv4 IP-s'), null, 'ipv4', hosts, true);
});
so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv6_ips', _('Gaming mode IPv6 IP-s'), null, 'ipv6', hosts, true);
so.depends('homeproxy.config.ipv6_support', '1'); so.depends('homeproxy.config.ipv6_support', '1');
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_gaming_mode_ipv4_ips', _('Gaming mode IPv4 IP-s')); so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_gaming_mode_mac_addrs', _('Gaming mode MAC-s'), null, hosts);
so.datatype = 'or(ip4addr, cidr4)';
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
});
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_gaming_mode_ipv6_ips', _('Gaming mode IPv6 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv4_ips', _('Global proxy IPv4 IP-s'), null, 'ipv4', hosts, true);
so.datatype = 'or(ip6addr, cidr6)';
L.sortedKeys(ip6addrs, null, 'addr').forEach(function(ipv6) {
so.value(ipv6, '%s (%s)'.format(ipv6, ip6addrs[ipv6]));
});
so.depends('homeproxy.config.ipv6_support', '1');
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_global_proxy_ipv4_ips', _('Global proxy IPv4 IP-s'));
so.datatype = 'or(ip4addr, cidr4)';
L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
so.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
});
so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true}); so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
so = ss.taboption('lan_ip_policy', form.DynamicList, 'lan_global_proxy_ipv6_ips', _('Global proxy IPv6 IP-s')); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv6_ips', _('Global proxy IPv6 IP-s'), null, 'ipv6', hosts, true);
so.datatype = 'or(ip6addr, cidr6)';
L.sortedKeys(ip6addrs, null, 'addr').forEach(function(ipv6) {
so.value(ipv6, '%s (%s)'.format(ipv6, ip6addrs[ipv6]));
});
so.depends({'homeproxy.config.routing_mode': /^((?!custom).)+$/, 'homeproxy.config.ipv6_support': '1'}); so.depends({'homeproxy.config.routing_mode': /^((?!custom).)+$/, 'homeproxy.config.ipv6_support': '1'});
so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_global_proxy_mac_addrs', _('Global proxy MAC-s'), null, hosts);
so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true});
/* LAN IP policy end */ /* LAN IP policy end */
/* WAN IP policy start */ /* WAN IP policy start */

View File

@@ -35,7 +35,7 @@ return view.extend({
o.default = o.disabled; o.default = o.disabled;
o.rmempty = false; o.rmempty = false;
s = m.section(form.GridSection, 'server'); s = m.section(form.GridSection, 'server', _('Server settings'));
s.addremove = true; s.addremove = true;
s.rowcolors = true; s.rowcolors = true;
s.sortable = true; s.sortable = true;

View File

@@ -9,6 +9,7 @@
'require fs'; 'require fs';
'require poll'; 'require poll';
'require rpc'; 'require rpc';
'require uci';
'require ui'; 'require ui';
'require view'; 'require view';
@@ -74,7 +75,8 @@ function getResVersion(self, type) {
}, [ _('Check update') ]), }, [ _('Check update') ]),
' ', ' ',
E('strong', { 'style': (res.error ? 'color:red' : 'color:green') }, E('strong', { 'style': (res.error ? 'color:red' : 'color:green') },
[ res.error ? 'not found' : res.version ]), [ res.error ? 'not found' : res.version ]
),
]); ]);
self.default = spanTemp; self.default = spanTemp;
@@ -144,21 +146,30 @@ function getRuntimeLog(name) {
} }
return view.extend({ return view.extend({
render: function() { load: function() {
return Promise.all([
uci.load('homeproxy')
]);
},
render: function(data) {
var m, s, o; var m, s, o;
var routing_mode = uci.get(data[0], 'config', 'routing_mode') || 'bypass_mainland_china';
m = new form.Map('homeproxy'); m = new form.Map('homeproxy');
s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management')); s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management'));
s.anonymous = true; s.anonymous = true;
o = s.option(form.DummyValue, '_geoip_version', _('GeoIP version')); if (routing_mode === 'custom') {
o.cfgvalue = function() { return getResVersion(this, 'geoip') }; o = s.option(form.DummyValue, '_geoip_version', _('GeoIP version'));
o.rawhtml = true; o.cfgvalue = function() { return getResVersion(this, 'geoip') };
o.rawhtml = true;
o = s.option(form.DummyValue, '_geosite_version', _('GeoSite version')); o = s.option(form.DummyValue, '_geosite_version', _('GeoSite version'));
o.cfgvalue = function() { return getResVersion(this, 'geosite') }; o.cfgvalue = function() { return getResVersion(this, 'geosite') };
o.rawhtml = true; o.rawhtml = true;
}
o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version')); o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version'));
o.cfgvalue = function() { return getResVersion(this, 'china_ip4') }; o.cfgvalue = function() { return getResVersion(this, 'china_ip4') };
@@ -168,14 +179,14 @@ return view.extend({
o.cfgvalue = function() { return getResVersion(this, 'china_ip6') }; o.cfgvalue = function() { return getResVersion(this, 'china_ip6') };
o.rawhtml = true; o.rawhtml = true;
o = s.option(form.DummyValue, '_gfw_list_version', _('GFW list version'));
o.cfgvalue = function() { return getResVersion(this, 'gfw_list') };
o.rawhtml = true;
o = s.option(form.DummyValue, '_china_list_version', _('China list version')); o = s.option(form.DummyValue, '_china_list_version', _('China list version'));
o.cfgvalue = function() { return getResVersion(this, 'china_list') }; o.cfgvalue = function() { return getResVersion(this, 'china_list') };
o.rawhtml = true; o.rawhtml = true;
o = s.option(form.DummyValue, '_gfw_list_version', _('GFW list version'));
o.cfgvalue = function() { return getResVersion(this, 'gfw_list') };
o.rawhtml = true;
o = s.option(form.DummyValue, '_homeproxy_logview'); o = s.option(form.DummyValue, '_homeproxy_logview');
o.render = L.bind(getRuntimeLog, this, 'HomeProxy'); o.render = L.bind(getRuntimeLog, this, 'HomeProxy');

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,12 +5,29 @@
import { readfile } from 'fs'; import { readfile } from 'fs';
import { cursor } from 'uci'; import { cursor } from 'uci';
import { isEmpty } from '/etc/homeproxy/scripts/homeproxy.uc';
function array_to_nftstr(array) { const fw4 = require('fw4');
function array_to_nftarr(array) {
if (type(array) !== 'array') if (type(array) !== 'array')
return array; return null;
return join(', ', array); return `{ ${join(', ', uniq(array))} }`;
}
function resolve_ipv6(str) {
if (isEmpty(str))
return null;
let ipv6 = fw4.parse_subnet(str)?.[0];
if (!ipv6 || ipv6.family !== 6)
return null;
if (ipv6.bits > -1)
return `${ipv6.addr}/${ipv6.bits}`;
else
return `& ${ipv6.mask} == ${ipv6.addr}`;
} }
/* Misc config */ /* Misc config */
@@ -62,7 +79,7 @@ const control_options = [
"lan_direct_mac_addrs", "lan_direct_ipv4_ips", "lan_direct_ipv6_ips", "lan_direct_mac_addrs", "lan_direct_ipv4_ips", "lan_direct_ipv6_ips",
"lan_proxy_mac_addrs", "lan_proxy_ipv4_ips", "lan_proxy_ipv6_ips", "lan_proxy_mac_addrs", "lan_proxy_ipv4_ips", "lan_proxy_ipv6_ips",
"lan_gaming_mode_mac_addrs", "lan_gaming_mode_ipv4_ips", "lan_gaming_mode_ipv6_ips", "lan_gaming_mode_mac_addrs", "lan_gaming_mode_ipv4_ips", "lan_gaming_mode_ipv6_ips",
"lan_global_proxy_ipv4_ips", "lan_global_proxy_ipv6_ips", "lan_global_proxy_mac_addrs", "lan_global_proxy_ipv4_ips", "lan_global_proxy_ipv6_ips",
"wan_proxy_ipv4_ips", "wan_proxy_ipv6_ips", "wan_proxy_ipv4_ips", "wan_proxy_ipv6_ips",
"wan_direct_ipv4_ips", "wan_direct_ipv6_ips" "wan_direct_ipv4_ips", "wan_direct_ipv6_ips"
]; ];
@@ -160,91 +177,6 @@ set homeproxy_mainland_addr_v6 {
{% endif /* ipv6_support */ %} {% endif /* ipv6_support */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
{# LAN ACL addresses #}
{% if (control_info.lan_proxy_mode === 'listed_only'): %}
set homeproxy_lan_proxy_addr_v4 {
type ipv4_addr
flags interval
auto-merge
{% if (control_info.lan_proxy_ipv4_ips): %}
elements = { {{ join(', ', control_info.lan_proxy_ipv4_ips) }} }
{% endif %}
}
{% if (ipv6_support === '1'): %}
set homeproxy_lan_proxy_addr_v6 {
type ipv6_addr
flags interval
auto-merge
{% if (control_info.lan_proxy_ipv6_ips): %}
elements = { {{ join(', ', control_info.lan_proxy_ipv6_ips) }} }
{% endif /* lan_proxy_ipv6_ips */ %}
{% endif /* ipv6_support */ %}
}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %}
set homeproxy_lan_direct_addr_v4 {
type ipv4_addr
flags interval
auto-merge
{% if (control_info.lan_direct_ipv4_ips): %}
elements = { {{ join(', ', control_info.lan_direct_ipv4_ips) }} }
{% endif %}
}
{% if (ipv6_support === '1'): %}
set homeproxy_lan_direct_addr_v6 {
type ipv6_addr
flags interval
auto-merge
{% if (control_info.lan_direct_ipv6_ips): %}
elements = { {{ join(', ', control_info.lan_direct_ipv6_ips) }} }
{% endif /* lan_direct_ipv6_ips */ %}
}
{% endif /* ipv6_support */ %}
{% endif /* lan_proxy_mode */ %}
set homeproxy_lan_gaming_addr_v4 {
type ipv4_addr
flags interval
auto-merge
{% if (control_info.lan_gaming_mode_ipv4_ips): %}
elements = { {{ join(', ', control_info.lan_gaming_mode_ipv4_ips) }} }
{% endif %}
}
{% if (ipv6_support === '1'): %}
set homeproxy_lan_gaming_addr_v6 {
type ipv6_addr
flags interval
auto-merge
{% if (control_info.lan_gaming_mode_ipv6_ips): %}
elements = { {{ join(', ', control_info.lan_gaming_mode_ipv6_ips) }} }
{% endif /* lan_gaming_mode_ipv6_ips */ %}
}
{% endif /* ipv6_support */ %}
{% if (routing_mode !== 'custom'): %}
set homeproxy_lan_global_proxy_addr_v4 {
type ipv4_addr
flags interval
auto-merge
{% if (control_info.lan_global_proxy_ipv4_ips): %}
elements = { {{ join(', ', control_info.lan_global_proxy_ipv4_ips) }} }
{% endif /* lan_global_proxy_ipv4_ips */ %}
}
{% if (ipv6_support === '1'): %}
set homeproxy_lan_global_proxy_addr_v6 {
type ipv6_addr
flags interval
auto-merge
{% if (control_info.lan_global_proxy_ipv6_ips): %}
elements = { {{ join(', ', control_info.lan_global_proxy_ipv6_ips) }} }
{% endif /* lan_global_proxy_ipv6_ips */ %}
}
{% endif /* ipv6_support */ %}
{% endif /* routing_mode */ %}
{# WAN ACL addresses #} {# WAN ACL addresses #}
set homeproxy_wan_proxy_addr_v4 { set homeproxy_wan_proxy_addr_v4 {
type ipv4_addr type ipv4_addr
@@ -297,6 +229,10 @@ set homeproxy_routing_port {
{# TCP redirect #} {# TCP redirect #}
{% if (match(proxy_mode, /redirect/)): %} {% if (match(proxy_mode, /redirect/)): %}
chain homeproxy_redirect_proxy {
meta l4proto tcp counter redirect to :{{ redirect_port }}
}
chain homeproxy_redirect_proxy_port { chain homeproxy_redirect_proxy_port {
{% if (routing_port !== 'all'): %} {% if (routing_port !== 'all'): %}
tcp dport != @homeproxy_routing_port counter return tcp dport != @homeproxy_routing_port counter return
@@ -304,25 +240,42 @@ chain homeproxy_redirect_proxy_port {
goto homeproxy_redirect_proxy goto homeproxy_redirect_proxy
} }
chain homeproxy_redirect_proxy { chain homeproxy_redirect_lanac {
meta l4proto tcp counter redirect to :{{ redirect_port }} {% if (control_info.listen_interfaces): %}
meta iifname != {{ array_to_nftarr(control_info.listen_interfaces) }} counter return
{% endif %}
meta mark {{ self_mark }} counter return
{% if (control_info.lan_proxy_mode === 'listed_only'): %}
{% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_redirect
{% endif /* lan_proxy_ipv4_ips */ %}
{% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect
{% endfor /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_redirect
{% endif /* lan_proxy_mac_addrs */ %}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %}
{% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
{% endif /* lan_direct_ipv4_ips */ %}
{% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
{% endfor /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
{% endif /* lan_proxy_mode */ %}
{% if (control_info.lan_proxy_mode !== 'listed_only'): %}
counter goto homeproxy_redirect
{% endif %}
} }
chain homeproxy_redirect { chain homeproxy_redirect {
meta mark {{ self_mark }} counter return meta mark {{ self_mark }} counter return
{% if (control_info.lan_proxy_mode === 'listed_only'): %}
ip saddr != @homeproxy_lan_proxy_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 saddr != @homeproxy_lan_proxy_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %}
ip saddr @homeproxy_lan_direct_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 saddr @homeproxy_lan_direct_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% endif /* lan_proxy_mode */ %}
ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_redirect_proxy_port ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_redirect_proxy_port
{% if (ipv6_support === '1'): %} {% if (ipv6_support === '1'): %}
ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_redirect_proxy_port ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_redirect_proxy_port
@@ -334,10 +287,15 @@ chain homeproxy_redirect {
{% endif %} {% endif %}
{% if (routing_mode !== 'custom'): %} {% if (routing_mode !== 'custom'): %}
ip saddr @homeproxy_lan_global_proxy_addr_v4 counter goto homeproxy_redirect_proxy_port {% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_redirect
ip6 saddr @homeproxy_lan_global_proxy_addr_v6 counter goto homeproxy_redirect_proxy_port {% endif /* lan_global_proxy_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect
{% endfor /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_redirect
{% endif /* lan_global_proxy_mac_addrs */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
ip daddr @homeproxy_wan_direct_addr_v4 counter return ip daddr @homeproxy_wan_direct_addr_v4 counter return
@@ -362,41 +320,31 @@ chain homeproxy_redirect {
{% endif /* ipv6_support */ %} {% endif /* ipv6_support */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
ip saddr @homeproxy_lan_gaming_addr_v4 counter goto homeproxy_redirect_proxy {% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter goto homeproxy_redirect_proxy
ip6 saddr @homeproxy_lan_gaming_addr_v6 counter goto homeproxy_redirect_proxy {% endif /* lan_gaming_mode_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_redirect_proxy
{% endfor /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter goto homeproxy_redirect_proxy
{% endif /* lan_gaming_mode_mac_addrs */ %}
counter goto homeproxy_redirect_proxy_port counter goto homeproxy_redirect_proxy_port
} }
chain homeproxy_dstnat_redir {
{% if (control_info.listen_interfaces): %}
meta iifname != { {{ array_to_nftstr(control_info.listen_interfaces) }} } counter return
{% endif %}
goto homeproxy_redirect
}
chain homeproxy_output_redir { chain homeproxy_output_redir {
type nat hook output priority filter -105; policy accept type nat hook output priority filter -105; policy accept
meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto tcp jump homeproxy_redirect meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto tcp jump homeproxy_redirect
} }
chain dstnat { chain dstnat {
meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto tcp jump homeproxy_dstnat_redir meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto tcp jump homeproxy_redirect_lanac
} }
{% endif %} {% endif %}
{# UDP tproxy #} {# UDP tproxy #}
{% if (match(proxy_mode, /tproxy/) && (outbound_udp_node !== 'nil' || routing_mode === 'custom')): %} {% if (match(proxy_mode, /tproxy/) && (outbound_udp_node !== 'nil' || routing_mode === 'custom')): %}
chain homeproxy_mangle_tproxy_port {
{% if (routing_port !== 'all'): %}
udp dport != @homeproxy_routing_port counter return
{% endif %}
goto homeproxy_mangle_tproxy
}
chain homeproxy_mangle_tproxy { chain homeproxy_mangle_tproxy {
meta l4proto udp mark set {{ tproxy_mark }} tproxy ip to 127.0.0.1:{{ tproxy_port }} counter accept meta l4proto udp mark set {{ tproxy_mark }} tproxy ip to 127.0.0.1:{{ tproxy_port }} counter accept
{% if (ipv6_support === '1'): %} {% if (ipv6_support === '1'): %}
@@ -404,6 +352,13 @@ chain homeproxy_mangle_tproxy {
{% endif %} {% endif %}
} }
chain homeproxy_mangle_tproxy_port {
{% if (routing_port !== 'all'): %}
udp dport != @homeproxy_routing_port counter return
{% endif %}
goto homeproxy_mangle_tproxy
}
chain homeproxy_mangle_mark { chain homeproxy_mangle_mark {
{% if (routing_port !== 'all'): %} {% if (routing_port !== 'all'): %}
udp dport != @homeproxy_routing_port counter return udp dport != @homeproxy_routing_port counter return
@@ -411,25 +366,40 @@ chain homeproxy_mangle_mark {
meta l4proto udp mark set {{ tproxy_mark }} counter accept meta l4proto udp mark set {{ tproxy_mark }} counter accept
} }
chain homeproxy_mangle_prerouting { chain homeproxy_mangle_lanac {
{% if (control_info.listen_interfaces): %} {% if (control_info.listen_interfaces): %}
meta iifname != { {{ array_to_nftstr(control_info.listen_interfaces) }}, lo } counter return meta iifname != {{ array_to_nftarr(split(join(' ', control_info.listen_interfaces) + ' lo', ' ')) }} counter return
{% endif %} {% endif %}
meta mark {{ self_mark }} counter return meta mark {{ self_mark }} counter return
{% if (control_info.lan_proxy_mode === 'listed_only'): %} {% if (control_info.lan_proxy_mode === 'listed_only'): %}
ip saddr != @homeproxy_lan_proxy_addr_v4 counter return {% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_mangle_prerouting
ip6 saddr != @homeproxy_lan_proxy_addr_v6 counter return {% endif /* lan_proxy_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_prerouting
{% endfor /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_mangle_prerouting
{% endif /* lan_proxy_mac_addrs */ %}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %} {% elif (control_info.lan_proxy_mode === 'except_listed'): %}
ip saddr @homeproxy_lan_direct_addr_v4 counter return {% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
ip6 saddr @homeproxy_lan_direct_addr_v6 counter return {% endif /* lan_direct_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
{% endfor /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
{% endif /* lan_proxy_mode */ %} {% endif /* lan_proxy_mode */ %}
{% if (control_info.lan_proxy_mode !== 'listed_only'): %}
counter goto homeproxy_mangle_prerouting
{% endif %}
}
chain homeproxy_mangle_prerouting {
ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_mangle_tproxy_port ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_mangle_tproxy_port
{% if (ipv6_support === '1'): %} {% if (ipv6_support === '1'): %}
ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_mangle_tproxy_port ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_mangle_tproxy_port
@@ -441,10 +411,15 @@ chain homeproxy_mangle_prerouting {
{% endif %} {% endif %}
{% if (routing_mode !== 'custom'): %} {% if (routing_mode !== 'custom'): %}
ip saddr @homeproxy_lan_global_proxy_addr_v4 counter goto homeproxy_mangle_tproxy_port {% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tproxy_port
ip6 saddr @homeproxy_lan_global_proxy_addr_v6 counter goto homeproxy_mangle_tproxy_port {% endif /* lan_global_proxy_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tproxy_port
{% endfor /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_mangle_tproxy_port
{% endif /* lan_global_proxy_mac_addrs */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
ip daddr @homeproxy_wan_direct_addr_v4 counter return ip daddr @homeproxy_wan_direct_addr_v4 counter return
@@ -473,10 +448,15 @@ chain homeproxy_mangle_prerouting {
{% endif /* ipv6_support */ %} {% endif /* ipv6_support */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
ip saddr @homeproxy_lan_gaming_addr_v4 counter goto homeproxy_mangle_tproxy {% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter goto homeproxy_mangle_tproxy
ip6 saddr @homeproxy_lan_gaming_addr_v6 counter goto homeproxy_mangle_tproxy {% endif /* lan_gaming_mode_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tproxy
{% endfor /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter goto homeproxy_mangle_tproxy
{% endif /* lan_gaming_mode_mac_addrs */ %}
counter goto homeproxy_mangle_tproxy_port counter goto homeproxy_mangle_tproxy_port
} }
@@ -520,7 +500,7 @@ chain homeproxy_mangle_output {
} }
chain mangle_prerouting { chain mangle_prerouting {
meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto udp jump homeproxy_mangle_prerouting meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto udp jump homeproxy_mangle_lanac
} }
chain mangle_output { chain mangle_output {
@@ -530,11 +510,38 @@ chain mangle_output {
{# TUN #} {# TUN #}
{% if (match(proxy_mode, /tun/)): %} {% if (match(proxy_mode, /tun/)): %}
chain homeproxy_mangle_prerouting_tun { chain homeproxy_mangle_lanac {
iifname {{ tun_name }} counter return
{% if (control_info.listen_interfaces): %} {% if (control_info.listen_interfaces): %}
meta iifname != { {{ array_to_nftstr(control_info.listen_interfaces) }} } counter return meta iifname != {{ array_to_nftarr(control_info.listen_interfaces) }} counter return
{% endif %}
{% if (control_info.lan_proxy_mode === 'listed_only'): %}
{% if (!isEmpty(control_info.lan_proxy_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tun
{% endif /* lan_proxy_ipv4_ips */ %}
{% for (let ipv6 in control_info.lan_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tun
{% endfor /* lan_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_proxy_mac_addrs) }} counter goto homeproxy_mangle_tun
{% endif /* lan_proxy_mac_addrs */ %}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %}
{% if (!isEmpty(control_info.lan_direct_ipv4_ips)): %}
ip saddr {{ array_to_nftarr(control_info.lan_direct_ipv4_ips) }} counter return
{% endif /* lan_direct_ipv4_ips */ %}
{% for (let ipv6 in control_info.lan_direct_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter return
{% endfor /* lan_direct_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_direct_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_direct_mac_addrs) }} counter return
{% endif /* lan_direct_mac_addrs */ %}
{% endif /* lan_proxy_mode */ %}
{% if (control_info.lan_proxy_mode !== 'listed_only'): %}
counter goto homeproxy_mangle_tun
{% endif %} {% endif %}
jump homeproxy_mangle_tun
} }
chain homeproxy_mangle_tun_mark { chain homeproxy_mangle_tun_mark {
@@ -551,18 +558,6 @@ chain homeproxy_mangle_tun_mark {
chain homeproxy_mangle_tun { chain homeproxy_mangle_tun {
iifname {{ tun_name }} counter return iifname {{ tun_name }} counter return
{% if (control_info.lan_proxy_mode === 'listed_only'): %}
ip saddr != @homeproxy_lan_proxy_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 saddr != @homeproxy_lan_proxy_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% elif (control_info.lan_proxy_mode === 'except_listed'): %}
ip saddr @homeproxy_lan_direct_addr_v4 counter return
{% if (ipv6_support === '1'): %}
ip6 saddr @homeproxy_lan_direct_addr_v6 counter return
{% endif /* ipv6_support */ %}
{% endif /* lan_proxy_mode */ %}
ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_mangle_tun_mark ip daddr @homeproxy_wan_proxy_addr_v4 counter goto homeproxy_mangle_tun_mark
{% if (ipv6_support === '1'): %} {% if (ipv6_support === '1'): %}
ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_mangle_tun_mark ip6 daddr @homeproxy_wan_proxy_addr_v6 counter goto homeproxy_mangle_tun_mark
@@ -574,17 +569,22 @@ chain homeproxy_mangle_tun {
{% endif %} {% endif %}
{% if (routing_mode !== 'custom'): %} {% if (routing_mode !== 'custom'): %}
ip saddr @homeproxy_lan_global_proxy_addr_v4 counter goto homeproxy_mangle_tun_mark {% if (!isEmpty(control_info.lan_global_proxy_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_global_proxy_ipv4_ips) }} counter goto homeproxy_mangle_tun_mark
ip6 saddr @homeproxy_lan_global_proxy_addr_v6 counter goto homeproxy_mangle_tun_mark {% endif /* lan_global_proxy_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_global_proxy_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter goto homeproxy_mangle_tun_mark
{% endfor /* lan_global_proxy_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_global_proxy_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_global_proxy_mac_addrs) }} counter goto homeproxy_mangle_tun_mark
{% endif /* lan_global_proxy_mac_addrs */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
{% if (control_info.wan_direct_ipv4_ips): %} {% if (control_info.wan_direct_ipv4_ips): %}
ip daddr { {{ array_to_nftstr(control_info.wan_direct_ipv4_ips) }} } counter return ip daddr {{ array_to_nftarr(control_info.wan_direct_ipv4_ips) }} counter return
{% endif /* wan_direct_ipv4_ips */ %} {% endif /* wan_direct_ipv4_ips */ %}
{% if (control_info.wan_direct_ipv6_ips): %} {% if (control_info.wan_direct_ipv6_ips): %}
ip6 daddr { {{ array_to_nftstr(control_info.wan_direct_ipv6_ips) }} } counter return ip6 daddr {{ array_to_nftarr(control_info.wan_direct_ipv6_ips) }} counter return
{% endif /* wan_direct_ipv6_ips */ %} {% endif /* wan_direct_ipv6_ips */ %}
{% if (routing_mode === 'gfwlist'): %} {% if (routing_mode === 'gfwlist'): %}
@@ -608,16 +608,21 @@ chain homeproxy_mangle_tun {
{% endif /* ipv6_support */ %} {% endif /* ipv6_support */ %}
{% endif /* routing_mode */ %} {% endif /* routing_mode */ %}
ip saddr @homeproxy_lan_gaming_addr_v4 counter mark set {{ tun_mark }} {% if (!isEmpty(control_info.lan_gaming_mode_ipv4_ips)): %}
{% if (ipv6_support === '1'): %} ip saddr {{ array_to_nftarr(control_info.lan_gaming_mode_ipv4_ips) }} counter mark set {{ tun_mark }}
ip6 saddr @homeproxy_lan_gaming_addr_v6 counter mark set {{ tun_mark }} {% endif /* lan_gaming_mode_ipv4_ips */ %}
{% endif /* ipv6_support */ %} {% for (let ipv6 in control_info.lan_gaming_mode_ipv6_ips): %}
ip6 saddr {{ resolve_ipv6(ipv6) }} counter mark set {{ tun_mark }}
{% endfor /* lan_gaming_mode_ipv6_ips */ %}
{% if (!isEmpty(control_info.lan_gaming_mode_mac_addrs)): %}
ether saddr {{ array_to_nftarr(control_info.lan_gaming_mode_mac_addrs) }} counter mark set {{ tun_mark }}
{% endif /* lan_gaming_mode_mac_addrs */ %}
counter goto homeproxy_mangle_tun_mark counter goto homeproxy_mangle_tun_mark
} }
chain mangle_prerouting { chain mangle_prerouting {
meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto { {{ (proxy_mode === 'tun') ? 'tcp, udp' : 'udp' }} } jump homeproxy_mangle_prerouting_tun meta nfproto { {{ (ipv6_support === '1') ? 'ipv4, ipv6' : 'ipv4' }} } meta l4proto { {{ (proxy_mode === 'tun') ? 'tcp, udp' : 'udp' }} } jump homeproxy_mangle_lanac
} }
chain mangle_output { chain mangle_output {

View File

@@ -609,24 +609,8 @@ if (!isEmpty(main_node) || !isEmpty(default_outbound))
default_interface: default_interface default_interface: default_interface
}; };
/* Routing rules */
if (!isEmpty(main_node)) { if (!isEmpty(main_node)) {
/* Routing rules */
/* LAN ACL */
if (length(lan_proxy_ips)) {
if (dedicated_udp_node) {
push(config.route.rules, {
source_ip_cidr: lan_proxy_ips,
network: 'udp',
outbound: 'main-udp-out'
});
}
push(config.route.rules, {
source_ip_cidr: lan_proxy_ips,
outbound: 'main-out'
});
}
/* Direct list */ /* Direct list */
if (length(direct_domain_list)) if (length(direct_domain_list))
push(config.route.rules, { push(config.route.rules, {

View File

@@ -133,7 +133,6 @@ start_service() {
fi fi
utpl -S "$HP_DIR/scripts/firewall_post.ut" > "$RUN_DIR/fw4_post.nft" utpl -S "$HP_DIR/scripts/firewall_post.ut" > "$RUN_DIR/fw4_post.nft"
fi fi
utpl -S "$HP_DIR/scripts/firewall_pre.ut" > "$RUN_DIR/fw4_pre.nft" utpl -S "$HP_DIR/scripts/firewall_pre.ut" > "$RUN_DIR/fw4_pre.nft"
@@ -191,22 +190,18 @@ stop_service() {
# Nftables rules # Nftables rules
for i in "homeproxy_dstnat_redir" "homeproxy_output_redir" \ for i in "homeproxy_dstnat_redir" "homeproxy_output_redir" \
"homeproxy_redirect" "homeproxy_redirect_proxy_port" \ "homeproxy_redirect" "homeproxy_redirect_proxy" \
"homeproxy_redirect_proxy" "homeproxy_mangle_prerouting" \ "homeproxy_redirect_proxy_port" "homeproxy_redirect_lanac" \
"homeproxy_mangle_output" "homeproxy_mangle_tproxy_port" \ "homeproxy_mangle_prerouting" "homeproxy_mangle_output" \
"homeproxy_mangle_tproxy" "homeproxy_mangle_mark" \ "homeproxy_mangle_tproxy" "homeproxy_mangle_tproxy_port" \
"homeproxy_mangle_tun" "homeproxy_mangle_tun_mark" \ "homeproxy_mangle_tproxy_lanac" "homeproxy_mangle_mark" \
"homeproxy_mangle_prerouting_tun"; do "homeproxy_mangle_tun" "homeproxy_mangle_tun_mark"; do
nft flush chain inet fw4 "$i" nft flush chain inet fw4 "$i"
nft delete chain inet fw4 "$i" nft delete chain inet fw4 "$i"
done 2>"/dev/null" done 2>"/dev/null"
for i in "homeproxy_local_addr_v4" "homeproxy_local_addr_v6" \ for i in "homeproxy_local_addr_v4" "homeproxy_local_addr_v6" \
"homeproxy_gfw_list_v4" "homeproxy_gfw_list_v6" \ "homeproxy_gfw_list_v4" "homeproxy_gfw_list_v6" \
"homeproxy_mainland_addr_v4" "homeproxy_mainland_addr_v6" \ "homeproxy_mainland_addr_v4" "homeproxy_mainland_addr_v6" \
"homeproxy_lan_proxy_addr_v4" "homeproxy_lan_proxy_addr_v6" \
"homeproxy_lan_direct_addr_v4" "homeproxy_lan_direct_addr_v6" \
"homeproxy_lan_gaming_addr_v4" "homeproxy_lan_gaming_addr_v6" \
"homeproxy_lan_global_proxy_addr_v4" "homeproxy_lan_global_proxy_addr_v6" \
"homeproxy_wan_proxy_addr_v4" "homeproxy_wan_proxy_addr_v6" \ "homeproxy_wan_proxy_addr_v4" "homeproxy_wan_proxy_addr_v6" \
"homeproxy_wan_direct_addr_v4" "homeproxy_wan_direct_addr_v6" \ "homeproxy_wan_direct_addr_v4" "homeproxy_wan_direct_addr_v6" \
"homeproxy_routing_port"; do "homeproxy_routing_port"; do

View File

@@ -148,6 +148,7 @@ const methods = {
fd.close(); fd.close();
} }
features.hp_has_tproxy = access('/etc/modules.d/nft-tproxy');
features.hp_has_tun = access('/etc/modules.d/30-tun'); features.hp_has_tun = access('/etc/modules.d/30-tun');
return features; return features;

View File

@@ -643,6 +643,7 @@
10000tc.com 10000tc.com
10000yao.com 10000yao.com
10001wan.com 10001wan.com
100024.xyz
1000360.com 1000360.com
10006.info 10006.info
1000ci.net 1000ci.net
@@ -1770,6 +1771,7 @@
1kuang.com 1kuang.com
1kx.me 1kx.me
1kxun.com 1kxun.com
1kyx.com
1lan.tv 1lan.tv
1lewen.com 1lewen.com
1look.tv 1look.tv
@@ -3207,6 +3209,7 @@
3t769up6.com 3t769up6.com
3tilabs.com 3tilabs.com
3u.com 3u.com
3unshine.com
3uol.com 3uol.com
3us.com 3us.com
3uww.cc 3uww.cc
@@ -12292,6 +12295,7 @@ can.tv
canaan-creative.com canaan-creative.com
canasy.com canasy.com
cancda.net cancda.net
cancer361.com
candou.com candou.com
candylab.net candylab.net
candypay.com candypay.com
@@ -17120,6 +17124,7 @@ d.cg
d03jd.com d03jd.com
d1222.com d1222.com
d17.cc d17.cc
d1999.com
d1cm.com d1cm.com
d1com.com d1com.com
d1dengju.com d1dengju.com
@@ -18380,6 +18385,7 @@ digitalvolvo.com
digitalwuhan.com digitalwuhan.com
digitalwuhan.net digitalwuhan.net
digitlink.net digitlink.net
digitocero.com
digitser.net digitser.net
digiwin.com digiwin.com
digiwork.com digiwork.com
@@ -18902,6 +18908,7 @@ dongcaibaoxian.com
dongchaba.com dongchaba.com
dongchedi.com dongchedi.com
dongchediapp.com dongchediapp.com
dongcheng1.com
dongcheng120.com dongcheng120.com
dongchenghotels.com dongchenghotels.com
dongdao.net dongdao.net
@@ -19158,6 +19165,7 @@ dpcyjt.com
dper.com dper.com
dpevmh.com dpevmh.com
dpfile.com dpfile.com
dplayerjsvideo.com
dplayersvideostatic.com dplayersvideostatic.com
dplor.com dplor.com
dplord.com dplord.com
@@ -23912,6 +23920,7 @@ gohong.com
gohugo.org gohugo.org
going-link.com going-link.com
gojiaju.com gojiaju.com
gokaigai.com
goke.com goke.com
gokols.com gokols.com
gokuai.com gokuai.com
@@ -33822,6 +33831,7 @@ kikoplay.fun
kiku.vip kiku.vip
kililife.com kililife.com
killdb.com killdb.com
kiloai.com
kimiss.com kimiss.com
kimiss.net kimiss.net
kimiter.com kimiter.com
@@ -36447,6 +36457,7 @@ lnrcu.com
lnrsks.com lnrsks.com
lnsent.com lnsent.com
lnsgczb.com lnsgczb.com
lnsyrjwz.com
lntenghui.com lntenghui.com
lntvu.com lntvu.com
lntycp.com lntycp.com
@@ -36666,7 +36677,6 @@ looyuoms.com
looyush.com looyush.com
lopetech.net lopetech.net
lopkino.com lopkino.com
lopopoo.com
lopss.com lopss.com
lorefree.com lorefree.com
losking.com losking.com
@@ -37177,6 +37187,7 @@ lxxm.com
lxybaike.com lxybaike.com
lxyes.com lxyes.com
lxyl539.com lxyl539.com
lxyllawfirm.com
ly-sky.com ly-sky.com
ly.com ly.com
ly200-cdn.com ly200-cdn.com
@@ -41263,6 +41274,7 @@ okad.com
okada-china.com okada-china.com
okaoyan.com okaoyan.com
okayapi.com okayapi.com
okaybio.com
okbao.com okbao.com
okbase.net okbase.net
okbiao.com okbiao.com
@@ -41927,6 +41939,7 @@ palace-international.com
palanceli.com palanceli.com
palm-h.com palm-h.com
palmestore.com palmestore.com
palmfungames.com
palmjoys.com palmjoys.com
palmtrends.com palmtrends.com
palmyou.com palmyou.com
@@ -42755,6 +42768,7 @@ plcloud.com
plcsq.com plcsq.com
plesk-cn.com plesk-cn.com
plexjiasuqi.com plexjiasuqi.com
plexpt.com
plob.org plob.org
plotcup.com plotcup.com
plqdf.com plqdf.com
@@ -50680,7 +50694,6 @@ tapas.net
tapdata.net tapdata.net
tapdb.com tapdb.com
tapdb.net tapdb.net
tapechat.net
tapenjoy.com tapenjoy.com
tapimg.com tapimg.com
tapotiexie.com tapotiexie.com
@@ -51808,7 +51821,6 @@ tokenglish.com
tokensky.net tokensky.net
tokenworld.pro tokenworld.pro
tokimekiclub.org tokimekiclub.org
toktok-mall.com
tol24.com tol24.com
tom.cat tom.cat
tom.com tom.com
@@ -54523,6 +54535,7 @@ wandongli.com
wandouip.com wandouip.com
wandoujia.com wandoujia.com
waneziyuan.com waneziyuan.com
wanfangche.com
wanfangdata.com wanfangdata.com
wanfangqikan.com wanfangqikan.com
wanfangs.com wanfangs.com
@@ -55013,6 +55026,7 @@ wefinger.club
wefitos.com wefitos.com
wefunol.com wefunol.com
wegame.com wegame.com
wegameapi.com
wegamedeveloper.com wegamedeveloper.com
wegameplus.com wegameplus.com
wegamex.com.hk wegamex.com.hk
@@ -57613,6 +57627,7 @@ xiangqu.com
xiangrikui.co xiangrikui.co
xiangrikui.com xiangrikui.com
xiangrikuijianzhan.com xiangrikuijianzhan.com
xiangruizulin.com
xiangshang360.com xiangshang360.com
xiangshangban.com xiangshangban.com
xiangshanpark.com xiangshanpark.com
@@ -57918,6 +57933,7 @@ xiaotee.com
xiaoten.com xiaoten.com
xiaotengyouxi.com xiaotengyouxi.com
xiaotiancai.com xiaotiancai.com
xiaotud.com
xiaotut.com xiaotut.com
xiaotuzhan.com xiaotuzhan.com
xiaou2014.com xiaou2014.com
@@ -60814,6 +60830,7 @@ yjk.com
yjk.im yjk.im
yjldp.com yjldp.com
yjlin4.com yjlin4.com
yjlink.cc
yjnbn.com yjnbn.com
yjopen.com yjopen.com
yjpal.com yjpal.com
@@ -61178,6 +61195,7 @@ youease.net
youedata.com youedata.com
youeryun.com youeryun.com
youez.com youez.com
youfangou.com
youfangzx.com youfangzx.com
youfen666.com youfen666.com
youfh.com youfh.com
@@ -61403,6 +61421,7 @@ youyannet.com
youyeetoo.com youyeetoo.com
youyegame.com youyegame.com
youyi-game.com youyi-game.com
youyigame.com
youyilm.com youyilm.com
youyiqi.com youyiqi.com
youyiqiaogou.com youyiqiaogou.com
@@ -63275,6 +63294,7 @@ zhengyexing.com
zhengyifeng.com zhengyifeng.com
zhengyinyong.com zhengyinyong.com
zhengyounet.com zhengyounet.com
zhengyouyoule.com
zhengzai.tv zhengzai.tv
zhengzhen25.xyz zhengzhen25.xyz
zhengzhen26.xyz zhengzhen26.xyz

View File

@@ -14272,6 +14272,7 @@ hgsacx.com
hgseav.com hgseav.com
hgtg022.com hgtg022.com
hgtv hgtv
hh-content.com
hh176.net hh176.net
hh2267.com hh2267.com
hh22hh.com hh22hh.com
@@ -17086,6 +17087,7 @@ kinkbook.com
kinkcult.com kinkcult.com
kinkidt.i-cweb.net kinkidt.i-cweb.net
kinklive.com kinklive.com
kinkoid.com
kinkyfamily.com kinkyfamily.com
kinkypeepz.com kinkypeepz.com
kinmen.travel kinmen.travel
@@ -22175,6 +22177,7 @@ pinterest.engineering
pinterest.id pinterest.id
pinterest.info pinterest.info
pinterest.it pinterest.it
pinterest.net
pinterest.pt pinterest.pt
pinterestmail.com pinterestmail.com
pintool.com pintool.com

View File

@@ -21,13 +21,13 @@ define Download/geoip
HASH:=1b6beebefa6ee3fb68e824d4664ccd75a21e8831700bb352d3b74d1c298e9793 HASH:=1b6beebefa6ee3fb68e824d4664ccd75a21e8831700bb352d3b74d1c298e9793
endef endef
GEOSITE_VER:=20230401161112 GEOSITE_VER:=20230401170636
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
define Download/geosite define Download/geosite
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
URL_FILE:=dlc.dat URL_FILE:=dlc.dat
FILE:=$(GEOSITE_FILE) FILE:=$(GEOSITE_FILE)
HASH:=d63a3179224f69df6071d0bb8450c2df0bccec431d48b6618a64d284d20fea7b HASH:=c884da813675fba5a15f322905623d5971e0c60ed5f2fbb8a54bfba1b401bc3b
endef endef
define Package/v2ray-geodata/template define Package/v2ray-geodata/template