Назад | Перейти на главную страницу

IPv6: ping6 с внешнего хоста работает, но не может ping6 на том же хосте [ubuntu 12.04]

У меня странная проблема с 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 не выполняется.