PROJET AUTOBLOG


Zythom

source: Zythom

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

VPN Wireguard site to site EdgeRouter X

mercredi 12 janvier 2022 à 16:17

Je suis l’heureux propriétaire de plusieurs routeurs EdgeRouter ER-X de la marque Ubiquiti, robustes et peu chers (environ 60 euros). Je me sers de ce routeur pour isoler mon réseau personnel de la box fournie par mon fournisseur d’accès à internet.

D’autre part, il se trouve que j’habite à 450 km de mon lieu de travail, et donc que je loue un studio près de mon entreprise où je suis en présentiel 3 jours par semaine. J’ai donc un deuxième abonnement internet fibre dans ce studio où j’héberge une partie de mon matériel informatique (mon “PC dans le Cloud“, mon serveur de sauvegardes externalisées et un serveur FreshRSS).

Jusqu’à présent, pour accéder à l’un ou l’autre des deux réseaux privés, j’utilisais des serveurs OpenVPN que j’ai mis en place dans chacun des réseaux. Mais pour simplifier mes usages, j’ai voulu mettre en place un VPN site à site reliant mes deux réseaux domestiques. J’ai fait pas mal de tests, que je ne détaillerai pas ici, à base de serveurs dédiés, jusqu’à optimiser la chose (de mon point de vue) en utilisant WireGuard positionné directement sur les routeurs ER-X.

Attention : relier deux sites par un VPN permanent site à site présente un risque important de sécurité. Si l’un des réseaux est compromis, l’autre l’est aussi. A faire à vos risques et périls.

Disclaimer : Je ne suis pas admin réseau, donc réfléchissez bien à deux fois avant de reproduire cette configuration. Si vous êtes spécialiste réseau, n’hésitez pas à améliorer cette configuration ER-X en commentaire, c’est aussi pour cela que je la partage.

Mon objectif est de mettre en place le schéma suivant :

Relier deux réseaux domestiques par un VPN site to site

ATTENTION 1 : J’utilise un FAI qui me propose (encore) une adresse IPv4 fixe pour chaque box. Il est possible de mettre en place cette configuration avec des adresses IPv4 dynamiques, mais il faut disposer d’un DNS dynamique associé à ces adresses IPv4.

ATTENTION 2 : Chaque box envoie tout son trafic entrant vers son routeur ER-X (configuré en IPv4 DMZ, config possible sur une box en mode routeur). Je bloque le trafic IPv6 car je ne maîtrise pas son fonctionnement.

La configuration se fait en 3 étapes:
– 1) Sauvegarde des configurations des routeurs ER-X
– 2) Installation de WireGuard sur chaque routeur
– 3) Configuration de chaque routeur

Première étape : sauvegarde des configurations des routeurs ER-X

Vous pouvez pour cela utiliser l’interface web d’administration du routeur (voir image ci-dessous), à la fois pour sauvegarder la configuration et pour la restaurer.

Je vous recommande également de vous entraîner sur un routeur de test avant de vous lancer sur un routeur de production le vendredi soir…

Deuxième étape : installation de WireGuard sur chaque routeur ER-X

Conformément aux instructions du site https://github.com/WireGuard/wireguard-vyatta-ubnt/wiki/EdgeOS-and-Unifi-Gateway, il faut choisir la dernière version du logiciel correspondant à votre routeur ER-X (et à sa version d’EdgeOS).

Pour les routeurs ER-X, il s’agit de la version e50, et à la date d’écriture de ce billet, du fichier e50-v1-v1.0.20211208-v1.0.20210914.deb

Pour le routeur ER-X A :

ssh adminERXA@192.168.A.254
adminERXA# curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20211208-1/e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXA# sudo dpkg -i e50-v1-v1.0.20211208-v1.0.20210914.deb

Il faut ensuite générer les clefs avec la commande suivante :

adminERXA# wg genkey | tee /config/auth/wg.key | wg pubkey >  wg.public

