Outils pour utilisateurs

Outils du site


doc:ipv6

© 2005 Frédéric Daniel Luc LEHOBEY. Ce document est publié sous la licence GNU GPL. Merci d'en respecter les termes.

Cette page est une version augmentée, améliorée et commentée du document initialement paru ici.

Contexte

Le but de ce document est de mettre en place un accès direct à IPv6 par le protocole « 6to4 » (RFC 3056, RFC 3068) sur une machine Debian sarge connectée à IPv4 par une adresse IPv4 routable fixe. La machine sera elle-même configurée comme routeur IPv4/IPv6 pour le réseau derrière eth0 fournissant (optionnellement) dhcp pour IPv4 et la configuration automatique d'adresses IPv6.

Paquets Debian spécifiques nécessaires sur le (futur) routeur

iproute

Fournit la commande ip.

radvd

Serveur de configuration automatique du réseau IPv6.

Paquets Debian spécifiques optionnels (mais conseillés) sur le (futur) routeur

dnsmasq

Serveur DHCP et cache de serveur DNS.

ipmasq

Fournit le NAT au réseau IPv4 (si souhaité).

resolvconf

Paramétrage facile du fichier /etc/resolv.conf pour le DNS local.

Noyau

J'ai utilisé le noyau Linux 2.6.8 standard de Debian sarge. Cela fonctionne aussi avec le noyau standard Linux 2.4.27 mais il faut charger explicitement le module ipv6 dans le noyau. À faire en ajoutant ipv6 à /etc/modules (à la main ou par modconf) ou bien en ajoutant où il le faut un modprobe ipv6 comme dans le /etc/network/interfaces proposé plus bas.

Paquets utiles pour le diagnostic

iputils-ping

Fournit la commande ping6.

iputils-tracepath

Fournit les commandes traceroute6 et tracepath6.

Commandes utiles

Diagnostic

$ ip -6 route

pour savoir l'état du routage en IPv6.

$ ping6 -n www.6bone.net

pour voir les adresses sous forme numérique (hexadécimal).

$ w3m http://[2001:4f8:4:7:2e0:81ff:fe52:9a6b]/

