ネットワーク上のホストが、その送信元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-> HbMACアドレスというエントリがあります。したがって、MACアドレスは異なります。
この動作は完全に予想され、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