WireGuard configuration des clients mobiles

Introduction

WireGuard est un protocole de communication et un logiciel libre et open source permettant de créer un réseau privé virtuel (VPN). Avec une architecture moderne et plus compact. Il vise à être plus rapide et moins complexe qu’IPsec tout en étant une alternative plus performante à OpenVPN. Initialement publié pour le noyau Linux, il est maintenant multiplateforme et largement déployable.

Ce document décrit la mise en place d’un serveur central WireGuard sur DynFi Firewall et la configuration d’un ou plusieurs clients pour créer un tunnel vers ce serveur.

Étape 1 - Installer le plugin WireGuard

Wireguard est déjà pré-installé sur DynFi Firewall. Pour y accéder rendez-vous sur la page de configuration de WireGuard via VPN >> WireGuard.

Etape 2 - Configurer le pair local (serveur)

  • Allez dans VPN >> WireGuard >> Local.

  • Cliquez sur + afin d’ajouter une nouvelle configuration locale.

  • Configurez la configuration locale comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Activé

    Coché

    Nom

    Appellez-le comme vous voulez (eg HomeWireGuard )

    Clé publique

    Cette clé sera initialement vide ; elle sera remplie une fois la configuration sauvegardée.

    Clé privée

    Il s’agit d’une clé vide au départ ; elle sera remplie une fois la configuration sauvegardée.

    Port d’écoute

    51820 ou un port unique de numéro supérieur.

    Adresse du tunnel

    Par exemple, 10.10.10.1/24. Voir la note ci-dessous

    Paires

    Les paires seront spécifiés ici ; laissez ce champ vide jusqu’à ce que la configuration du point d’extrémité soit créée à l’étape 3.

    Désactiver les Routes

    Non coché

Note

L’adresse du tunnel doit être en notation CIDR et doit être une IP et un sous-réseau uniques pour votre réseau, comme s’il s’agissait d’une interface routée physiquement différente. Le sous-réseau doit être d’une taille appropriée pour inclure tous les clients pairs qui utiliseront le tunnel. Pour IPv4, il doit s’agir d’une adresse privée (RFC1918), par exemple 10.10.10.1/24. Pour IPv6, il peut s’agir d’une adresse ULA /64 unique ou d’une adresse GUA /64 unique dérivée de votre délégation de préfixe. N’utilisez pas d’adresse de tunnel qui soit un /32 (IPv4) ou un /128 (IPv6).

Note

Laissez le champ DNS Server vide (il apparaît si advanced mode est sélectionné). Sinon WireGuard écrasera la configuration DNS de DynFi Firewall.

  • Sauvegardez la configuration de l’hôte local, puis cliquez à nouveau sur Apply.

  • Ré-ouvrir la configuration de l’hôte local

  • Copiez la clé publique qui a été générée dans la configuration. Elle sera nécessaire pour l’appareil client - voir Étape 7 - Configurer le client WireGuard.

  • Sauvegardez ou Annulez pour quitter la configuration.

Étape 3 - Configuration du point d’extrémité (client)

  • Allez dans VPN >> WireGuard >> Points de terminaison

  • Cliquez sur + pour ajouter un nouveau Point de terminaison

  • Configurez le point de terminaison comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Activé

    Coché

    Nom

    Appellez-le comme vous voulez (par exemple Phone)

    Clé publique

    Insérez la clé publique du client ; si nécessaire, passez à l’étape 7 pour générer la clé publique du client.

    IP autorisées

    Adresse IP unique du tunnel (IPv4 et/ou IPv6) du client - il doit s’agir d’une adresse /32 ou /128 (selon le cas) dans le sous-réseau configuré sur le pair local. Par exemple, 10.10.10.2/32

  • Sauvegardez la configuration du point de terminaison, puis cliquez à nouveau sur Apply.

  • Retournez maintenant à VPN >> WireGuard >> Local

  • Ouvrez la configuration locale qui a été créée à l’étape 1 (par exemple HomeWireGuard)

  • Dans le menu déroulant Peers, sélectionnez le nouveau point de terminaison (par exemple Phone)

  • Sauvegardez à nouveau la configuration de l’homologue local, puis cliquez à nouveau sur Apply.

  • Répétez cette étape 3 pour autant de clients que vous souhaitez configurer.

