WireGuard sur UniFi / Ubiquiti

Installer et configurer Wireguard VPN server sur Unifi (Ubiquiti), c’est facile… avec la version officielle de Wireguard (wireguard-vyatta-ubnt). Dans ce tuto, nous vous expliquons comment faire… La longueur de cet article peut sembler importante, ne soyez pas impressionné, en 10 minutes vous aurez tout compris !

WireGuard sur matériel UniFi et EdgeRouter

Il existe de nombreux sites traitant de WireGuard et UniFi. Malheureusement, il sont nombreux (tous en anglais), mais incomplets. Il faut chercher page après page, commentaire après commentaire… pour trouver la bonne configuration. On ne va pas se mentir, on s’est arraché les cheveux. Cependant, nous, on a décidé de vous simplifier les choses… sans être avare d’explication.

Pourquoi WireGuard ?

Tout d’abord, le VPN WireGuard est léger et robuste (sécurisé). Il est open source, gratuit et nativement compatible IPv4 & IPv6. C’est actuellement le VPN le plus rapide à la connexion et dans les transferts. Il est jusqu’à 3 fois plus rapide qu’OpenVPN. Enfin, vous pouvez changer de connexion (WiFi / 4G) sans perdre votre connexion VPN. Une fois le lien WireGuard établi, vous pourrez surfer sur internet avec une connexion chiffré de bout en bout (avec l’adresse IP de votre domicile ou entreprise) et vous pourrez bien sûr accéder à votre réseau : serveur, NAS, imprimante, domotique…

Avant-propos UniFi / Ubiquiti

La première étape, c’est d’identifier le produit sur lequel vous installez Wireguard. En effet, ce guide fonctionne pour de nombreux produits Ubiquiti EdgeRouter et UniFi Security Gateway. Ici, nous utilisons un UGW3 avec 3 réseaux différents et 3 plages d’adresses IP différentes. Pour WireGuard, nous utiliserons une 4e plage d’adresses IP pour WireGuard : 10.2.1.xxx.

Étape 1 : Trouver le bon paquet

Comme ce tuto fonctionne avec différends, il faut faire attention à ne pas installer n’importe quoi. Pour trouver le bon fichier à récupérer, il faut aller sur cette page. Il s’agit de la version WireGuard 1.0.20210606 (du 6 juin 2021). Pour notre UGW3, nous allons utiliser le fichier ugw3-v1-v1.0.20210606-v1.0.20210424.deb.

Étape 2 : Installer WireGuard

Maintenant que nous connaissons le fichier pour notre matériel, il faut l’installer. Connectez-vous en SSH sur votre appareil UniFi (pas le controller). On tape la commande suivante (à adapter pour votre matériel) :

curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20210606-1/ugw3-v1-v1.0.20210606-v1.0.20210424.deb

Astuce : Allez sur cette page et copiez le lien pour votre appareil Ubiquiti/UniFi

Le téléchargement se lance et ne prend que quelques secondes. Il faut dire que le fichier .deb ne fait que 166 Ko. Ensuite, il faut installer en tapant la commande suivante (à adapter pour votre matériel) :

sudo dpkg -i ugw3-v1-v1.0.20210606-v1.0.20210424.deb

Ici aussi l’opération ne prend pas plus de 10 secondes.

Étape 2 : Clé publique et clé privée

Ensuite, nous allons générer les clés de chiffrement les connexions et les échanges VPN. Tapez les commandes suivantes (les unes après les autres) :

cd /config/auth
umask 077
mkdir wireguard
cd wireguard
wg genkey > wg_private.key
wg pubkey < wg_private.key > wg_public.key

Ici, on a créé un dossier wireguard dans /config/auth. Puis, on génère une clé privée wg_private.key et une clé publique wg_public.key (dans le dossier fraîchement créé). On va récupérer la clé publique, car nous allons en avoir besoin pour notre configuration. Tapez :

cat /config/auth/wireguard/wg_public.key

Copier-Coller la chaîne de caractère (clé publique) dans un bloc-notes par exemple. Nous en aurons besoin plus tard. Ici, nous partons du principe que la clé publique est la suivante pubUSGcachemFXNueHsmDBybv/wxzOSoDRW0SMz9iSo= N’inventez pas une clé, prenez bien celle contenue dans le fichier wg_public.key !

Par la suite, nous l’insérons dans le fichier de configuration (config.gateway.json). On pourrait rester en ligne de commande, mais cela n’apporte rien. En effet, si vous redémarrez votre USG (ou faites un approvisionnement) : vous perdrez la configuration. Avec le fichier de configuration, aucun souci pour garder le VPN actif même après un redémarrage ou une mise à jour.

Étape 3 : Clients et Peers WireGuard

