Roteamento IPv6 Público para uma sub-rede

2

Fazendo o roteamento Linux / Debian IPV6 do meu fornecedor para um cliente que não está funcionando.
O roteamento NAT / IPV4 está funcionando de forma confiável usando iptables e dnsmasq , no entanto, mesmo com o encaminhamento ativado no IPv6, não consigo fazê-lo funcionar. O RADVD está publicando a nova rede, mas não consigo acessar nenhum endereço IPv6 público.

Diagrama simplificado

                                        SW
                                         |    +---------+
                                         +--->| client  |
             PUBLIC              PRIVATE |    +---------+
                                         |
    ~/-(PR)-+       +---(ER)---+         | C0 +--(CL)---+
     public |P0  E0 | extender | E1      +--->| client  |
     vendor |<----->|  router  |<------->|    +---------+
            |       +----------+         |
 ~/---------+                            |    +---------+
                                         +--->| client  |
                                         |    +---------+

 Where:
    PR ISP Public router
       P0 Public network interface
    ER extender router Debian based, trying to configure
       E0 Public network interface
       E1 Private network interface
    CL Test Client
       C0 Private network interface

Usando radvdump , o ER mostra a rota pública (endereços editados)

    ...
    route 2600:..:5b10::/60
    {
            AdvRoutePreference high;
            AdvRouteLifetime 1209600;
    }; # End of route definition

No ER usando radvd estou publicando uma nova rede / 64 no E1 (2600: ..: 5b11)
CL recebeu a rede publicada e se configurou com um endereço global na rede 2600: ..: 5b11.
ER pode ping6 e se conectar a: ipv6.google.com, P0, E0, E1 e C0 CL pode fazer ping6 e conectar-se a: E0 e E1, mas ..não .. P0 (nem endereços públicos)

Em ER- > E1 tcpdump mostra o anúncio de roteador periódico do ER.
Quando eu pingar um endereço público no CL esta é a captura no ER-E1:

fe80::..:d477 is ER-E1
fe80::..:dff6 and 2600:..:5b11:..:f48 are CL-C0
fe80::..:f380 is PR-p0
2607:f8b0:4002:c0c::8a is ipv6.google.com

IP6 fe80::..:d477 > ff02::1: ICMP6, router advertisement, length 56
IP6 2600:..:5b11:..:f48 > 2607:f8b0:4002:c0c::8a: ICMP6, echo request, seq 1, length 64
IP6 fe80::..:dff6 > fe80::..:d477: ICMP6, neighbor solicitation, who has fe80::..:d477, length 32
IP6 fe80::..:d477 > fe80::..:dff6: ICMP6, neighbor advertisement, tgt is fe80::..:d477, length 24
IP6 fe80::..:d477 > fe80::..:dff6: ICMP6, neighbor solicitation, who has fe80::..:dff6, length 32
IP6 fe80::..:dff6 > fe80::..:d477: ICMP6, neighbor advertisement, tgt is fe80::..:dff6, length 24
IP6 fe80::..:d477 > ff02::1: ICMP6, router advertisement, length 56

Ping no CL acabou de ser interrompido (até o tempo limite) sem nenhuma mensagem.

Em ER- > E0 tcpdump (simplificado):

IP6 2600:..:5b11:..:f48 > 2607:f8b0:4002:c0c::8a: ICMP6, echo request, seq 1, length 64
IP6 fe80::..:c446 > fe80::19d7:1db3:c381:23a: ICMP6, neighbor advertisement, tgt is fe80::..:c446, length 24
IP6 fe80::..:c446 > fe80::..:f380: ICMP6, neighbor solicitation, who has fe80::..:f380, length 32
IP6 fe80::..:f380 > fe80::..:c446: ICMP6, neighbor advertisement, tgt is fe80::..:f380, length 24
IP6 fe80::..:f380 > fe80::..:c446: ICMP6, neighbor solicitation, who has fe80::..:c446, length 32
IP6 fe80::..:c446 > fe80::..:f380: ICMP6, neighbor advertisement, tgt is fe80::..:c446, length 24

Tabela de roteamento ER (eth0 = E0 eth1 = E1)

2600:..:5b10::13 dev eth0 proto kernel metric 256  pref medium
2600:..:5b10::/64 dev eth0 proto kernel metric 256  expires 1209445sec pref medium
2600:..:5b10::/64 dev eth0 proto kernel metric 303  mtu 1500 pref medium
2600:..:5b11::/64 dev eth1 proto kernel metric 256  pref medium
fe80::/64 dev eth0 proto kernel metric 256  pref medium
fe80::/64 dev eth1 proto kernel metric 256  pref medium
default via fe80::..:f380 dev eth0 metric 303  mtu 1500 pref medium
default via fe80::..:f380 dev eth0 proto ra metric 1024  expires 1645sec hoplimit 64 pref medium

Não há firewalls envolvidos neste momento, nem mesmo ip6tables.

No ER, tenho encaminhamento = 1 e proxy_ndp = 1 para todos e padrão.

    
por fcm 25.10.2018 / 15:09

1 resposta

0

Como você pode ver, a solicitação de eco de ping está chegando no E1 e saindo no E0, então no ER, tudo funciona como deveria.

No entanto, você tem um problema no PR: quando a resposta do eco de ping chegar, ele terá um endereço de destino de 2600:...:5b11:...:f48 . No entanto, PR só sabe sobre a sub-rede 5b10/60 por trás de P0, não tem idéia de que há também uma sub-rede 5b11/64 acessível via E0. Então, meu palpite (alguém teria que verificar isso nos dumps da interface) é que o PR faz uma solicação do vizinho para 2600:...:5b11:...:f48 no P0, mas o ER não responde (porque não possui este endereço), então o PR descarta o pacote.

Eu nunca tentei configurar o IPv6 com uma sub-rede contida dessa maneira, então não tenho certeza do que recomendar. A primeira coisa que eu tentaria é anunciar também o 5b11/64 no E0 e ver se esta informação adicional faz o P0 encaminhar os pacotes.

Editar

Eu encontrei o ndppd , o demônio de proxy do protocolo de descoberta do vizinho. Se o PR realmente enviar uma solicitação de um vizinho para o qual não obtém resposta, o uso do ndppd no ER pode resolver esse problema.

Eu ainda não usei isso.

    
por 28.10.2018 / 11:14