我正在将数据包从用户空间程序发送到我的无线接口 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 不会对这些数据包产生影响。