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

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

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

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

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

我正在开发一个需要从第 2 层开始制作数据包的程序。Iptables 没有对该程序发送的任何第 3 层数据包应用 SNAT。

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

我从超级用户。如果我得到任何消息,我会更新。

答案1

当数据包直接通过以太网接口发送时,它们不会经过内核网络堆栈中的 IP 层。这意味着也不会有 iptables。

您需要让程序按照您希望的方式生成数据包,或者需要让数据包通过网络堆栈中的 IP 层发送。

有几种不同的方法可以通过网络堆栈获取数据包:

  • 将其发送到您自己机器的 MAC 地址,以便它由内核路由,然后转发回同一接口。
  • 通过虚拟网络接口而不是物理接口发送。
  • 在 IP 层而不是以太网层上使用套接字。

答案2

原始套接字绕过 netfilter 堆栈,因此 iptables 不会对这些数据包产生影响。

相关内容