vários roteadores ipv6 na mesma rede física, como fazê-lo funcionar?

3

Eu tenho vários roteadores de Internet do mesmo provedor (vou nomear “caixas” de roteadores da Internet), todos vinculados ao mesmo switch de rede de hardware formando uma rede física (nomearei “NML” essa rede física para No Man's Land ”) em que estão conectados dois roteadores (eu os nomearei de“ roteadores ”) fazendo tarefas de roteamento e firewall para uma LAN privada:

_____________________________________________ WAN (Internet)
    |           |           |           |
    |           |           |           |
 ___|___     ___|___     ___|___     ___|___
[       ]   [       ]   [       ]   [       ]
[ Box 1 ]   [ Box 2 ]   [ Box 3 ]   [ Box 4 ]
[ 0:A:1 ]   [ 0:B:1 ]   [ 0:C:1 ]   [ 0:D:1 ]
[_______]   [_______]   [_______]   [_______]
    |           |           |           |
    |           |           |           |
____|___________|___________|___________|____ NML (A physical network
          |                       |                for boxes and routers)
          |                       |
      ____|____               ____|____ 
     [         ]             [         ]
     [ Router1 ]             [ Router2 ]
     [  0:A:2  ]             [  0:A:3  ]
     [  0:B:2  ]             [  0:B:3  ]
     [  0:C:2  ]             [  0:C:3  ]
     [  0:D:2  ]             [  0:D:3  ]
     [_________]             [_________]
          |                       |
          |                       |
__________|_______________________|__________ LAN (Where people are working)

No lado do ipv4, o NML é uma rede local que usa uma classe privada ipv4, funciona.

No lado do ipv6, cada caixa compartilha o mesmo prefixo / 64 e cada roteador obtém um endereço ipv6 auto-configurado de cada caixa (cada roteador obtém quatro ipv6, um por caixa).

Para simplificar, você pode imaginar endereços IPv6 com 3 caracteres:

  • 0:A:1 : 0 prefixo do prefixo da rede do provedor, A prefixo da primeira caixa do prefixo da rede, 1 sufixo do primeiro endereço da caixa;
  • 0:A:2 : 0 prefixo do prefixo da rede do provedor, A prefixo da primeira caixa do prefixo da rede, 1 sufixo do primeiro roteador obtendo endereço da primeira caixa;
  • 0:C:1 : 0 prefixo do prefixo da rede do provedor, C prefixo da terceira caixa do prefixo da rede, 1 sufixo do terceiro endereço da caixa;
  • 0:C:3 : 0 prefixo do prefixo da rede do provedor, C prefixo da terceira caixa do prefixo da rede, 3 sufixo do segundo roteador recebendo endereço da terceira caixa.

Assim, cada roteador recebe quatro endereços ipv6, um por caixa.

  • Do roteador 1, posso ping6 a cada caixa usando seus endereços ipv6 ( 0:A:1 , 0:B:1 , 0:C:1 , 0:D:1 );
  • Do roteador 2, posso ping6 cada roteador2 endereços IPv6 ( 0:A:3 , 0:B:3 , 0:C:3 , 0:D:3 ), o oposto é verdadeiro;
  • Do roteador 1 e roteador 2, não consigo ping6 um endereço ipv6, mesmo quando adiciono uma rota explícita a uma caixa para esse endereço ipv6 ( ip -6 route add something via 0:A:1 ), usando o endereço ipv6 da caixa do prefixo do provedor usando o endereço de link local da caixa.

No início, apenas uma caixa tinha o ipv6 ativado e, neste momento, consegui consultar a Internet usando o ipv6, mas como ativei o ipv6 em todas as caixas, não consigo mais consultar a Internet usando o ipv6. Se eu faço um traceroute6 para um endereço de Internet de um roteador, ele nunca vai além da caixa.

Note que eu não preciso fazer coisas de ipv6 da LAN através dos roteadores neste momento, eu só preciso de roteadores para fazer coisas da Internet usando ipv6 (principalmente para construir alguma VPN sobre ipv6).

Os roteadores da Internet (denominados “caixas”) são propriedade do ISP e a única opção que tenho é uma caixa de seleção “enable IPv6” na página do cliente, não tenho acesso à configuração do roteador e nenhuma outra opção do que habilitar ou desabilitar o ipv6. Os roteadores entre LAN e NML (denominados “roteadores”) são sistemas Debian padrão em execução em alguns hardwares de rede baseados em x86. No ponto de vista do Debian, você pode imaginar que é como um PC: eu posso fazer o que um Debian padrão pode fazer.

Então, duas perguntas:

  • A configuração está correta e deve funcionar? Se sim, onde posso procurar o problema?
  • A configuração está incorreta e não se espera que funcione? Se sim, o que posso fazer para corrigir isso?

Eu removi algumas informações de "expirar" e coisas assim para remover alguma verbosidade, além de algum dia ter adicionado alguns 0 para alinhar endereços para facilitar a leitura, então substituí alguns bits para usar a classe de exemplo ipv6.

# my boxes' ipv6 addresses
box0    2001:db8:ee84:2180::1
box1    2001:db8:ee84:21c0::1
box2    2001:db8:2f13:1ea0::1
box3    2001:db8:399a:08f0::1
box4    2001:db8:399a:39e0::1

# my router1's ipv6 addresses
# ip -6 addr show dev eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:db8:ee84:2180:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
    inet6 2001:db8:ee84:21c0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic
    inet6 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:399a:08f0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:399a:39e0:200:24ff:fed1:3d9e/64 scope global mngtmpaddr dynamic 
    inet6 fe80::200:24ff:fed1:3d9e/64 scope link 

# my router2's ipv6 addresses
ip -6 addr show dev eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2001:db8:ee84:2180:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:ee84:21c0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:2f13:1ea0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:399a:08f0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic 
    inet6 2001:db8:399a:39e0:200:24ff:fed1:6336/64 scope global mngtmpaddr dynamic 
    inet6 fe80::200:24ff:fed1:6336/64 scope link 

# default ipv6 routes on router1
# ip -6 route
2001:db8:ee84:2180::/64 dev eth2  proto kernel  metric 256
2001:db8:ee84:21c0::/64 dev eth2  proto kernel  metric 256
2001:db8:2f13:1ea0::/64 dev eth2  proto kernel  metric 256
2001:db8:399a:08f0::/64 dev eth2  proto kernel  metric 256
2001:db8:399a:39e0::/64 dev eth2  proto kernel  metric 256
fe80::/64 dev eth2  proto kernel  metric 256 
default via fe80::e69e:12ff:fe04:286f dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe03:8b35 dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe02:10de dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::0224:d4ff:fea7:f258 dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::0224:d4ff:febb:af9e dev eth2  proto ra  metric 1024 hoplimit 64

# default ipv6 routes on router2
# ip -6 route
2001:db8:ee84:2180::/64 dev eth2  proto kernel  metric 256
2001:db8:ee84:21c0::/64 dev eth2  proto kernel  metric 256
2001:db8:2f13:1ea0::/64 dev eth2  proto kernel  metric 256
2001:db8:399a:08f0::/64 dev eth2  proto kernel  metric 256
2001:db8:399a:39e0::/64 dev eth2  proto kernel  metric 256
fe80::/64 dev eth2  proto kernel  metric 256 
default via fe80::e69e:12ff:fe03:8b35 dev eth2  proto ra  metric 1024 mtu 1480 hoplimit 64
default via fe80::0224:d4ff:febb:af9e dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe02:10de dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::e69e:12ff:fe04:286f dev eth2  proto ra  metric 1024 hoplimit 64
default via fe80::0224:d4ff:fea7:f258 dev eth2  proto ra  metric 1024 hoplimit 64

# neigh from router1
# ip -6 neigh | grep eth2
fe80::224:d4ff:febb:af9e dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
fe80::200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
fe80::e69e:12ff:fe04:286f dev eth2 lladdr e4:9e:12:04:28:6f router REACHABLE
2001:db8:2f13:1ea0::1 dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
fe80::e69e:12ff:fe02:10de dev eth2 lladdr e4:9e:12:02:10:de router STALE
2001:db8:399a:39e0:200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
2001:db8:399a:8f0:200:24ff:fed1:6336 dev eth2 lladdr 00:00:24:d1:63:36 STALE
2001:db8:399a:39e0::1 dev eth2 lladdr 00:24:d4:a7:f2:58 router STALE
2001:db8:399a:8f0::1 dev eth2 lladdr e4:9e:12:02:10:de router STALE
2001:db8:399a:39e0:: dev eth2  FAILED
fe80::213:46ff:fe8f:1e4a dev eth2 lladdr 00:13:46:8f:1e:4a STALE
2001:db8:399a:8f0:: dev eth2  FAILED
fe80::e69e:12ff:fe03:8b35 dev eth2 lladdr e4:9e:12:03:8b:35 router STALE
fe80::224:d4ff:fea7:f258 dev eth2 lladdr 00:24:d4:a7:f2:58 router STALE
fe80::8226:89ff:fe2d:b3d3 dev eth2 lladdr 80:26:89:2d:b3:d3 STALE
fe80::20a:f7ff:fe12:e77 dev eth2 lladdr 00:0a:f7:12:0e:77 STALE
2001:db8:ee84:2180::1 dev eth2 lladdr e4:9e:12:03:8b:35 router STALE
fe80::21d:9ff:fe2c:628d dev eth2 lladdr 00:1d:09:2c:62:8d STALE

# get from router1
# ip -6 route get 2001:4860:4860::8888
2001:4860:4860::8888 from :: via fe80::e69e:12ff:fe04:286f dev eth2  proto ra  src 2001:db8:399a:39e0:200:24ff:fed1:3d9e  metric 1024  hoplimit 64

# neigh from router2
# ip -6 neigh | grep eth2
2001:db8:399a:8f0:200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
2001:db8:399a:8f0::1 dev eth2 lladdr e4:9e:12:02:10:de router STALE
fe80::e69e:12ff:fe04:286f dev eth2 lladdr e4:9e:12:04:28:6f router STALE
fe80::224:d4ff:fea7:f258 dev eth2 lladdr 00:24:d4:a7:f2:58 router DELAY
fe80::e69e:12ff:fe02:10de dev eth2 lladdr e4:9e:12:02:10:de router REACHABLE
fe80::200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
fe80::224:d4ff:febb:af9e dev eth2 lladdr 00:24:d4:bb:af:9e router STALE
2001:db8:399a:39e0:200:24ff:fed1:3d9e dev eth2 lladdr 00:00:24:d1:3d:9e STALE
fe80::e69e:12ff:fe03:8b35 dev eth2 lladdr e4:9e:12:03:8b:35 router REACHABLE

# get from router2
ip -6 route get 2001:4860:4860::8888
2001:4860:4860::8888 from :: via 2001:db8:399a:8f0::1 dev eth2  src 2001:db8:399a:39e0:200:24ff:fed1:6336  metric 1024

Algum exemplo de traceroute:

# traceroute from router1
# traceroute 2001:4860:4860::8888
traceroute to 2001:4860:4860::8888 (2001:4860:4860::8888), 30 hops max, 80 byte packets
 1  2001:db8:ee84:21c0::1 (2001:db8:ee84:21c0::1)  26.146 ms  27.728 ms  28.507 ms
    
por Thomas Debesse 23.12.2017 / 11:42

1 resposta

0

Estou transpondo este exemplo do ipv4 para o ipv6.

O problema é que, a menos que você ativamente faça ping no ip de cada caixa com a fonte correta, não será fácil combinar (usando o endereço mac) o ip público correto com o link correto ip local. Aqui está o que eu poderia inferir de tabelas vizinhas de ambos os roteadores e do fato de que o fim do link local é o fim do mac:

box0 2001:db8:ee84:2180::1 <=> fe80::e69e:12ff:fe03:8b35
box2 2001:db8:2f13:1ea0::1 <=> fe80::0224:d4ff:febb:af9e
box3 2001:db8:399a:08f0::1 <=> fe80::e69e:12ff:fe02:10de
box4 2001:db8:399a:39e0::1 <=> fe80::0224:d4ff:fea7:f258

e o outro que não pôde ser encontrado pelos dados tem que ser:

box1 2001:db8:ee84:21c0::1 <=> fe80::e69e:12ff:fe04:286f

Com isso, fica claro que ambos os exemplos de ip -6 route get na pergunta mostram que a fonte errada foi usada para o roteador escolhido. Parece ser uma limitação do Linux nesse caso (ter várias LANs sobrepostas em uma única LAN física).

Então, aqui está o que deve ser feito para o roteador1. Além disso, por tentativa e erro "src" ainda tem que ser declarado para a rota padrão na tabela ou uma outra fonte ainda pode ser escolhida. Note que o IP público ou o IP local do link podem (devem) ser usados como gateway, então é melhor usar o IP público, mesmo que o RA pareça preferir o link ip, é mais fácil usar o público em um script e encontrar a correspondência entre os dois tipos de IP, como acima, não precisa mais ser feita.

# ip -6 route add 2001:db8:ee84:2180::/64 dev eth2 src 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100
# ip -6 route add default via 2001:db8:ee84:2180::1 dev eth2 src 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100

# ip -6 route add 2001:db8:ee84:21c0::/64 dev eth2 src 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101
# ip -6 route add default via 2001:db8:ee84:21c0::1 dev eth2 src 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101

# ip -6 route add 2001:db8:2f13:1ea0::/64 dev eth2 src 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102
# ip -6 route add default via 2001:db8:2f13:1ea0::1 dev eth2 src 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102

# ip -6 route add 2001:db8:399a:08f0::/64 dev eth2 src 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103
# ip -6 route add default via 2001:db8:399a:08f0::1 dev eth2 src 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103

# ip -6 route add 2001:db8:399a:39e0::/64 dev eth2 src 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104
# ip -6 route add default via 2001:db8:399a:39e0::1 dev eth2 src 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104

Pelo menos uma rota padrão "padrão" deve ser colocada na tabela principal (a usual), caso contrário, o que ocorrer depois, haverá um erro como "nenhuma rota para hospedar" ou "rede inacessível". Como você já tem 5 desses anúncios de roteador, não é necessário.

Agora vamos adicionar as regras que ligam cada IP de origem à sua tabela correspondente, selecionando a fonte correta para qualquer um dos roteadores (caixa):

# ip -6 rule add from 2001:db8:ee84:2180:200:24ff:fed1:3d9e table 100
# ip -6 rule add from 2001:db8:ee84:21c0:200:24ff:fed1:3d9e table 101
# ip -6 rule add from 2001:db8:2f13:1ea0:200:24ff:fed1:3d9e table 102
# ip -6 rule add from 2001:db8:399a:08f0:200:24ff:fed1:3d9e table 103
# ip -6 rule add from 2001:db8:399a:39e0:200:24ff:fed1:3d9e table 104

Também é possível forçar (ou até mesmo balancear com a coincidência statistic --mode nth ) uma escolha usando por exemplo ip6tables ... -j MARK ... com ip -6 rule add fwmark ... table 10x

Agora, seria melhor criar um script para isso ...

Pode haver outro problema. Se um roteador de caixa ficar off-line, a rota padrão correspondente desaparecerá rapidamente no sistema linux porque ele não é mais anunciado, mas o IP permanecerá. Não sei se esse IP ainda pode ser escolhido erroneamente para ser usado em uma rota padrão restante. Se isso acontecer, as regras de ip adicionadas podem substituir a rota padrão para usar o roteador de caixa agora off-line, derrotando assim o mecanismo de failover de ter várias caixas como roteadores. Eu não tenho meios para testar isso.

    
por 25.12.2017 / 00:23