Note avant propos

J'ai pour habitude d'écrire un article sur un setup une fois qu'il est propre. Ce n'est pas le cas de celui-ci (j'ai encore plusieurs choses que je voudrais résoudre). Mais Tristan m'a harcelé (:p) pour que je publie cet article donc le voilà.

Cela faisait un moment que je voulais avoir de l'IPv6, certains s'en foutent, d'autres non.

Comment

Via un tunnel ?

Oui je suis chez OVH, ils m'en fournissent, mais depuis que j'ai passé ma 'box' en mode bridge (puisque je route avec l'Alix) je n'ai jamais réussi à faire marcher l'IPv6 d'OVH dessus. J'ai pas trop longtemps essayé certes.

Ah donc tu as pris ton tunnel chez HE

Non (ni chez sixxs), principalement parce que je n'ai pas réussi à le faire marcher non plus, sans doute une raison conne, mais idem pas motivé à chercher d'avantage.

Chez qui alors ??

Chez FDN. Depuis un petit moment (même s'ils n'en font pas la pub) ils proposent un service de VPN. Le service n'est pas là juste pour de l'IPv6, ils fournissent aussi une IPv4. L'avantage comme c'est de l'openvpn c'est que la connexion est chiffrée jusqu'à eux, donc par exemple si OVH écoutait mon trafic, ils ne pourraient voir ce que je fais. (c'est pas un gros avantage vu la quantité d'IPv6 qui circule chez moi).

Comment on fait alors ?

Sur quelle machine ?

Étant donné que je veux pouvoir faire profiter du tunnel à l'ensemble de mes machines, tout va se faire sur mon routeur, ma p'tite Alice.

On monte le VPN

FDN donne un fichier de configuration pour le client d'OpenVPN. On commence donc par installer le client avec un habituel pkg_add openvpn. Ensuite on lit les commentaires dans le fichier de configuration, on configure ce dont on a besoin, c'est vraiment pas compliqué et si jamais vous avez un doute vous pouvez demander sur leur chan (#fdn, geeknode), vous devriez avoir une réponse rapidement.

Une fois qu'il est installé et que le fichier de conf est réglé aux petits oignons, on lance openvpn avec la commande

sudo openvpn /root/ovpn.fdn

Côté réseau

On calcule son bloc

La configuration n'est pas encore automatique pour l'IPv6, il va donc falloir le monter à la main. Il faut aussi calculer son bloc IPv6 (un /48) en prenant le dernier chiffre de son adresse IPv4 et en le passant en hexadécimal.

Par exemple, mon IPv4 est 80.67.179.34, 34 = 0x22, sachant qu'on rajoute avant 2001:910:13, mon range va être 2001:910:1322::/48.

On découpe son bloc

Comme on a plusieurs interfaces, à moins de bridger ça comme un goret, on va avoir plusieurs réseaux. J'ai par exemple 3 réseaux chez moi

  • un tout petit, l'interface OpenVPN (parait qu'on peut faire sans, mais en tout cas avec, ça marche)
  • mon lan
  • mon wifi

Je ne me suis pas pris la tête, 2001:910:1322::1 sera l'IPv6 de l'interface du VPN, 2001:910:1322:1::/64 pour mon lan et 2001:910:1322:2::/64 pour mon wifi.

On s'occupe de l'IPv6 sur le routeur

On ajoute l'adresse IPv6 sur l'interface puis on ajoute la route par défaut :

ifconfig tun0 inet6 2001:910:1322::1/128
route add -inet6 -iface default 2001:910:1322::1

A partir de ce moment là, on doit pouvoir ping6 -I tun0 www.kame.net.

Cool, mais moi je veux de l'IPv6 sur mon lan

Côté serveur

Comme il n'y a pas de dhcp6d dans base (ni de client t'façon) et que l'autoconf me va bien, je me suis contenté de l'autoconf. Bref, j'accède à mon résolveur (qui est dans mon lan) en IPv4, le lan full-IPv6, c'est pas pour tout de suite mais tant pis.

(j'explique que pour le lan, pour le wifi, c'est pareil faut juste changer les variables)

On ajoute une IPv6 sur l'interface interne

ifconfig vr2 inet6 2001:910:1322:1::1/64

Ensuite, on lance rtadvd qui va s'occuper de faire les router advertisements

rtadvd vr2 # vr2 aka $int_if

On laisse passer avec pf, le trafic icmp6

pass on $int_if proto icmp6

Côté client

IP dynamique

Il n'y a plus qu'à lancer rtsol $if sur les différents PCs dans le lan et l'ajouter dans le /etc/hostname.$if. Il faut des options sysctl particulières pour que ça marche :

 rtsold should be used on IPv6 hosts (non-router nodes) only.  The
 net.inet6.ip6.forwarding sysctl(8) should be set to zero and the
 net.inet6.ip6.accept_rtadv and net.inet6.icmp6.rediraccept sysctl(8)
 should be set to a non-zero value (see also the -F option below).
IP fixe

Pour les hôtes comme des serveurs, on préfèrera donner des adresses IPv6 fixes puis ajouter la route.

ifconfig jme0 inet6 2001:910:1322:1:dead:beef:cafe:1
route add -inet6  default 2001:910:1322:1::1

Ensuite on ajoute ces infos à /etc/hostname.$if et à /etc/mygate pour que ce soit effectif lors du prochain reboot.

Enfin, sur OpenBSD, la priorité par défaut est donné à l'IPv4 (pour ceux qui se demandent pourquoi)

 family      Specify which type of Internet protocol family to prefer, if
             a host is reachable using different address families.  By
             default IPv4 addresses are queried first, and then IPv6
             addresses.  The syntax is:

                   family family [family]

             A maximum of two families can be specified, where family can
             be any of:

                   inet4     IPv4 queries.
                   inet6     IPv6 queries.

On ajoute donc, soit directement dans /etc/resolv.conf pour les machines qui ne feront pas de requêtes dhcp, sinon dans /etc/resolv.conf.tail

family inet6 inet4

Les PTRs

Autant faire les choses proprement, et mettons des reverses à nos IPv6, d'autant plus que certains (comme gmail) classent en spam ceux qui n'en ont pas. Deux possibilités, soit on demande à fdn de les gérer pour nous, soit on demande la main dessus. J'ai donc mailé adminsys@ et en même pas une demi heure, j'avais la gestion de ces derniers.

On ajoute dans /var/named/etc/named.conf

zone "2.2.3.1.0.1.9.0.1.0.0.2.ip6.arpa" {
    type master;
    file "master/db.rev.vpn6";
    allow-transfer {adresse.ip.du.ns2;};
    allow-query{any;};
    notify yes;
};

puis dans le fichier /var/named/master/db.rev.vpn6 on ajoute la zone

L'état actuel

Mon tunnel IPv6 est un peu à l'arrache sur mon routeur, lorsque je vais rebooter (sans doute pour passer à OpenBSD 5.5) le tunnel ne se remontera plus, mais je préfère ça, qu'une conf à la con qui bloque le boot (coucou Francinet :D). J'aurais pu redémarrer mon alix pour voir, mais non.