Table des matières
Utiliser l'IPv6 de Free
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 :
- Laisser votre freebox en mode routeur (qui veut vraiment faire ça ? ) et la laisser gérer vos IPs v6 : toute la configuration sera automatique, par contre vos clients habituellement protégés par un firewall IPv4 se retrouveront donc à poil direct sur internet : il vous faudra mettre un firewall sur chacun de vos postes.
- Passer votre freebox en mode modem (elle doit deja y être si vous êtes tombés sur cette page :p) et utiliser l'une des 2 possibilités suivantes :
- Subdiviser vous même votre /64 pour en faire ce que bon vous semble
- Avantages de la 1) :
- facile a mettre en place
- l'auto-configuration des clients marche
- possibilité de filtrage (public ↔ privé)
- Inconvénients de la 1)
- qui a dit *sale* ?
- pas de possibilité d'avoir des sous réseaux IPv6
- performances ebtables
- Avantages de la 2)
- propre
- possibilité de filtrage (public ↔ privé) aussi
- possibilité de plusieurs sous réseaux IPv6 “internes” et de gérer le routage/firewall entre eux
- Inconvénients de la 2)
- nécessite une légère manipulation pour toute nouvelle machine sur laquelle vous voulez mettre une IPv6
- l'auto-configuration des clients ne marche pas sans un petit hack (peut-être décrit plus tard si je suis inspiré)
- nécessite un kernel “récent” : >= 2.6.19 (à peu près tout le monde doit en avoir un)
Solution 1 - ebtables
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.
- On crée un bridge réseau contenant toutes les interfaces (sur lesquelles vous voulez avoir des postes IPv6 connectés) :
- Création du bridge :
brctl addbr br-v6 ifconfig br-v6 up
- Auquel on ajoute les interfaces de la passerelle (par exemple) :
brctl addif br-v6 eth0 brctl addif br-v6 eth1 brctl addif br-v6 eth4
- On ajoute la règle (brouting) permettant d'utiliser le pont uniquement pour l'IPv6 :
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.
Solution 2 - Proxy NDP
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.
Quelle est donc mon adresse IPv6 ?
Free fournit un “préfixe” IPv6 la forme 2a01:e3W:WXXY:YZZ0::/64 ou lorsque w.x.y.z est votre adresse IPv4 Free,
- WW est la conversion hexadécimale de ww
- XX est la conversion hexadécimale de xx
- YY est la conversion hexadécimale de yy
- ZZ est la conversion hexadécimale de zz
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
Mise en oeuvre de la solution 2 utilisant le proxy NDP
Principe
- Nous allons donc subdiviser notre range /64 disponible en sous réseau pour notre utilisation (DMZ, postes clients, …)
- Le problème est que les machines extérieures n'auront pas les routes vers ces sous réseaux. Qu'a cela ne tienne, nous allons donc leur “indiquer” (au moins a la freebox) en utilisant un proxy NDP sur votre routeur.
Pour plus de détails sur le NDP je vous conseille cette lecture en anglais
desactivation de l'autoconf ipv6 pour toutes les interfaces
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
Premier sous réseau
Le premier sous réseau que nous allons définir est tout petit
Il comprendra :
- la freeboite (dont on ne peut changer l'IPv6)
- la patte ADSL de notre routeur
- c'est tout
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
Deuxième sous réseau (le vrai)
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
Configuration du proxy NDP
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
Premier serveur en DMZ IPv6
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.
Proxy NDP
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 .
Et le firewall dans tout ca ?
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
Références
- http://cv.arpalert.org/page.sh?freeipv6 (si son site revient : il est indisponible a l'heure ou j'écris ces lignes)