Seleção e roteamento de endereços de origem IPv6 no Linux

0

Estou no processo de configurar um ipv6 na minha rede de teste.

Eu trabalho com uma rede / 56 e com o CentOS 6.2.

Eu tenho uma interface com dois endereços IPv6 em duas redes diferentes:

  • 2b0 1 : abcd: 4001: c00 :: 30/56 conectado à Internet (padrão gw 2b0 1 : abcd: 4001: c00 :: 1/56)
  • 2b0 2 : abcd: 4001: c00 :: 30/56 apenas a rede local.

Então, normalmente, se eu pingar um endereço para uma rede desconhecida, eu uso o primeiro endereço IPv6 como endereço de origem e eu passo pelo gateway padrão:

$ 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

MAS NÃO ... No entanto, se eu marcar o endereço como obsoleto, é OK ( IPv6 Seleção de endereço de origem no Linux .

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

MAS, se eu fizer ping em um host na mesma rede local, a primeira / errada fonte de endereço será usada!

$ 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

Alguém pode explicar esse comportamento?

Configuração:

$ 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"

Tabela de roteamento:

$ 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 
    
por Yohann 19.04.2012 / 18:55

1 resposta

1

Parece estar seguindo as regras corretamente.

Quando você faz ping de 2620:0:ccc::2 , nenhuma das regras se aplica:

  • Regra 1 (prefira o mesmo endereço) não aplicável
  • Regra 2 (Preferir escopo apropriado) os dois endereços de origem candidatos têm o mesmo escopo
  • Regra 3 (Evitar endereços obsoletos), nem o endereço de origem candidato foi preterido
  • Regra 4 (Prefiro endereço residencial) não aplicável
  • Regra 5 (interface de saída) os dois endereços de origem candidatos são atribuídos à mesma interface
  • Regra 6 (Preferir etiqueta de correspondência), provavelmente você não configurou nenhum marcador
  • Regra 7 (Preferir endereço público) ambos os endereços são públicos
  • Regra 8 (Usar o prefixo correspondente mais longo) o prefixo comum é o mesmo em ambos os casos: pode ser 2000: / 4 ou talvez mais, dependendo de quais são os seus endereços IP reais.

Por isso, escolhe arbitrariamente.

No seu próximo teste, você define um dos endereços a ser preterido. Então, pela Regra 3, sempre vai evitar isso.

Uma solução é reconsiderar por que seu prefixo somente local se assemelha muito ao seu prefixo global. Talvez seu prefixo somente local esteja abaixo de fc00 :: / 7 ( ULA ).

Outra solução seria garantir que seus endereços locais sejam rotulados de forma diferente, para que a Regra 6 possa escolher o endereço correto. A desvantagem dessa solução é que você terá que modificar manualmente a tabela de rótulos em todos os hosts da sua rede local. De qualquer forma, algo assim pode funcionar:

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