Installation d'un serveur OpenVPN dans un conteneur OpenVZ

Suite à l’actualité récente autour d’Hadopi et de la neutralité du net, et n’ayant par principe pas envie de savoir que quelqu’un surveille ma connexion, j’ai décidé de faire passer toute ma connexion internet dans un tunnel VPN ( qui me permettra aussi de contourner le firewall de mon école ).

Je me suis aidé d’un tutoriel très bien fait pour une machine classique, que je vais donc compléter pour le faire fonctionner dans notre container OpenVZ.

Il est inutile que je recopie l’ensemble de la procédure qui est similaire.

Là où ça commence à se compliquer, c’est au moment de configurer le NAT, je vous laisse donc arriver là puis revenir ici ensuite.

Voici le tutoriel qui m’a aidé : http://blog.nicolargo.com/2010/10/installation-dun-serveur-openvpn-sous-debianubuntu.html.

Activation de TUN

OpenVPN utilise la fonction TUN/TAP, qui n’est pas activée sur les conteneurs.

On supposera que notre conteneur est le 101.

Commencez par arrêter le conteneur, puis exécutez ceci sur l’hyperviseur :

1
2
vzctl set 101 --devices c:10:200:rw --save
vzctl set 101 --capability net_admin:on --save

Démarrez maintenant le conteneur, puis exécutez ceci toujours sur l’hyperviseur :

1
2
3
vzctl exec 101 mkdir -p /dev/net
vzctl exec 101 mknod /dev/net/tun c 10 200
vzctl exec 101 chmod 600 /dev/net/tun

Mise en place du routage

Classiquement, il faut utiliser la règle suivante afin d’avoir accès à l’internet depuis le VPN :

1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Or le module NAT n’est pas activé par défaut et le MASQUERADE n’est pas disponible dans un conteneur.

On va commencer par activer le module NAT sur les conteneurs en modifiant le fichier /etc/vz/vz.conf sur l’hyperviseur, il faut modifier la viable IPTABLES de cette façon :

/etc/vz/vz.conf
1
IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT ipt_LOG"

Il se peut que j’ai activé des modules superflus, mais j’ai pas mal galéré pour avoir un truc fonctionnel.

Une fois fait, il faut relancer votre conteneur.

Il faut ensuite installer la règle suivante :

1
iptables -A POSTROUTING -o venet0 -j SNAT --to-source a.b.c.d

Où a.b.c.d est l’ip de votre machine.

Si comme moi, vous avez un autre firewall sur l’hyperviseur qui refait une écriture des paquets, il faut mettre l’ip de la machine virtuelle :

1
iptables -A POSTROUTING -o venet0 -j SNAT --to-source 10.10.10.101

Mon firewall : http://www.fridu.org/hosting/79-virtualization-firewall.

Vous avez accès à tout l’internet extérieur et à votre réseau de machine virtuel.