Tutoriels

Utiliser une IP failover avec OpenVPN

Header IP failover avec OpenVPN

Lorsque vous utilisez OpenVPN, les clients utilisent par défaut l’adresse IP de la machine qui héberge le serveur. Il est possible d’utiliser une autre adresse IP comme une adresse IP failover avec OpenVPN très simplement en entrée, comme en sortie. Cela se révèle alors très intéressant si vous hébergez des services sur les clients connectés à votre VPN.

L’idée de rédiger ce petit tutoriel vient de ma propre expérience. J’ai en effet récupéré un PC portable que j’ai recyclé pour m’en servir comme seedbox et serveur Plex à la maison. Il était bien entendu impensable d’utiliser l’adresse IP de ma box pour ce genre d’utilisation et j’ai donc choisi de monter un VPN permanent entre ce PC et un de mes serveurs dédiés. Jusque là pas de problème, je l’utilise également en tant que passerelle pour les autres machines du LAN, tout fonctionne parfaitement.

IP failover avec OpenVPN - Diagramme
Diagramme de situation

L’inconvénient de cette solution est que mon PC portable atteint internet en utilisant l’adresse IP publique de mon serveur dédié qui lui même héberge déjà de nombreux services. Il me fallait donc trouver une solution simple pour que je puisse parler directement à mon PC portable depuis l’extérieur. C’est là qu’intervient l’utilisation d’une IP failover. On va donc faire en sorte que tout le trafic en provenance du PC portable dans le tunnel sorte sur internet avec l’adresse IP failover. Et inversement, tout le trafic arrivant sur cette IP devra être transmis au PC via le tunnel.

Pour cela, j’ai utilisé les iptables, et seulement 3 règles de NAT suffisent pour cette manipulation. Nous assumerons dans la suite du tutoriel que vous avez déjà un serveur OpenVPN fonctionnel.

Ajout d’une interface logique

Il sera tout d’abord nécessaire de créer une sous-interface logique sur le serveur qui portera l’adresse IP failover :

ifconfig eth0:1 <IP FAILOVER> netmask 255.255.255.255 broadcast <IP FAILOVER>

Vous pouvez également éditer le fichier /etc/network/interfaces :

auto eth0:1
iface eth0:1 inet static
address <IP FAILOVER>
netmask 255.255.255.255

Pensez ensuite à relancer l’interface :

ifdown eth0:1
ifup eth0:1

Utilisation des iptables

La première règle à mettre en place consiste à dire que tout le trafic entrant sur l’adresse IP failover devra être naté vers le PC portable via le tunnel. Pensez bien entendu à adapter les adresses IP selon votre configuration. Si le client est la seule machine utilisant votre VPN, il aura en général l’adresse IP en .2.

-A PREROUTING -d <IP FAILOVER>/32 -j DNAT --to-destination 10.8.0.X

Ensuite, nous allons ajouter une règle précisant que le trafic en provenance du client sortira avec l’adresse IP failover puis une seconde indiquant que tous les autres clients utiliseront l’adresse principale du serveur. Cette seconde règle n’est pas obligatoire mais utile si vous avez plusieurs clients qui utilisent votre serveur OpenVPN.

-A POSTROUTING -s 10.8.0.X/32 ! -d 10.8.0.0/30 -j SNAT --to-source <IP failover>
-A POSTROUTING -s 10.8.0.0/30 ! -d 10.8.0.0/30 -j SNAT --to-source <IP principale du serveur>

Les règles étant en place, le tout fonctionne immédiatement. N’hésitez pas à utiliser le paquet iptables-persistent pour rendre ces règles permanentes.


Avec cette configuration, le client (ici le PC portable) sortira sur internet avec l’adresse IP failover. Cela permet de bien distinguer les flux et surtout de pouvoir héberger des services très simplement sur cette machine. En effet, tout le trafic étant redirigé vers lui, il devient très simple d’y installer un serveur web ou une seedbox. De plus, toutes les stations qui utilisent le PC portable comme passerelle sortent également avec l’IP failover.

Related posts

Tuto : Nextcloud sur Debian avec nginx

Edouard Patout

Trouver et générer un nom de marque

Edouard Patout

Tuto : Pydio sur Debian avec nginx

Edouard Patout

1 comment

HAUGUEL 22 janvier 2017 at 12 h 29 min

Merci beaucoup pour l’article ! Je me demandais justement comment faire 🙂

Reply

Leave a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More