11 KiB
navigation, title, main
| navigation | title | main | ||
|---|---|---|---|---|
| true | Wireguard |
|
:ellipsis{left=0px width=40rem top=10rem blur=140px}
Wireguard
::alert{type="info"} đŻ Objectifs :
- Installer Wireguard
- Configurer les clients
- Accéder au réseau sécurisé ::
Introduction
L'utilisation d'un VPN permet d'accĂ©der Ă distance aux ressources locales du serveur sans les exposer sur internet. C'est notamment une maniĂšre propre de sĂ©curiser l'accĂšs Ă la console SSH, plutot que d'exposer le port sur internet. C'est pouvoir se connecter Ă son rĂ©seau oĂč que l'on soit, de maniere sĂ©curisĂ©e, et de faire dialoguer des machines qui sont sur des rĂ©seaux diffĂ©rents.
Ici nous utiliserons Wireguard, un serveur VPN sécurisé et trÚs performant, à l'aide des conteneurs :
- wg-easy pour le serveur, qui propose une interface web trÚs simple pour controler les connexions et télécharger les fichiers de conf (notamment par QR code pour les téléphones)
- Wireguard pour les clients linux
Il existe aussi des clients Windows, MacOS, iOS et Android.
Le principe est le suivant :
- Sur internet, n'importe qui peut contacter n'importe quel box internet et donc essayer de contacter n'importe quel serveur exposé.
- Votre serveur est sur votre rĂ©seau local. Il est accessible depuis le rĂ©seau local mais pas depuis internet, mis Ă part les services exposĂ©s (comme nous l'avons fait avec Dockge). Pour accĂ©der aux ressources non exposĂ©es, vous devez ĂȘtre connectĂ© sur le meme rĂ©seau que votre serveur et donc etre chez vous. De plus, vous devez laisser ouvert les ports utilisĂ©s par vos services Ă travers le pare feu de votre serveur.
- Nous souhaitons ici au contraire, depuis n'importe oĂč, pouvoir accĂ©der de maniere securisĂ©e aux services non exposĂ©s sur internet du serveur, comme la console SSH qui permet de se connecter Ă la machine par exemple.
- Nous souhaitons aussi accéder aux services d'autres serveurs, et par exemple relier de maniere sécurisée deux instances de Dockge pour tout controler depuis la meme interface.
Pour cela nous allons créer un réseau privé virtuel, ou VPN, c'est à dire un tunnel sécurisé auquel personne n'a accÚs à part les machines que vous relierez entre elles. Elles feront partie d'un nouveau réseau et pourront dialoguer entre elle comme dans un réseau local.
D'autre part, vous pourrez ajouter votre tĂ©lĂ©phone, un ordinateur portable ou n'importe quel appareil au rĂ©seau pour pouvoir utiliser vos ressources depuis vos appareils quotidiens, oĂč que vous soyiez.
Dans cette illustration, la machine 1 est sur deux réseaux :
- son réseau local (tous les appareils liés à la box, avec une adresse IP du type
192.168.x.xdonc ici la machine 1 et la machine 2) - le réseau du VPN (tous les appareils reliés au VPN, avec une seconde adresse IP du type
10.8.x.xdonc ici la machine 1 et 4)
On peut aussi faire en sorte que les machines reliées au réseau virtuel partagent les acces à leur réseau local. Ici nous ne le ferons pas, pour des raisons de sécurité, et de complexité en terme de sous-réseau (si les deux machines distantes ont des machines locales qui utilisent la meme adresse IP locale, par exemple 192.168.1.1, cela posera des conflits).
Ainsi, sur le réseau virtuel, seules les machines directement reliées pourront dialoguer entre elle depuis ce réseau. Elles ne pourront pas dialoguer avec une machine situées sur un autre réseau local et non reliée au VPN.
CÎté serveur
::alert{type="info"} đ A vĂ©rifier au prĂ©alable :
- Vérifiez si le port
51820 UDPestlibre sur votre serveur, et bien routé dans le NAT de la boxSource 51820 UDP -> Destination 51820 UDP -> Serveur. En effet, votre serveur étant derriÚre votre box, le port de votre box doit etre joignable et rediriger vers le port de votre serveur connecté à votre VPN. - Vérifiez aussi que le port
51821 TCPest libre sur le serveur pour accéder à la web ui. ::
::alert{type="warning"} :::list{type="warning"}
- Attention: Si votre IP n'est pas fixe, vous devez avoir un nom de domaine redirigeant vers l'IP Ă jour Ă l'aide d'un DynDNS. Si votre opĂ©rateur internet utilise un CGNAT, vous ĂȘtes cuit. Vous devrez utiliser un VPS externe pour ce tuto, et y connecter votre serveur comme client. ::: ::
Structure des dossiers
root
âââ docker
âââ wg-easy
âââ config
â âââ etc_wireguard
âââ compose.yaml
âââ .env
Ouvrez Dockge, cliquez sur compose et nommez la stack wg_easy.
Copiez la configuration suivante :
---
services:
wg-easy:
environment:
- INSECURE=true
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- ./etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
::alert{type="success"} âš Astuce :
-
Vous pouvez personnaliser le port de wireguard et de la webui au lieu des ports par défaut.
-
Ajoutez le label de watchtower afin d'automatiser les mises Ă jour
services wg-easy: #... labels: - com.centurylinklabs.watchtower.enable=true
::
Puis déployez la stack et connectez vous via le web en local sur http://ipduserveur:51821
::alert{type="danger"} :::list{type="danger"}
- En cas d'échec, vérifiez les rÚgles du pare-feu. ::: ::
Une fois connecté, la webui vous guidera :
- Pour créer votre compte et mot de passe d'accÚs
- Pour configurer l'host à utiliser dans les fichiers de conf : utilisez l'IP publique de votre box internet (ou de votre VPS), ou le nom de domaine redirigeant vers l'IP de votre box, le cas écheant.
Une fois fait:
- Cliquez sur « Administrator » > « Admin Panel » > « Config »
- Modifiez
Allowed IPsen remplaçant0.0.0.0/24par10.8.0.0/24. Cela signifie que seules les requĂȘtes IP de10.8.0.1Ă10.8.0.255seront redirigĂ©es dans le tunnel (split tunneling), laissant ainsi Ă l'appareil la possibilitĂ© d'etre connectĂ© Ă d'autres tunnels, et Ă accĂ©der Ă internet par lui meme. Si vous voulez tout rediriger dans le tunnel, y compris l'acces Ă internet, laissez0.0.0.0/24. - Supprimez l'IPv6, cela n'apportera que des problĂšmes.
Recuperation des fichiers de conf
Afin de configurer les clients, vous devez télécharger les fichiers de conf générés par l'host :
- Connectez vous via le web en local sur
http://ipduserveur:51821 - Créez un client
- Modifiez le client en cliquant sur l'icone d'édition
- Modifiez
Server Allowed IPsen ajoutant10.8.0.0/24. Cela signifie que le serveur laissera vos clients accĂ©der Ă toutes les IP10.8.0.1Ă10.8.0.255connectĂ©es Ă lui, et donc laissera les clients dialoguer entre eux si nĂ©cessaire. Si vous voulez laisser vos clients accĂ©der Ă tous les appareils rĂ©seau connectĂ©s autour de votre serveur en local, mettez0.0.0.0, Ă condition de l'avoir fait prĂ©cĂ©demment dans la configuration gĂ©nĂ©rale. - (facultatif) Si votre client est un serveur qui doit ĂȘtre connectĂ© en permanence, modifiez
Advanced>Persistent Keep Aliveen mettant25. - Sauvegardez
- Téléchargez le fichier de conf
- Renommez le en
wg0.conf. (Si ce n'est pas le premier, incrémentez:wg1.conf, etc...)
Sur le serveur client
::alert{type="info"} :::list{type="info"}
- Nous partons du principe que le serveur client est un serveur linux avec Docker installé ::: ::
Structure des dossiers
root
âââ docker
âââ wireguard
âââ config
â âââ wg_confs
âââ compose.yaml
Creez le dossier /docker/wireguard/config/wg_confs.
::alert{type="success"} ⚠Astuce pour les allergiques au terminal : vous pouvez utiliser File Browser pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal. ::
sudo mkdir -p /docker/wireguard/config/wg_confs
Créez le fichier wg0.conf
sudo vi /docker/wireguard/config/wg_confs/wg0.conf
Rentrez en édition en appuyant sur i puis Copiez collez le contenu du wg0.conf que vous avez téléchargé. Puis sortez du mode édition en appuyant sur Echap puis tapez :x.
::alert{type="success"}
⚠Astuce : Un autre moyen est de transférer le fichier par sftp dans le dossier /home/nomdutilisateur puis de le copier dans le bon dossier :
```sh
sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs
::
Creez le compose.yaml dans /docker/wireguard :
sudo vi /docker/wireguard/compose.yaml
Appuyez sur i pour rentrer en modification et copiez la configuration ci-dessous
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
network_mode: host
cap_add:
- NET_ADMIN
- SYS_MODULE #optional
environment:
- TZ=Europe/Paris
volumes:
- /docker/wireguard/config:/config
- /lib/modules:/lib/modules #optional
restart: unless-stopped
Appuyez sur Echap puis tapez :x pour quitter et sauvegarder.
Lancez le conteneur :
cd /docker/wireguard
sudo docker compose up -d
::alert{type="info"} :::list{type="info"}
- A répéter pour chaque client ::: ::
Autres appareils
- Téléphone : installer wireguard et scanner le QR code via le webui (http://ipduserveur:51821)
- PC : Installer wireguard client et mettre directement le fichier de conf téléchargé via le webui
::alert{type="warning"} :::list{type="warning"}
- Attention : Si des machines clientes sont sur le meme réseau local que le serveur (derriere la box), éditez le fichier
wg0.confuploadé sur cette machine en changeant avec l'adresse locale du serveur :Endpoint = ipduserveur:51820{lang=properties} ::: ::
Et voilĂ ce que cela peut donner !