Étape 4 - Allumer/redémarrer WireGuard

  • Activez WireGuard sous VPN >> WireGuard >> General si ce n’est pas déjà fait (cliquez sur Apply après avoir coché la case).

  • Sinon, redémarrez WireGuard - vous pouvez le faire en le désactivant et en l’activant sous VPN >> WireGuard >> General (cliquez sur Apply après avoir décoché et coché la case).

Étape 5 - Affectation et routage

Note

Les étapes 5(a) et 5(b) ci-dessous peuvent ne pas être nécessaires dans votre cas. Strictement parlant, si vos clients n’ont l’intention d’utiliser le tunnel que pour accéder aux IP/sous-réseaux locaux derrière DynFi Firewall, alors aucune des deux étapes n’est nécessaire. Si vous avez l’intention d’utiliser le tunnel WireGuard pour accéder à des IPs en dehors du réseau local, par exemple depuis l’Internet public, alors au moins une des étapes, et peut-être les deux, seront nécessaires. Ceci est expliqué ci-dessous

Cependant, il est utile de compléter l’étape 5(a) de toute façon, pour les raisons expliquées ci-dessous.

Etape 5(a) - Assigner une interface à WireGuard (recommandé)

Warning

Cette étape n’est en aucun cas nécessaire dans le cas d’une installation de type “road warrior”. Cependant, il est utile de la mettre en oeuvre, pour plusieurs raisons :

Premièrement, elle génère un alias pour le(s) sous-réseau(x) du tunnel qui peut être utilisé dans les règles du pare-feu. Sinon, vous devrez définir votre propre alias ou au moins spécifier manuellement le(s) sous-réseau(x)

Deuxièmement, il ajoute automatiquement une règle NAT IPv4 sortante, qui permettra au tunnel d’accéder aux IPv4 en dehors du réseau local (si vous le souhaitez), sans qu’il soit nécessaire d’ajouter manuellement une règle.

Enfin, il permet de séparer les règles de pare-feu de chaque instance WireGuard (chaque dispositif wgX). Sinon, elles doivent toutes être configurées sur le groupe WireGuard par défaut créé par DynFi Firewall. Il s’agit plus d’une question d’esthétique organisationnelle que d’une question de fond.

  • Allez dans Interfaces >> Assignments

  • Dans la liste déroulante à côté de “Nouvelle interface :”, sélectionnez le dispositif WireGuard (wg1 si c’est votre premier)

  • Ajoutez une description (par exemple HomeWireGuard)

  • Cliquez sur + pour l’ajouter, puis cliquez sur Sauvegarde.

  • Sélectionnez ensuite votre nouvelle interface dans le menu Interfaces.

  • Configurez-la comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Activer

    Checked (coché)

    Verrouillage

    Vérifié

    Description

    Même chose que sous Affectations, si cette case n’est pas déjà remplie

    Type de configuration IPv4

    Aucun Type de configuration IPv6 Aucune

    Type de configuration IPv6

    Aucun Type de configuration IPv6 Aucun

Note

Il n’est pas nécessaire de configurer les IPs sur l’interface. L’adresse du tunnel spécifiée dans la configuration locale de votre serveur WireGuard sera automatiquement assignée à l’interface une fois que WireGuard sera redémarré.

  • Sauvegardez la configuration de l’interface et cliquez sur Appliquer les changements.

  • Redémarrez WireGuard - vous pouvez le faire en l’éteignant et en le rallumant sous VPN >> WireGuard >> General (cliquez Appliquer après avoir décoché et coché la case).

Warning

Lors de l’assignation des interfaces, des passerelles peuvent être ajoutées à celles-ci. Ceci est utile pour équilibrer le trafic à travers plusieurs tunnels ou dans des scénarios de routage plus complexes. Pour ce faire, allez dans Système >> Passerelles >> Unique et ajoutez une nouvelle passerelle. Choisissez l’interface WireGuard appropriée et réglez la passerelle sur dynamique.

Note

Si le DNS Unbound est configuré avec toutes les interfaces enregistrées, il faut recharger le DNS Unbound pour que la nouvelle interface Wireguard soit ajoutée. Ceci est nécessaire pour que le DNS fonctionne à travers le tunnel VPN.

Etape 5(b) - Créer une règle NAT sortante

Note

