Adicionando todo um bloco IPv6 / 64 a uma interface de rede no debian

11

Eu tentei adicionar um bloco inteiro IPv6 (/ 64) a uma interface usando

ip route add local 2001:41d0:2:ad64::/64 dev lo

como descrito aqui no meu servidor Debian, mas pareço estar faltando alguma coisa.

Se eu pingar por exemplo 2001:41d0:2:ad64::fe localmente, tudo funciona bem, mas se eu tentar de uma máquina remota, não funciona. Eu tentei adicionar a rota em eth0:

ip route add local 2001::41d0:2:ad64::/64 dev eth0

Agora eu não pude nem mesmo digitar qualquer endereço de exemplo localmente!

Estou um pouco perdido, pois parece que estou perdendo alguma coisa, mas não consigo encontrar a resposta aqui.

Para breve: Eu quero que 2001:41d0:2:ad64::/64 seja vinculado a eth0 para que todos os IPs que este bloco contém sejam acessados pela internet em minha máquina.

Espero que alguém possa me indicar o caminho certo. Agradecemos antecipadamente.

O guia fornecido pelo ISP requer que eu adicione cada IPv6 à interface explicitamente. Eu quero que seja implícito.

Configuração de trabalho com ligação de endereço IP explícita

/ etc / network / interfaces:

auto eth0
iface eth0 inet static
        address my.ip.v4
        netmask 255.255.255.0
        network my.network.address.ip
        broadcast my.broadcast.address.ip
        gateway my.gateway.ip

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff
        up ip addr add 2001:41d0:2:ad64::1/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::1/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::2/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::2/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::3/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::3/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::4/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::4/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::5/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::5/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::6/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::6/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::7/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::7/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::8/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::8/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::9/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::9/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::a/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::a/64 dev eth0

Solução nº 1

Eu tentei reativar a rota local como sugerido pelo @kasperd.

Conteúdo do meu / etc / network / interfaces

auto lo
iface lo inet loopback
    post-up ip route add local 2001:41d0:2:ad64::/64 dev lo
    pre-down ip route del local 2001:41d0:2:ad64::/64 dev lo

auto eth0
iface eth0 inet static
        # <snip of ipv4 config>

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff

Tabela de roteamento local:

# ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:41d0:2:ad64::fe dev lo  proto none  metric 0
local 2001:41d0:2:ad64::/64 dev lo  metric 1024
local fe80::225:90ff:fe06:6bbe dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256

Saída de traceroute (meu PC local):

  1    <1 ms    <1 ms    <1 ms  fritz.box [xxx]

  2    20 ms    21 ms    24 ms  2002:c058:6301::1
  3    21 ms    22 ms    24 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    44 ms    31 ms    40 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6     *        *       35 ms  ams-5-6k.nl.eu [2001:41d0::8d1]
  7    37 ms    39 ms    36 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    37 ms    70 ms    36 ms  chi-3-4m.il.us [2001:41d0::176]
  9  Zielhost nicht erreichbar.

Ablaufverfolgung beendet.

traceroute6 no servidor:

traceroute to 2001:41d0:2:ad64::23 (2001:41d0:2:ad64::23), 30 hops max, 80 byte packets
 1  2001:41d0:2:ad64::a (2001:41d0:2:ad64::a)  0.028 ms  0.009 ms  0.008 ms

ping6 no servidor:

PING 2001:41d0:2:ad64::23(2001:41d0:2:ad64::23) 56 data bytes
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 2001:41d0:2:ad64:23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.029/0.043/0.057/0.014 ms

tcpdump output (enquanto faz ping e tracerout no servidor remoto):

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

tracert para o gateway:

Routenverfolgung zu vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff] über maximal 3
0 Abschnitte:

  1    <1 ms    <1 ms    <1 ms  fritz.box [2002:5476:1b4c:0:c225:6ff:fe40:b2b0]

  2    23 ms    22 ms    26 ms  2002:c058:6301::1
  3    24 ms    40 ms    23 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    28 ms    37 ms    39 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6    38 ms    33 ms     *     ams-5-6k.nl.eu [2001:41d0::8d1]
  7    36 ms    39 ms    38 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    36 ms    35 ms    35 ms  vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff]

Ablaufverfolgung beendet.

ping para o gateway:

Ping wird ausgeführt für 2001:41d0:2:adff:ff:ff:ff:ff mit 32 Bytes Daten:
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=36ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=34ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=38ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=57ms

Ping-Statistik für 2001:41d0:2:adff:ff:ff:ff:ff:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 34ms, Maximum = 57ms, Mittelwert = 41ms

Por isso, ainda é apenas trabalhar localmente (servidor), mas não de remoto (meu pc).

    
por Hikaru-Shindo 19.04.2014 / 02:55

1 resposta

11

Eu precisava de algo semelhante no passado. Eu descobri que há três etapas necessárias para que isso funcione:

  • Você precisa rotear um prefixo para o host
  • Você precisa de uma rota local no host
  • Os aplicativos precisam definir a opção IP_FREEBIND ou IP_TRANSPARENT nos soquetes

A maneira correta de obter um prefixo roteado para o host envolve entrar em contato com seu provedor, se ele ainda não tiver fornecido um. Eles podem ter um servidor DHCPv6, que pode delegar um prefixo para você, se você enviar a solicitação DHCPv6 correta para ele.

Se, por alguma razão, um prefixo real roteado for impossível, mas você tiver acesso para usar quantos endereços desejar de um prefixo de link disponível em uma de suas interfaces de rede, poderá transformar parte dele em um prefixo roteado fazendo com que um daemon responda às solicitações de descoberta do vizinho para cada endereço IPv6 nesse intervalo.

O uso desse daemon não é recomendado, exceto como último recurso, pois consumirá desnecessariamente a memória de todos os seus vizinhos. Existem algumas implementações desse daemon, uma que parece promissora é o ndppd . (Eu não tenho nenhuma experiência específica com isso, já que eu só aprendi sobre isso depois que eu escrevi o meu próprio com o prefixo do link codificado.)

Parece que você já conseguiu a rota local funcionando. Como você percebeu, ele precisa ser atribuído à interface lo para funcionar.

Finalmente, os aplicativos que usam endereços desse intervalo precisam de uma opção de IP para poder vincular-se a endereços, que não são atribuídos explicitamente a uma interface de rede específica no host. Aqui está um fragmento de código que pode ser usado:

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));
    
por 26.04.2014 / 00:05