web-dev-qa-db-ja.com

tcpdumpがiptablesによってリダイレクトされたトラフィックを取得しない

次のiptablesルールは、eth1から着信するすべてのインターネットトラフィックをlocalhost(ip 127.0.0.1のインターフェースlo)のポート3000にリダイレクトするために使用されます。

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3000

次に、loインターフェイスですべてのトラフィックを記録するようにtcpdumpが設定されます。

tcpdump -i lo -w output.dump

ただし、eth1を介してインターネットトラフィック(ポート80)を送信した後、このトラフィックはtcpdumpによって記録されません。

なぜそうなのかよくわかりません。誰かが光を当ててくれますか?ありがとう。

3
tonytz

IPパケットの宛先をローカルホストのアドレスの1つに書き換えているため、アドレスが属しているインターフェイスを介してnotが(loあなたの場合)が、スタックによって直接処理されるだけです。したがって、ループバックインターフェイスでリッスンしてキャプチャすることはできません。物理的に存在するインターフェイスのアドレスを選択した場合、これは何の違いもありません。

会話をキャプチャする必要がある場合は、適切なフィルター式を使用することをお勧めします。の線に沿った何か

tcpdump -i lo -i eth1 Host 127.0.0.1 or port 3000

あなたがやりたいことをする必要があります。

3
the-wabbit