if [ ! -f "/tmp/delegated-apnic-latest" ]; then curl -fL "https://ftp.nic.ad.jp/mirror/ftp.apnic.net/pub/apnic/stats/apnic/delegated-apnic-latest" -o /tmp/delegated-apnic-latest fi
sudomkdir -p /etc/nftables.d
cat /tmp/delegated-apnic-latest | \ awk -F '|''/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' | \ sed ':label;N;s/\n/, /;b label' | \ sed 's/$/& }}/g' | \ sed 's/^/set chinalist_v4 {\n type ipv4_addr; flags interval;\n elements = { /' | \ sudotee /etc/nftables.d/chinalist_v4.nftsets > /dev/null
cat /tmp/delegated-apnic-latest | \ awk -F '|''/CN/&&/ipv6/ {print $4 "/" $5}' | \ sed ':lable;N;s/\n/, /;b lable' | \ sed 's/$/& }}/g' | \ sed 's/^/set chinalist_v6 {\n type ipv6_addr; flags interval;\n elements = { /' | \ sudotee /etc/nftables.d/chinalist_v6.nftsets > /dev/null
destroy table inet proxy table inet proxy { include "/etc/nftables.d/chinalist_v4.nftsets" include "/etc/nftables.d/chinalist_v6.nftsets" include "/etc/nftables.d/reserved.nftsets"
chain output { type route hook output priority filter; policy accept; meta l4proto { tcp, udp } jump output_proxy }
chain output_proxy { skuid $TPROXY_USER return ip daddr @reserved_v4 return ip6 daddr @reserved_v6 return ip daddr @chinalist_v4 return ip6 daddr @chinalist_v6 return meta l4proto { tcp, udp } meta mark set $TPROXY_MARK return }
chain prerouting { type filter hook prerouting priority mangle; policy accept; meta l4proto { tcp, udp } jump preroute_proxy }
chain preroute_proxy { meta l4proto tcp socket transparent 1 meta mark set $TPROXY_MARK return
ip daddr @reserved_v4 return ip6 daddr @reserved_v6 return ip daddr @chinalist_v4 return ip6 daddr @chinalist_v6 return meta l4proto { tcp, udp } meta mark set $TPROXY_MARK tproxy to :$TPROXY_PORT return } }
[Service] Type=oneshot RemainAfterExit=yes ExecStartPost=ip rule add fwmark 0x0300 table 30 proto kernel ExecStartPost=ip route add local default dev lo table 30 proto kernel ExecStartPost=ip -6 rule add fwmark 0x0300 table 30 proto kernel ExecStartPost=ip -6 route add local default dev lo table 30 proto kernel ExecStart=nft -f /etc/nftables.d/M01-tproxy.rules ExecStop=nft -f /etc/nftables.d/D01-tproxy.rules ExecStopPost=ip route del local default dev lo table 30 ExecStopPost=ip rule del fwmark 0x0300 table 30 ExecStopPost=ip -6 route del local default dev lo table 30 ExecStopPost=ip -6 rule del fwmark 0x0300 table 30