samedi 8 octobre 2011

Tutorial: un VPN ipv6 pour la maison, sous Gentoo

Voici comment se fournir un bloc IPv6 statique a domicile, a partir d'un serveur ayant une addresse v4 stable, avec 6to4 et OpenVPN.


Mes machines, toutes deux sous Gentoo:
* Xolus: serveur housé avec une IP statique sur eth0
* Glokrik: serveur de la maison, IP NAT sur eth0


6to4


La configuration de 6to4 est facile avec Gentoo. J'ajoute dans /etc/conf.d/net sur xolus:



link_6to4="eth0"
config_6to4="ip6to4"
depend_6to4() { need net.eth0 }


Et je crée le service correspondant:



ln -s net.lo /etc/init.d/net.6to4
rc-update add net.6to4 default
rc


Et on teste:



ping6 www.kame.net


OpenVPN


On emerge openvpn sur les deux machines, et on commence par créer les clefs cryptographiques nécessaires. Pour deux machines les clefs statiques sont plus simples, mais dans l'hypothèse d'un ajout ultérieur de machines je vais utiliser une PKI. Il y a des scripts d'aide dans /usr/share/openssl/easy-rsa/. On copie ce répertoire vers un rep de travail.


On y édite le fichier vars et on ajuste les champs des dernières lignes. Puis on source ce fichier et on génère la CA et les clefs des serveurs:



. ./vars
./clean-all
./build-ca
./build-key-server xolus
./build-key glokrik
./build-dh


On viole techniquement un principe des PKI en générant les clefs client sur le serveur, mais bon ;)


Sur xolus, je copie ca.crt, dh1024.pem, xolus.crt et xolus.key dans /etc/openvpn/. Je transfère ensuite ca.crt, glokrik.key et glokrik.pem au meme endroit sur la machine glokrik.


Sur xolus, je crée la définition suivante dans /etc/openvpn/openvpn.conf:



port 1194
proto udp
dev openvpn
dev-type tun
tun-ipv6
tls-server
ca ca.crt
cert xolus.crt
key xolus.key
dh dh1024.pem


Sur glokrik, dans /etc/openvpn/xolus.conf:



port 1194
proto udp
remote 213.162.22.228
dev xolus
dev-type tun
tun-ipv6
tls-client
ca ca.crt
cert glokrik.crt
key glokrik.key


On ajoute les services openvpn au démarrage. Les machines disposent maintenant chacune d'une interface réseau tunnel supplémentaire, qu'il faut maintenant configurer


On vérifie sur les deux machines, avec ip link show, que les deux interfaces sont actives (flag LOWER_UP).


Tunnel IPv6


On commence par calculer le bloc 6to4 à disposition. L'IP fixe de ma machine est 213.162.22.228, mon bloc 6to4 est donc 2002:d5a2:16e4::/48. (Prefixe 2002, suivi de l'addresse v4 convertie en hexadécimal). Il y a ensuite 16 bits disponibles pour le subnet, je vais utiliser 00ff pour le VPN, et 0001 pour le subnet de ma maison. Dans le subnet vpn, l'addresse ::ff sera attribuée au serveur, et l'addresse ::xxxx au client responsable du subnet xxxx.


Sur xolus, dans /etc/conf.d/net:



config_openvpn=( "2002:d5a2:16e4:ff::ff/64" )
routes_openvpn=( "2002:d5a2:16e4:1::/64 via 2002:d5a2:16e4:ff::1" )
depend_openvpn() {
need openvpn
}


Sur glokrik:



config_xolus=( "2002:d5a2:16e4:ff::1/64" )
routes_xolus=( "2000::/3 via 2002:d5a2:16e4:ff::ff" )
depend_xolus() {
need openvpn.xolus
}


On ajoute ces deux services au démarrage, on les lance, et on teste le fonctionnement du tunnel:



glokrik # ping6 2002:d5a2:16e4:ff::ff
PING gw.vpn.xolus.net(2002:d5a2:16e4:ff::ff) 56 data bytes
64 bytes from 2002:d5a2:16e4:ff::ff: icmpseq=1 ttl=64 time=8.54 ms
64 bytes from 2002:d5a2:16e4:ff::ff: icmp
seq=2 ttl=64 time=8.11 ms


On active ensuite le forwarding sur la passerelle:



echo "net.ipv6.conf.all.forwarding = 1" >>/etc/sysctl.conf
sysctl -p


Glokrik peut maintenant pinguer des sites ipv6 publics:



glokrik # ping6 www.kame.net
PING www.kame.net(2001:200:dff:fff1:216:3eff:feb1:44d7) 56 data bytes
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=1 ttl=58 time=340 ms


RADVD


Il faut maintenant fournir la connectivité ipv6 aux hôtes de la maison. Pour celà il suffit d'installer radvd sur glokrik, et d'y ajouter la conf qui va bien dans /etc/radvd.conf_



interface eth0 {
AdvSendAdvert on;
prefix 2002:d5a2:16e4:1::1/64 {
AdvOnLink on;
AdvAutonomous on;
};
};


On édite ensuite le script de démarrage /etc/init.d/radvd pour changer la dépendance:



depend() {
need net.xolus
}


Ce qui empêche radvd de démarrer tant que le lien vpn n'est pas up.


Notez qu'il n'y a pas besoin d'activer le forwarding ipv6 sur glokrik, le script de démarrage de radvd s'en charge.


radvd démarré, ma machine de bureau reçoit presque immédiatement une addrese v6, et je peux pinguer des sites publics.


6to4reverse


Une fois la connexion 6to4 active, il suffit d'aller sur https://6to4.nro.net et d'enregistrer ses serveurs de noms pour disposer du reverse.

Aucun commentaire: