Si votre fournisseur d'accès ne vous fournit pas encore une connectivité IPv6, ça va finir par arriver… un jour… peut-être, ou pas. Si vous voulez tout de même goûter aux joies de l'IPv6, il y a plein de solutions. Je vous en présente une.
Pour cette recette, il vous faut :
root
ou pouvoir utiliser sudo
en tant que root
sur les deux machines.Nous allons créer un tunnel IPv6 sur IPv4 (il est possible que cette technique pose problème à votre *box). Pour cela, vous trouverez ci-dessous deux scripts pour créer ce tunnel : un pour le client, l'autre pour le serveur. Ces scripts sont très largement commentés et sous licence WTFPL.
Script client (nommé ipv6
) :
#!/bin/bash # © 2013 Sylvain Collilieux <Sylvain CHEZ Collilieux POINT NET> # licence WTFPL http://www.wtfpl.net/txt/copying/ # nom de la machine qui fera passerelle ipv4/ipv6 # ce nom servira de nom de l'interface tunnel SERVER_HOST=monserveur DOMAIN='mondomaine.net' # on obtient l'adresse IP à partir de l'enregistrement DNS type A SERVER_IPv4=$(host -t a ${SERVER_HOST}.$DOMAIN | awk '{print $4}') # Choix arbitraire parmis un /64 SERVER_IPv6='2441:00e7:9:fbe8:1::1' # l'adresse locale est obtenue à partir de la route vers le serveur CLIENT_IPv4=$(ip -o route get $SERVER_IPv4 | awk '{print $7}') CLIENT_IPv6='2441:00e7:9:fbe8:1::2' # TODO : choisir un masque adéquat MASK='112' TTL=32 # pourquoi 32 ? pourquoi pas ! # On commence par créer le tunnel sur le serveur # on fait un SSH en IPv4 (des fois qu'il reste un bout # de conf IPv6) # Le script doit être sur le serveur et exécutable ssh -t -4 ${SERVER_HOST}.${DOMAIN} bin/ipv6_sit.sh # suppression de l'interface qu'elle existe ou pas sudo ip tun del $SERVER_HOST > /dev/null # création du tunnel sudo ip tun add $SERVER_HOST mode sit remote $SERVER_IPv4 local $CLIENT_IPv4 ttl $TTL # on passe l'interface UP sudo ip link set $SERVER_HOST up # affectation de l'adresse IPv6 en statique sudo ip addr add $CLIENT_IPv6/$MASK dev $SERVER_HOST # route par défaut via la serveur sudo ip route add default via $SERVER_IPv6 dev $SERVER_HOST
Script serveur ipv6_sit.sh
:
#!/bin/bash # © 2013 Sylvain Collilieux <Sylvain CHEZ Collilieux POINT NET> # licence WTFPL http://www.wtfpl.net/txt/copying/ # L'interface portera le nom de l'utilisateur INT=$USER # l'adresse IP est obtenue à partir du who, l'utilisateur doit être connecté CLIENT_IPv4=$(who -m --ips | awk '{print $5}') CLIENT_IPv6='2441:00e7:9:fbe8:1::2' # pour obtenir l'adresse IP locale, on interroge la route vers l'adresse # distante SERVER_IPv4=$(ip -o route get $CLIENT_IPv4 | awk '{print $7}') # Choix arbitraire parmis un /64 SERVER_IPv6='2441:00e7:9:fbe8:1::1' # TODO : choisir un masque adéquat MASK='112' TTL=32 # pourquoi 32 ? pourquoi pas ! # suppression de l'interface qu'elle existe ou pas sudo ip tun del $INT > /dev/null # création du tunnel sudo ip tun add $INT mode sit remote $CLIENT_IPv4 local $SERVER_IPv4 ttl $TTL # on passe l'interface UP sudo ip link set $INT up # affectiation de l'adresse IPv6 en statique sudo ip addr add $SERVER_IPv6/$MASK dev $INT # le serveur doit répondre aux requêtes Neighbor Solicitation # à la place du distant sudo ip -6 neigh add proxy $CLIENT_IPv6 dev eth0
Il faut rendre ces deux scripts exécutables (chmod u+x
) et surtout les adapter à votre configuration (nom du serveur et adresses IPv6). Pour créer le tunnel, on lance le script côté client qui lancera le script côté serveur.
Le script fonctionne quel que soit le lieu où on est connecté. Il faut « juste » que SSH et le tunnel puisse passer à travers votre point d'accès box ou routeur (en bref il faut de l'internet, pas seulement du web).
Il y a plein d'autres solutions pour obtenir une connectivité IPv6. N'hésitez pas à partager la vôtre.
— Le 06/06/2013 – Sylvain Collilieux –