Cette étape n’est nécessaire (le cas échéant) que pour permettre aux clients pairs d’accéder à des IPs Si une interface a déjà été assignée à l’étape 5(a), elle n’est pas nécessaire pour le trafic IPv4, et n’est nécessaire pour le trafic IPv6 que si le tunnel utilise des ULA IPv6 (les GUA IPv6 n’ont pas besoin de NAT). Dans de nombreux cas d’utilisation, cette étape peut donc être ignorée.

  • Allez dans Firewall >> NAT >> Outbound (Sélection de menu)

  • Sélectionnez “Hybrid outbound NAT rule generation” si ce n’est pas déjà le cas, et cliquez sur Save puis Apply changes.

  • Cliquez sur + / Ajouter pour ajouter une nouvelle règle.

  • Configurez la règle comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Interface

    WAN

    TCP/IP Version

    IPv4 ou IPv6 (selon le cas)

    Protocole

    toutes

    Inversion de la source

    Décoché

    Adresse source

    Si vous avez assigné une interface à l’étape 5(a), sélectionnez l’alias généré pour le(s) sous-réseau(x) de l’interface (ex. `HomeWireGuard net` ) - voir la note ci-dessous si vous n’avez pas assigné cette interface.

    Port source

    n’importe lequel

    Inversion de destination

    Non vérifié

    Adresse de destination

    toutes

    Port de destination

    tous

    Port de destination

    tous

    Translation / cible

    Adresse de l’interface

    Description

    Ajouter une description si vous le souhaitez

  • Sauvegardez la règle, puis cliquez sur Appliquer les changements.

  • Redémarrez WireGuard - vous pouvez le faire en le désactivant et en l’activant sous VPN >> WireGuard >> General (cliquez sur Apply après avoir décoché et coché la case).

Note

Si vous n’avez pas assigné d’interface comme suggéré à l’étape 5(a), alors vous devrez spécifier manuellement les IPs/sous-réseaux sources pour le tunnel (par exemple, 10.10.10.0/24). Il est probablement plus facile de définir un alias (via Firewall >> Aliases) pour ces IP/sous-réseaux et de l’utiliser. Si vous n’avez qu’une seule instance locale de WireGuard et qu’un seul point de terminaison WireGuard configuré, vous pouvez utiliser le réseau WireGuard par défaut, bien que cela ne soit généralement pas recommandé.

Étape 6 - Créer des règles de pare-feu

Ceci implique deux étapes - d’abord la création d’une règle de pare-feu sur l’interface WAN pour permettre aux clients de se connecter au serveur DynFi Firewall WireGuard, et ensuite la création d’une règle de pare-feu pour permettre aux clients d’accéder à toutes les IP auxquelles ils sont censés avoir accès.

  • Allez dans Firewall >> Rules >> WAN.

  • Cliquez sur + Ajouter pour ajouter une nouvelle règle.

  • Configurez la règle comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Action

    Pass

    Quick

    Coché

    Interface

    WAN

    Direction

    in

    Version IP/TCP

    IPv4 ou IPv4+IPv6 (au choix, en fonction de la façon dont vous voulez que les clients se connectent au serveur ; notez que ceci est distinct du type de trafic autorisé dans le tunnel une fois établi).

    Protocole

    UDP

    Source

    Décoché

    Source

    toutes

    Destination

    Non vérifié

    Destination

    Adresse WAN

    Port de destination

    Le port WireGuard spécifié dans la configuration locale à l’étape 2.

    Description

    Ajouter une description si vous le souhaitez

  • Sauvegardez la règle, puis cliquez sur Appliquer les modifications.

  • Allez ensuite dans Firewall >> Rules >> [Nom de l'interface assignée à l'étape 5(a)] - voir la note ci-dessous si vous n’avez pas assigné cette interface.

  • Cliquez sur Add pour ajouter une nouvelle règle.

  • Configurez la règle comme suit (si une option n’est pas mentionnée ci-dessous, laissez-la par défaut) :

    Action

    Pass

    Quick

    Coché

    Interface

    Il s’agit de l’interface sur laquelle vous configurez la règle (par exemple HomeWireGuard) voir la note ci-dessous.

    Direction

    In

    TCP/IP Version

    IPv4 ou IPv4+IPv6 (selon le cas)

    Protocole

    Any

    Source

    Décoché - Si vous avez assigné une interface à l’étape 5(a), sélectionnez l’alias généré pour le(s) sous-réseau(x) de l’interface* (ex. HomeWireGuard net ) - voir la note ci-dessous si vous n’avez pas assigné cette interface.

    Destination

    Non vérifié

    Destination

    Spécifiez les IP auxquelles les clients pairs doivent pouvoir accéder, par exemple “any” ou des IP/sous-réseaux spécifiques.

    Plage de ports de destination

    toutes

    Description

    Ajouter une description si vous le souhaitez

  • Sauvegardez la règle, puis cliquez sur Appliquer les modifications.

