我需要建立一个 TCP 连接,客户端会为所有传出流量欺骗其 IP。我的第一个尝试是向 POSTROUTING 链添加一条规则,如下所示:
iptables -t nat -A POSTROUTING -p tcp --dport 5555 -j SNAT --to-source 192.168.1.1
这对 SYN 数据包有效,但不会捕获并重写来自客户端的 ACK。我的理解是,这是因为 ACK 仅通过 OUTPUT 链,从未到达 POSTROUTING。我的下一个尝试是使用 xtables-addons 并执行原始 SNAT,如下所示:
iptables -t raw -A OUTPUT -p tcp --dport 5555 -j RAWSNAT --to-source 192.168.1.1
iptables 根据目标向我提供了此命令的错误。我相信它基于目标,因为 -j DROP 和 -j ACCEPT 都有效。手册页明确指出 RAWSNAT 在 OUTPUT 链中有效,并且我已验证 xt_nat.ko 模块已加载....
有谁了解 RAWSNAT 发生了什么,或者有办法让所有传出连接流量通过 nat 表中的 POSTROUTING 链吗?根据我读过的文档,我无法确定 MARK 或 CONNMARK 是否能在这里帮助我。
答案1
我有同样的问题,我找到了链接https://github.com/nawawi/xtables-addons/commit/9414a5df343bf30ba13e76dbd7181c55683b11cb。自 2013 年起,RAWSNAT/RAWDNAT 扩展已从 xtables-addons 中删除。
答案2
我也遇到了这个问题,尝试了很多次,还是无法使用iptables实现SNAT。
然后我换了nftables一切正常。也许 iptables 对无状态 NAT 的支持不够完善,建议你尝试一下 nftables。