Quello che sto cercando di fare è indirizzare il traffico IPv6 attraverso un tunnel VPN. In questo modo, dovrei essere in grado di utilizzare IPv6 in una rete che non supporta IPv6.
Ho un VPS a cui è assegnato un blocco IPv6. Parte di questo blocco che voglio usare per i client openvpn. L'intervallo che avevo in mente era 2001:db8::111:800:0/112
(il prefisso è anonimo), perché openvpn supporta solo / 64 e / 112 come sottoreti.
IPv6 attraverso il tunnel funziona già, dal client, posso eseguire il ping del server ( 2001:db8::111:800:1
) e anche interfacce sul server ( 2001:db8::111:100:100
e 2001:db8:216:3dfa:f1d4:81c0
).
Tuttavia, quando provo a eseguire il ping di google.com dal client, non ricevo risposta (timeout del ping). Per eseguire il debug di questo problema, ho usato tcpdump per catturare il traffico sul server e posso vedere i pacchetti ping in uscita, ma nessuna risposta ritorna. L'aggiunta di regole di registro a ip6tables mostra lo stesso, i pacchetti escono, ma non arriva nulla.
Ho usato uno strumento di traceroute online che ottiene un timeout dal mio server. Ho anche provato a impostare l'ip direttamente sull'interfaccia, il che fa sì che l'ip ( 2001:db8::111:800:1001
) sia raggiungibile, quindi penso che questo sia un problema di routing.
Ho abilitato l'inoltro per ipv6 tramite /proc/sys/net/ipv6/conf/all/forwarding
. ip6tables ha i criteri consentiti per tutte le catene.
La mia domanda è: che cosa è esattamente necessario affinché Linux accetti quel pacchetto per un ip che non è assegnato a un'interfaccia e lo instrada ulteriormente? Solo un percorso esistente non sembra abbastanza.
Ecco la configurazione per il mio client e server. Si prega di far sapere se sono necessarie ulteriori informazioni.
Cliente
# ip -6 addresses
10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1001/112 scope global
valid_lft forever preferred_lft forever
# ip -6 routes
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2000::/3 dev tun0 metric 1024
server
# ip -6 address
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8:216:3dfa:f1d4:81c0/64 scope global dynamic
valid_lft 86254sec preferred_lft 14254sec
inet6 2001:db8::111:100:100/128 scope global
valid_lft forever preferred_lft forever
12: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 100
inet6 2001:db8::111:800:1/112 scope global
valid_lft forever preferred_lft forever
# ip -6 route
2001:db8::111:100:100 dev eth0 proto kernel metric 256
2001:db8::111:800:0/112 dev tun0 proto kernel metric 256
2001:db8::/64 dev eth0 proto kernel metric 256 expires 86194sec
default via fe80::230:48ff:fe94:d6c5 dev eth0 proto ra metric 1024 expires 1594sec
TRACE
target della tabella raw di iptables (forse non tanto qui) ip neighbour
, e ip route get
. Inoltre, specifica chi esegue il ping google.ca
.
POSTROUTING ... MASQUERADE
nellanat
tabella. Ma non sono sicuro di aver capito completamente. Stai provando a tunnelizzare il traffico IPv6? In tal caso, hai le rispettive strutture impostate? I-p ipv6
pacchetti sono ammessi nelle regole IPv4 (!)?