Помогите разобраться как работает neighbor descovery в ipv6.
Есть две линукс машины (По факту это docker контейнер на линукс хосте) обозначим их docker и host.
На host есть такие интерфейсы:
# bridge подключаемый в контейнер
ip a show br-5f71de5b12d2
14: br-5f71de5b12d2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:9d:76:1d:2d brd ff:ff:ff:ff:ff:ff
inet 10.10.0.1/24 brd 10.10.0.255 scope global br-5f71de5b12d2
valid_lft forever preferred_lft forever
inet6 fc01::1/112 scope global
valid_lft forever preferred_lft forever
inet6 fe80::42:9dff:fe76:1d2d/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link
valid_lft forever preferred_lft forever
# это таргет до которого нужно допинговаться
ip a show dummy_host0
13: dummy_host0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 5a:d6:65:1f:23:65 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global dummy_host0
valid_lft forever preferred_lft forever
inet 10.5.0.1/24 scope global dummy_host0
valid_lft forever preferred_lft forever
inet6 fc00::5:1/112 scope global
valid_lft forever preferred_lft forever
inet6 fc00::1/112 scope global
valid_lft forever preferred_lft forever
inet6 fe80::58d6:65ff:fe1f:2365/64 scope link
valid_lft forever preferred_lft forever
На docker такой интерфейс:
# Это бридж с хоста
ip a show eth0
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:0a:0a:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.10.0.2/24 brd 10.10.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fc01::2/112 scope global nodad
valid_lft forever preferred_lft forever
inet6 fe80::42:aff:fe0a:2/64 scope link
valid_lft forever preferred_lft forever
На docker есть такие маршруты ipv6
ip -6 r
fc00::/112 via fc01::1 dev eth0 proto xorp metric 1 pref medium
fc00::5:0/112 dev eth0 proto xorp metric 1 pref medium
fc01::/112 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
default via fc01::1 dev eth0 metric 1024 pref medium
Тут маршрут в подсеть fc00::5:0/112 задана сразу через интерфейс, а не via gateway.
Задача пропинговать с docker fc00::5:1.
ping -c 1 fc00::5:1
PING fc00::5:1(fc00::5:1) 56 data bytes
From fc01::2 icmp_seq=1 Destination unreachable: Address unreachable
--- fc00::5:1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
При этом ping на fc00::1 работает, разница в том как заданы маршруты.
На хосте br-5f71de5b12d2 (это bridge для докера) через wireshark видно пакеты Neighbor Solicitation
от docker (src=fc01::2) на адрес ff02::1:ff05:1, а ответа нет.
На хосте dummy_host0 ничего не приходит.
На docker ip neigh показывает:
ip neigh
10.10.0.1 dev eth0 lladdr 02:42:9d:76:1d:2d STALE
10.5.0.1 dev eth0 lladdr 02:42:9d:76:1d:2d STALE
fc00::5:1 dev eth0 FAILED
fc01::1 dev eth0 lladdr 02:42:9d:76:1d:2d router STALE
fe80::1 dev eth0 lladdr 02:42:9d:76:1d:2d router STALE
То есть отдельный neighboring с fc00::1 ему не нужен, а вот с fc00::5:1 нужен и он не работает.