Настраивать:
- Хост-машина: macOS, адрес IPv6 - 2002::3/64 (vmnet1)
- Гостевая машина: Ubuntu, работающая внутри vmware, IPv6-адрес - 2002::2/64 (eth0) и 2001::1/64 (tun0)
Конфигурация:
- Включена переадресация IPv4 и IPv6 в Ubuntu
- Добавлен маршрут на macOS:
sudo route add -inet6 2001::/64 -interface vmnet1
Проблема: Я не могу ping6 2001::1
из macOS. Однако я могу ping6 2002::2
. Я пробовал с настройками VMware «Поделиться с моим Mac», «Автоопределение», а также «Частный для Mac».
решение1
Недостаточно направить 2001::/64 через vmnet1; необходимо также указатькакой шлюзна vmnet1 пакеты должны быть отправлены на – 2002::2 в данном случае.
Без спецификации шлюза источник попытается напрямую разрешить пункт назначения с помощью ARP (для IPv4) или NDP (ICMPv6 Neighbour Discovery). Однако IPv6 обычно рассматривает адреса как принадлежащие отдельным интерфейсам или ссылкам, а не всему хосту – поэтому хосты IPv6 обычно игнорируют запросы Neighbour Discovery, если они поступают через интерфейс, которому не назначен этот адрес.(Это похоже на Linux arp_ignore=1 для IPv4.)
Итак, система Ubuntu не будет отвечать на запросы NDP для 2001::1, поступающие через eth0, потому что на eth0 такого адреса нет – он назначен только на tun0. Однако она будет отвечать на запросы NDP для 2002::2, поэтому ваш маршрут должен выглядеть так:
route add -inet6 2001::/64 2002::2
(Тем не менее, как только пакеты были успешно маршрутизированы через L2 на правильный MAC-адрес, система Ubuntuволяпринять и распознать 2001::1 в заголовке IP (L3), поскольку этот адрес отмечен как локальный в его таблице маршрутизации.)