ユーザースペースプログラムからワイヤレスインターフェイスwlan0にパケットを送信しています。次のようにiptablesを使用してSNATルールを設定しました
iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to 192.168.1.3
そして、それは私のマシンから出て行くすべての通常のトラフィックに対して機能します。
レイヤー2から始まるパケットを作成する必要があるプログラムに取り組んでいます。Iptablesは、このプログラムによって送信されるレイヤー3パケットにSNATを適用していません。
レイヤー2からユーザースペースでパケットを送信し、それでもNATを適用する方法はありますか?
スーパーユーザー からこれを再投稿しました。何かあったら更新します。
パケットがイーサネットインターフェイスで直接送信される場合、パケットはカーネルのネットワークスタックのIP層を通過しません。つまり、iptablesもありません。
パケットを希望どおりに生成するようにプログラムを取得するか、ネットワークスタックのIP層を介してパケットを送信する必要があります。
ネットワークスタックを介してパケットを取得する方法はいくつかあります。
Raw Socketsはnetfilterスタックをバイパスするため、iptablesはこれらのパケットに影響を与えません。