Я в процессе установки ipv6 в моей тестовой сети.

Я работаю с сетью /56 и CentOS 6.2.

У меня есть интерфейс с 2 IPv6-адресами в 2 разных сетях:

  • 2b0 1 :abcd:4001:c00 ::30/56 подключено к Интернету (по умолчанию gw 2b0 1 :abcd:4001:c00 ::1/56)
  • 2b0 2 :abcd:4001:c00 ::30/56 только локальная сеть.

Так что обычно, если я отправляю ping адрес неизвестной сети, я использую первый адрес IPv6 в качестве адреса источника и прохожу через шлюз по умолчанию:

$ ping6 -v -c 1 -w 1 -I eth0 2620:0:ccc::2 
PING 2620:0:ccc::2(2620:0:ccc::2) from 2b02:abcd:4001:c00::30 eth0: 56 data bytes

--- 2620:0:ccc::2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

Но нет... Однако, если я отмечу адрес как устаревший, все в порядке (Выбор адреса источника IPv6 в Linux).

$ ip addr change 2b02:abcd:4001:c00::30 dev eth0 preferred_lft 0

НО, если я пингую хост в той же локальной сети, используется первый / неправильный источник адреса!

$ ping6 -v -c1 -w1 -I eth0 2b02:abcd:4001:c00::10
PING 2b02:abcd:4001:c00::10(2b02:abcd:4001:c00::10) from 2b01:abcd:4001:c00::30 eth0: 56 data bytes
64 bytes from 2b02:abcd:4001:c00::10: icmp_seq=1 ttl=64 time=2.17 ms

--- 2b02:abcd:4001:c00::10 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 2.175/2.175/2.175/0.000 ms

Кто-то может объяснить это поведение?

Конфигурация:

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=a.b.c.d
GATEWAY=a.b.c.d
NETMASK=a.b.c.d
TYPE=Ethernet
NM_CONTROLLED=no

IPV6INIT=yes
IPV6ADDR="2b01:abcd:4001:c00::30/56"
IPV6ADDR_SECONDARIES="2b02:abcd:4001:c00::30/56"
IPV6_DEFAULTGW="2b01:abcd:4001:c00::1"

DNS1=208.67.222.222
DNS2=208.67.220.220
DNS3=2620:0:ccc::2
DNS4=2620:0:ccd::2
DOMAIN="test.local"

Таблица маршрутизации:

$ route -n -A inet6
Table de routage IPv6 du noyau
Destination                                 Prochain Hop                            Indic Metric Ref    Utilis. Iface
2b01:abcd:4001:c00::/56                     ::                                      UA    256    5        0 eth0    
2b02:abcd:4001:c00::/56                     ::                                      U     256    0        0 eth0    
fe80::/64                                   ::                                      U     256    0        0 eth0    
::/0                                        2b01:abcd:4001:c00::1                   UG    1      605       0 eth0    
::/0                                        fe80::2237:6ff:fe46:e320                UGDA  1024   2        0 eth0    
::1/128                                     ::                                      U     0      0        1 lo      
2b01:abcd:4001:c00::30/128                  ::                                      U     0      0        1 lo      
2b02:abcd:4001:c00::30/128                  ::                                      U     0      0        1 lo      
fe80::1ec1:deff:feb8:a3fd/128               ::                                      U     0      53       1 lo      
ff02::1/128                                 ff02::1                                 UC    0      1        0 eth0    
ff00::/8                                    ::                                      U     256    0        0 eth0 

1 ответ1

1

Похоже, что следуют правилам правильно.

Когда вы пингуете 2620:0:ccc::2 , ни одно из правил не применяется:

  • Правило 1 (предпочитайте один и тот же адрес) не применимо
  • Правило 2 (предпочитайте соответствующую область), оба исходных адреса-кандидата имеют одинаковую область
  • Правило 3 (Избегайте устаревших адресов), ни один из возможных исходных адресов не считается устаревшим
  • Правило 4 (Предпочитать домашний адрес) не применимо
  • Правило 5 (Исходящий интерфейс), оба исходных адреса-кандидата назначаются одному и тому же интерфейсу.
  • Правило 6 (Предпочитайте соответствующие метки), вы, вероятно, не настроили какие-либо метки
  • Правило 7 (Предпочитайте публичный адрес), оба адреса являются публичными
  • Правило 8 (используйте самый длинный совпадающий префикс), общий префикс одинаков в обоих случаях: он может быть 2000::/4 или, возможно, длиннее, в зависимости от того, какие у вас IP-адреса.

Так что выбирает произвольно.

В вашем следующем тесте вы задали один из адресов, который будет устаревшим. Итак, согласно правилу 3, этого всегда будет избегать.

Одно из решений состоит в том, чтобы пересмотреть, почему ваш локальный префикс так сильно напоминает ваш глобальный префикс. Может быть, ваш локальный префикс должен быть ниже fc00::/7 (ULA).

Другое решение состоит в том, чтобы удостовериться, что ваши локальные адреса помечены по-разному, чтобы Правило 6 могло выбрать правильный адрес. Недостатком этого решения является то, что вам придется вручную изменять таблицу меток на всех хостах в вашей локальной сети. Во всяком случае, что-то вроде этого может работать:

ip addrlabel add 2XX2:Y:4001:c00::30/56 label 42

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .