192.168.0.1/24
eth1
LAN()とパブリックIP 140.82.118.4
()eth2
の間で標準(即時使用可能)NATを実行するOpenWrtルータ(v18.06.5、r7897-9d401013fc)があります。ルータにはiptables-mod-tee
モジュールがロードされ実行されています。
eth2
私の目標は、インターフェイスからWANへのトラフィックを監視することです。モニタリングは、LAN(位置192.168.0.3
)にある「Wireshark」を実行しているコンピュータによって行われます。
ping 8.8.8.8
たとえば、LAN上の他のコンピュータ(たとえば、から)から==および==を送信した192.168.0.2
ときにWANインターフェイスに送信されるIP / ICMPエコー要求を表示したいとします。ip.src
140.82.118.4
ip.dst
8.8.8.8
eth2
次のコマンドを使用して、「Wireshark」を実行しているホストに複製されたパケットを送信するようにiptablesを変更しました。
iptables -t mangle -A POSTROUTING -o eth2 -j TEE --gateway 192.168.0.3
ip.src
動作しますが、「Wireshark」は==192.168.0.2
およびip.dst
== ...を使用してIP / ICMP Echo要求を表示します。これはSNAT(または迷彩)以前のように見える8.8.8.8
ので、間違っています!ip.src
私のパブリックWANインターフェイスのIPである必要ip.src
があります140.82.118.4
。そうしないと、8.8.8.8 host
ICMP Echo 応答をどこに送信するかはわかりませんが、ping コマンドはホストから ICMP Echo 応答を受信しているため8.8.8.8
です。 。
なぜこれが起こり、それを解決するには?
答え1
mangle の POSTROUTING ルールは nat の POSTROUTING ルールの前に実行されます。したがって、mangleのPOSTROUTINGでTEE操作を実行するとソースNATは発生しません。...以下のiptables図を参照してください。https://th.bing.com/th/id/R.aa2afe9a3c09b762af0b59c8670c7740?rik=SvxGxvrwso1veg&riu=http%3a%2f%2flinux-ip.net%2fnf%2fnfk-traversal.png 9m WO pRiFTZsA5qJ0HMDQZo%3d&risl= &pid =ImgRaw&r=0