Ce n’est pas fini côté UniFi, mais nous allons passer sur votre smartphone ou ordinateur (ou tout autre périphérique). Vous trouverez le logiciel directement sur le site officiel WireGuard (Windows, macOS, Linux…) et Android / iOS sur les stores habituels.

WireGuard iOS/Android

Quand on lance l’application WireGuard, il faut ajouter un tunnel. On va créer une configuration à partir de rien. Tout d’abord, il faut mettre un nom afin d’identifier votre connexion. Par défaut, l’interface doit vous fournir une clé publique et une clé privée pour votre connexion. Si ce n’est pas le cas, appuyez sur le bouton Générer une paire de clés (icône avec les 2 flèches sur Android). Copier la clé publique générée ici et coller là dans votre bloc-notes.  Ici pour le tuto, on va partir du principe quelle a comme valeur pubPHONEcachemFX05sOYBvTNj2D1Klx3B3Y06ExP0s= Ne l’inventez pas, copiez la clé générée par l’application.

Au niveau de champ Adresses, mettez l’adresse IP que disposera votre périphérique. Dans notre cas, ce sera 10.2.1.2 (les adresses IP se gèrent manuellement). On laisse le port d’écoute par défaut comme le MTU. Pour les serveurs DNS, on mettra par exemple 1.1.1.1, 1.0.0.1 ou autre. Si vous disposez d’Adguard ou PiHole, indiquez son adresse IP ici.

Sur Android, il est possible d’exclure les applications qui ne pourront pas utiliser le VPN WireGuard. Par défaut, vous pouvez laisser sur TOUTES LES APPLICATIONS.

On clique sur Ajouter un pair et on va mettre la clé publique générée sur l’UniFi (USG). Souvenez-vous, dans notre exemple c’est celle qui vaut  pubUSGcachemFXNueHsmDBybv/wxzOSoDRW0SMz9iSo=

Dans Point de terminaison, saisissez l’adresse IP publique de votre Box (fournie par votre FAI) pour joindre WireGuard. N’oubliez pas d’ajouter le port que vous souhaitez utiliser (par défaut il faudra mettre 51820). En face d’Adresse IP autorisées, mettez 0.0.0.0/0, ::/0 En mettant cette valeur, vous vous assurez de pouvoir quitter le sous-réseau VPN pour aller accéder à votre NAS par exemple.

Il ne reste plus qu’à appuyer sur le bouton Enregistrer (disquette en haut à droite sous Android). Un message vous informant qu’une configuration VPN souhaite être ajoutée peut apparaître. Il faut bien sûr autoriser cette action. Ne lancez pas la connexion VPN, ça ne fonctionnera pas.

WireGuard Windows/macOS

Comme sur smartphone, la configuration est assez simple en manuel. Que ce soit sous Windows, macOS ou Linux, cela ne prend que quelques minutes. Il vous faudra générer là aussi un jeu de clés (privé et publique) et il faudra surtout ajouter la clé de l’UniFi, pour rappel pubUSGcachemFXNueHsmDBybv/wxzOSoDRW0SMz9iSo=

Surtout, ne touchez pas à la PrivateKey (clé privée) générée par l’application. Copier-coller la clé publique générée par le système dans un bloc-notes pour plus tard. Ici dans l’exemple, la clé publique est pubPC-042cachemFX07sWy9vBNj2Z1H44D03NurEFdOa=

Étape 4 : Finalisation de la configuration

WireGuard fonctionne sur votre appareil Ubiquiti/UniFi. Le paramétrage a été réalisé sur votre premier périphérique. Maintenant, nous allons déposer un fichier de configuration sur l’UniFi Controller. Si vous ne disposez pas d’UniFi Controller, vous pouvez suivre ce lien 😉

Voici un fichier de configuration avec une configuration facile à prendre en main config.gateway.json. Dans la première partie du fichier, section firewall, on ouvre le port UDP WireGuard 5180 par défaut (WAN_LOCAL). Aussi, on identifie le sous-réseau utilisé par les clients VPN WireGuard (10.2.1.0/24) via le pare-feu. Dans la section interfaces de notre fichier, nous déclarons le sous-réseau WireGuard (10.2.1.0/24). Pour WireGuard, on attribue l’adresse 10.2.1.1 à notre serveur (USG).

Voici le contenu du fichier :