pour surfer sur IPv6 (c'est l'adresse de www.netbsd.org à la date d'écriture de ce document.)

Un site qui vous indique si vous êtes bien sur IPv6 avec une tortue qui bouge (et affiche votre adresse IPv6) est http://www.kame.net/.

Conversion décimal-hexadécimal

Il est nécessaire de transformer son adresse fixe IPv4 en son préfix IPv6 6to4 correspondant. La commande suivant le fait pour l'adresse 82.231.148.189 (la mienne) à remplacer partout par la vôtre.

$ printf "2002:%x%02x:%x%02x::\n" `echo 82.231.148.189 | tr "." " "`

qui donne 2002:52e7:94bd::. Dans tout le reste de cette documentation, cette valeur devra être remplacée par la vôtre en IPv6.

Et si vous avez (déjà) installé ipmasq, cela est fait automatiquement aussi par :

# printf "2002:%x%02x:%x%02x::\n" `echo $(ipofif $(default-if)) | tr "." " "`

/etc/network/interfaces du routeur

Configuration du tunnel vers IPv6

Entrelardée de commentaires.

auto sit1
iface sit1 inet6 v4tunnel

Le nom sit1 est souvent repris pour les tunnels (et sit0 est utilisé par Debian) mais cela pourrait être n'importe quel autre nom.

        address 2002:52e7:94bd:feed::1

L'utilisation du sous-réseau feed permet de laisser libre 0 pour eth0. Cela pourrait être n'importe quelle autre valeur de 4 chiffres hexadécimaux.

        netmask 64
        endpoint any
        local 82.231.148.189

L'adresse locale (tout comme celle IPv6) est malheureusement codée en dur dans le fichier ce qui rend plus compliquée la mise en place du même système avec une adresse IPv4 reçue dynamiquement. Pour ces configurations-là, il vaut mieux probablement utiliser freenet6.

        pre-up modprobe ipv6

Pour être sûr que le module est bien dans le noyau au moment où nous en avons besoin (indispensable pour les noyaux 2.4).

        pre-up sysctl -w net.ipv6.conf.all.forwarding=1
        pre-up sysctl -w net.ipv6.conf.all.autoconf=0
        pre-up sysctl -w net.ipv6.conf.all.accept_ra=0
        pre-up sysctl -w net.ipv6.conf.all.accept_redirects=0
        pre-up sysctl -w net.ipv6.conf.all.router_solicitations=0

Ces commandes configurent le noyau en mode routeur. Elles peuvent être remplacées par une configuration du fichier /etc/sysctl.conf (voir « man sysctl ») mais je trouve plus clair et logique de le faire ici.

        # Coupe-feu
        pre-up ip6tables -F
        pre-up ip6tables -I INPUT -i $IFACE -p tcp --syn -j DROP
        pre-up ip6tables -I FORWARD -i $IFACE -p tcp --syn -j DROP
        pre-up ip6tables -I INPUT -i $IFACE -p udp \! --dport 32768:60999 -j DROP
        pre-up ip6tables -I FORWARD -i $IFACE -p udp \! --dport 32768:60999 -j DROP

Configuration (optionnelle) d'un coupe-feu élementaire. Les chaînes standard d'iptables sont INPUT (entrée sur la machine), FORWARD (transmission par la machine) et OUTPUT (sorties de la machine).

        # ssh
        pre-up ip6tables -I FORWARD -i $IFACE -p tcp --dport 22 -j ACCEPT

Cette règle permet de se connecter par ssh sur les autres machines du réseau local mais pas sur le routeur.

        pre-up ip6tables -I INPUT -i $IFACE -p tcp --dport 22 -j ACCEPT

Cette règle, optionnelle, permet de se connecter aussi sur le routeur par ssh.

        # GnomeMeeting
        pre-up ip6tables -I FORWARD -i $IFACE -p tcp --dport 1720 -j ACCEPT
        pre-up ip6tables -I FORWARD -i $IFACE -p tcp --dport 30000:30010 -j ACCEPT
        pre-up ip6tables -I FORWARD -i $IFACE -p udp --dport 5000:5016 -j ACCEPT

Pour permettre à gnomemeeting de fonctionner sur les machines du réseau local. Si c'est le routeur lui-même qui porte la caméra, il faut remplacer les FORWARD par des INPUT.

        # http
        pre-up ip6tables -I FORWARD -i $IFACE -p tcp --dport 80 -j ACCEPT

Pour accéder au serveurs http du réseau local.

        pre-up ip6tables -I INPUT -i $IFACE -p tcp --dport 80 -j ACCEPT

Règle optionnelle si le routeur héberge lui-même un serveur http. D'autres règles analogues peuvent être ajoutées selon les services dont vous avez besoin.

        up ip -6 route add default via ::192.88.99.1 dev $IFACE
        down ip -6 route flush dev $IFACE

Configuration de l'interface qui va fournir l'IPv6 au réseau local

À modifier si ce n'est pas eth0 chez vous.

auto eth0
iface eth0 inet6 static
        address 2002:52e7:94bd::1
        netmask 64
        pre-up modprobe ipv6

Configuration (optionnelle) de cette même interface en IPv4

iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0

Configuration du DNS sur le routeur

Suppose l'installation préalable de dnsmasq et resolvconf (voir plus bas).

auto lo
iface lo inet loopback
        dns-nameservers 127.0.0.1

/etc/radvd.conf du routeur

Toujours sous l'hypothèse que eth0 est l'interface qui fournit au réseau local l'IPv6. Attention, radvd est très pointilleux sur la syntaxe du fichier /etc/radvd.conf.

interface eth0
{
   AdvSendAdvert on;
   prefix 2002:52e7:94bd::/64
   {
   };
};

/etc/dnsmasq du routeur

Configuration (optionnelle) d'un serveur dhcp.

dhcp-range=192.168.0.50,192.168.0.150,12h

Par exemple. Le réseau choisi doit être cohérent avec celui de eth0 dans /etc/network/interfaces.

Pour ajouter d'autres serveurs de noms :

server=/domaine.tld/adresse.ip.du.serveur

En sachant que la syntaxe

server=//adresse.ip.du.serveur

récupère les noms sans qualification de domaine.

Il peut être utile dans ce dernier cas de commenter le paramètre :

#domain-needed

(attention, bien savoir ce qu'on fait.)

Installation de resolvconf fortement recommandée pour que le routeur soit son propre DNS (voir la commande dns-nameservers dans le /etc/network/interfaces plus haut).

/etc/hosts du routeur

Si dnsmasq est activé, les associations (leases) dhcp seront automatiquement utilisées par dnsmasq. Cependant, il faut avoir un client dhcp qui déclare le nom de la machine. C'est le cas de pump. Il est aussi possible d'utiliser dhcp3-client en paramétrant le fichier /etc/dhcp3/dhclient.conf avec un

send host-name "nomdelamachine";

Pour ce qui est du /etc/hosts du routeur, il sera utilisé par dnsmasq pour fournir les adresses IPv6 qui y sont. Voici le mien :

127.0.0.1       localhost.localdomain   localhost
192.168.0.1     palestine
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
::1                                     localhost
# machines réseau fdl
2002:52e7:94bd:fd12:230:65ff:fe05:3215  clochette
2002:52e7:94bd:0:a00:20ff:fec6:59b9     dormette
2002:52e7:94bd:0:2e0:4cff:fed2:d8c1     melior
2002:52e7:94bd:fd11:2e0:4cff:fedb:e059  melusine
2002:52e7:94bd:fd11:210:5aff:fe45:c504  morgane
2002:52e7:94bd:0:a00:20ff:fed1:5e13     ondine
2002:52e7:94bd::1                       palestine
2002:52e7:94bd:0:a00:20ff:fe89:571a     poussiere
2002:52e7:94bd:face::fd11               presine
2002:52e7:94bd:0:a00:20ff:fe89:5332     solaria
2002:52e7:94bd:0:a00:20ff:fe86:2d74     titania
# machines réseau arno
2002:5243:6d2e::1                       pustule

Il n'y a donc bien qu'un seul fichier à maintenir pour que toutes les autres machines clientes se connaissent mutuellement.

L'adresse IPv6 attribuée automatiquement à chaque machine en fonction de son adresse MAC et du préfix choisi pour radvd peut se lire par un appel à ifconfig sur les machines clientes.

/etc/network/interfaces des clients

En général il n'y a rien à faire. Il suffit de configurer leurs interfaces en dhcp (IPv4) et aussitôt, l'autoconfiguration IPv6 fera son effet. Si on ne veut configuer ni dhcp ni IPv4, il y a moyen de le faire à la main comme plus haut pour les adresses IPv6 fixes. IPv6 marchera aussi avec la seule configuration d'une adresse IPv4 fixe.

auto eth0
iface eth0 inet dhcp

Conseils de fin

« man » est votre ami.

Redémarrer les différents services

# invoke-rc.d networking restart
# invoke-rc.d ipmasq restart
# invoke-rc.d radvd restart
# invoke-rc.d dnsmasq restart

Remerciements

Simplifications possibles ?

Selon des sources postérieures à la rédaction originale :

Autres documentations

doc/ipv6.txt · Dernière modification: 2015/10/01 00:07 par fdl