パケットとARPテーブル内の異なるMACアドレス

パケットとARPテーブル内の異なるMACアドレス

ネットワーク上のホストが、その送信元 IP のローカル ARP テーブル内の MAC アドレスと異なる MAC 送信元アドレスを持つ IP パケットを受信するとどうなりますか?

その IP の ARP テーブル エントリは、有効な ARP 応答によって入力され、今後も入力される予定です。

今、受信ホスト (Ubuntu 18.04) が応答パケット (ICMP エコー応答または TCP SYN/ACK ... など) を送信していないことに気付きました。応答パケットはインターフェイスから送信されません。

ここで問題となるのは、ホストがなぜこのように行動するのかということです。 パケットの MAC アドレスと IP アドレス、ローカル ARP テーブル、ルーティング テーブルなどに対してどのようなチェックが行われていますか?

編集:

シナリオを明確にするには:

ここに画像の説明を入力してください

ホスト Hb が 10.2.0.5 (ホスト Ha) に ping 要求を送信すると、Ha は送信元 IP が 10.1.0.3 の ICMP パケットを受信し、送信元 MAC アドレスはルーターの MAC アドレスになります。ただし、ホスト Ha の ARP テーブルには、10.1.0.3 -> Hb MAC アドレスというエントリがあります。したがって、MAC アドレスは異なります。

答え1

この動作は完全に予想されたものであり、ホストのルーティング構成に関連しています。ホストのルーティング構成には、ルーターを経由するデフォルト ルートのみが含まれている可能性があります。そのため、追加のルートを設定していない場合、ネットワーク ( )Hbへのパケットはデフォルト ルートを介して送信されます。N210.2.0.0/24

したがって、この問題は、ホスト上でリバース パス フィルターが有効になっていることが原因で発生しHa、送信元アドレスの制限によって着信パケットがドロップされます。

この問題をトラブルシューティングするには、ホスト上で次のコマンドの出力を確認する必要がありますHa

  • ip netconf show dev <iface-N2>-rp_filter値を確認してください。おそらくそうですstrict
  • ip route get 10.2.0.5 from 10.1.0.3 iif <iface-N2>- おそらく次のような表示が出るでしょうinvalid cross-device link
  • nstat -az TcpExtIPReversePathFilter- おそらくゼロ以外の値になります。

この問題を解決するには、3 つの簡単な方法があります。

  • sysctl (および) を使用してホストrp_filter上でを無効にするだけです。また、この変更を永続的にするには、ファイルを編集する必要があります。Hasysctl -w net.ipv4.conf.all.rp_filter=0sysctl -w net.ipv4.conf.<iface-N2>.rp_filter=0/etc/sysctl.conf

  • Hbホストにアドレス10.2.0.5を経由するルートを追加するだけです10.1.0.5(Linuxの場合はコマンドip route add 10.2.0.5 via 10.1.0.5、Windowsの場合はroute add 10.2.0.5 mask 255.255.255.255 10.1.0.5

  • ルータの送信元アドレス変換 (NAT) を設定して、のアドレスをHbルータのアドレスに書き換えます。これを行うための iptables ルールは次のとおりです。

iptables -t nat -A POSTROUTING -o <iface-N2> --src 10.1.0.3 --dst 10.2.0.5 -j MASQUERADE

関連情報