iptables 似乎没有对通过原始套接字发送的数据包应用 SNAT

iptables 似乎没有对通过原始套接字发送的数据包应用 SNAT

我正在将数据包从用户空间程序写入我的无线接口 wlan0。我已使用 iptables 设置了 SNAT 规则,如下所示

iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to 192.168.1.3

它适用于从我的机器发出的所有正常流量。

我正在开发一个在第 2 层 (以太) 上使用原始套接字的程序。Iptables 不会对该程序发送的数据包应用 SNAT。

有没有什么方法可以让我从第 2 层在用户空间中写入数据包并仍然对它们应用 NAT?

答案1

原始套接字在修改之前(传入)获取原始数据包的副本。传出时则相反。

因此实际上 iptables 被绕过了,因为 Raw 套接字基本上是 IP 堆栈,因此 iptables 就是因为它存在的地方,并将数据包直接传递给应用程序,然后直接返回到它所连接的任何设备。

所以回答你的问题,你不能对它们应用 NAT,因为它们从不通过 iptables 来应用规则

相关内容