Je sais que j'avais dit hier que dorénavant mes articles seraient en anglais, mais ce que je vais expliquer ici concerne un cas bien particulier qui va à priori intéresser un publique francophone.
Il y a quelques semaines, j'ai eu un problème avec ma ligne Free ADSL. En effet, un certain nombre de serveurs étaient injoignables :
root@zor0:~# traceroute amazon.fr
traceroute to amazon.fr (176.32.108.178), 30 hops max, 60 byte packets
1 192.168.0.254 (192.168.0.254) 0.891 ms 2.105 ms 2.451 ms
2 78.225.211.254 (78.225.211.254) 21.782 ms 23.053 ms 23.361 ms
3 lille-6k-1-a5.routers.proxad.net (213.228.12.190) 25.862 ms 26.233 ms 28.344 ms
4 boisgrenier-6k-1-po2.intf.routers.proxad.net (212.27.51.46) 28.731 ms 29.571 ms 30.050 ms
5 gravelines-4k-1-v804.intf.routers.proxad.net (212.27.56.190) 30.507 ms * 32.239 ms
6 londres-6k-1-po102.intf.routers.proxad.net (212.27.58.118) 40.686 ms 28.084 ms 28.326 ms
7 * * *
8 * * *
9 * * *
[...]
root@zor0:~# traceroute wikipedia.org
traceroute to wikipedia.org (91.198.174.192), 30 hops max, 60 byte packets
1 192.168.0.254 (192.168.0.254) 0.753 ms 2.198 ms 2.574 ms
2 78.225.211.254 (78.225.211.254) 23.779 ms 23.854 ms 24.130 ms
3 lille-6k-1-a5.routers.proxad.net (213.228.12.190) 26.074 ms 26.441 ms 28.323 ms
4 boisgrenier-6k-1-po2.intf.routers.proxad.net (212.27.51.46) 27.814 ms 29.161 ms 29.569 ms
5 gravelines-4k-1-v804.intf.routers.proxad.net (212.27.56.190) 32.225 ms * *
6 londres-6k-1-po102.intf.routers.proxad.net (212.27.58.118) 40.156 ms 28.389 ms 28.779 ms
7 * * *
8 * * *
9 * * *
[...]
root@zor0:~# traceroute fr-fr.facebook.com
traceroute to fr-fr.facebook.com (31.13.91.65), 30 hops max, 60 byte packets
1 192.168.0.254 (192.168.0.254) 0.754 ms 1.790 ms 2.018 ms
2 78.225.211.254 (78.225.211.254) 21.361 ms 23.164 ms 23.237 ms
3 lille-6k-1-a5.routers.proxad.net (213.228.12.190) 25.661 ms 26.002 ms 27.445 ms
4 boisgrenier-6k-1-po2.intf.routers.proxad.net (212.27.51.46) 29.782 ms 29.220 ms 31.100 ms
5 gravelines-4k-1-v804.intf.routers.proxad.net (212.27.56.190) 32.023 ms 33.690 ms *
6 londres-6k-1-po102.intf.routers.proxad.net (212.27.58.118) 39.973 ms 29.313 ms 28.057 ms
7 * * *
8 * * *
9 * * *
[...]
Après avoir échangé avec le support Free, ils m'ont indiqué que le problème se situait bien de leur côté et touchait certains clients dans les départements 53 et 59.
Depuis la situation est rentrée dans l'ordre, mais le palliatif préconisé a été l'activation de l'IPv6 sur ma ligne.
Ci-après, je vais donc vous expliquer rapidement comment configurer votre serveur debian afin de tirer partie de l'IPv6. En prime, nous verrons comment configurer des VMs hébergées sur ce serveur afin qu'elles aient également accès à l'Internet en IPv6.
La première chose à faire est de récupérer votre adresse dans l'interface de Free :
Dans mon cas, il s'agit de 2a01:e34:ee1d:3880::/64
Afin d'accéder à l'Internet en IPv6, il suffit juste d'activer l'IPv6 sur votre serveur, c'est le cas par défaut sur debian Wheezy. Ensuite, d'après le bloc que l'on a récupéré sur notre interface Free, on en déduit l'adresse de notre routeur : 2a01:e34:ee1d:3880::1
. Il s'agit en fait de la première adresse disponible.
On ajoute donc la route :
ip -f inet6 route add 2a01:e34:ee1d:3880::1 dev eth0
ip -f inet6 route add default via 2a01:e34:ee1d:3880::1
Et c'est tout ! On a désormais à un réseau utilisé par... personne xD
Petite démonstration :
root@zor0:~# ping6 google.com
PING google.com(par03s12-in-x08.1e100.net) 56 data bytes
64 bytes from par03s12-in-x08.1e100.net: icmp_seq=1 ttl=58 time=52.0 ms
64 bytes from par03s12-in-x08.1e100.net: icmp_seq=2 ttl=58 time=51.5 ms
64 bytes from par03s12-in-x08.1e100.net: icmp_seq=3 ttl=58 time=53.4 ms
64 bytes from par03s12-in-x08.1e100.net: icmp_seq=4 ttl=58 time=52.7 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 51.560/52.441/53.425/0.700 ms
root@zor0:~# wget google.com -O /dev/null
--2014-11-28 13:43:11-- http://google.com/
Resolving google.com (google.com)... 2a00:1450:4007:805::1008, 74.125.195.138, 74.125.195.139, ...
Connecting to google.com (google.com)|2a00:1450:4007:805::1008|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.google.fr/?gfe_rd=cr&ei=3214VLLzGMXI8gfuioAo [following]
--2014-11-28 13:43:11-- http://www.google.fr/?gfe_rd=cr&ei=3214VLLzGMXI8gfuioAo
Resolving www.google.fr (www.google.fr)... 2a00:1450:400c:c05::5e, 173.194.67.94
Connecting to www.google.fr (www.google.fr)|2a00:1450:400c:c05::5e|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `/dev/null'
[ <=> ] 17,619 --.-K/s in 0.08s
2014-11-28 13:43:11 (221 KB/s) - `/dev/null' saved [17619]
Mais je vous avais promis de vous parler de mes VMs elles aussi reliées à ce beau réseau J'ai ensuite découpé arbitrairement ce bloc afin de pouvoir attribuer plusieurs adresses à mes différentes VMs.
Afin de permettre à cette configuration de fonctionner, il faut activer le proxy NDP ainsi que l'IP forward pour IPv6.
On ajoute les deux lignes suivantes à notre fichier /etc/sysctl.conf
:
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
Puis un petit coup de sysctl -p
.
On va décider de configurer deux machines en IPv6. Pour ce faire, on va avoir besoin de 3 IPs :
- Une pour l'interface bridge de ma machine hôte
- Une pour la première VM
- Une pour la seconde VM
Les IPs choisies sont donc les suivantes :
- 2a01:e34:ee1d:3880::2/96 pour l'hôte
- 2a01:e34:ee1d:3880::3/96 pour la première VM
- 2a01:e34:ee1d:3880::4/96 pour la seconde VM
Le masque /96 a été choisi arbitrairement.
Ensuite on passe à la configuration réseau. Sur la machine hôte, on aura donc dans le fichier /etc/network/interfaces
les lignes suivantes :
iface xenbr0 inet6 static
address 2a01:e34:ee1d:3880::2
netmask 96
post-up /sbin/ip -f inet6 route add 2a01:e34:ee1d:3880::1 dev eth0
post-up /sbin/ip -f inet6 route add default via 2a01:e34:ee1d:3880::1
post-up /sbin/ip neigh add proxy 2a01:e34:ee1d:3880::4 dev eth0
post-up /sbin/ip neigh add proxy 2a01:e34:ee1d:3880::3 dev eth0
pre-down /sbin/ip -f inet6 route del default via 2a01:e34:ee1d:3880::1
pre-down /sbin/ip -f inet6 route del 2a01:e34:ee1d:3880::1 dev eth0
pre-down /sbin/ip neigh del proxy 2a01:e34:ee1d:3880::3 dev eth0
pre-down /sbin/ip neigh del proxy 2a01:e34:ee1d:3880::4 dev eth0
Dans mon cas, l'interface xenbr0
est un bridge sur lequel sont reliées toutes mes VMs.
On remarque que j'ajoute les règles de proxy manuellement via la commande ip neigh add proxy xxx:xxxx:xxxx:xxxx::x dev eth0
.
Et enfin, on sur les VMs, on aura dans le fichier /etc/network/interfaces
les lignes suivantes :
iface eth0 inet6 static
address 2a01:e34:ee1d:3880::3
netmask 96
post-up /sbin/ip -f inet6 route add 2a01:e34:ee1d:3880::2 dev eth0
post-up /sbin/ip -f inet6 route add default via 2a01:e34:ee1d:3880::2
pre-down /sbin/ip -f inet6 route del default via 2a01:e34:ee1d:3880::2
pre-down /sbin/ip -f inet6 route del 2a01:e34:ee1d:3880::2 dev eth0
Un petit /etc/init.d/networking restart
et c'est parti :
root@oxygen:~# traceroute6 google.com
traceroute to google.com (2a00:1450:4007:80c::100e), 30 hops max, 80 byte packets
1 2a01:e34:ee1d:3880::2 (2a01:e34:ee1d:3880::2) 1.601 ms 1.591 ms 1.575 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * 2001:4860::1:0:9f2 (2001:4860::1:0:9f2) 634.949 ms 634.952 ms
7 2001:4860:0:1::319 (2001:4860:0:1::319) 634.932 ms 52.363 ms 53.949 ms
8 par03s15-in-x0e.1e100.net (2a00:1450:4007:80c::100e) 55.137 ms 51.859 ms 53.676 ms
root@oxygen:~# ping6 google.com
PING google.com(par03s15-in-x0e.1e100.net) 56 data bytes
64 bytes from par03s15-in-x0e.1e100.net: icmp_seq=1 ttl=57 time=53.2 ms
64 bytes from par03s15-in-x0e.1e100.net: icmp_seq=2 ttl=57 time=52.0 ms
64 bytes from par03s15-in-x0e.1e100.net: icmp_seq=3 ttl=57 time=53.0 ms
64 bytes from par03s15-in-x0e.1e100.net: icmp_seq=4 ttl=57 time=51.5 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 51.568/52.473/53.221/0.749 ms
root@oxygen:~# wget google.com -O /dev/null
--2014-11-28 13:59:35-- http://google.com/
Resolving google.com (google.com)... 2a00:1450:4007:80c::100e, 74.125.195.102, 74.125.195.113, ...
Connecting to google.com (google.com)|2a00:1450:4007:80c::100e|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.google.fr/?gfe_rd=cr&ei=t3F4VL-2DLCx8welo4KIDQ [following]
--2014-11-28 13:59:35-- http://www.google.fr/?gfe_rd=cr&ei=t3F4VL-2DLCx8welo4KIDQ
Resolving www.google.fr (www.google.fr)... 2a00:1450:400c:c04::5e, 173.194.78.94
Connecting to www.google.fr (www.google.fr)|2a00:1450:400c:c04::5e|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `/dev/null'
[ <=> ] 17,597 --.-K/s in 0.08s
2014-11-28 13:59:35 (222 KB/s) - `/dev/null' saved [17597]
Pour l'instant c'est un peu manuel, mais il existe des outils afin d'automatiser cela si besoin. Dans mon cas c'est déjà une bonne base.