« Mes geeks ? Je leur donne de l'IPv6 tous les jours ! C'est pour ça qu'ils ont la barbe douce et soyeuse. »

Bernard, producteur de geeks depuis 20 ans

[Dans la première partie|/post/2010/06/30/IPv6%2C-tunnelbroker-et-table-forward], on a vu comment monter un tunnel à l'aide d'un fournisseur de tunnel. Maintenant, il est grand temps de relier Tatie Jeanette à l'Interwebz v6.

Passe, passe, passe le /48, y'a du monde sur la corde à linge…

Si ta mémoire n'est pas encore complètement anéantie par les vapeurs d'alcool, tu te souviens sûrement qu'on avait déjà fait appel à radvd pour annoncer des adresses et un routeur sur le réseau. Donc rebelote.

On va donc commencer par choisir une adresse de routeur sur la plage 2001:dede:abba::/48 pour le premier réseau. Toujours dans /etc/network/interfaces :

iface eth0 inet6 static
# Ceci est purement une convention
# tu peux mettre ce que tu veux grand coquin
	address 2001:dede:abba:0:ff:ff:ff:ff
	netmask 64

Et on configure un radvd des familles pour prévenir tout le monde qu'il y a de la soupe IPv6 dans la cuisine, avec un truc du genre :

interface eth0 {
        AdvSendAdvert on;
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        prefix 2001:dede:abba::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };
};

Dans /etc/radvd.conf. Comme j'ai horreur de réfléchir (faudrait pas que je me fasse un claquage de cerveau en pleine Coupe du monde, ce serait dommage), c'est l'exemple (adapté) du manuel. La seule subtilité dans tout ça, c'est que j'ai volontairement choisi un réseau en /64 pour subdiviser le /48. Pourquoi ? Parce que j'avais pas envie de faire simple ce matin…

Si tu as un message d'avertissement étrange au démarrage de radvd, je te conseille de décommenter la ligne suivante dans /etc/init.d/radvd et de la couper/coller au début de la fonction start de ce même fichier :

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Parce que si tu ne forwardes pas, les nains se vautreront comme des glands au lieu de courir très vite dans les fils.

Bref, au bout de quelques secondes, tu devrais voir apparaître de magnifiques adresses IPv6 dans tout ton LAN chéri et tu devrais pourvoir alors découvrir les merveilles de l'Interwebz v6 avec encore plus de porno jap.

Toc, toc !

Avec comme seul petit bémol que maintenant, ton réseau local a le trou béant puisque chaque machine est connectée en direct sur Internet à travers IPv6 et ton routeur. Horreur, scandale, ignominie, Barbara Stresand, comment va-t-on faire pour protéger mes pauvres babasses Windaube ?!? Il est vrai que maintenant, n'importe quel gugusse sur Internet peut voir directement ton imprimante et ton FTP local de pr0n, c'est bof bof. C'est donc le moment de mettre à profit la table FORWARD de ip6tables pour obtenir une config proche de ce qu'on a en IPv4+NAT.

Sur le routeur, on procède donc comme suit :

# On jète tout ce qui travers le routeur
# IPv6 ne fonctionne plus que sur le routeur à ce moment
ip6tables -P FORWARD DROP
# On ouvre complètement ICMPv6
# On peut de nouveau pinguer l'Internetv6
ip6tables -A FORWARD -p icmpv6 -j ACCEPT
# On autorise l'ensemble du /64 à sortir vers Internet
ip6tables -A FORWARD -p all -s 2001:dede:abba::/64 -j ACCEPT
# On autorise les connexions retours légitimes
ip6tables -A FORWARD -d 2001:dede:abba::/64 -m state \
          --state RELATED,ESTABLISHED -j ACCEPT
# Pour autoriser des serveurs sur le LAN (DNS, HTTP, etc…)
# il suffit de les ajouter
# Ici, on autorise l'accès à un serveur Web disponible sur le LAN
ip6tables -A FORWARD -p tcp -d <adresse IPv6 complète du serveur>/128 \
          --dport 80 -j ACCEPT
# Pour le fun, on loggue tous les paquets merdeux
ip6tables -A FORWARD -j LOG

Et pour vérifier qu'on a pas fait de la merde en barre, on peut toujours s'appuyer sur un scan de port IPv6 des familles qui permettra de valider que personne n'a accès aux machines derrière le routeur.

En exercice pour la semaine prochaine, tu me copieras 100 fois ton adresse IPv6 et tu protègeras aussi le routeur avec ip6tables.