{
    "firewall": {
        "name": {
            "WAN_LOCAL": {
                "rule": {
                    "20": {
                        "action": "accept",
                        "description": "Autorise WireGuard",
                        "destination": {
                            "port": "51820"
                        },
                        "protocol": "udp"
                    }
                }
            }
        },
        "group": {
            "network-group": {
                "remote_user_vpn_network": {
                    "description": "Sous-reseau pour les utilisateurs VPN",
                    "network": [
                        "10.2.1.0/24"
                    ]
                }
            }
        }
    },
    "interfaces": {
        "wireguard": {
            "wg0": {
                "description": "VPN pour les clients distants",
                "address": [
                    "10.2.1.1/24"
                ],
                "firewall": {
                    "in": {
                        "name": "LAN_IN"
                    },
                    "local": {
                        "name": "LAN_LOCAL"
                    },
                    "out": {
                        "name": "LAN_OUT"
                    }
                },
                "listen-port": "51820",
                "mtu": "1500",
                "peer": [{
                    "pubPHONEcachemFX05sOYBvTNj2D1Klx3B3Y06ExP0s=": {
                        "allowed-ips": [
                            "10.2.1.2/32"
                        ],
                        "persistent-keepalive": 25
                    }
                },
                {
                    "pubPC-042cachemFX07sWy9vBNj2Z1H44D03NurEFdOa=": {
                        "allowed-ips": [
                            "10.2.1.5/32"
                        ],
                        "persistent-keepalive": 25
                    }
                }],
                "private-key": "/config/auth/wireguard/wg_private.key",
                "route-allowed-ips": "true"
            }
        }
    }
}

Nous attirons votre attention sur la partie peer du fichier. Là, il faut passer par un éditeur comme Notepad ou Textedit pour quelques modifications. C’est ici que vous définissez les appareils qui se connecteront à votre VPN WireGuard. Premièrement, indiquez la clé publique générée par votre application mobile ou PC. Dans notre exemple (repris dans ce fichier), il s’agit de pubPHONEcachemFX05sOYBvTNj2D1Klx3B3Y06ExP0s= Ensuite, après allowed-ips vous allez reporter l’adresse IP 10.2.1.2 (pour le téléphone) comme dans les applications sur le téléphone. Pour rappel, les adresses IP ne se gèrent manuellement.

Nous avons également ajouté un autre client avec le deuxième périphérique (PC) qui dispose de la clé publique pubPC-042cachemFX07sWy9vBNj2Z1H44D03NurEFdOa= et de l’adresse 10.2.1.5.

Par défaut, nous indiquons route-allowed-ips à true. Cela permet aux périphériques connectés d’atteindre un ordinateur ou un NAS par exemple sur un autre sous-réseau. Sa gestion peut se faire peer (client) et se valorisera à false pour l’interdire. Sur le smartphone/PC, on remplacera l’adresse IP 0.0.0.0/0, ::/0 par l’adresse de l’USG 10.2.1.1 par exemple ou en le laisant à vide.

Faites attention à bien respecter les [] {}, pour que votre fichier fonctionne correctement. Vous sauvegardez le fichier…

Étape 5 : Déployer la configuration

Maintenant, vous copiez votre fichier config.gateway.json dans /data/sites/site_ID de votre UniFi Controller (Cloud Key, docker ou autre). Si vous n’avez pas de dossier sites/site_ID, suivez ce tuto : Problème avec le site_ID. Ensuite, connectez-vous à l’interface d’administration UniFi Network Controller et allez sur le menu ÉQUIPEMENTS et cliquez sur votre passerelle, dans notre cas l’UGW3. Sur le volet à droite, allez sur la roue crantée en haut, puis descendez sur GÉRER L’APPAREIL en pour finir, vous cliquez sur le bouton Approvisionner.

Patienter 1 à 2 minutes… c’est terminé.

Astuce : Pour s’assurer que le fichier a été intégré, allez dans le menu Paramètres > Routage & Pare-feu puis allez sur l’onglet Pare-Feu > IPv4 > WAN LOCAL. Vous devriez constater la présence de l’entrée 20 qui Autorise WireGuard.

autorise Wireguard sur UniFi

Plantage sur approvisionnement

S’il y a une erreur dans le fichier config.gateway.json votre réseau pourrait planter. Si c’est le cas, supprimez le fichier de configuration et patienter une à deux minutes. Tout revient à la normale automatiquement.

Mise à jour et désinstallation de WireGuard UniFi

Sachez qu’il est bien sûr possible de mettre à jour le paquet WireGuard UniFi… mais aussi de le désactiver et désinstaller. Pour cela, vous pouvez vous rendre sur la page officielle WireGuard. Pensez à supprimer (ou renommer) le fichier de configuration sur le controller.

Voilà, ce tuto est maintent terminé. Si vous avez suivi toutes les étapes et copié-collé les clés publiques (USG et périphériques) au bon moment, alors il n’y aura aucun souci. Vous profiterez de la puissance du VPN WireGuard sur votre installation UniFi/Ubiquiti. WireGuard est très léger, il est rapide et consomme vraiment peu ressource même sur un UGW3 : 1 à 3% du CPU et 0% de RAM. Comme toujours, les commentaires sont ouverts donc n’hésitez pas à poser vos questions et partager votre expérience avec WireGuard.