IPv6, on croirait que ça a été conçu spécialement pour OpenBSD :)
Sa seule restriction jusqu'à la version 2.9 résidait dans l'incapacité à formuler de vrai règles IPv62 (il était juste possible d'autoriser complètement les flux IPv6 entre l'entrée et la sortie du tunnel : OpenBSD gèrait parfaitement IPv6, IPFilter également, mais les hooks nécessaires au support, sous OpenBSD, des fonctions IPv6 d'IPF n'ont pas été développés.
Sous les conseils d'un ami enthousiasmé par les progrès de packet filter, je me suis laissée convaincre par la première solution :)
Par défaut, OpenBSD 3.* a l'ensemble des options nécessaires activées, ie inet6 et GIF (pour le tunnel). Vous pouvez donc sauter cette sous-section si votre noyau est d'origine.
Options à activer (voir 4.2.1 pour les détails de la compil) :
Options du kernel: option INET # IP + ICMP + TCP + UDP option INET6 # IPv6 (needs INET) pseudo-device gif 4 # IPv[46] over IPv[46] tunnel (RFC1933)
D'abord activer l'IPv6 forwarding (pas d'autoconf s'il s'agit d'un routeur) :
#/etc/sysctl.conf net.inet6.ip6.forwarding=1 # 1=Permit forwarding (routing) of packets net.inet6.ip6.accept_rtadv=0 # 1=Permit IPv6 autoconf (forwarding must be 0)
Allez savoir pourquoi, la configuration du tunnel IPv6 demande à être ajustée presque à chaque nouvelle version. En voici 2 qui ont fonctionné chez moi, respectivement en 3.1 et en 3.2 :
#!/bin/sh # Tunnel IPv6-fr #IPv6: 3ffe:4063:100f:001e::2/64 #IPv6 /48: 3ffe:4063:102e::/48 myipv6=3ffe:4063:100f:001e::2 v6gate=3ffe:4063:100f:001e::1 myip=80.65.226.83 gate=213.99.4.3 ifconfig gif0 giftunnel $myip $gate ifconfig gif0 inet6 $myipv6 $v6gate prefixlen 128 route add -inet6 default $myipv6 # route6d
#!/bin/sh # Tunnel IPv6-fr #IPv6: 3ffe:4063:100f:001e::2/64 #IPv6 /48: 3ffe:4063:102e::/48 myipv6=3ffe:4063:100f:001e::2 v6gate=3ffe:4063:100f:001e::1 myip=80.65.226.83 gate=213.99.4.3 ifconfig gif0 tunnel $myip $gate ifconfig gif0 inet6 $myipv6 $v6gate prefixlen 128 route add -inet6 $v6gate -prefixlen 64 $myipv6 route add -inet6 default $v6gate
Résultat :
% ./mon_tunnel.sh
[snip]
% ifconfig -a
gif0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
physical address inet 80.65.226.83 --> 213.99.4.3
inet6 fe80::240:63ff:fec0:3a70%gif0 -> :: prefixlen 64 scopeid 0x12
inet6 3ffe:4063:100f:1e::2 -> 3ffe:4063:100f:1e::1 prefixlen 128
[snip]
Et c'est tout !:)
Pour le test, désactiver les règles de filtrage et lancer un ping6 :
[pharsale 21:07:38 664 ~]# pfctl -F rules [pharsale 21:07:38 664 ~]# ping6 -c2 www.kame.net PING6(56=40+8+8 bytes) 3ffe:4063:100f:1e::2 --> 3ffe:501:4819:2010:210:f3ff:fe03:4d0 16 bytes from 3ffe:501:4819:2010:210:f3ff:fe03:4d0, icmp_seq=0 hlim=53 time=480.991 ms 16 bytes from 3ffe:501:4819:2010:210:f3ff:fe03:4d0, icmp_seq=1 hlim=55 time=472.678 ms --- apple.kame.net ping6 statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/std-dev = 472.678/476.834/480.991/4.157 ms
Allez soyons fous, un petit traceroute =)
# traceroute6 www.kame.net traceroute6: Warning: apple.kame.net has multiple addresses; using 2001:200:0:4819:210:f3ff:fe03:4d0 traceroute6 to apple.kame.net (2001:200:0:4819:210:f3ff:fe03:4d0) from 3ffe:4063:100f:1e::2, 64 hops max, 12 byte packets 1 3ffe:4063:100f:1e::1 100.763 ms 70.023 ms 67.689 ms 2 ndsoftware-gw.ffm4-v6.mcbone.net 216.622 ms 209.257 ms 207.124 ms 3 tunnel-ffm4-v6.dus2-v6.mcbone.net 235.838 ms 210.695 ms 203.69 ms 4 2001:450:1:2001::a6 211.162 ms 225.638 ms 218.08 ms 5 2001:450:1:1::2 465.192 ms 460.743 ms 479.034 ms 6 pc6.otemachi.wide.ad.jp 471.363 ms 474.154 ms 481.164 ms 7 hitachi1.otemachi.wide.ad.jp 489.953 ms 492.871 ms 483.304 ms 8 pc3.yagami.wide.ad.jp 483.649 ms 486.673 ms 552.548 ms 9 gr2000.k2c.wide.ad.jp 482.418 ms 496.359 ms 493.505 ms 10 2001:200:0:4819:210:f3ff:fe03:4d0 518.095 ms 494.129 ms 489.477 ms
C'est bon on peut vite remettre les règles :)
Les règles habituelles posent évidemment problème pour le bon fonctionnement du tunnel, et si vos filtres sont un tant soit peu sélectifs il faudra ajouter au moins 2 règles, en entrée et en sortie, entre les deux extrémités du tunnel, via le proto 41 ipv6, et laisser passer quelques ICMP :
# Tunnel pass in log quick on tun0 proto ipv6 from $v6gate to $mygate pass out log quick on tun0 proto ipv6 from $mygate to $v6gate # traffic IPv6 pass out log quick on gif0 inet6 proto tcp all modulate state pass out log quick on gif0 inet6 proto udp all keep state # echo request ICMP-v6 (RFC 2463) : pass out log quick on $Tun inet6 proto ipv6-icmp all ipv6-icmp-type 128 keep state
ça devrait suffire pour s'amuser à pinger/surfer dans tous les
sens :)
Et ah oui, sachez que w3m, dispo dans les ports, gère parfaitement les sites IPv6.
Pour activer l'ensemble au démarrage, à la gruik on peut coller ça tout à la fin de netstart après le lancement de la connection ADSL :
/usr/local/bin/mon_tunnel.sh
Autre solution plus propre, créer un fichier /etc/hostname.gif0 (merci à hugo sur fcob!) :
# /etc/hostname.gif0 tunnel 80.65.226.81 213.91.4.3 inet6 3ffe:4063:100f:001e::2 128 3ffe:4063:100f:001e::1 ! route add -inet6 default 3ffe:4063:100f:001e::1
L'interface sera automatiquement montée au démarrage, plus besoin de script.
C'est extrêmement simple, il suffit d'installer un apache version 2, capable de gérer IPv6, et lui demander de ``binder'' notre IPv6. De la sorte, même si un serveur web IPv4 classique est déja installé sur le port 80, celà n'affectera pas son fonctionnement. Toutes les requêtes adressées à http://monIPv6 seront acheminées au bon endroit.
./configure --prefix=PREFIX
make
make install
Port 80 BindAddress 3ffe:4063:100f:1e::2
PREFIX/bin/apachectl start
pass in log first or-block quick on tun0 proto tcp from any to 192.168.10.1 \ port = www flags S/SA keep state keep frags
listen-on-v6 port 53 { any; };