luci-app-passwall2: sync upstream

last commit: 78013e5c7b
This commit is contained in:
gitea-action 2024-12-22 01:30:38 +08:00
parent 4a7c789339
commit d240aaf8d3
5 changed files with 150 additions and 137 deletions

View File

@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2 PKG_NAME:=luci-app-passwall2
PKG_VERSION:=24.12.21 PKG_VERSION:=24.12.22
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \

View File

@ -12,6 +12,7 @@ TMP_ROUTE_PATH=$TMP_PATH/route
TMP_ACL_PATH=$TMP_PATH/acl TMP_ACL_PATH=$TMP_PATH/acl
TMP_IFACE_PATH=$TMP_PATH/iface TMP_IFACE_PATH=$TMP_PATH/iface
TMP_PATH2=/tmp/etc/${CONFIG}_tmp TMP_PATH2=/tmp/etc/${CONFIG}_tmp
GLOBAL_ACL_PATH=${TMP_ACL_PATH}/default
LOG_FILE=/tmp/log/$CONFIG.log LOG_FILE=/tmp/log/$CONFIG.log
APP_PATH=/usr/share/$CONFIG APP_PATH=/usr/share/$CONFIG
RULES_PATH=/usr/share/${CONFIG}/rules RULES_PATH=/usr/share/${CONFIG}/rules
@ -373,15 +374,15 @@ run_xray() {
[ "${write_ipset_direct}" = "1" ] && { [ "${write_ipset_direct}" = "1" ] && {
direct_dnsmasq_listen_port=$(get_new_port $(expr $dns_listen_port + 1) udp) direct_dnsmasq_listen_port=$(get_new_port $(expr $dns_listen_port + 1) udp)
local set_flag="${flag}" local set_flag="${flag}"
local direct_ipset_conf=${TMP_ACL_PATH}/default/dns_${flag}_direct.conf local direct_ipset_conf=${GLOBAL_ACL_PATH}/dns_${flag}_direct.conf
[ -n "$(echo ${flag} | grep '^acl')" ] && { [ -n "$(echo ${flag} | grep '^acl')" ] && {
direct_ipset_conf=${TMP_ACL_PATH}/${sid}/dns_${flag}_direct.conf direct_ipset_conf=${TMP_ACL_PATH}/${sid}/dns_${flag}_direct.conf
set_flag=$(echo ${flag} | awk -F '_' '{print $2}') set_flag=$(echo ${flag} | awk -F '_' '{print $2}')
} }
if [ "${nftflag}" = "1" ]; then if [ "${nftflag}" = "1" ]; then
local direct_nftset="4#inet#passwall2#passwall2_${set_flag}_whitelist,6#inet#passwall2#passwall2_${set_flag}_whitelist6" local direct_nftset="4#inet#passwall2#passwall2_${set_flag}_white,6#inet#passwall2#passwall2_${set_flag}_white6"
else else
local direct_ipset="passwall2_${set_flag}_whitelist,passwall2_${set_flag}_whitelist6" local direct_ipset="passwall2_${set_flag}_white,passwall2_${set_flag}_white6"
fi fi
run_ipset_dns_server listen_port=${direct_dnsmasq_listen_port} server_dns=${AUTO_DNS} ipset="${direct_ipset}" nftset="${direct_nftset}" config_file=${direct_ipset_conf} run_ipset_dns_server listen_port=${direct_dnsmasq_listen_port} server_dns=${AUTO_DNS} ipset="${direct_ipset}" nftset="${direct_nftset}" config_file=${direct_ipset_conf}
DIRECT_DNS_UDP_PORT=${direct_dnsmasq_listen_port} DIRECT_DNS_UDP_PORT=${direct_dnsmasq_listen_port}
@ -487,15 +488,15 @@ run_singbox() {
[ "${write_ipset_direct}" = "1" ] && { [ "${write_ipset_direct}" = "1" ] && {
direct_dnsmasq_listen_port=$(get_new_port $(expr $dns_listen_port + 1) udp) direct_dnsmasq_listen_port=$(get_new_port $(expr $dns_listen_port + 1) udp)
local set_flag="${flag}" local set_flag="${flag}"
local direct_ipset_conf=${TMP_ACL_PATH}/default/dns_${flag}_direct.conf local direct_ipset_conf=${GLOBAL_ACL_PATH}/dns_${flag}_direct.conf
[ -n "$(echo ${flag} | grep '^acl')" ] && { [ -n "$(echo ${flag} | grep '^acl')" ] && {
direct_ipset_conf=${TMP_ACL_PATH}/${sid}/dns_${flag}_direct.conf direct_ipset_conf=${TMP_ACL_PATH}/${sid}/dns_${flag}_direct.conf
set_flag=$(echo ${flag} | awk -F '_' '{print $2}') set_flag=$(echo ${flag} | awk -F '_' '{print $2}')
} }
if [ "${nftflag}" = "1" ]; then if [ "${nftflag}" = "1" ]; then
local direct_nftset="4#inet#passwall2#passwall2_${set_flag}_whitelist,6#inet#passwall2#passwall2_${set_flag}_whitelist6" local direct_nftset="4#inet#passwall2#passwall2_${set_flag}_white,6#inet#passwall2#passwall2_${set_flag}_white6"
else else
local direct_ipset="passwall2_${set_flag}_whitelist,passwall2_${set_flag}_whitelist6" local direct_ipset="passwall2_${set_flag}_white,passwall2_${set_flag}_white6"
fi fi
run_ipset_dns_server listen_port=${direct_dnsmasq_listen_port} server_dns=${AUTO_DNS} ipset="${direct_ipset}" nftset="${direct_nftset}" config_file=${direct_ipset_conf} run_ipset_dns_server listen_port=${direct_dnsmasq_listen_port} server_dns=${AUTO_DNS} ipset="${direct_ipset}" nftset="${direct_nftset}" config_file=${direct_ipset_conf}
DIRECT_DNS_UDP_PORT=${direct_dnsmasq_listen_port} DIRECT_DNS_UDP_PORT=${direct_dnsmasq_listen_port}
@ -708,7 +709,7 @@ run_global() {
[ -z "$NODE" ] && return 1 [ -z "$NODE" ] && return 1
TYPE=$(echo $(config_n_get $NODE type) | tr 'A-Z' 'a-z') TYPE=$(echo $(config_n_get $NODE type) | tr 'A-Z' 'a-z')
[ -z "$TYPE" ] && return 1 [ -z "$TYPE" ] && return 1
mkdir -p $TMP_ACL_PATH/default mkdir -p ${GLOBAL_ACL_PATH}
if [ $PROXY_IPV6 == "1" ]; then if [ $PROXY_IPV6 == "1" ]; then
echolog "开启实验性IPv6透明代理(TProxy)请确认您的节点及类型支持IPv6" echolog "开启实验性IPv6透明代理(TProxy)请确认您的节点及类型支持IPv6"
@ -746,8 +747,8 @@ run_global() {
msg="${msg}" msg="${msg}"
echolog ${msg} echolog ${msg}
V2RAY_CONFIG=$TMP_ACL_PATH/default/global.json V2RAY_CONFIG=${GLOBAL_ACL_PATH}/global.json
V2RAY_LOG=$TMP_ACL_PATH/default/global.log V2RAY_LOG=${GLOBAL_ACL_PATH}/global.log
[ "$(config_t_get global log_node 1)" != "1" ] && V2RAY_LOG="/dev/null" [ "$(config_t_get global log_node 1)" != "1" ] && V2RAY_LOG="/dev/null"
V2RAY_ARGS="${V2RAY_ARGS} log_file=${V2RAY_LOG} config_file=${V2RAY_CONFIG}" V2RAY_ARGS="${V2RAY_ARGS} log_file=${V2RAY_LOG} config_file=${V2RAY_CONFIG}"
@ -782,7 +783,9 @@ run_global() {
[ "1" = "0" ] && { [ "1" = "0" ] && {
DIRECT_DNSMASQ_PORT=$(get_new_port 11400) DIRECT_DNSMASQ_PORT=$(get_new_port 11400)
DIRECT_DNSMASQ_CONF=${GLOBAL_ACL_PATH}/direct_dnsmasq.conf DIRECT_DNSMASQ_CONF=${GLOBAL_ACL_PATH}/direct_dnsmasq.conf
lua $APP_PATH/helper_dnsmasq.lua copy_instance -LISTEN_PORT ${DIRECT_DNSMASQ_PORT} -DNSMASQ_CONF ${DIRECT_DNSMASQ_CONF} DIRECT_DNSMASQ_CONF_PATH=${GLOBAL_ACL_PATH}/direct_dnsmasq.d
mkdir -p ${DIRECT_DNSMASQ_CONF_PATH}
lua $APP_PATH/helper_dnsmasq.lua copy_instance -LISTEN_PORT ${DIRECT_DNSMASQ_PORT} -DNSMASQ_CONF ${DIRECT_DNSMASQ_CONF} -TMP_DNSMASQ_PATH ${DIRECT_DNSMASQ_CONF_PATH}
ln_run "$(first_type dnsmasq)" "dnsmasq_direct" "/dev/null" -C ${DIRECT_DNSMASQ_CONF} -x ${GLOBAL_ACL_PATH}/direct_dnsmasq.pid ln_run "$(first_type dnsmasq)" "dnsmasq_direct" "/dev/null" -C ${DIRECT_DNSMASQ_CONF} -x ${GLOBAL_ACL_PATH}/direct_dnsmasq.pid
set_cache_var "DIRECT_DNSMASQ_PORT" "${DIRECT_DNSMASQ_PORT}" set_cache_var "DIRECT_DNSMASQ_PORT" "${DIRECT_DNSMASQ_PORT}"
} }
@ -1052,11 +1055,11 @@ run_ipset_chinadns_ng() {
[ -n "${ipset}" ] && { [ -n "${ipset}" ] && {
set_names=$ipset set_names=$ipset
vps_set_names="passwall2_vpslist,passwall2_vpslist6" vps_set_names="passwall2_vps,passwall2_vps6"
} }
[ -n "${nftset}" ] && { [ -n "${nftset}" ] && {
set_names=$(echo ${nftset} | awk -F, '{printf "%s,%s", substr($1,3), substr($2,3)}' | sed 's/#/@/g') set_names=$(echo ${nftset} | awk -F, '{printf "%s,%s", substr($1,3), substr($2,3)}' | sed 's/#/@/g')
vps_set_names="inet@passwall2@passwall2_vpslist,inet@passwall2@passwall2_vpslist6" vps_set_names="inet@passwall2@passwall2_vps,inet@passwall2@passwall2_vps6"
} }
cat <<-EOF > $config_file cat <<-EOF > $config_file
bind-addr 127.0.0.1 bind-addr 127.0.0.1
@ -1354,19 +1357,17 @@ DEFAULT_DNS=$(uci show dhcp.@dnsmasq[0] | grep "\.server=" | awk -F '=' '{print
AUTO_DNS=${DEFAULT_DNS:-119.29.29.29} AUTO_DNS=${DEFAULT_DNS:-119.29.29.29}
DNSMASQ_CONF_DIR=/tmp/dnsmasq.d DNSMASQ_CONF_DIR=/tmp/dnsmasq.d
TMP_DNSMASQ_PATH=${DNSMASQ_CONF_DIR}/${CONFIG}
DEFAULT_DNSMASQ_CFGID="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')" DEFAULT_DNSMASQ_CFGID="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')"
if [ -f "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID" ]; then if [ -f "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID" ]; then
DNSMASQ_CONF_DIR="$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID")" DNSMASQ_CONF_DIR="$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID")"
if [ -n "$DNSMASQ_CONF_DIR" ]; then if [ -n "$DNSMASQ_CONF_DIR" ]; then
DNSMASQ_CONF_DIR=${DNSMASQ_CONF_DIR%*/} DNSMASQ_CONF_DIR=${DNSMASQ_CONF_DIR%*/}
TMP_DNSMASQ_PATH=${DNSMASQ_CONF_DIR}/${CONFIG}
else else
DNSMASQ_CONF_DIR="/tmp/dnsmasq.d" DNSMASQ_CONF_DIR="/tmp/dnsmasq.d"
fi fi
fi fi
GLOBAL_DNSMASQ_CONF=${DNSMASQ_CONF_DIR}/dnsmasq-${CONFIG}.conf GLOBAL_DNSMASQ_CONF=${DNSMASQ_CONF_DIR}/dnsmasq-${CONFIG}.conf
GLOBAL_DNSMASQ_CONF_PATH=${TMP_DNSMASQ_PATH} GLOBAL_DNSMASQ_CONF_PATH=${GLOBAL_ACL_PATH}/dnsmasq.d
PROXY_IPV6=$(config_t_get global_forwarding ipv6_tproxy 0) PROXY_IPV6=$(config_t_get global_forwarding ipv6_tproxy 0)

View File

@ -117,6 +117,7 @@ end
function copy_instance(var) function copy_instance(var)
local LISTEN_PORT = var["-LISTEN_PORT"] local LISTEN_PORT = var["-LISTEN_PORT"]
local TMP_DNSMASQ_PATH = var["-TMP_DNSMASQ_PATH"]
local conf_lines = {} local conf_lines = {}
local DEFAULT_DNSMASQ_CFGID = sys.exec("echo -n $(uci -q show dhcp.@dnsmasq[0] | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')") local DEFAULT_DNSMASQ_CFGID = sys.exec("echo -n $(uci -q show dhcp.@dnsmasq[0] | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')")
for line in io.lines("/tmp/etc/dnsmasq.conf." .. DEFAULT_DNSMASQ_CFGID) do for line in io.lines("/tmp/etc/dnsmasq.conf." .. DEFAULT_DNSMASQ_CFGID) do
@ -126,13 +127,23 @@ function copy_instance(var)
if line:find("dhcp") then filter = true end if line:find("dhcp") then filter = true end
if line:find("server=") == 1 then filter = true end if line:find("server=") == 1 then filter = true end
if line:find("port=") == 1 then filter = true end if line:find("port=") == 1 then filter = true end
if line:find("conf%-dir=") == 1 then
filter = true
if TMP_DNSMASQ_PATH then
local tmp_path = line:sub(1 + #"conf-dir=")
sys.call(string.format("cp -r %s/* %s/ 2>/dev/null", tmp_path, TMP_DNSMASQ_PATH))
end
end
if line:find("address=") == 1 or (line:find("server=") == 1 and line:find("/")) then filter = nil end if line:find("address=") == 1 or (line:find("server=") == 1 and line:find("/")) then filter = nil end
if not filter then if not filter then
tinsert(conf_lines, line) tinsert(conf_lines, line)
end end
end end
tinsert(conf_lines, "port=" .. LISTEN_PORT) tinsert(conf_lines, "port=" .. LISTEN_PORT)
if var["-return_table"] == "1" then if TMP_DNSMASQ_PATH then
sys.call("rm -rf " .. TMP_DNSMASQ_PATH .. "/*passwall*")
end
if var["-return"] == "1" then
return conf_lines return conf_lines
end end
if #conf_lines > 0 then if #conf_lines > 0 then
@ -264,7 +275,7 @@ function add_rule(var)
if address == "engage.cloudflareclient.com" then return end if address == "engage.cloudflareclient.com" then return end
if datatypes.hostname(address) then if datatypes.hostname(address) then
set_domain_dns(address, fwd_dns) set_domain_dns(address, fwd_dns)
set_domain_ipset(address, setflag_4 .. "passwall2_vpslist," .. setflag_6 .. "passwall2_vpslist6") set_domain_ipset(address, setflag_4 .. "passwall2_vps," .. setflag_6 .. "passwall2_vps6")
end end
end end
process_address(t.address) process_address(t.address)
@ -314,7 +325,7 @@ function add_rule(var)
local conf_lines = {} local conf_lines = {}
if LISTEN_PORT then if LISTEN_PORT then
--Copy dnsmasq instance --Copy dnsmasq instance
conf_lines = copy_instance({["-LISTEN_PORT"] = LISTEN_PORT, ["-return_table"] = "1"}) conf_lines = copy_instance({["-LISTEN_PORT"] = LISTEN_PORT, ["-TMP_DNSMASQ_PATH"] = TMP_DNSMASQ_PATH, ["-return"] = "1"})
else else
--Modify the default dnsmasq service --Modify the default dnsmasq service
end end
@ -334,6 +345,7 @@ function add_rule(var)
if #conf_lines > 0 then if #conf_lines > 0 then
local conf_out = io.open(DNSMASQ_CONF_FILE, "a") local conf_out = io.open(DNSMASQ_CONF_FILE, "a")
conf_out:write(table.concat(conf_lines, "\n")) conf_out:write(table.concat(conf_lines, "\n"))
conf_out:write("\n")
conf_out:close() conf_out:close()
end end
end end

View File

@ -2,13 +2,13 @@
DIR="$(cd "$(dirname "$0")" && pwd)" DIR="$(cd "$(dirname "$0")" && pwd)"
MY_PATH=$DIR/iptables.sh MY_PATH=$DIR/iptables.sh
IPSET_LOCALLIST="passwall2_locallist" IPSET_LOCAL="passwall2_local"
IPSET_LANLIST="passwall2_lanlist" IPSET_LAN="passwall2_lan"
IPSET_VPSLIST="passwall2_vpslist" IPSET_VPS="passwall2_vps"
IPSET_LOCALLIST6="passwall2_locallist6" IPSET_LOCAL6="passwall2_local6"
IPSET_LANLIST6="passwall2_lanlist6" IPSET_LAN6="passwall2_lan6"
IPSET_VPSLIST6="passwall2_vpslist6" IPSET_VPS6="passwall2_vps6"
FORCE_INDEX=2 FORCE_INDEX=2
@ -301,18 +301,18 @@ load_acl() {
write_ipset_direct=${write_ipset_direct:-1} write_ipset_direct=${write_ipset_direct:-1}
[ "${write_ipset_direct}" = "1" ] && { [ "${write_ipset_direct}" = "1" ] && {
if [ -n "$(get_cache_var "ACL_${sid}_default")" ]; then if [ -n "$(get_cache_var "ACL_${sid}_default")" ]; then
local ipset_whitelist=${ipset_global_whitelist} local ipset_white=${ipset_global_white}
local ipset_whitelist6=${ipset_global_whitelist6} local ipset_white6=${ipset_global_white6}
shunt_list4=${SHUNT_LIST4} shunt_list4=${SHUNT_LIST4}
shunt_list6=${SHUNT_LIST6} shunt_list6=${SHUNT_LIST6}
else else
local ipset_whitelist="passwall2_${sid}_whitelist" local ipset_white="passwall2_${sid}_white"
local ipset_whitelist6="passwall2_${sid}_whitelist6" local ipset_white6="passwall2_${sid}_white6"
ipset -! create $ipset_whitelist nethash maxelem 1048576 ipset -! create $ipset_white nethash maxelem 1048576
ipset -! create $ipset_whitelist6 nethash family inet6 maxelem 1048576 ipset -! create $ipset_white6 nethash family inet6 maxelem 1048576
#分流规则的IP列表(使用分流节点时导入) #分流规则的IP列表(使用分流节点时导入)
gen_shunt_list ${node} shunt_list4 shunt_list6 ${write_ipset_direct} ${ipset_whitelist} ${ipset_whitelist6} gen_shunt_list ${node} shunt_list4 shunt_list6 ${write_ipset_direct} ${ipset_white} ${ipset_white6}
fi fi
} }
@ -562,16 +562,16 @@ load_acl() {
filter_haproxy() { filter_haproxy() {
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1) local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1)
[ -n "$ip" ] && ipset -q add $IPSET_VPSLIST $ip [ -n "$ip" ] && ipset -q add $IPSET_VPS $ip
done done
echolog "加入负载均衡的节点到ipset[$IPSET_VPSLIST]直连完成" echolog "加入负载均衡的节点到ipset[$IPSET_VPS]直连完成"
} }
filter_vpsip() { filter_vpsip() {
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
echolog " - [$?]加入所有IPv4节点到ipset[$IPSET_VPSLIST]直连完成" echolog " - [$?]加入所有IPv4节点到ipset[$IPSET_VPS]直连完成"
uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPSLIST6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d" | sed -e "s/^/add $IPSET_VPS6 &/g" | awk '{print $0} END{print "COMMIT"}' | ipset -! -R
echolog " - [$?]加入所有IPv6节点到ipset[$IPSET_VPSLIST6]直连完成" echolog " - [$?]加入所有IPv6节点到ipset[$IPSET_VPS6]直连完成"
} }
filter_server_port() { filter_server_port() {
@ -620,27 +620,27 @@ filter_direct_node_list() {
add_firewall_rule() { add_firewall_rule() {
echolog "开始加载防火墙规则..." echolog "开始加载防火墙规则..."
ipset -! create $IPSET_LOCALLIST nethash maxelem 1048576 ipset -! create $IPSET_LOCAL nethash maxelem 1048576
ipset -! create $IPSET_LANLIST nethash maxelem 1048576 ipset -! create $IPSET_LAN nethash maxelem 1048576
ipset -! create $IPSET_VPSLIST nethash maxelem 1048576 ipset -! create $IPSET_VPS nethash maxelem 1048576
ipset -! create $IPSET_LOCALLIST6 nethash family inet6 maxelem 1048576 ipset -! create $IPSET_LOCAL6 nethash family inet6 maxelem 1048576
ipset -! create $IPSET_LANLIST6 nethash family inet6 maxelem 1048576 ipset -! create $IPSET_LAN6 nethash family inet6 maxelem 1048576
ipset -! create $IPSET_VPSLIST6 nethash family inet6 maxelem 1048576 ipset -! create $IPSET_VPS6 nethash family inet6 maxelem 1048576
ipset -! -R <<-EOF ipset -! -R <<-EOF
$(ip address show | grep -w "inet" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/^/add $IPSET_LOCALLIST /") $(ip address show | grep -w "inet" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/^/add $IPSET_LOCAL /")
EOF EOF
ipset -! -R <<-EOF ipset -! -R <<-EOF
$(ip address show | grep -w "inet6" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/^/add $IPSET_LOCALLIST6 /") $(ip address show | grep -w "inet6" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/^/add $IPSET_LOCAL6 /")
EOF EOF
ipset -! -R <<-EOF ipset -! -R <<-EOF
$(gen_lanlist | sed -e "s/^/add $IPSET_LANLIST /") $(gen_lanlist | sed -e "s/^/add $IPSET_LAN /")
EOF EOF
ipset -! -R <<-EOF ipset -! -R <<-EOF
$(gen_lanlist_6 | sed -e "s/^/add $IPSET_LANLIST6 /") $(gen_lanlist_6 | sed -e "s/^/add $IPSET_LAN6 /")
EOF EOF
# 忽略特殊IP段 # 忽略特殊IP段
@ -653,18 +653,18 @@ add_firewall_rule() {
#echolog "本机IPv6网段互访直连${lan_ip6}" #echolog "本机IPv6网段互访直连${lan_ip6}"
[ -n "$lan_ip" ] && ipset -! -R <<-EOF [ -n "$lan_ip" ] && ipset -! -R <<-EOF
$(echo $lan_ip | sed -e "s/ /\n/g" | sed -e "s/^/add $IPSET_LANLIST /") $(echo $lan_ip | sed -e "s/ /\n/g" | sed -e "s/^/add $IPSET_LAN /")
EOF EOF
[ -n "$lan_ip6" ] && ipset -! -R <<-EOF [ -n "$lan_ip6" ] && ipset -! -R <<-EOF
$(echo $lan_ip6 | sed -e "s/ /\n/g" | sed -e "s/^/add $IPSET_LANLIST6 /") $(echo $lan_ip6 | sed -e "s/ /\n/g" | sed -e "s/^/add $IPSET_LAN6 /")
EOF EOF
} }
[ -n "$ISP_DNS" ] && { [ -n "$ISP_DNS" ] && {
#echolog "处理 ISP DNS 例外..." #echolog "处理 ISP DNS 例外..."
for ispip in $ISP_DNS; do for ispip in $ISP_DNS; do
ipset -! add $IPSET_LANLIST $ispip ipset -! add $IPSET_LAN $ispip
echolog " - [$?]追加ISP IPv4 DNS到白名单${ispip}" echolog " - [$?]追加ISP IPv4 DNS到白名单${ispip}"
done done
} }
@ -672,18 +672,18 @@ add_firewall_rule() {
[ -n "$ISP_DNS6" ] && { [ -n "$ISP_DNS6" ] && {
#echolog "处理 ISP IPv6 DNS 例外..." #echolog "处理 ISP IPv6 DNS 例外..."
for ispip6 in $ISP_DNS6; do for ispip6 in $ISP_DNS6; do
ipset -! add $IPSET_LANLIST6 $ispip6 ipset -! add $IPSET_LAN6 $ispip6
echolog " - [$?]追加ISP IPv6 DNS到白名单${ispip6}" echolog " - [$?]追加ISP IPv6 DNS到白名单${ispip6}"
done done
} }
local ipset_global_whitelist="passwall2_global_whitelist" local ipset_global_white="passwall2_global_white"
local ipset_global_whitelist6="passwall2_global_whitelist6" local ipset_global_white6="passwall2_global_white6"
ipset -! create $ipset_global_whitelist nethash maxelem 1048576 timeout 259200 ipset -! create $ipset_global_white nethash maxelem 1048576 timeout 259200
ipset -! create $ipset_global_whitelist6 nethash family inet6 maxelem 1048576 timeout 259200 ipset -! create $ipset_global_white6 nethash family inet6 maxelem 1048576 timeout 259200
#分流规则的IP列表(使用分流节点时导入) #分流规则的IP列表(使用分流节点时导入)
gen_shunt_list ${NODE} SHUNT_LIST4 SHUNT_LIST6 ${WRITE_IPSET_DIRECT} ${ipset_global_whitelist} ${ipset_global_whitelist6} gen_shunt_list ${NODE} SHUNT_LIST4 SHUNT_LIST6 ${WRITE_IPSET_DIRECT} ${ipset_global_white} ${ipset_global_white6}
# 过滤所有节点IP # 过滤所有节点IP
filter_vpsip > /dev/null 2>&1 & filter_vpsip > /dev/null 2>&1 &
@ -700,8 +700,8 @@ add_firewall_rule() {
fi fi
$ipt_n -N PSW2 $ipt_n -N PSW2
$ipt_n -A PSW2 $(dst $IPSET_LANLIST) -j RETURN $ipt_n -A PSW2 $(dst $IPSET_LAN) -j RETURN
$ipt_n -A PSW2 $(dst $IPSET_VPSLIST) -j RETURN $ipt_n -A PSW2 $(dst $IPSET_VPS) -j RETURN
WAN_IP=$(get_wan_ip) WAN_IP=$(get_wan_ip)
[ ! -z "${WAN_IP}" ] && $ipt_n -A PSW2 $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN [ ! -z "${WAN_IP}" ] && $ipt_n -A PSW2 $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN
@ -710,14 +710,14 @@ add_firewall_rule() {
[ -z "${is_tproxy}" ] && insert_rule_after "$ipt_n" "PREROUTING" "prerouting_rule" "-p tcp -j PSW2" [ -z "${is_tproxy}" ] && insert_rule_after "$ipt_n" "PREROUTING" "prerouting_rule" "-p tcp -j PSW2"
$ipt_n -N PSW2_OUTPUT $ipt_n -N PSW2_OUTPUT
$ipt_n -A PSW2_OUTPUT $(dst $IPSET_LANLIST) -j RETURN $ipt_n -A PSW2_OUTPUT $(dst $IPSET_LAN) -j RETURN
$ipt_n -A PSW2_OUTPUT $(dst $IPSET_VPSLIST) -j RETURN $ipt_n -A PSW2_OUTPUT $(dst $IPSET_VPS) -j RETURN
$ipt_n -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN $ipt_n -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN
$ipt_n -N PSW2_DNS $ipt_n -N PSW2_DNS
if [ $(config_t_get global dns_redirect "1") = "0" ]; then if [ $(config_t_get global dns_redirect "1") = "0" ]; then
#Only hijack when dest address is local IP #Only hijack when dest address is local IP
$ipt_n -I PREROUTING $(dst $IPSET_LOCALLIST) -j PSW2_DNS $ipt_n -I PREROUTING $(dst $IPSET_LOCAL) -j PSW2_DNS
else else
$ipt_n -I PREROUTING -j PSW2_DNS $ipt_n -I PREROUTING -j PSW2_DNS
fi fi
@ -734,8 +734,8 @@ add_firewall_rule() {
$ipt_m -A PSW2_RULE -j CONNMARK --save-mark $ipt_m -A PSW2_RULE -j CONNMARK --save-mark
$ipt_m -N PSW2 $ipt_m -N PSW2
$ipt_m -A PSW2 $(dst $IPSET_LANLIST) -j RETURN $ipt_m -A PSW2 $(dst $IPSET_LAN) -j RETURN
$ipt_m -A PSW2 $(dst $IPSET_VPSLIST) -j RETURN $ipt_m -A PSW2 $(dst $IPSET_VPS) -j RETURN
[ ! -z "${WAN_IP}" ] && $ipt_m -A PSW2 $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN [ ! -z "${WAN_IP}" ] && $ipt_m -A PSW2 $(comment "WAN_IP_RETURN") -d "${WAN_IP}" -j RETURN
unset WAN_IP unset WAN_IP
@ -744,8 +744,8 @@ add_firewall_rule() {
insert_rule_before "$ipt_m" "PREROUTING" "PSW2" "-p tcp -m socket -j PSW2_DIVERT" insert_rule_before "$ipt_m" "PREROUTING" "PSW2" "-p tcp -m socket -j PSW2_DIVERT"
$ipt_m -N PSW2_OUTPUT $ipt_m -N PSW2_OUTPUT
$ipt_m -A PSW2_OUTPUT $(dst $IPSET_LANLIST) -j RETURN $ipt_m -A PSW2_OUTPUT $(dst $IPSET_LAN) -j RETURN
$ipt_m -A PSW2_OUTPUT $(dst $IPSET_VPSLIST) -j RETURN $ipt_m -A PSW2_OUTPUT $(dst $IPSET_VPS) -j RETURN
[ -n "$AUTO_DNS" ] && { [ -n "$AUTO_DNS" ] && {
for auto_dns in $(echo $AUTO_DNS | tr ',' ' '); do for auto_dns in $(echo $AUTO_DNS | tr ',' ' '); do
local dns_address=$(echo $auto_dns | awk -F '#' '{print $1}') local dns_address=$(echo $auto_dns | awk -F '#' '{print $1}')
@ -761,20 +761,20 @@ add_firewall_rule() {
[ "$accept_icmpv6" = "1" ] && { [ "$accept_icmpv6" = "1" ] && {
$ip6t_n -N PSW2 $ip6t_n -N PSW2
$ip6t_n -A PSW2 $(dst $IPSET_LANLIST6) -j RETURN $ip6t_n -A PSW2 $(dst $IPSET_LAN6) -j RETURN
$ip6t_n -A PSW2 $(dst $IPSET_VPSLIST6) -j RETURN $ip6t_n -A PSW2 $(dst $IPSET_VPS6) -j RETURN
$ip6t_n -A PREROUTING -p ipv6-icmp -j PSW2 $ip6t_n -A PREROUTING -p ipv6-icmp -j PSW2
$ip6t_n -N PSW2_OUTPUT $ip6t_n -N PSW2_OUTPUT
$ip6t_n -A PSW2_OUTPUT $(dst $IPSET_LANLIST6) -j RETURN $ip6t_n -A PSW2_OUTPUT $(dst $IPSET_LAN6) -j RETURN
$ip6t_n -A PSW2_OUTPUT $(dst $IPSET_VPSLIST6) -j RETURN $ip6t_n -A PSW2_OUTPUT $(dst $IPSET_VPS6) -j RETURN
$ip6t_n -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN $ip6t_n -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN
} }
$ip6t_n -N PSW2_DNS $ip6t_n -N PSW2_DNS
if [ $(config_t_get global dns_redirect "1") = "0" ]; then if [ $(config_t_get global dns_redirect "1") = "0" ]; then
#Only hijack when dest address is local IP #Only hijack when dest address is local IP
$ip6t_n -I PREROUTING $(dst $IPSET_LOCALLIST6) -j PSW2_DNS $ip6t_n -I PREROUTING $(dst $IPSET_LOCAL6) -j PSW2_DNS
else else
$ip6t_n -I PREROUTING -j PSW2_DNS $ip6t_n -I PREROUTING -j PSW2_DNS
fi fi
@ -791,8 +791,8 @@ add_firewall_rule() {
$ip6t_m -A PSW2_RULE -j CONNMARK --save-mark $ip6t_m -A PSW2_RULE -j CONNMARK --save-mark
$ip6t_m -N PSW2 $ip6t_m -N PSW2
$ip6t_m -A PSW2 $(dst $IPSET_LANLIST6) -j RETURN $ip6t_m -A PSW2 $(dst $IPSET_LAN6) -j RETURN
$ip6t_m -A PSW2 $(dst $IPSET_VPSLIST6) -j RETURN $ip6t_m -A PSW2 $(dst $IPSET_VPS6) -j RETURN
WAN6_IP=$(get_wan6_ip) WAN6_IP=$(get_wan6_ip)
[ ! -z "${WAN6_IP}" ] && $ip6t_m -A PSW2 $(comment "WAN6_IP_RETURN") -d ${WAN6_IP} -j RETURN [ ! -z "${WAN6_IP}" ] && $ip6t_m -A PSW2 $(comment "WAN6_IP_RETURN") -d ${WAN6_IP} -j RETURN
@ -803,8 +803,8 @@ add_firewall_rule() {
$ip6t_m -N PSW2_OUTPUT $ip6t_m -N PSW2_OUTPUT
$ip6t_m -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN $ip6t_m -A PSW2_OUTPUT -m mark --mark 0xff -j RETURN
$ip6t_m -A PSW2_OUTPUT $(dst $IPSET_LANLIST6) -j RETURN $ip6t_m -A PSW2_OUTPUT $(dst $IPSET_LAN6) -j RETURN
$ip6t_m -A PSW2_OUTPUT $(dst $IPSET_VPSLIST6) -j RETURN $ip6t_m -A PSW2_OUTPUT $(dst $IPSET_VPS6) -j RETURN
ip -6 rule add fwmark 1 table 100 ip -6 rule add fwmark 1 table 100
ip -6 route add local ::/0 dev lo table 100 ip -6 route add local ::/0 dev lo table 100

View File

@ -3,13 +3,13 @@
DIR="$(cd "$(dirname "$0")" && pwd)" DIR="$(cd "$(dirname "$0")" && pwd)"
MY_PATH=$DIR/nftables.sh MY_PATH=$DIR/nftables.sh
NFTABLE_NAME="inet passwall2" NFTABLE_NAME="inet passwall2"
NFTSET_LOCALLIST="passwall2_locallist" NFTSET_LOCAL="passwall2_local"
NFTSET_LANLIST="passwall2_lanlist" NFTSET_LAN="passwall2_lan"
NFTSET_VPSLIST="passwall2_vpslist" NFTSET_VPS="passwall2_vps"
NFTSET_LOCALLIST6="passwall2_locallist6" NFTSET_LOCAL6="passwall2_local6"
NFTSET_LANLIST6="passwall2_lanlist6" NFTSET_LAN6="passwall2_lan6"
NFTSET_VPSLIST6="passwall2_vpslist6" NFTSET_VPS6="passwall2_vps6"
FORCE_INDEX=0 FORCE_INDEX=0
@ -356,18 +356,18 @@ load_acl() {
write_ipset_direct=${write_ipset_direct:-1} write_ipset_direct=${write_ipset_direct:-1}
[ "${write_ipset_direct}" = "1" ] && { [ "${write_ipset_direct}" = "1" ] && {
if [ -n "$(get_cache_var "ACL_${sid}_default")" ]; then if [ -n "$(get_cache_var "ACL_${sid}_default")" ]; then
local nftset_whitelist=${nftset_global_whitelist} local nftset_white=${nftset_global_white}
local nftset_whitelist6=${nftset_global_whitelist6} local nftset_white6=${nftset_global_white6}
shunt_list4=${SHUNT_LIST4} shunt_list4=${SHUNT_LIST4}
shunt_list6=${SHUNT_LIST6} shunt_list6=${SHUNT_LIST6}
else else
local nftset_whitelist="passwall2_${sid}_whitelist" local nftset_white="passwall2_${sid}_white"
local nftset_whitelist6="passwall2_${sid}_whitelist6" local nftset_white6="passwall2_${sid}_white6"
gen_nftset $nftset_whitelist ipv4_addr 3d 3d gen_nftset $nftset_white ipv4_addr 3d 3d
gen_nftset $nftset_whitelist6 ipv6_addr 3d 3d gen_nftset $nftset_white6 ipv6_addr 3d 3d
#分流规则的IP列表(使用分流节点时导入) #分流规则的IP列表(使用分流节点时导入)
gen_shunt_list ${node} shunt_list4 shunt_list6 ${write_ipset_direct} ${nftset_whitelist} ${nftset_whitelist6} gen_shunt_list ${node} shunt_list4 shunt_list6 ${write_ipset_direct} ${nftset_white} ${nftset_white6}
fi fi
} }
@ -616,25 +616,25 @@ load_acl() {
filter_haproxy() { filter_haproxy() {
for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do
local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1) local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1)
[ -n "$ip" ] && insert_nftset $NFTSET_VPSLIST "-1" $ip [ -n "$ip" ] && insert_nftset $NFTSET_VPS "-1" $ip
done done
echolog "加入负载均衡的节点到nftset[$NFTSET_VPSLIST]直连完成" echolog "加入负载均衡的节点到nftset[$NFTSET_VPS]直连完成"
} }
filter_vps_addr() { filter_vps_addr() {
for server_host in $@; do for server_host in $@; do
local vps_ip4=$(get_host_ip "ipv4" ${server_host}) local vps_ip4=$(get_host_ip "ipv4" ${server_host})
local vps_ip6=$(get_host_ip "ipv6" ${server_host}) local vps_ip6=$(get_host_ip "ipv6" ${server_host})
[ -n "$vps_ip4" ] && insert_nftset $NFTSET_VPSLIST "-1" $vps_ip4 [ -n "$vps_ip4" ] && insert_nftset $NFTSET_VPS "-1" $vps_ip4
[ -n "$vps_ip6" ] && insert_nftset $NFTSET_VPSLIST6 "-1" $vps_ip6 [ -n "$vps_ip6" ] && insert_nftset $NFTSET_VPS6 "-1" $vps_ip6
done done
} }
filter_vpsip() { filter_vpsip() {
insert_nftset $NFTSET_VPSLIST "-1" $(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | sed -e "/^$/d") insert_nftset $NFTSET_VPS "-1" $(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | grep -v "^127\.0\.0\.1$" | sed -e "/^$/d")
echolog " - [$?]加入所有IPv4节点到nftset[$NFTSET_VPSLIST]直连完成" echolog " - [$?]加入所有IPv4节点到nftset[$NFTSET_VPS]直连完成"
insert_nftset $NFTSET_VPSLIST6 "-1" $(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d") insert_nftset $NFTSET_VPS6 "-1" $(uci show $CONFIG | grep -E "(.address=|.download_address=)" | cut -d "'" -f 2 | grep -E "([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}" | sed -e "/^$/d")
echolog " - [$?]加入所有IPv6节点到nftset[$NFTSET_VPSLIST6]直连完成" echolog " - [$?]加入所有IPv6节点到nftset[$NFTSET_VPS6]直连完成"
} }
filter_server_port() { filter_server_port() {
@ -682,16 +682,16 @@ filter_direct_node_list() {
add_firewall_rule() { add_firewall_rule() {
echolog "开始加载防火墙规则..." echolog "开始加载防火墙规则..."
gen_nft_tables gen_nft_tables
gen_nftset $NFTSET_LOCALLIST ipv4_addr 0 "-1" gen_nftset $NFTSET_LOCAL ipv4_addr 0 "-1"
gen_nftset $NFTSET_LANLIST ipv4_addr 0 "-1" $(gen_lanlist) gen_nftset $NFTSET_LAN ipv4_addr 0 "-1" $(gen_lanlist)
gen_nftset $NFTSET_VPSLIST ipv4_addr 0 0 gen_nftset $NFTSET_VPS ipv4_addr 0 0
gen_nftset $NFTSET_LOCALLIST6 ipv6_addr 0 "-1" gen_nftset $NFTSET_LOCAL6 ipv6_addr 0 "-1"
gen_nftset $NFTSET_LANLIST6 ipv6_addr 0 "-1" $(gen_lanlist_6) gen_nftset $NFTSET_LAN6 ipv6_addr 0 "-1" $(gen_lanlist_6)
gen_nftset $NFTSET_VPSLIST6 ipv6_addr 0 0 gen_nftset $NFTSET_VPS6 ipv6_addr 0 0
insert_nftset $NFTSET_LOCALLIST "-1" $(ip address show | grep -w "inet" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/ /\n/g") insert_nftset $NFTSET_LOCAL "-1" $(ip address show | grep -w "inet" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/ /\n/g")
insert_nftset $NFTSET_LOCALLIST6 "-1" $(ip address show | grep -w "inet6" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/ /\n/g") insert_nftset $NFTSET_LOCAL6 "-1" $(ip address show | grep -w "inet6" | awk '{print $2}' | awk -F '/' '{print $1}' | sed -e "s/ /\n/g")
# 忽略特殊IP段 # 忽略特殊IP段
local lan_ifname lan_ip local lan_ifname lan_ip
@ -702,14 +702,14 @@ add_firewall_rule() {
#echolog "本机IPv4网段互访直连${lan_ip}" #echolog "本机IPv4网段互访直连${lan_ip}"
#echolog "本机IPv6网段互访直连${lan_ip6}" #echolog "本机IPv6网段互访直连${lan_ip6}"
[ -n "$lan_ip" ] && insert_nftset $NFTSET_LANLIST "-1" $(echo $lan_ip | sed -e "s/ /\n/g") [ -n "$lan_ip" ] && insert_nftset $NFTSET_LAN "-1" $(echo $lan_ip | sed -e "s/ /\n/g")
[ -n "$lan_ip6" ] && insert_nftset $NFTSET_LANLIST6 "-1" $(echo $lan_ip6 | sed -e "s/ /\n/g") [ -n "$lan_ip6" ] && insert_nftset $NFTSET_LAN6 "-1" $(echo $lan_ip6 | sed -e "s/ /\n/g")
} }
[ -n "$ISP_DNS" ] && { [ -n "$ISP_DNS" ] && {
#echolog "处理 ISP DNS 例外..." #echolog "处理 ISP DNS 例外..."
for ispip in $ISP_DNS; do for ispip in $ISP_DNS; do
insert_nftset $NFTSET_LANLIST "-1" $ispip insert_nftset $NFTSET_LAN "-1" $ispip
echolog " - [$?]追加ISP IPv4 DNS到白名单${ispip}" echolog " - [$?]追加ISP IPv4 DNS到白名单${ispip}"
done done
} }
@ -717,18 +717,18 @@ add_firewall_rule() {
[ -n "$ISP_DNS6" ] && { [ -n "$ISP_DNS6" ] && {
#echolog "处理 ISP IPv6 DNS 例外..." #echolog "处理 ISP IPv6 DNS 例外..."
for ispip6 in $ISP_DNS6; do for ispip6 in $ISP_DNS6; do
insert_nftset $NFTSET_LANLIST6 "-1" $ispip6 insert_nftset $NFTSET_LAN6 "-1" $ispip6
echolog " - [$?]追加ISP IPv6 DNS到白名单${ispip6}" echolog " - [$?]追加ISP IPv6 DNS到白名单${ispip6}"
done done
} }
local nftset_global_whitelist="passwall2_global_whitelist" local nftset_global_white="passwall2_global_white"
local nftset_global_whitelist6="passwall2_global_whitelist6" local nftset_global_white6="passwall2_global_white6"
gen_nftset $nftset_global_whitelist ipv4_addr 0 0 gen_nftset $nftset_global_white ipv4_addr 0 0
gen_nftset $nftset_global_whitelist6 ipv6_addr 0 0 gen_nftset $nftset_global_white6 ipv6_addr 0 0
#分流规则的IP列表(使用分流节点时导入) #分流规则的IP列表(使用分流节点时导入)
gen_shunt_list ${NODE} SHUNT_LIST4 SHUNT_LIST6 ${WRITE_IPSET_DIRECT} ${nftset_global_whitelist} ${nftset_global_whitelist6} gen_shunt_list ${NODE} SHUNT_LIST4 SHUNT_LIST6 ${WRITE_IPSET_DIRECT} ${nftset_global_white} ${nftset_global_white6}
# 过滤所有节点IP # 过滤所有节点IP
filter_vpsip > /dev/null 2>&1 & filter_vpsip > /dev/null 2>&1 &
@ -759,8 +759,8 @@ add_firewall_rule() {
nft "flush chain $NFTABLE_NAME PSW2_DNS" nft "flush chain $NFTABLE_NAME PSW2_DNS"
if [ $(config_t_get global dns_redirect "1") = "0" ]; then if [ $(config_t_get global dns_redirect "1") = "0" ]; then
#Only hijack when dest address is local IP #Only hijack when dest address is local IP
nft "insert rule $NFTABLE_NAME dstnat ip daddr @${NFTSET_LOCALLIST} jump PSW2_DNS" nft "insert rule $NFTABLE_NAME dstnat ip daddr @${NFTSET_LOCAL} jump PSW2_DNS"
nft "insert rule $NFTABLE_NAME dstnat ip6 daddr @${NFTSET_LOCALLIST6} jump PSW2_DNS" nft "insert rule $NFTABLE_NAME dstnat ip6 daddr @${NFTSET_LOCAL6} jump PSW2_DNS"
else else
nft "insert rule $NFTABLE_NAME dstnat jump PSW2_DNS" nft "insert rule $NFTABLE_NAME dstnat jump PSW2_DNS"
fi fi
@ -777,13 +777,13 @@ add_firewall_rule() {
#ipv4 tproxy mode and udp #ipv4 tproxy mode and udp
nft "add chain $NFTABLE_NAME PSW2_MANGLE" nft "add chain $NFTABLE_NAME PSW2_MANGLE"
nft "flush chain $NFTABLE_NAME PSW2_MANGLE" nft "flush chain $NFTABLE_NAME PSW2_MANGLE"
nft "add rule $NFTABLE_NAME PSW2_MANGLE ip daddr @$NFTSET_LANLIST counter return" nft "add rule $NFTABLE_NAME PSW2_MANGLE ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW2_MANGLE ip daddr @$NFTSET_VPSLIST counter return" nft "add rule $NFTABLE_NAME PSW2_MANGLE ip daddr @$NFTSET_VPS counter return"
nft "add chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE" nft "add chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE"
nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE" nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE ip daddr @$NFTSET_LANLIST counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE ip daddr @$NFTSET_VPSLIST counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE ip daddr @$NFTSET_VPS counter return"
[ -n "$AUTO_DNS" ] && { [ -n "$AUTO_DNS" ] && {
for auto_dns in $(echo $AUTO_DNS | tr ',' ' '); do for auto_dns in $(echo $AUTO_DNS | tr ',' ' '); do
local dns_address=$(echo $auto_dns | awk -F '#' '{print $1}') local dns_address=$(echo $auto_dns | awk -F '#' '{print $1}')
@ -803,14 +803,14 @@ add_firewall_rule() {
[ -z "${is_tproxy}" ] && { [ -z "${is_tproxy}" ] && {
nft "add chain $NFTABLE_NAME PSW2_NAT" nft "add chain $NFTABLE_NAME PSW2_NAT"
nft "flush chain $NFTABLE_NAME PSW2_NAT" nft "flush chain $NFTABLE_NAME PSW2_NAT"
nft "add rule $NFTABLE_NAME PSW2_NAT ip daddr @$NFTSET_LANLIST counter return" nft "add rule $NFTABLE_NAME PSW2_NAT ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW2_NAT ip daddr @$NFTSET_VPSLIST counter return" nft "add rule $NFTABLE_NAME PSW2_NAT ip daddr @$NFTSET_VPS counter return"
nft "add rule $NFTABLE_NAME dstnat ip protocol tcp counter jump PSW2_NAT" nft "add rule $NFTABLE_NAME dstnat ip protocol tcp counter jump PSW2_NAT"
nft "add chain $NFTABLE_NAME PSW2_OUTPUT_NAT" nft "add chain $NFTABLE_NAME PSW2_OUTPUT_NAT"
nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_NAT" nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_NAT"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT ip daddr @$NFTSET_LANLIST counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT ip daddr @$NFTSET_VPSLIST counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT ip daddr @$NFTSET_VPS counter return"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT meta mark 0xff counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_NAT meta mark 0xff counter return"
} }
@ -818,12 +818,12 @@ add_firewall_rule() {
if [ "$accept_icmp" = "1" ]; then if [ "$accept_icmp" = "1" ]; then
nft "add chain $NFTABLE_NAME PSW2_ICMP_REDIRECT" nft "add chain $NFTABLE_NAME PSW2_ICMP_REDIRECT"
nft "flush chain $NFTABLE_NAME PSW2_ICMP_REDIRECT" nft "flush chain $NFTABLE_NAME PSW2_ICMP_REDIRECT"
nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip daddr @$NFTSET_LANLIST counter return" nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip daddr @$NFTSET_LAN counter return"
nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip daddr @$NFTSET_VPSLIST counter return" nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip daddr @$NFTSET_VPS counter return"
[ "$accept_icmpv6" = "1" ] && { [ "$accept_icmpv6" = "1" ] && {
nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip6 daddr @$NFTSET_LANLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip6 daddr @$NFTSET_LAN6 counter return"
nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip6 daddr @$NFTSET_VPSLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_ICMP_REDIRECT ip6 daddr @$NFTSET_VPS6 counter return"
} }
nft "add rule $NFTABLE_NAME dstnat meta l4proto {icmp,icmpv6} counter jump PSW2_ICMP_REDIRECT" nft "add rule $NFTABLE_NAME dstnat meta l4proto {icmp,icmpv6} counter jump PSW2_ICMP_REDIRECT"
@ -843,13 +843,13 @@ add_firewall_rule() {
#ipv6 tproxy mode and udp #ipv6 tproxy mode and udp
nft "add chain $NFTABLE_NAME PSW2_MANGLE_V6" nft "add chain $NFTABLE_NAME PSW2_MANGLE_V6"
nft "flush chain $NFTABLE_NAME PSW2_MANGLE_V6" nft "flush chain $NFTABLE_NAME PSW2_MANGLE_V6"
nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 ip6 daddr @$NFTSET_LANLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return"
nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 ip6 daddr @$NFTSET_VPSLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return"
nft "add chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6" nft "add chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6"
nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6" nft "flush chain $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_LANLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_LAN6 counter return"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_VPSLIST6 counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 ip6 daddr @$NFTSET_VPS6 counter return"
nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 meta mark 0xff counter return" nft "add rule $NFTABLE_NAME PSW2_OUTPUT_MANGLE_V6 meta mark 0xff counter return"
# jump chains # jump chains
@ -1012,13 +1012,13 @@ del_firewall_rule() {
ip -6 rule del fwmark 1 table 100 2>/dev/null ip -6 rule del fwmark 1 table 100 2>/dev/null
ip -6 route del local ::/0 dev lo table 100 2>/dev/null ip -6 route del local ::/0 dev lo table 100 2>/dev/null
destroy_nftset $NFTSET_LOCALLIST destroy_nftset $NFTSET_LOCAL
destroy_nftset $NFTSET_LANLIST destroy_nftset $NFTSET_LAN
destroy_nftset $NFTSET_VPSLIST destroy_nftset $NFTSET_VPS
destroy_nftset $NFTSET_LOCALLIST6 destroy_nftset $NFTSET_LOCAL6
destroy_nftset $NFTSET_LANLIST6 destroy_nftset $NFTSET_LAN6
destroy_nftset $NFTSET_VPSLIST6 destroy_nftset $NFTSET_VPS6
$DIR/app.sh echolog "删除nftables防火墙规则完成。" $DIR/app.sh echolog "删除nftables防火墙规则完成。"
} }