Acceptez et transférez la gamme IPv6 entrante vers une autre interface

J'ai une configuration OpenVPN fonctionnant avec IPv4. En préparation du support IPv6, j'ai fait ce qui suit:

  • L'interface ens3 (peut accéder à Internet) a obtenu une adresse / 64 de l'ISP
  • J'ai divisé le / 64 en deux / 65
  • Ens3 a maintenant …. :: / 65
  • Le serveur OpenVPN est configuré pour utiliser ….: 8000 :: / 65
  • Donc tun0 (dispositif OpenVPN) a ….: 8000 :: 1/65
  • Lorsque les clients se connectent, ils obtiennent des adresses de la plage appropriée attribuée, par exemple ….: 8000 :: 1000/65

Le problème: la communication IPv6 ne fonctionne que dans les directions sortantes. Le trafic entrant ne fonctionne pas, car la passerelle ISP demande ICMP6, neighbor solicitation, who has ....:8000::1000 qui arrive sur ens3 mais mon serveur ne répond pas à cela. Je suppose que je dois dire à mon serveur et ens3 d'accepter des paquets pour la …: 8000 :: / 65 et l'envoyer à tun0? Mais je ne suis pas sûr de savoir comment faire cela.

Dans le cas où cela est pertinent, j'utilise firewalld sur une machine Fedora.

MODIFIER

Après @kasperd m'a montré une bonne explication des préfixes routés, j'ai continué à lire à ce sujet.

Je n'ai pas trouvé de documentation sur la façon dont je peux demander un préfixe routé de mon fournisseur d'hébergement. Donc, je suppose que je dois rester avec mes préfixes self-split / 65. S'il vous plaît, dites-moi comment améliorer si ce n'est pas une solution propre!

Afin de répondre aux sollicitations de voisin mentionnées, il faut permettre la mise en procuration de NDP. sysctl -w net.ipv6.conf.all.proxy_ndp=1

Pour un nombre fixe de clients, on pourrait maintenant utiliser ip neigh add proxy ....:8000::1000 dev ens3 . Pour automatiser ce processus avec OpenVPN, on peut ajouter les deux lignes suivantes à la configuration du serveur OpenVPN:

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

Avec le script proxy-ndp beeing

 #!/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 

En outre, si le renvoi IPv6 n'est pas déjà présent, il faut l'activer avec sysctl -w net.ipv6.conf.all.forwarding=1 . La dernière étape consiste à permettre le transfert entre les interfaces réseau. Comme j'utilise firewalld, la commande est firewall-cmd --direct --add-rule ipv6 filter FORWARD 0 -i tun0 -o ens3 -j ACCEPT .