Accettare e inoltrare l'intervallo IPv6 in arrivo ad un'altra interface

Ho un'installazione di OpenVPN che funziona con IPv4. In preparazione al supporto IPv6, ho fatto quanto segue:

  • L'interface ens3 (può arrivare a Internet) ha ottenuto un indirizzo / 64 da ISP
  • Ho diviso il / 64 in due / 65
  • ens3 ora ha …. :: / 65
  • Il server OpenVPN è configurato per l'uso ….: 8000 :: / 65
  • quindi tun0 (dispositivo OpenVPN) ha ….: 8000 :: 1/65
  • quando i clienti si connettono, ottengono indirizzi dalla gamma corretta assegnata, ad esempio ….: 8000 :: 1000/65

Il problema: la comunicazione IPv6 funziona solo in direzione di output. Il traffico in entrata non funziona, perché il gateway ISP richiede ad esempio ICMP6, neighbor solicitation, who has ....:8000::1000 che arriva su ens3 ma il mio server non risponde a questo. Immagino che devo dire al mio server e ens3 di accettare i pacchetti per il ….: 8000 :: / 65 e spedirlo a tun0 ?! Ma non sono sicuro di come farlo.

Nel caso in cui ciò sia rilevante, utilizzo firewalld su una macchina Fedora.

EDIT

Dopo che @kasperd mi ha indicato una buona spiegazione dei prefissi in routing, ho continuato a leggere su questo.

Non ho trovato la documentazione su come posso richiedere un prefisso instradato dal mio fornitore di hosting. Quindi suppongo di restare con i miei prefissi di auto-split / 65. Per favore, dimmi come migliorare se questa non è una soluzione pulita!

Per rispondere alle sollecitazioni vicine, bisogna abilitare la proxying NDP. sysctl -w net.ipv6.conf.all.proxy_ndp=1

Per un numero fisso di client, si potrebbe ora fare ip neigh add proxy ....:8000::1000 dev ens3 . Per automatizzare questo process con OpenVPN, è ansible aggiungere le seguenti due righe al server config di OpenVPN:

 script-security 2 learn-address ./proxy-ndp 

Con script di proxy-ndp

 #!/bin/bash extif=ens3 op="$1" addr="$2" if [[ "$addr" != *":"* ]]; then # no IPv6 exit 0 fi case "$op" in add|update) /usr/sbin/ip neigh replace proxy "$addr" dev "$extif" ;; delete) /usr/sbin/ip neigh del proxy "$addr" dev "$extif" ;; esac 

Inoltre, se l'inoltro IPv6 non è già presente, è necessario abilitarlo con sysctl -w net.ipv6.conf.all.forwarding=1 . L'ultimo passo è permettere l'inoltro tra le interfacce di networking. Dato che uso firewalld, il command è firewall-cmd --direct --add-rule ipv6 filter FORWARD 0 -i tun0 -o ens3 -j ACCEPT .

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.