linux O roteamento baseado em política IPv6 falha

1

Eu tenho um servidor VPN que atua como minha conexão IPv6 com a Internet. A configuração nos assim:

Recebi um pool de endereços / 48, que desejo sub-redes para meus clientes VPN. Para o argumento sake vamos chamar o pool 2001:DB8:CAFE::/48 .

Eu dividi essa rede nas seguintes partes: 2001:DB8:CAFE::/64 é atribuído ao link VPN real entre o servidor VPN e cada cliente.

    '2001: DB8: CAFE: 100: / 56' é atribuído à rede atrás do cliente 1
    '2001: DB8: CAFE: 200: / 56' é atribuído à rede por trás do cliente 2

Isso nos dá esse layout:

+--------------+  2001:470:xxxx:xxx::/64  +---------------+     /-> Client 1 network (2001:DB8:CAFE:100::/56)
|              + <-- Tunnelbroker link -> +               |    /
| The internet |                          | My VPN Server + <-*---> VPN link - network topology (2001:DB8:CAFE::/64)
|              + <- Native IPv6 link ---> +               |    \
+--------------+ 2a01:xxxx:xxxx:xxxx::/48 +---------------+     \-> Client 2 network (2001:DB8:CAFE:200::/56)

O que eu quero é que todo o tráfego proveniente de 2001:DB8:CAFE::/48 seja roteado através do meu link do Tunnelbroker - e apenas que ligam .

Isso me leva ao seguinte script:

# Reset IPv6 routing table.
ip -6 rule flush

# Reset Tunnelbroker routing table (table name: "he-ipv6").
ip -6 route flush table he-ipv6

# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6

# Any traffic that originates from VPN has to be forwarded via Tunnelbroker routing table 
# using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6

# Add default IPv6 rules again - since they gets deleted by the initial rule flush command.
ip -6 rule add priority 32766 from all table main

No entanto: quando executo o ip -6 route add default ... -command, recebo o seguinte erro:

RTNETLINK answers: No route to host

O problema é que poderia pingar 2001:470:xxxx:xxx::1 antes de executar o script, mas não depois.

O que estou perdendo?

    
por Lasse Michael Mølgaard 05.06.2017 / 22:16

1 resposta

1

Do'h! A ordem dos comandos é importante .

O motivo pelo qual o comando ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6 não funcionou foi que a rota foi definida na tabela main .

Mas como o comando flush inicial remove a tabela principal, você deve adicioná-lo novamente antes de executar o comando ip route default .

O script correto é, portanto:

# Reset IPv6 routing table.
ip -6 rule flush

# Add default IPv6 rules again - since they gets deleted by the initial rule flush command.
ip -6 rule add priority 32766 from all table main

# Reset Tunnelbroker routing table (table name: "he-ipv6").
ip -6 route flush table he-ipv6

# Add routeable VPN subnets to Tunnelbroker routing table
ip -6 rule add from 2001:DB8:CAFE::/48 table he-ipv6

# Remember to add a rule that if no machine does not respond to a 
# packet address in my /48, then we should return unreachable. 
# Else the package will be forwarded by default out through the 
# Hurricane Electric connection.

#(From the Internet)
ip -6 route add unreachable 2001:DB8:CAFE::/48

#(From my /48 subnet)
ip -6 route add unreachable 2001:DB8:CAFE::/48 table mynet6

# Any traffic that originates from VPN has to be forwarded via Tunnelbroker routing table 
# using the tunnelbroker link (link name: he-ipv6).
ip -6 route add default via 2001:470:xxxx:xxx::1 dev he-ipv6 table he-ipv6

Vou deixar a pergunta e resposta aqui, já que eu não sou o único a tentar roteamento IPv6 baseado na fonte.

A informação mais recente que encontrei sobre o assunto foi de 2010.

    
por 05.06.2017 / 22:26