Comme vous le savez, je suis attaché aux questions de neutralité du net et du réseau ainsi qu'à l'internet libre. Mais pour de mauvaises raisons (téléphone, TV par ADSL, flemmingite aïgue), je suis abonné chez un opérateur assez important qui ne respecte pas ces concepts.

J'ai donc trouvé une solution intermédiaire et un petit peu militante quand-même :p. J'ai souscrit à un accès VPN chez FDN dont le prix est plus que modeste. A partir de là, je vais vous expliquer comment utiliser "la machine à laver les paquets IP" de FDN pour l'ensemble de votre réseau domestique.

Voici un petit listing des outils nécessaires :

  • Un abonnement VPN FDN où l'on vous attribue une adresse IPv4 fixe publique et un préfixe IPv6 global en /48
  • Un Raspberry PI, ou un équipement équivalent (Soekris, Alix, ou une machine quelconque toujours connectée)
  • Raspbian Jessie (dans le cas d'un Rasberry ou toute autre distribution Linux)
  • Un accès Internet effectif depuis votre FAI historique
  • Un service DHCP (à activer sur votre Rasberry, pour ma part, il est activé sur mon commutateur Cisco)
  • OpenVPN pour la partie client VPN

L'idée est assez simple : créer un tunnel chiffré jusqu'au réseau FDN passant par l'infrastructure de mon FAI. Puis re-router tout le trafic de mon réseau domestique à destination d'Internet dans ce tunnel. Ainsi votre opérateur ne voit uniquement que le tunnel et n'est (en théorie) pas capable de voir le contenu qui y circule puisque le tunnel est chiffré.

 

Mise en place

Installation d'OpenVPN

$ sudo aptitude install openvpn

$ modprobe tun

 

Configuration d'OpenVPN

Concernant la création du fichier de configuration de votre client VPN, je vous invite à consulter ce lien. En effet, FDN fournit un fichier quasi-prêt à l'emploi. Votre fichier devra se trouver dans le répertoire : /etc/openvpn/ avec une extension en .conf.

Exemple : /etc/openvpn/ovpn.conf

Pour la première connexion, c'est plutôt pas mal d'avoir la verbosité du daemon OpenVPN sur la  sortie standard (l'écran) :

$ sudo openvpn -c /etc/openvpn/ovpn.conf &

Si tout se passe bien, pour les fois suivantes, passez par le gestionnaire de service :

$ sudo service openvpn start|stop|restart

 

Activation du routage et NAT

Votre Raspberry (votre nouvelle passerelle) va devoir router les paquets provenant de votre réseau local sur son interface physique eth vers FDN par le tunnel VPN et son interface virtuelle tun0. Par défaut, sous Linux, le routage n'est pas activé, on va donc y remédier :

echo 1 > /proc/sys/net/ipv4/ip_forward

Vous le savez sûrement votre réseau local fonctionne avec des adresses IP privées non routables sur Internet (RFC 1918). Votre Raspberry jouera donc le même rôle que votre MachinBox puisqu'il aura une adresse IP publique sur son interface tun0. C'est lui qui s'occupera de la translation entre vos adresses IP privées et son adresse IP publique afin que vous puissiez communiquer avec le reste du Net.

Ce mécanisme un peu ragoutant mais bien pratique se nomme le NAT (masquerading, ou surcharge NAT pour les aficionados Cisco). Il est indispensable et nous allons donc l'activer sur notre Pi avec l'aide de Netfilter/IPTABLES. Cela doit vous donner un truc dans ce goût-là :

$ sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o tun0 -j MASQUERADE

Après l'option -s, il est nécessaire de renseigner votre préfixe IPv4 privé.

J'ai également décidé de faire passer par le tunnel VPN l'ensemble de mon trafic IPv6. Mon opérateur m'a attribué un préfixe IPv6 /61 global (publique) qui permet à tous mes équipements de communiquer sur Internet sans l'aide du NAT. Cependant, je veux forcer l'ensemble de mon trafic IPv6 à passer par mon tunnel VPN tout en conservant le préfixe fournit par mon FAI.

J'ai donc réalisé une manip très crade, déconseillée par l'IETF et la plupart des spécialistes IPv6. Pas grave, je voulais aller vite, je suis resté pragmatique et j'ai choisi d'utiliser encore le NAT mais en IPv6 (si, si, ça marche je vous jure !). Par contre, le NAT 66 n'est pas supporté par toutes les versions de netfilter, donc faites attention (la version fournie avec Raspbian Jessie le supporte).

$ sudo vim /etc/sysctl.conf

net.ipv6.conf.all.forwarding=1

$ sudo ip6tables -t nat -A POSTROUTING -s 2001:0DB8::/61 -o tun0 -j MASQUERADE

 

Les dernières étapes

Il ne vous reste plus qu'à configurer proprement un service DHCPv4 et un service DHCPv6 (ou radvd) vous fournissant comme passerelle non plus les adresses de votre MachinBOX et les adresses IP des resolvers DNS de votre FAI mais bien les adresses IP de votre Pi et des serveurs DNS de chez FDN. Pensez enfin à rajouter quelques règles de filtrage iptables sur votre Pi afin de sécuriser le tout.

 

Conclusion

Lorsque l'on est militant et un peu feignant, voici une solution intermédiaire qui permet de contourner les atteintes à la neutralité du NET émisent par la majorité des grands FAI, tout en conservant quelques avantages (Mfin... des avantages pas si sûr) liés à ce type d'abonnement. Le petit bémol lorsque l'on utilise une connexion ADSL : une perte de performance obligatoire mais absolument pas rédhibitoire.

Peut-être passerai-je un jour sur un abonnement complet chez un FAI associatif. Ce n'est pas encore le cas, mais voilà finalement une alternative crédible pour les gens sensibles aux questions de neutralité du réseau Internet et qui sont encore chez l'un des 4 grands FAI français.

Et n'oubliez pas, Have lot of fun ;)