web-dev-qa-db-ja.com

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

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

そのIPのARPテーブルエントリは、有効なARP応答を介して入力されていました。

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

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

編集:

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

enter image description here

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

2
fitcfitcfatc

この動作は完全に予想され、Hbホストのルーティング構成に関連しており、ルーターを経由するデフォルトルートしかない可能性があります。したがって、追加ルートを設定していない場合、N2ネットワーク(10.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およびsysctl -w net.ipv4.conf.all.rp_filter=0)を使用して、Haホストのsysctl -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
0
Anton Danilov