Note

Si vous n’avez pas assigné d’interface comme suggéré à l’étape 5(a), alors la seconde règle de pare-feu décrite ci-dessus devra être configurée sur le groupe WireGuard automatiquement créé qui apparaît une fois que la configuration locale est activée et que WireGuard est démarré. Vous devrez également spécifier manuellement les IPs/sous-réseaux sources pour le tunnel. Il est probablement plus facile de définir un alias (via Firewall >> Aliases) pour ces IP/sous-réseaux et de l’utiliser. Si vous n’avez qu’une seule instance locale de WireGuard et qu’un seul point de terminaison WireGuard configuré, vous pouvez utiliser le WireGuard net par défaut, bien que cela ne soit généralement pas recommandé et peux prooquer un comportement inattendu.

Étape 7 - Configurer le client WireGuard

Note

La génération de clés peut être effectuée sur un appareil approprié avec WireGuard client tools. Pour générer une paire de clés privée et publique, il suffit de wg genkey | tee private.key | wg pubkey > public.key. Alternativement, les applications WireGuard qui peuvent être utilisées sur certains appareils peuvent automatiser la génération de clés pour vous.

La configuration du client va largement au-delà de la portée de ce guide puisqu’il y a un large éventail de cibles possibles (et autant de méthodes de configuration correspondantes). Un exemple de configuration d’un client (et d’un serveur) se trouve dans l’annexe. Les principaux éléments d’information requis pour configurer un client sont décrits ci-dessous :

[Interface]

Adresse

Réfère à la ou aux IP spécifiées comme IP autorisées dans la configuration du point final sur DynFi Firewall. Par exemple, 10.10.10.2/32.

Clé publique

Réfère à la clé publique qui (avec une clé privée) doit être générée manuellement ou automatiquement sur le client. La clé publique doit ensuite être copiée dans la configuration du point final sur DynFi Firewall pour le pair client concerné - voir l’étape 3.

DNS

Réfère aux serveurs DNS que le client doit utiliser pour le tunnel - voir note ci-dessous

[Peer]

Clé publique

Réfère à la clé publique générée sur DynFi Firewall. Copiez la clé publique à partir de la configuration locale sur DynFi Firewall - voir l’étape 2.

Endpoint

Réfère à l’adresse IP publique ou au nom de domaine résoluble publiquement de votre hôte DynFi Firewall, et au port spécifié dans la configuration locale sur DynFi Firewall.

IPs autorisés

Réfère au trafic (par IP/sous-réseaux de destination) qui doit être envoyé via le tunnel. Par exemple, si tout le trafic du client doit être envoyé via le tunnel, indiquez 0.0.0.0/0 (IPv4) et/ou ::/0 (IPv6).

Note

Si le(s) serveur(s) DNS spécifié(s) n’est (ne sont) accessible(s) que par le tunnel, ou si vous souhaitez qu’il(s) soit(ent) accessible(s) par le tunnel, assurez-vous qu’il(s) est (sont) couvert(s) par les AllowedIPs.

Annexe - Exemples de configuration

Warning

Ne pas réutiliser ces exemples de clés!

Un exemple de fichier de configuration client :

[Interface]
PrivateKey = 8GboYh0YF3q/hJhoPFoL3HM/ObgOuC8YI6UXWsgWL2M=
Adresse = 10.10.10.2/32, fd00:1234:abcd:ef09:10:2/128
DNS = 192.168.1.254, fd00:1234:abcd:ef09:1:254

[Peer]
Clé publique = OwdegSTyhlpw7Dbpg8VSUBKXF9CxoQp2gAOdwgqtPVI=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = DynFi Firewall.example.com:51820

Exemple de fichier de configuration du serveur :

[Interface]
Adresse = 10.10.10.1/24, fd00:1234:abcd:ef09:10:1/64
ListenPort = 51820
PrivateKey = YNqHwpcAmVj0lVzPSt3oUnL7cRPKB/geVxccs0C0kk0=

[Peer]
PublicKey = CLnGaiAfyf6kTBJKh0M529MnlqfFqoWJ5K4IAJ2+X08=
AllowedIPs = 10.10.10.2/32, fd00:1234:abcd:ef09:10:2/128