У меня странная проблема с ipv6 в Ubuntu 12.04.
Есть два хоста, напрямую подключенных к Интернету. Оба назначили сеть / 64. Каждый из них правильно настроен с конечной точкой / 128, и один может пинговать6 другой и наоборот. Мой план состоял в том, чтобы завершить подсеть / 112 назначенного мне ipv6 / 64 для интерфейса, чтобы иметь много адресов для использования в vhosts apache2. Но дело не в этом.
Хост А:
$ ifconfig
eth0 Link encap:Ethernet HWaddr (...)
inet6 addr: fe80::5246:5dff:(...)/64 Scope:Link
inet6 addr: 2a01:xxx:xxx:000A::2/64 Scope:Global
$ route -A inet6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2a01:xxx:xx:000A::/64 :: U 256 0 0 eth0
fe80::/64 :: U 256 0 0 eth0
::/0 fe80::1 UG 1024 0 0 eth0
::/0 :: !n -1 1 5689 lo
::1/128 :: Un 0 1 18 lo
2a01:xxx:xx:000A::2/128 :: Un 0 1 202 lo
2a01:xxx:xx:000A::/112 :: U 1024 0 0 lo
fe80::5246:5dff:fea1:977c/128 :: Un 0 1 86 lo
ff00::/8 :: U 256 0 0 eth0
::/0 :: !n -1 1 5689 lo
Хост B может правильно выполнить ping6 2a01: xxx: xx: 000A :: [0001-FFFF] и работает так, как я ожидал. Но на хосте A я не могу пинговать свои собственные адреса. Если я попытаюсь выполнить ping6 2a01: xxx: xxx: 000A :: n, я получу следующее:
$ ping6 2a01:xxx:xxx:000A::3
PING (...) 56 data bytes
ping: sendmsg: Invalid argument
ping: sendmsg: Invalid argument
ping: sendmsg: Invalid argument
Я подозреваю таблицу маршрутизации, но я долго с ней играл, и даже с помощью Google не могу заставить ее работать.
Любые идеи? Спасибо.
Вы настроили 2a01: xxx: xx: 000a :: / 112 на lo. Наиболее конкретный префикс выигрывает *, поэтому вы пытаетесь пропинговать IP-адрес (:: 3) на вашем интерфейсе lo, которого там нет. Вам просто нужно настроить все необходимые адреса на eth0 и удалить маршрут / 112 и / 128 из lo.
*) Как это работает: решения о маршруте принимаются путем поиска «наиболее конкретного» маршрута. Это означает маршрут с самой длинной маской префикса. В твоем случае:
2a01: xxx: xxx: 000A :: 3
Этот адрес содержится в следующих сетях:
::/0 fe80::1 UG 1024 0 0 eth0
2a01:xxx:xx:000A::/64 :: U 256 0 0 eth0
2a01:xxx:xx:000A::/112 :: U 1024 0 0 lo
Наиболее специфична сеть с маской / 112, по которой маршрутизируется пакет. Поскольку это ваш интерфейс lo (и у вас не настроен IP-адрес), ping не выполняется.