我想让本地生成的数据包通过 PREROUTING 链,因为我想使用
sudo iptables -t mangle -A PREROUTING -p tcp -d somewebsite.com -j TPROXY --on-port 32794
将所有前往 somewesite.com 的数据包(由本地进程生成)重定向到本地端口 32794。
很多人建议这样做:
sudo iptables -t nat -A OUTPUT -p tcp -d somewebsite.com -j REDIRECT --to-ports 32794
但REDIRECT将修改数据包头我试图避免这种情况。我必须使用 TPROXY,它是唯一不修改数据包标头的目标类型。
那么我该怎么做才能让本地生成的数据包通过PREROUTING链呢?也许使用环回?但我也不确定环回是否会更改数据包标头......
答案1
iptables 是一组规则(或规则集),可以在链中找到。链条在桌子里面。
在您的情况下,您使用了REDIRECT
目标,但这实际上修改了数据包以更改目标地址,这可能不可接受,并且nat
在大多数情况下它绑定到表。
目标TPROXY
提供类似的功能并依赖于mangle
表。只需将这样的规则添加到 iptables 规则集中:
iptables -t mangle -A PREROUTING -p tcp -d your.ip.address.here --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 32794 --on-ip=127.0.0.1
注意:我也使用了该标记,但这些不应更改 TCP 标头。