Повлияет ли ip route на протокол ARP?

Повлияет ли ip route на протокол ARP?

Я создал сетевой интерфейс macvlan mac0на своем хосте. Мой контейнер docker также присоединился к сети macvlan, которая имеет тот же родительский интерфейс, что и mac0.

После выполнения вышеуказанных шагов я все еще не могу получить pingсвой mac0ip из контейнера docker. Однако после добавления одного маршрута к моему хосту с помощью этой команды:

ip route add <container_ip> dev mac0

Я могу mac0успешно выполнить ping ip из моего контейнера.

Прежде чем добавлять маршрут, я смотрю, 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 может влиять на протокол ARP, который, как я думаю, работает на сетевом уровне L2?

решение1

ARP не является самостоятельным протоколом; он используется как вспомогательный протокол IP для преобразования адресов уровня 3 в адреса уровня 2. Хотя технически это общий протокол, он практически всегда используется только для IPv4 и может рассматриваться как часть IPv4. (И для сравнения, в IPv6 та же функциональность реализована в ICMPv6, что, возможно,вышеИП.)

Поскольку ARP используется для получения конфигурации IP, стек IP имеет полное право решать, какие интерфейсы должны получать какие ответы ARP. Например, некоторые операционные системы будут отвечать на запросы ARP для любого адреса на любом интерфейсе, в то время как другие ограничивают его адресами из того же интерфейса, что и запрос.(В Linux вы можете выбрать любой из вариантов поведения, изменив «arp_ignore».)

Linux имеет несколько других ограничений ARPsysctls, и один из них, в частности arp_filter, , который — если включен — сообщает ОС игнорировать запросы ARP, если IP-адрес запрашивающей стороны был бы направлен через другой интерфейс. Это похоже на вашу проблему.

Связанный контент