我正在 VyOS 路由器上设置 TPROXY,以将某些流量转发到本地透明代理。它运行良好,直到我发现我的所有 DNAT 端口转发规则都不再起作用(从外部网络连接时连接超时)。
环境
- 路由器:(
10.0.0.1/24
代理在端口上运行1234
并使用 添加 SO_MARK0xff
) - 内部主机:(
10.0.0.2/24
端口80
应向公众公开)
TPROXY 规则
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
nft add table myproxy
nft add chain myproxy prerouting { type filter hook prerouting priority 0 \; }
nft add rule myproxy prerouting ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy prerouting meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy prerouting mark 0xff return
nft add rule myproxy prerouting meta l4proto { tcp, udp } mark set 1 tproxy to 127.0.0.1:1234 accept
nft add chain myproxy output { type route hook output priority 0 \; }
nft add rule myproxy output ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy output meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy output mark 0xff return
nft add rule myproxy output meta l4proto { tcp, udp } mark set 1 accept
nft add table filter
nft add chain filter divert { type filter hook prerouting priority -150 \; }
nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept
DNAT 规则
$ nft 列表表 nat
table ip nat {
chain PREROUTING {
type nat hook prerouting priority dstnat; policy accept;
iifname "pppoe0" tcp dport { 8080 } counter packets 7 bytes 400 dnat to 10.0.0.2:80
}
}
症状
连接RouterPublicIP:8080
超时。理想情况下,它应该将流量转发至10.0.0.2:80
。
我猜测入站 DNAT 流量被错误地转发到代理(而不是实际主机10.0.0.2
),但是我无法找出正确的 nft 规则。
提前致谢!