VPN site-to-site avec double NAT avec l'UDM-Pro
Aujourd'hui, petit premier article sur l'Unifi Dream Machine Pro d'Ubiquiti.
Je souhaitais connecter mon UDM-Pro a celui chez mes parents afin de pouvoir lancer des backup entre NAS sans passer par internet (enfin, pas directement on s'entend).
Pour cela, plein de solutions existent, tel que ZeroTier, OpenVPN et j'en passe. Mais sachant que l'UDMP possède des capacités VPN site à site, je trouvais donc bête de chercher ailleurs.
Dans cet article je vais vous expliquer comment j'ai pu configurer l'UDMP ainsi que la modification a faire afin de contourner les problèmes liés a un double NAT, autrement dit, quand l'UDM se trouve derrière une Box d'un ISP.
Configuration VPN:
Première étape: configurer le VPN sur les deux UDMP.
Pour commencer, se connecter sur l'interface d'administration via https://unifi.ui.com ou via l'adresse locale.
Petit rappel qui ne coute rien: Ubiquiti a eu une faille et des données se sont peut-être retrouvée sur le web, donc pensez a changer votre mot de passe et d'activer la double authetification!
Une fois connecté, sélectionnez la partie Network du contrôleur.
Dans les réglages, cliquez sur "Networks", et vous devriez vous retrouver avec un écran semblable a celui-ci:
(Ignorez le fait que j'ai déjà les configurations pour le VPN, on va reprendre du début.)
On va maintenant sélectionner CREATE NEW NETWORK
.
Sur la nouvelle page, on sélectionne les options suivantes:
- Purpose: Siite-to-Site VPN
- VPN Type: Manual IPSEC
- Enabled: Coché
- Remote subnet: le groupe d'adresse ip de l'UDMP distant. (Attention, vous aurez besoin que vos deux UDMP soient sur un range d'adresses IP différentes, par exemple 192.168.3.0/24 d'un coté, et 192.168.4.0/24 de l'autre)
- Interface: l'interface par laquelle vous êtes connectés a Internet (pour moi WAN 2 car j'utilise un sfp fibre directement sur mon UDM)
- Peer IP: l'adresse IP publique de l'autre UDMP (de préférence avoir une adresse IP fixe, ou qui ne change pas souvent comme moi)
- Local WAN IP: l'adresse IP publique de l'UDM que vous êtes en train de configurer
- Pre-Shared Key: le mot de passe pour votre VPN, il faudra le même sur les deux UDM.
et les autres configurations par défaut. N'oubliez pas de donner un nom a votre configuration et enregistrez.
Il faudra effectuer les mêmes étapes sur le second UDMP.
Si vous n'avez pas de double NAT, normalement, là, ça fonctionne (Victoire!)
Mais bon si comme moi, vous êtes en double NAT, là il ne se passe rien!
Comment qu'on fait avec un double NAT?
Excellente question!
Tout se passe sur l'UDM qui n'a PAS le double NAT (j'ai pas testé, mais si vous êtes en double NAT des deux côtés, vous devriez pouvoir vous en sortir en appliquant les réglages des deux côtés).
Avant de passer à la configuration, petit point sur le pourquoi ça ne marche pas:
L'UDMP vérifie que la connexion entrante à bien l'adresse IP entrée dans la configuration Peer IP, ce qui est en réalité presque le cas, sauf que dans le cas d'un double NAT, l'adresse ip que le second UDM renvoie, est l'adresse publique, avec l'adresse de son WAN (c'est a dire, celle attribuée a l'UDM par la box de votre ISP. L'UDM reçoit donc deux adresse IP, la publique, ainsi que la NATée, sous le format x.x.x.x[y.y.y.y] (x publique, y NAT). A ce moment là, strongswan, qui gère les accès VPN, refuse la connexion, car l'adresse reçue ne correspond pas a celle configurée.
On va donc modifier la configuration enregistrée pour accepter le double NAT.
La procédure pour le double NAT
Commencez par activer le SSH sur l'UDMP.
Connectez vous en utilisant votre outil favoris pour du SSH. J'utilise WSL sous windows 10, donc j'ouvre ubuntu, et entre la commande:
ssh [email protected]
puis mon mot de passe
Vous devriez être accueilli par cette page:
Déplacez vous dans le dossier: /run/strongswan/ipsec.d/tunnels/
cd /run/strongswan/ipsec.d/tunnels/
Ensuite, modifiez la configuration vpn, il s'agit d'un fichier avec un nom aléatoire, xxxx_xxxx_xxxx_xxxx.ipsec.s2s.config.
Pour modifier j'utilise vi qui est le seul éditeur installé:
vi xxxx_xxxx_xxxx_xxxx.ipsec.s2s.config
Ensuite, je descend a la ligne qui commence par right=xxx.xxx.xxx.xxx (avec l'adresse publique de l'autre UDMP), et on remplace l'adresse IP par %any
(Pour les débutants en VI: allez avec les flèches après le = puis appuyez sur Shift+d, puis sur a et entrez %any. Appuyez sur Esc pour quitter l'édition, et deux fois sur shift+z pour enregistrer votre fichier et quitter vi
Maintenant que la configuration est faite: tapez
ipsec restart
et vous êtes bon pour ce coté.
Il ne reste plus qu'a relancer le VPN depuis l'autre UDMP. (Allez dans networks, éditez le vpn que vous avez créé, décochez enabled, enregistrez, puis refaite la même chose en recochant enabled).
IMPORTANT: ne désactivez pas le VPN du coté où vous avez fait la modification, sinon l'udm va régénérer la configuration et vous pourrez recommencer. Pour ceux qui auraient 2 doubles NAT, pas besoin de relancer le VPn par l'interface graphique, vous l'aurez fait en tapand ipsec restart en SSH.
Et voilà! N'oubliez pas de désactiver le SSH par sécurité, et vous êtes tout bon.
J'espère que ça peut aider quelqu'un et n'hésitez pas a laisser un commentaire (si je les ai déjà activés, sinon il y a la page contact)
Bonus
Si vous souhaitez le faire en une ligne via ssh:
ssh [email protected] "sed -i 's/\(right=\)[0-9].*/right=%any/g' /run/strongswan/ipsec.d/tunnels/*.ipsec.s2s.config & ipsec restart"