IP ルートは ARP プロトコルに影響しますか?

IP ルートは ARP プロトコルに影響しますか?

mac0ホストにmacvlan ネットワーク インターフェイスを作成しました。私の Docker コンテナも、 と同じ親インターフェイスを持つ macvlan ネットワークに参加しましたmac0

ping上記の手順を実行した後でも、Docker コンテナからIP を取得できませんmac0。ただし、次のコマンドを使用してホストにルートを 1 つ追加すると、

ip route add <container_ip> dev mac0

mac0コンテナから IP に正常にping できます。

ルートを追加する前に、tcpdump -i mac0 host <mac0_ip>何が起きているのか確認します。どうやら mac0 は ARP 要求に応答しないようです。

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:19:51.218288 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:52.219645 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:19:53.221646 ARP, Request who-has <host_name> tell 21.26.21.102, length 28

ルートを追加した後:

#tcpdump -i mac0 host 21.26.21.104
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on mac0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:21:46.318010 ARP, Request who-has <host_name> tell 21.26.21.102, length 28
20:21:46.318033 ARP, Reply <host_name> is-at <mac> (oui Unknown), length 28
20:21:46.318038 IP 21.26.21.102 > <host_name>: ICMP echo request, id 750, seq 1, length 64
20:21:46.318062 IP <host_name> > 21.26.21.102: ICMP echo reply, id 750, seq 1, length 64

macvlan サブインターフェイスは親インターフェイスと直接通信できないことはわかっています。わからないのは、IP ルートが、L2 ネットワーク層で動作していると思われる ARP プロトコルに影響を与える理由です。

答え1

ARPはスタンドアロンのプロトコルではなく、IPによってレイヤー3アドレスをレイヤー2アドレスに解決するためのヘルパープロトコルとして使用されます。技術的には汎用プロトコルですが、実質的には常にIPv4でのみ使用され、IPv4の一部であると考えることもできます。(比較のために、IPv6では同じ機能がICMPv6で実行されており、これはおそらくその上IP。

ARP は IP 構成を取得するために使用されるため、どのインターフェイスがどの ARP 応答を受信するかを決定する完全な権限を IP スタックが持っています。たとえば、一部のオペレーティング システムは、任意のインターフェイス上の任意のアドレスに対する ARP クエリに応答しますが、他のオペレーティング システムは、クエリと同じインターフェイスからのアドレスに制限します。(Linux では、「arp_ignore」を変更することでどちらかの動作を選択できます。)

Linuxには他にもARP制限がいくつかあるシステム、特に はarp_filter、有効になっている場合、要求元 IP アドレスが別のインターフェイスを介してルーティングされた場合に ARP クエリを無視するように OS に指示します。これは、あなたの問題に似ているようです。

関連情報