Table des matières

, , , , , ,

Utiliser l'IPv6 de Free

Pour utiliser ces fonctionalités IPv6 il faut au préalable activer la gestion de l'IPv6 dans votre interface client free (et redémarrer votre freebox)

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 :

  1. Utiliser un bridge entre les interfaces de votre routeur afin de toutes les mettre sur le sous réseau /64 , votre installation devrait ressembler à ca :
  2. Subdiviser vous même votre /64 pour en faire ce que bon vous semble :-)

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.

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,

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

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

Attention il ne faut pas utiliser de commentaires sur la même ligne qu'une directive de conf dans le fichier /etc/network/interfaces sinon cela ne fonctionnera pas

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 :-)

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