次のトポロジを検討してください。
host B
からにICMP(ping)パケットを送信しています10.0.1.1
。彼らは目標を達成し、目標は答えられましたreply
。接続がうまく機能しています。
実行時にオンにします。host A
tcpdump -i eth1 icmp
: パケットが見えないtcpdump -i eth2 icmp
:パケットを見た
eth1
インターフェイスに送信したいパケットが実際にそのインターフェイスに到着したことを確認する方法はありますか?
ある日、カーネルがレベルeth2
(パケットが到着する最初のインターフェース)で応答を処理するという内容を読んだことを思い出してください。これは、モニタリングがeth1
何も生成できない理由を説明します。
この特定のケースを確認する理由は次のとおりです。パケットがホストのインターフェイス(最初の最初のインターフェイス)に到着しますが、予想されるインターフェイスに到着しないような状況があります(実際のアプリケーションではありません)。開始)。これらのテストにより、ファイアウォール/配信が正常であるか、問題が他の場所にあるか(アプリケーションの設定、アプリケーションのバグなど)を確認できます。
ベストアンサー1
Linux では、受信パケットをローカル コンピュータで処理する必要があるかどうかを確認してルーティングされます。必要に応じて、まず「正しいインターフェイス」を介してルーティングせずに直接処理します。 IPアドレスはシステムのエイリアスにすぎず、パケットがどのインターフェイスに到着するかは重要ではありません。
ローカルでこれを実行しても同じことが起こりますtelnet 10.0.1.1
。ローカルシステムから自分のシステムへのすべてのパケットを処理しているようには見えませんeth1
。lo
ただし、アウトバウンドパケットの場合、アドレスが属するインターフェイスは異なります。カーネルは最初にパケットをルーティングする方法を決定し、次にそのルートに基づいてパケットに最適な送信元 IP を選択します。
を使用して「すべてのパケット」を確認する必要がある場合は、これを行うことがtcpdump
できますtcpdump -i any icmp
。インターフェイスは表示されませんが、すべてのパケット(例:10.0.1.1
。