如何让本地生成的数据包通过PREROUTING链?

如何让本地生成的数据包通过PREROUTING链?

我想让本地生成的数据包通过 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 标头。

相关内容