Aller au contenu

loli71

Membres
  • Inscription

  • Dernière visite

Tout ce qui a été posté par loli71

  1. 1. Préambule Ce tutoriel a pour but d'installer un serveur VPN wireguard en docker incluant wireguard-ui pour faciliter l'administration du serveur et des clients. WireGuard est un protocole de communication et un logiciel libre et open source permettant de créer un réseau privé virtuel. Il est conçu avec les objectifs de facilité d'utilisation, de performances et de surface d'attaque basse. 2. Prérequis Avoir un NAS compatible Docker, voir la liste ici https://www.synology.com/fr-fr/dsm/packages/Docker. Savoir se connecter au NAS via SSH en root : https://www.nas-forum.com/forum/topic/57289-tuto-accès-ssh-et-root-via-dsm-6-et-7/ Utiliser Docker-compose ou portainer 3. Principe Dans ce tuto, j'utilise l'image docker linuxserver/docker-wireguard qui est maintenu à jour régulièrement ainsi que wireguard-ui (https://github.com/ngoduykhanh/wireguard-ui). Le fait d'inclure le binaire wireguard-ui dans linuxserver/docker-wireguard permet entre autre de voir aussi facilement les peers connectés et leurs stats. Sources: https://hub.docker.com/r/linuxserver/wireguard https://docs.linuxserver.io/images/docker-wireguard https://github.com/ngoduykhanh/wireguard-ui 4. Mise en place Dans ce tuto j'utilise les informations suivantes, qui seront à adapter selon votre réseau et vos besoins (surtout dans le fichier docker-compose.yaml): Réseau LAN local: 192.168.1.0/24 Serveur DNS dans mon réseau Lan local (ma box): 192.168.1.1 qui permet la résolution entre autre des noms internes Réseau interne de Wireguard: 10.13.13.0/24 ATTENTION: Dans ce tuto, la configuration mise en place permet d'accéder au lan local depuis les clients, mais le reste du traffic internet ne passera pas par ce VPN. Pour faire passer l'ensemble du traffic d'un client par le VPN, utiliser "0.0.0.0/0" comme valeur dans le docker-compose pour les variables ALLOWEDIPS et WGUI_DEFAULT_CLIENT_ALLOWED_IPS 4.1 Création des répertoires: Il faut créer les répertoires suivants dans le dossier partagé docker: wireguard/ ├── config ├── custom-files │ ├── custom-cont-init.d │ └── custom-services.d ├── db └── wireguard-ui Vous pouvez utiliser File Station pour cela, le résultat doit être le suivant: 4.2 Création des fichiers: Il faut ensuite créer les fichiers suivants, soit en utilisant l'éditeur de texte du DSM soit en ssh avec vim wireguard/custom-files/custom-cont-init.d/init.sh: #!/usr/bin/with-contenv bash echo "**** installing inotify-tools ****" apk update && apk add inotify-tools wireguard/custom-files/custom-cont-init.d/install_wg-ui.sh: #!/usr/bin/with-contenv bash echo "**** installing wg-ui ****" cp /wireguard-ui/wg-ui /app/wg-ui chmod 755 /app/wg-ui if [ -r /wireguard-ui/wg_template.conf ]; then cp /wireguard-ui/wg_template.conf /wg_template.conf fi wireguard/custom-files/custom-services.d/watch.sh: #!/usr/bin/with-contenv bash while inotifywait -e modify -e create /config/wg0.conf; do wg-quick down wg0 wg-quick up wg0 done wireguard/custom-files/custom-services.d/wg-ui.sh: #!/usr/bin/with-contenv bash if netstat -apn | grep -q ":5000 "; then echo "Another service is using port 5000, disabling wg-ui" sleep infinity else echo $ENV echo "start wg-ui" exec \ cd /app \ ./wg-ui fi wireguard-ui/wg-ui (binaire): Récupérer la dernière version de l'exécutable pour l'archi correspondante à votre synology sur https://github.com/ngoduykhanh/wireguard-ui/releases décompressez la, et déposez l'exécutable wireguard-ui sous le nom wireguard-ui/wg-ui Exemple en ssh: export VERSION=v0.5.1 # Changer la version pour pointer sur la dernière export ARCHI=linux-amd64 # Changer architecture si besoin cd /tmp/ wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/${VERSION}/wireguard-ui-${VERSION}-${ARCHI}.tar.gz tar -zxf wireguard-ui-${VERSION}-${ARCHI}.tar.gz mv wireguard-ui /volume1/docker/wireguard/wireguard-ui/wg-ui rm -f wireguard-ui-${VERSION}-${ARCHI}.tar.gz OPTIONNEL: Si vous souhaitez fournir votre propre template wireguard-ui, vous pouvez partir du fichier ci dessous: wireguard/wireguard-ui/wg_template.conf: # This file was generated using wireguard-ui (https://github.com/ngoduykhanh/wireguard-ui) # Please don't modify it manually, otherwise your change might get replaced. # Address updated at: {{ .serverConfig.Interface.UpdatedAt }} # Private Key updated at: {{ .serverConfig.KeyPair.UpdatedAt }} [Interface] Address = {{$first :=true}}{{range .serverConfig.Interface.Addresses }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}} ListenPort = {{ .serverConfig.Interface.ListenPort }} PrivateKey = {{ .serverConfig.KeyPair.PrivateKey }} {{if .globalSettings.MTU}}MTU = {{ .globalSettings.MTU }}{{end}} PostUp = {{ .serverConfig.Interface.PostUp }} PostDown = {{ .serverConfig.Interface.PostDown }} {{range .clientDataList}}{{if eq .Client.Enabled true}} # ID: {{ .Client.ID }} # Name: {{ .Client.Name }} # Email: {{ .Client.Email }} # Created at: {{ .Client.CreatedAt }} # Update at: {{ .Client.UpdatedAt }} [Peer] PublicKey = {{ .Client.PublicKey }} {{if .Client.PresharedKey }}PresharedKey = {{ .Client.PresharedKey }} {{end}}AllowedIPs = {{$first :=true}}{{range .Client.AllocatedIPs }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{range .Client.ExtraAllowedIPs }},{{.}}{{end}} {{end}}{{end}} Vous devez obtenir le résultat suivant dans votre répertoire partagé docker: wireguard/ ├── config/ ├── custom-files/ │ ├── custom-cont-init.d/ │ │ ├── init.sh │ │ └── install_wg-ui.sh │ └── custom-services.d/ │ ├── watch.sh │ └── wg-ui.sh ├── db/ └── wireguard-ui1/ ├── wg_template.conf # optionnel └── wg-ui 7. Création du conteneur Récupérez le PUID/PGID à utiliser en vous connectant en ssh et tapez dans la console "id", on prendra alors note du uid/gid retourné. ATTENTION: il semblerait qu'il soit nécessaire d'utiliser le gid retourné pour le groupe "administrators" au lieu de celui retourné pour le groupe "users" dans la commande "id" docker-compose.yaml: version: "3.6" services: wireguard: image: lscr.io/linuxserver/wireguard:latest container_name: wireguard cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.conf.all.src_valid_mark=1 - net.ipv6.conf.all.disable_ipv6=1 - net.ipv6.conf.default.disable_ipv6=1 environment: - PUID=1026 - PGID=101 - TZ=Europe/Paris # pour wireguard partie serveur: - SERVERURL=<monnas.synology.me> # A REMPLACER - SERVERPORT=51820 - PEERDNS=192.168.1.1 - INTERNAL_SUBNET=10.13.13.0 - ALLOWEDIPS=192.168.1.0/24, 10.13.13.0/24 # exemple donnant accès uniquement au lan local au travers du VPN, pour faire passer tout traffic mettre 0.0.0.0/0 - LOG_CONFS=false # Affiche ou non le QR codes généré dans la log docker # pour la partie wireguard-ui: - SESSION_SECRET=<une chaine aléatoirement> # A REMPLACER - WGUI_USERNAME=<le compte admin> # A REMPLACER - WGUI_PASSWORD=<le mot de passe admin> # A REMPLACER - WGUI_ENDPOINT_ADDRESS=<monnas.synology.me> # A REMPLACER - WGUI_DNS=192.168.1.1 - WGUI_SERVER_INTERFACE_ADDRESSES=10.13.13.0/24 - WGUI_SERVER_LISTEN_PORT=51820 - WGUI_DEFAULT_CLIENT_ALLOWED_IPS=192.168.1.0/24, 10.13.13.0/24 # exemple donnant accès uniquement au lan local au travers du VPN, pour faire passer tout traffic mettre 0.0.0.0/0 - WGUI_SERVER_POST_UP_SCRIPT=iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE - WGUI_SERVER_POST_DOWN_SCRIPT=iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE volumes: - /lib/modules:/lib/modules - /volume1/docker/wireguard/config:/config - /volume1/docker/wireguard/custom-files/custom-cont-init.d:/custom-cont-init.d:ro - /volume1/docker/wireguard/custom-files/custom-services.d:/custom-services.d:ro # pour wg-ui - /volume1/docker/wireguard/db:/app/db - /volume1/docker/wireguard/wireguard-ui:/wireguard-ui:ro ports: - 63710:51820/udp - 51821:5000/tcp restart: always ATTENTION: pensez bien à: Modifier les points de montage pour qu'ils correspondent bien au chemin sur votre synology Mettre vos propres valeurs lorsqu'il est indiqué en commentaire # A REMPLACER. Remarque: Les variables dans ce fichier semblent être déclarées en double, mais la première partie permet de configurer wireguard, et la deuxième partie (après pour wg-ui) permet de déclarer les valeurs par défaut utilisées dans l'interface Web. Explication des valeurs: SERVERURL et WGUI_ENDPOINT_ADDRESS: doivent contenir le nom qui sera utilisé par les clients pour se connecter (on mets le nom fourni par DDNS si pas d'ip fixe sur la box). Ex: monnas.synology.me SERVERPORT et WGUI_SERVER_LISTEN_PORT: contiennent la valeur du port UDP définie dans la partie serveur (en écoute) et dans la configuration du client PEERDNS et WGUI_DNS: contiennent l'IP du serveur DNS qui sera envoyé aux clients pour qu'ils l'utilisent (dans notre cas, il s'agit de l'ip de la box 192.168.1.1 afin de pouvoir résoudre mes noms internes) INTERNAL_SUBNET et WGUI_SERVER_INTERFACE_ADDRESSES: contiennent la définition du réseau qu'utilisera Wireguard, la variable est optionnelle si tu ne veux pas la spécifier car elle est mise par défaut à 10.13.13.0/24 ALLOWEDIPS et WGUI_DEFAULT_CLIENT_ALLOWED_IPS: contiennent la liste des réseaux qui seront routés depuis le clients vers le serveur, dans notre cas le réseau interne de wireguard bien sûr mais aussi le LAN local 192.168.1.0/24. Cela permet un accès aux machines du Lan local, mais le reste du traffic (internet) ne sera pas envoyé dans le VPN depuis le client. Si vous souhaitez que tout le traffic des clients passe par le VPN, il suffit de mettre à la place "0.0.0.0/0" dans ces champs à la place. LOG_CONFS: Affiche ou non le QR codes généré dans la log docker, dans notre cas, on aura les QR codes dans l'interface web, donc j'ai mis à false WGUI_SERVER_POST_UP_SCRIPT et WGUI_SERVER_POST_DOWN_SCRIPT: règles iptables nécessaires pour le bon fonctionnement du serveur wireguard (trouvé dans plusieurs autres tutos) 7.1 Via portainer Créer une nouvelle stack en utilisant le fichier docker-compose.yaml ci-dessus. Déployez le stack. 7.2 Via ssh Créez le fichier wireguard/docker-compose.yaml avec les informations ci-dessus. Pour créer le conteneur, connectez vous en ssh et passer les commandes suivantes en tant que root: cd /volume1/docker/wireguard docker-compose pull Ce qui va télécharger la dernière version de l'image. Puis : docker-compose up -d Si pas d'erreur à la création (souvent dues à des caractères de tabulation, une directive dans le fichier docker-compose mal orthographiée ou désalignée, etc...), vous verrez un petit done apparaître en vert. Si vous avez l'erreur suivante, cela veut dire que votre version de kernel n'inclue pas les modules nécessaires, vous devez alors installer ces modules manuellement. RTNETLINK answers: Not supported **** The wireguard module is not active. If you believe that your kernel should have wireguard support already, make sure that it is activated via modprobe! **** **** If you have an old kernel without wireguard support built-in, you can try using the legacy tag for this image to compile the modules from scratch. **** Vous pouvez vous appuyer sur ce tuto https://www.blackvoid.club/wireguard-spk-for-your-synology-nas/ ou les projets github suivants: https://github.com/vegardit/synology-wireguard https://github.com/runfalk/synology-wireguard (avec patch https://github.com/runfalk/synology-wireguard/issues/154#issuecomment-1169393940 pour DSM7.1) 8. Accès au Web-ui Vous pourrez désormés accéder au Web-UI par l'url http://<ip de votre syno:51821/ Vous pouvez bien évidement ajouter une entrée dans le proxy inversé du DSM pour les accés en https avec un nom de domaine. REMARQUE: Si vous avez mis un autre port que le 51820 dans le fichier docker-compse.yaml pour la config du serveur et web-ui, il est nécessaire de sauvegarder et d'appliquer la configuration une première fois avant toute opération afin de modifier le fichier wg0.conf et de redémarre le serveur pour sa prose en compte. 8.1 Forward de port: Il vous faudra aussi mettre en place le forward de port sur votre box/routeur interne pour permettre l'accès à votre serveur wireguard. En se basant sur le fichier docker-compose.yaml fourni dans ce tuto, il vous faudra forwarder le port externe 51820 vers le l'adresse interne de votre nas sur le port 51820 en UDP Voici un exemple de mise en place sur un routeur Asus: 9. Mise à jour: 9.1 Mise à jour manuelle facile de wireguard-ui: Vous pouvez utiliser le script suivant pour mettre à jours facilement la version de wireguard-ui sans avoir à relancer le container docker: Connectez vous en ssh, puis en tant que root passez les commandes suivantes en prenant soin de bien renseigner les variable VERSION et ARCHI correspondant à vos besoins: export VERSION=v0.5.1 # Changer la version pour pointer sur la dernière export ARCHI=linux-amd64 # Changer architecture si besoin cd /tmp/ wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/${VERSION}/wireguard-ui-${VERSION}-${ARCHI}.tar.gz tar -zxf wireguard-ui-${VERSION}-${ARCHI}.tar.gz # sauvegarde la version en place au cas où cp -f /volume1/docker/wireguard/wireguard-ui/wg-ui /volume1/docker/wireguard/wireguard-ui/wg-ui.sov mv wireguard-ui /volume1/docker/wireguard/wireguard-ui/wg-ui rm -f wireguard-ui-${VERSION}-${ARCHI}.tar.gz cat <<EOF | docker exec --interactive wireguard bash s6-rc stop custom-svc-wg-ui.sh cp -f /wireguard-ui/wg-ui /app/wg-ui s6-rc start custom-svc-wg-ui.sh EOF 9.2 Mise à jour automatique: L'image docker linuxserver/wireguard peut être mise à jour automatiquement grace à watchtower. Pour wireguard-ui, on peut imaginer un script bash appelé en crontab qui ferait les actions suivantes: - Vérification de la présence d'une nouvelle version sur le github - Téléchargement de la version correspondant au synology - Décompression du binaire et dépose dans le répertoire dédié - Copie du binaire dans le docker au bon endroit et redémarrage du service associé PS: je suis en train de bosser sur ce fameux script de mise à jour de wireguard-ui Les pistes: Utilisation de l'api suivante pour détecter une nouvelle version .. mais comment la comparer à la version installée .. à creuser 😉 https://api.github.com/repos/ngoduykhanh/wireguard-ui/releases/latest

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.