'

Outils pour utilisateurs

Outils du site


blog:2013:0606on_n_a_peut-etre_pas_d_ipv6_mais_on_a_des_idees

On n'a peut-être pas d'IPv6 mais on a des idées

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 :

  • Un machine GNU/Linux « cliente » (votre machine de chez vous)
  • Un serveur hébergé chez un gentil hébergeur qui vous laisse 18 446 744 073 709 551 616 adresses IPv6 (une suffit au serveur, autant utiliser le reste).
  • Être root ou pouvoir utiliser sudo en tant que root sur les deux machines.
  • Pouvoir accéder au serveur en SSH depuis la machine cliente.

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 –

blog/2013/0606on_n_a_peut-etre_pas_d_ipv6_mais_on_a_des_idees.txt · Dernière modification: Le 07/01/2015 à 23:52 (modification externe)