De la config en vrac par rapport à TTN¶
By APLU
VPN¶
Tunnel VPN de type TUN via openvpn¶
Le but de ce VPN est de faire passer IPv6 et IPv4 au sein du même tunnel pour être visible sur internet avec une l'ip de son serveur.
[Serveur] Prerequis¶
- sudo
- openvpn
[Serveur] Configuration NAT/ip forward¶
dans sysctl.conf :
net/ipv4/ip_forward=1 net/ipv6/conf/default/forwarding=1 net/ipv6/conf/all/forwarding=1 net/ipv6/conf/all/proxy_ndp=1 net.ipv6/conf/eth0/proxy_ndp=1
iptables :
iptables -t nat -A POSTROUTING -s 10.42.42.0/24 -o eth0 -j MASQUERADE
Si on a ufw il faut modifier /etc/ufw/before.rules, il y a de la doc sur internet.
[Serveur] Configurer sudo¶
On édite le fichier sudoers avec les info suivantes, ceci sera utilisé dans la suite pour permettre la déclaration de l'IPv6 tunnel côté TTN pour que l'IPv6 puisse être routé.
Cmnd_Alias IPVPN = /bin/ip neigh add *, /bin/ip neigh del *, /bin/ip neigh replace * nobody ALL = NOPASSWD: IPVPN
TODO: Voir comment rendre ça un peu plus sécurisé
[Serveur] Configuration openvpn - creation certificat¶
# cd /etc/openvpn # mkdir easy-rsa # cp -R /usr/share/easy-rsa/* easy-rsa/
Editer : /etc/openvpn/easy-rsa/vars pour renseigner les infos relatives à la clef. On peut aussi changer la taille des clefs.
# cd easy-rsa/ # touch keys/index.txt # echo 01 > keys/serial # . ./vars # set environment variables # ./clean-all # ./build-ca # ./build-key-server server # ./build-dh # prends du temps (+15h si on choisi 8192, ~10 minutes pour 2048)
[Serveur] Configuration openvpn - openvpn¶
Créer un fichier de configuration /etc/openvpn/myvpn.conf (on peut changer le nom)
dev tun proto udp port 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt # generated keys cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key # keep secret dh /etc/openvpn/easy-rsa/keys/dh2048.pem user nobody group nogroup server 10.42.42.0 255.255.255.0 tun-ipv6 push tun-ipv6 push "route-ipv6 2000::/3" learn-address /etc/openvpn/learn-address # execution de script script-security 2 #mssfix #fragment 1300 persist-key persist-tun keepalive 10 100 status /var/log/openvpn-status.log log-append /var/log/openvpn verb 3 client-to-client push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 10.42.42.1" push "dhcp-option DNS 91.224.149.254" comp-lzo adaptive server-ipv6 2a01:6600:80XX:YY01::1/64
On adaptera XX:YY en fonction de l'IPv6 fourni par les administrateurs de TTN.
[serveur] Configuration openvpn - scripts¶
Créer le script /etc/openvpn/learn-address avec le contenu suivant (penser à le rendre executable) :
Ce script ajoute l'IPv6 du peer au proxy ndp, il fait l'équivalent du soft ndppd qui n'existe plus ou n'est pas maintenu (juin 2015)
#!/bin/bash action="$1" addr="$2" grep -qE "^2a01:.*" <<< "$addr" if [ $? -eq 0 ] then case "$action" in add ) sudo /bin/ip neigh add proxy "$addr" dev eth0 ;; update ) sudo /bin/ip neigh replace proxy "$addr" dev eth0 ;; delete) sudo /bin/ip neigh del proxy "$addr" dev eth0 ;; esac fi
TODO: S'assurer que $addr contient bien une IPv6.. le script est lancée en nobody les checks ne risque rien, le sudo moins.
[serveur/client] generer le certificat pour chaque client¶
Si ce n'est pas déjà fait :
# cd /etc/openvpn/easy-rsa/ # . ./vars # set environment variables
Puis:
# ./build-key clientname
clientname correspond au nom du client, penser à signer le certificat une fois la génération fini.
Copier les fichiers .crt et .key ainsi que ca.crt sur le client.
Rappel : Les .key sont les clefs privée !
[Client] Prerequis¶
- openvpn
- resolvconf
[Client] Configuration openvpn¶
Créer le fichier de configuration /etc/openvpn/myvpn.conf avec le contenu suivant
client dev tun port 1194 proto udp nobind ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/monclient.crt key /etc/openvpn/keys/monclient.key script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf comp-lzo persist-key persist-tun remote 1.2.3.4 1194
Pensez à mettre votre IP à la place 1.2.3.4
Le script /etc/openvpn/update-resolv-conf est fourni par le paquet openvpn cependant pour éviter le DNSLeak j'ai effectué la modification suivante
# diff update-resolv-conf.original update-resolv-conf 52a53 > /sbin/resolvconf -d original.resolvconf
[serveur/client] activer¶
Avec systemd faire sur le serveur et sur le client
- systemctl daemon-reload
- service openvpn restart
Pour tester¶
On peut faire un mtr/traceroute pour verifier que le chemin soit correct.
Penser à verifier l'IPv6 et l'IPv4 puisque la config offre les deux.
Dans la config j'utilise un resolver DNS local présent sur le serveur, ce dernier doit donc accepter de répondre aux requêtes du VPN, le deuxième resolver et celui de TTN.
Sur le web on peut verifier que l'IPv4 et IPv6 fonctionnement bien en allant sur : http://test-ipv6.com
On peut aussi verifier qu'on ne leak pas d'IP avec : http://ipleak.net
Debugger¶
ping/mtr/traceroute
A savoir, si un script échoue (par exemple learn-address) la session VPN est refusé.
Si l'IPv4 fonctionne mais pas l'IPv6 verifier le proxy ndp.