Vous obtiendrez des clefs qui ressembleront à cela :

adminERXA# more /config/auth/wg.key #clé privée ER-X A
ADndfjehry126857hhdfyendjfk0983274nsud+jdhf=
adminERXA# more wg.public #clé publique ER-X A
AHsdkfhehdhkqjhgdiuhzdhkjhsciukjc23374485+z=

Profitez-en pour les sauvegarder dans votre KeyPass ou équivalent.

Procédez de même sur le deuxième routeur ER-X B :

ssh adminERXB@192.168.B.254
adminERXB# curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20211208-1/e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXB# sudo dpkg -i e50-v1-v1.0.20211208-v1.0.20210914.deb
adminERXB# wg genkey | tee /config/auth/wg.key | wg pubkey >  wg.public
adminERXB# more /config/auth/wg.key #clé privée ER-X B
ERDncbfjhgdlkjoijdelzkj145858kjhdfkhkzh+zdd=
adminERXB# more wg.public #clé publique ER-X B
BJFURHFgshkhzihh148576091+jhzgaduygdjfjhkdz=

Troisième étape : configuration de chaque routeur ER-X

Sur le premier routeur ER-X A, créez une interface wg0 avec comme adresse IPv4 10.C.0.1/30 écoutant sur le port UDP 51820 :

ssh adminERXA@192.168.A.254
configure
set interfaces wireguard wg0 address 10.C.0.1/30
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key /config/auth/wg.key
commit

Puis il faut autoriser le routeur distant B et ses réseaux (avec la clef publique de ER-X B) :

set interfaces wireguard wg0 peer BJ...dz= endpoint IPv4_FAI_B:51820
set interfaces wireguard wg0 peer BJ...dz= persistent-keepalive 15
set interfaces wireguard wg0 peer BJ...dz= allowed-ips 192.168.B.0/24
set interfaces wireguard wg0 peer BJ...dz= allowed-ips 10.C.0.0/30
commit

Il faut également modifier le pare-feu avec les commandes :

set firewall name WAN_LOCAL rule 15 action accept
set firewall name WAN_LOCAL rule 15 protocol udp
set firewall name WAN_LOCAL rule 15 description 'Wireguard'
set firewall name WAN_LOCAL rule 15 destination port 51820
commit

Vérifiez que tout est configuré comme vous le souhaitez :

run show ip route

Si oui, vous pouvez enregistrer la configuration dans le routeur pour qu’elle soit lue à son prochain démarrage.

save
exit

Même opération sur le deuxième routeur ER-X B (avec l’adresse IPv4 10.C.0.2/30 pour l’autre extrémité du tunnel, et la clef publique du routeur ER-X A) :

ssh adminERXB@192.168.B.254
configure
set interfaces wireguard wg0 address 10.C.0.2/30
set interfaces wireguard wg0 listen-port 51820
set interfaces wireguard wg0 route-allowed-ips true
set interfaces wireguard wg0 private-key /config/auth/wg.key
commit
set interfaces wireguard wg0 peer AH...z= endpoint IPv4_FAI_A:51820
set interfaces wireguard wg0 peer AH...z= persistent-keepalive 15
set interfaces wireguard wg0 peer AH...z= allowed-ips 192.168.A.0/24
set interfaces wireguard wg0 peer AH...z= allowed-ips 10.C.0.0/30
commit
set firewall name WAN_LOCAL rule 15 action accept
set firewall name WAN_LOCAL rule 15 protocol udp
set firewall name WAN_LOCAL rule 15 description 'Wireguard'
set firewall name WAN_LOCAL rule 15 destination port 51820
commit
run show ip route
save
exit

A ce stade, le tunnel VPN devrait fonctionner et vous devriez pouvoir voir les machines situées sur l’autre réseau… Sinon, bon courage.

Mon réseau dans deux ans…

Les images réseaux de ce billet ont été construites avec ce site https://app.diagrams.net/