Malheureusement Free fournit un range IPv6 qui est en /64, soit le plus petit sous réseau qui marche en “auto-configuration” avec IPv6.
Pour utiliser ce range, vous avec donc plusieurs choix :
Cette méthode n'est pas privilégiée, ce sera donc un résumé de principe :
Sous Debian, cette solution utilise les paquets bridge-utils et ebtables qu'il vous faudra installer au besoin.
brctl addbr br-v6 ifconfig br-v6 up
brctl addif br-v6 eth0 brctl addif br-v6 eth1 brctl addif br-v6 eth4
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
Tout ce qui n'est pas de l'IPv6 (donc IPv4, ARP, …) est exclu du bridge. Ce traffic exclu (IPv4, ARP, …) continuera comme avant à arriver par les interfaces eth0/eth1/eth4 qu'il faudra donc utiliser pour le firewall IPv4. Si vous voulez utiliser l'IPv6 sur votre passerelle elle meme il faut que l'IPv6 soit portée par l'interface br-v6.
Pour plus de détails sur cette solution, voir ici.
Cette solution permet de pouvoir re subdiviser votre réseau /64 a votre guise, cependant pour chaque adresse utilisée il faut que votre routeur remplisse le rôle de proxy NDP (voir plus bas). Cette solution offre de bien meilleures possibilités c'est donc celle qui sera retenue dans la suite de cet article.
Free fournit un “préfixe” IPv6 la forme 2a01:e3W:WXXY:YZZ0::/64 ou lorsque w.x.y.z est votre adresse IPv4 Free,
Quelqu'un qui a donc l'IPv4 (exemple fictif :p ) 40.51.254.42 chez Free aura le préfixe IPv6 2a01:e32:833f:e2a::/64
Votre freebox portera donc la première adresse IPv6 de ce range, soit l'adresse 2a01:e32:833f:e2a::1/64 .
Pour visualiser un peu plus les IPv6 je vous conseille d'utiliser par exemple l'utilitaire sipcalc (apt-get install sipcalc) :
sipcalc -6 2a01:e32:833f:e2a::1/64 -[ipv6 : 2a01:e32:833f:e2a::1/64] - 0 [IPV6 INFO] Expanded Address - 2a01:0e32:833f:0e2a:0000:0000:0000:0001 Compressed address - 2a01:e32:833f:e2a::1 Subnet prefix (masked) - 2a01:e32:833f:e2a:0:0:0:0/64 Address ID (masked) - 0:0:0:0:0:0:0:1/64 Prefix address - ffff:ffff:ffff:ffff:0:0:0:0 Prefix length - 64 Address type - Aggregatable Global Unicast Addresses Network range - 2a01:0e32:833f:0e2a:0000:0000:0000:0000 - 2a01:0e32:833f:0e2a:ffff:ffff:ffff:ffff
Pour plus de détails sur le NDP je vous conseille cette lecture en anglais
Nous allons désactiver l'autoconf IPv6 pour toutes les interfaces étant donné que nous allons les configurer manuellement (adapter si vous ne voulez le faire que sur quelques interfaces). Pour cela rajouter dans le fichier /etc/sysctl.conf a la fin :
# desactive l'autoconf des interfaces net.ipv6.conf.all.autoconf = 0
Pour appliquer cette nouvelle configuration :
sysctl -p /etc/sysctl.conf
Le premier sous réseau que nous allons définir est tout petit
Il comprendra :
Ce réseau est un /126 (qui comprendra donc les adresses de 0 a 3, soit déja plus qu'il n'en faut). La freebox porte l'IP 1. Nous allons donner au routeur l'IP 2, avec pour passerelle par defaut IPv6 la freebox La partie IPv4 ne change pas, et voici un exemple de section IPv6 du fichier /etc/network/interfaces concernant cette interface nommée ici “adsl” (adapter en ethX au besoin) :
auto adsl iface adsl inet static # .... IPv4 classique iface adsl inet6 static address 2a01:e32:833f:e2a::2 netmask 126 gateway 2a01:e32:833f:e2a::1 # la gateway est l'adresse IPv6 de la freeboite
Maintenant que ce premier sous réseau est défini, il est temps d'en créer un autre
Pour cela on utilise une autre patte du routeur. Cette autre carte réseau est nommée ici “dmz”, la encore il faut adapter à vos besoins.
Le sous réseau de base utilisé sera un /112 qui comporte tout de même 65535 IPs v6, ce qui ne devrait pas vous limiter avant un moment.
Le sous réseau sera le sous réseau 4 pour la DMZ, et cette patte du routeur portera la première IP de ce sous réseau : la 1 :
auto dmz iface dmz inet static # .... conf IPv4 classique avec une ip privée iface dmz inet6 static address 2a01:e32:833f:e2a:4::1 netmask 112
Tout ceci serait presque suffisant si nous n'avions besoin de configurer ce fameux proxy NDP sur l'interface coté ADSL.
Sauf firewall éventuels vous devriez maintenannt pouvoir pinguer la freebox depuis votre routeur :
ping6 2a01:e32:833f:e2a::1
Nous allons activer le forward IPv6 et le proxy NDP sur l'interface coté ADSL (adapter le nom “adsl” a votre cas). Pour cela rajouter dans le fichier /etc/sysctl.conf a la fin :
net.ipv6.conf.all.forwarding=1 net.ipv6.conf.adsl.proxy_ndp=1
Pour appliquer cette nouvelle configuration :
sysctl -p /etc/sysctl.conf
Il faudra ensuite ajouter manuellement chaque IPv6 que vous allez utiliser sur vos “petits” sous réseau
La configuration IPv6 d'une machine sur ce sous réseau /112 doit donc être effectuée manuellement. Par exemple voila le fichier /etc/network/interfaces d'un serveur (ip n°5 ) qui sera accessible en IPv6 :
# reseau /112 : adresses des machines en :1, :2, :3, ... iface eth0 inet6 static address 2a01:e32:833f:e2a:4::5 netmask 112 gateway 2a01:e32:833f:e2a:4::1 # l'adresse de la gateway est cette fameuse adresse de la patte DMZ de notre routeur
Sous réserve de firewalls éventuels vous devriez maintenant pouvoir fait un ping sur votre routeur depuis votre serveur :
ping6 2a01:e32:833f:e2a:4::1
A ce stade vous ne pouvez pas encore contacter le grand internet. Il faut donc déclarer sur le proxy NDP l'IP de ce serveur.
Le proxy NDP a été activé, mais pour l'instant il ne proxyfie pas grand chose.
Pour le remplir nous allons utiliser la commande ip (dans le paquet iproute si vous ne l'avez pas deja : apt-get install iproute).
Voici donc la section complete du fichier /etc/network/interfaces de votre routeur pour la carte DMZ est donc (notez la directive de proxy NDP au up de l'interface) :
auto dmz iface dmz inet static # ... conf IPv4 classique avec une ip privée iface dmz inet6 static address 2a01:e32:833f:e2a:4::1 netmask 112 # ajout proxy NDP pour toutes les machines de la DMZ # remplacer "adsl" par le nom de votre patte réseau coté freebox up ip -6 neigh add proxy 2a01:e32:833f:e2a:4::5 nud permanent dev adsl
Vous pouvez bien sur lancer cette commande manuellement plutôt que de faire un /etc/init.d/networking restart (ou pire : un reboot) :
ip -6 neigh add proxy 2a01:e32:833f:e2a:4::5 nud permanent dev adsl
Cette commande sera à lancer pour chacune des IPv6 que vous allez utiliser 'en interne', je vous conseille donc de toutes les mettre dans la section up de l'interface concernée, comme par exemple :
iface dmz inet6 static address 2a01:e32:833f:e2a:4::1 netmask 112 # ajout proxy NDP pour toutes les machines de la DMZ # remplacer "adsl" par le nom de votre patte réseau coté freebox up ip -6 neigh add proxy 2a01:e32:833f:e2a:4::5 nud permanent dev adsl up ip -6 neigh add proxy 2a01:e32:833f:e2a:4::6 nud permanent dev adsl up ip -6 neigh add proxy 2a01:e32:833f:e2a:4::7 nud permanent dev adsl # ...
Et voila : le monde devrait maintenant être accessible a votre serveur qui est donc maintenant dans une vraie DMZ avec une ip publique et tout
Adieu le forward de port, et bonjour le firewall maintenant nécessaire .
Contrairement a IPv4, il est nécessaire d'ouvrir un peu votre firewall sur votre passerelle pour le routage de l'IPv6 lui même. Il faut impérativement laisser passer les requêtes de router/neighbour solicitation/advertisement, comme par exemple en utilisant les règles ci dessous (même nommage des interfaces que précédemment, la encore à vous d'adapter) :
# note : le "-m hl --hl-eq 255" sert a limiter ces acceptations "aux voisins immediats" /sbin/ip6tables -A OUTPUT -o adsl -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i adsl -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i adsl -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i adsl -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A OUTPUT -o dmz -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i dmz -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i dmz -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A OUTPUT -o dmz -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A INPUT -i dmz -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT /sbin/ip6tables -A OUTPUT -o dmz -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT # une fois ces regles etablies, le traffic IPv6 va pouvoir passer s'il est autorisé # par exemple pour ouvrir massivement l'acces SSH depuis l'extérieur vers votre DMZ : # adapter le sous réseau de votre DMZ IPv6 DMZ_NETv6="2a01:e32:833f:e2a:4::/112" /sbin/ip6tables -A FORWARD -i adsl -o dmz -p tcp -d $DMZ_NETv6 --sport 1024: --dport ssh -m state --state NEW,ESTABLISHED -j ACCEPT /sbin/ip6tables -A FORWARD -i dmz -o adsl -p tcp -s $DMZ_NETv6 --sport ssh --dport 1024: -m state --state ESTABLISHED -j ACCEPT