Asustor Wireguard sous VPN (Niveau Expert)

Drthrax74

Chevalier Jedi
1 Janvier 2021
449
107
83
Bonjour,

Ce guide permet de créer un conteneur VPN Wireguard sous Docker.

Pour ceux qui veulent testé sans devoir compiler, un apk tout prêt. (Etape 1 requise)



Contrainte technique
- La configuration de l'application Wireguard est sur le port 51820 en UDP.
- L'application a été déclarer dans ADM sous le nom APP#Wireguard.
- Si pare-feu, ajouter la règle dans ADM Defender.
- Clés pré-définis pour le lancement. (Possibilité de customisé)
- Réseau VPN pré-définis. (Possibilité de customisé)
- Conteneur en mode Host. (Pas de bridge)
- L'utilisateur qui lance le conteneur est l'ID 1000 et le groupe 100. (Root requis: ????, je ne penses pas)
- Absence IPv6 (Attention APN mobile IPV6)

Etape 1: Installer ADM Kernel Extensions
- Ouvrir l'application App Central
- Dans le champs recherche: ADM Kernel Extensions
- Entrer
- Cliquer sur installé

Etape 2: Création d'un partage nommée Download
Le partage Download servira de dossier pour transférer l'application compilé du serveur linux vers le nas.
- Accéder au Panel du Nas
- Contrôle d'accès
- Onglet Dossiers Partagés
- Ajouter
> Nom: Download
> Suivant


Etape 3: Machine Virtuelle sous Debian 11
La première chose est d'avoir une machine virtuelle dans le réseau physique. (Debian 11)
Ma machine à comme ip 192.168.1.33
L'identifiant est marc.

Etape 4: Se connecter en ssh sur Debian 11
- Ouvrir l'invite de commande
- Taper la commande: ssh marc@192.168.1.33
- Passer en root (su - ou sudo -i)

Etape 5: Monter le partage sur Debian 11
Bash:
clear;
apt install -y cifs-utils 1>/dev/null;

# Remplir les variables
PARTAGE_IP=
PARTAGE_USER=<user l'ID 1000>
PARTAGE_PASS=<Mot de passe du compte>
PARTAGE_ID=1000
PARTAGE_GID=100

# Création de dossier
mkdir -p /mnt/Download;
mkdir /etc/credentials;

# Fichier contenant les identifiants d'accès au partage
echo "username=$PARTAGE_USER
password=$PARTAGE_PASS
vers=3.0
file_mode=0777
dir_mode=0777
workgroup=WORKGROUP" > /etc/credentials/.smbpassword;
chmod 600 /etc/credentials/.smbpassword;

# Création du service qui monte le partage
echo "[Unit]
Description=Montage du partage Download
Requires=network-online.target
After=NetworkManager.service
[Mount]
What=//$PARTAGE_IP/Download
Where=/mnt/Download
Type=cifs
TimeoutSec=5s
Options=credentials=/etc/credentials/.smbpassword,x-gvfs-show,uid=$PARTAGE_ID,gid=$PARTAGE_GID
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/mnt-Download.mount;

# Rafraichir SystemD
systemctl daemon-reload;

# Gestion du service
systemctl enable  mnt-Download.mount;
systemctl restart mnt-Download.mount;

# Vérification
systemctl status mnt-Download.mount;
df -h /mnt/Download;


Etape 6: Installer les dépendances pour la compilation de l'application Wireguard
Bash:
# Outils Linux
apt install -y git   1>/dev/null;
apt install -y unzip 1>/dev/null;
apt install -y wget  1>/dev/null;

# Script Asustor pour la compiltation
rm -rf /usr/bin/apkg-*;
wget --inet4-only https://downloadgb.asustor.com/developer/APKG_Utilities_2.0_0517.zip -O /tmp/APKG_Utilities_2.0_0517.zip;
unzip -o /tmp/APKG_Utilities_2.0_0517.zip -d /usr/bin;
chmod u+x  /usr/bin/apkg-*

Etape 7: Télécharger les sources
Bash:
clear;
cd;
rm -rf ~/APPZ;
git clone https://github.com/dexter74/Public.git ~/APPZ 2>/dev/null;

Etape 8: Démarrer la compilation
Bash:
cd ~/APPZ/ASUSTOR/AppCentral/Wireguard  && apkg-tools_py3.py create .


Etape 9: Transférer le package sur le NAS
mv ~/APPZ/ASUSTOR/AppCentral/Wireguard/*.apk /mnt/Download/;

Etape 10: Déploiement de l'application sur le Nas
- Ouvrir l'App Central
- Gérer (En bas à gauche)
- Installation Manuelle
- Parcourir
- \\IPDUNAS\Download
- Sélectionner Wireguard_1.0_x86-64.apk
-
Valider

1697768984789.png

Sous l'interface ADM, vous verrez le logo suivant:

1697772811068.png



Journal de log:


Etape 10: Installation de Wireguard (Windows)
Le serveur est en /32 pour éviter la communication inter-client !
La privatekey est la clé privée du client.
L'adresse est l'ip du client, qui est déclarer dans le serveur !

Le serveur NAS à comme application AdGuardHome ce qui impliques qui répond au requête DNS. (10.0.0.1 est l'ip du NAS dans le réseau VPN)
La PublicKey est la clé Public du serveur !
J'autorise l'accès au réseau 192.168.1.0/24 dans le réseau VPN.
Pour faire passer tout les flux dans Wireguard: 0.0.0.0/0, ::/0
La valeur endpoint est l'adresse du VPN.

[Interface]
PrivateKey = 6F91qZF8VAp2xlH2FROUXqTxajtyxvtqStWjyyQpx2o=
ListenPort = 51820
Address = 10.0.0.2/24
DNS = 10.0.0.1

[Peer]
PublicKey = AExeAE6MgH0ofW4WxSDLXoIuvoGyW6UPjWCUfya+Dno=
AllowedIPs = 192.168.1.0/24
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 192.168.X.X:51820


Vérification de fonctionnement:
1697772698579.png


Etape 11: Customisation de la configuration du serveur
Les fichiers de configurations sont stockés dans le NAS et pas dans le conteneur pour permettre la maintenance plus facile. A terme l'emplacement sera changé.
/etc/wireguard/wg0.conf
/etc/wireguard/privatekey
/etc/wireguard/publickey

# Random Seed: (Voir plus bas son utilité) Azft/BmHlu+ubO+mm/o5ZvDE9rHSItqXBfxVUZv+yWc3LnzhZufWDtZ0pDQ2dO1eEO2a7sGx5fjZg5w4xQcp+3+rd7eR0rL9+6QvD3bLxng0ddqn8RK7kJE2GO+MI08xZGBvqdTrwAE/LtzL/IisrLe1xQAPmSiuMoVmiXVtD2EAajnKCAUIum482udWqGFdDtAerA+qj434cfgRwegU2ShRIRgwgr7ovNUMrGCh/IjCpEUDeuPhrxIAJMaFCuBA5XKoUo0hzfeHD5NinutpvwNY/+FK77FdR4mwzVMysHy6YoZzP7/L/KBi8pMmrN1PBqW8qjMAyc/hUzyFEorBZQ==

Etape 12: Amélioration
- Pour l'heure, j'ai utiliser le dossier classique de stockage de Wireguard pour la configuration, mais à terme il sera dans le partage Docker.
- Ensuite, il faut que je vois pour le binaire wg que je puisses l'utiliser pour générer des clés uniques.
- Les clients à termes auront leur fichiers de configuration générer automatiquement.

Pour les Bidouilleurs:

> config.json : Paramètre de l'application pour ADM
> generation_wireguard.sh : Générateur de fichier de config (clé en dur) pour le moment
> pre-install.sh: Variables contenants les clés !
> post-install.sh: UID et GUID pour ceux qui veulent lancer avec un autre compte

Générer une configuration pour le serveur
- Ouvrir la page https://www.wireguardconfig.com/

- Random Seed: Clé de chiffrement qui génère la configuration, ne pas perdre !
- Listen Port: Port d'écoute du serveur
- CIDR: Adresse Réseau du VPN !
- Number of Clients: Nombre de clients autorisés à se connecter
- Endpoint (Optional): Adresse du serveur Wireguard (IP:pORT)

# iMPORTANT: Par faut l'interface réseau est eth0, si on utilises l'interface eth1, il faut remplacer le terme eth0 par eth1 sur le up et down.
- Post-Up rule : Règles du pare-feu lorsque le VPN se lance (Ouvre port wireguard)
- Post-Down rule : Règles du pare-feu lorsque le vpn s'éteint. (Fermeture du port wireguard)


- Use Pre-Shared Keys (Enhanced Security): Pré-authentification lors de l'authentification (optionnel mais recommandé)

Configuration Client avec DNS Google.
La clé pre-shared est déclaré du côté serveur
[Interface]
Address = <IP du client>/24
ListenPort = 51820
PrivateKey = <Clé Privée du Client>
DNS = 8.8.8.8


[Peer]
PublicKey = <Clé public du serveur>
PresharedKey =<Clé Preshared du client>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <IP OU Adresse du serveur>:51820
 
Dernière édition:
  • J'aime
Réactions: MilesTEG et FX Cachem
Super tuto qu'il faudra que je suive prochainement :)

Est-ce que depuis une connexion au serveur, on peut accéder aux ressources du réseau LAN auquel appartient le NAS ?
 
@Drthrax74
Pourrais tu indiquer pour chaque étape où les commandes doivent être lancées : en ssh sur le nas ? Dans un terminal de la machine virtuelle ? Etc…
 
Le tutorial marche pas super bien car le forwarding marche pas .

Si on relance le conteneur avec une adresse réseau différente, celle ci ne change pas.
 
  • J'aime
Réactions: Dami1
Bonjour,
Après moulte tentative, j'ai réussi à crée mon conteneur Wireguard !



Je gardes mes notes dans ce messages:

Bonjour,

Ce tutorial permet la mise en place d'un serveur VPN de type Wireguard sous Docker.

Le script de création du conteneur, fournit le Forwading en modifiant le fichier /etc/sysctl.conf et recharge les paramètres.
Le conteneur utilise l'interface ETH1 de la carte réseau du NAS.
Un exemple est déjà fait dans les fichiers de configuration, pour comprendre la configuration.

Pour générer une configuration:
- Aller sur https://www.wireguardconfig.com/
- Noter dans un bloc note et le sauvegarder (Random Seed)
- Modifier eth0 par eth1 dans les "Post-XX rule"

Etape 1: Mettre à jour le NAS
Il est important que le NAS soit à jour pour permettre l'installation du package ADM Kernel Extensions dans l'AppCentral.

Etape 2: Installer dans l'AppCentral "ADM Kernel Extensions"
Depuis le panel d'administration du NAS, cliquer sur App Central puis en haut à droite, chercher ADM Kernel Extension.
Cliquer sur Installé

Etape 3: Machine Virtuelle (Debian, Ubuntu, Arch)
Il faut disposer d'une machine Linux sous Debian, Ubuntu pour permettre la compilation du package.

Etape 4: Monter un partage entre la machine Hôte et l'invité
- Eteindre la Machine Virtuelle (V.M)
- Editer la configuration de la VM
- Dossiers Partagés
- Ajoute un nouveau dossier partagé.
- Chemin du dossier: Cliquer sur la flèche vers le bas puis Autre ,ensuite aller dans Téléchargement et Sélectionner un Dossier
- Nom du dossier: Downloads
- Point de montage: /mnt/Download

Le point de montage est le chemin dans la VM qui sera accessible. (C'est ici qu'on transfére l'APK)

Etape 5: Installation des dépendances
Bash:
clear;
sudo apt install -y git;
sudo rm -rf /usr/bin/apkg-* 2>/dev/null;
sudo wget --inet4-only https://downloadgb.asustor.com/developer/APKG_Utilities_2.0_0517.zip -O /tmp/APKG_Utilities_2.0_0517.zip;
sudo unzip -o /tmp/APKG_Utilities_2.0_0517.zip -d /usr/bin;
sudo chmod u+x  /usr/bin/apkg-*;


Etape 6: Téléchargement de la source
Bash:
sudo mkdir -p /mnt/Download/APK/ 2>/dev/null;
sudo rm -rf /mnt/Download/APK/*.apk /root/APPZ 2>/dev/null;
sudo git clone https://github.com/dexter74/Public.git /root/APPZ;


Etape 7: Edition de la configuration de Wireguard
Il faut vérifier si l'interface utiliser en SSH sur le NAS, si vous utilisez pas ETH1 il suffira de remplacer ETH1 en eth0 dans wg0.conf
ip add show eth0
ip add show eth1
ip add show eth2

Bash:
sudo nano /root/APPZ/ASUSTOR/AppCentral/Wireguard/CONTROL/config/privatekey; # Clé Privée du serveur
sudo nano /root/APPZ/ASUSTOR/AppCentral/Wireguard/CONTROL/config/publickey;  # Clé Public du serveur
sudo nano /root/APPZ/ASUSTOR/AppCentral/Wireguard/CONTROL/config/wg0.conf;  # Configuration du serveur par rapport aux Clients

Etape 8: Compiler le code source en APK
Bash:
sudo bash -c 'cd /root/APPZ/ASUSTOR/AppCentral/Wireguard && apkg-tools_py3.py create .'
sudo bash -c 'mv /root/APPZ/ASUSTOR/AppCentral/Wireguard/*.apk /mnt/Download/APK'

Etape 9: Installation du package compilé (APK)
Si la compilation c'est bien passé, il suffit d'aller dans le dossier Téléchargements sous Windows puis APK et vous trouverez le fichier Wireguard_1.0_x86-64.apk.
Aller dans App Central :
> Gérer (en bas à gauche de la fenêtre)
> Installation Manuelle
> Cliquer sur Parcourir
> Aller dans Téléchargements puis APK et choisir le fichier Wireguard_1.0_x86-64.apk.
> Charger (Suivre les étapes dans l'écran)

Etape 10: Connexion au serveur
Connecter votre client avec les informations de connexion.

Etape 11: Vérifier la liaison
Depuis un autre appareil, il faut se connecter en SSH, puis taper la commande suivante pour se connecter dans l'environnement du conteneur.
docker ps | grep Wireguard; # Check l'état du conteneur
docker exec -it Wireguard sh; # Connexion dans le conteneur
wg; # Vérifier les clients connectés

Exemples:
interface: wg0
public key: *************************************
private key: (hidden)
listening port: 51820

peer: *********************************************
endpoint: 192.168.1.XX:51820
allowed ips: 10.0.0.X/32
latest handshake: 42 seconds ago
transfer: 240.80 MiB received, 9.01 GiB sent

Etape 12: Autoriser les réseaux (Clients)
Je souhaite autoriser le client à accéder au réseau 192.168.1.0/24, 10.0.0.0/24 et je que tous les flux passe par le VPN 0.0.0.0/0 .

AllowedIPs = 192.168.1.0/24, 10.0.0.0/24, 0.0.0.0/0

Etape 13: Optionnel
Pour choisir le serveur DNS et le MTU du client, il suffit de modifier la configuration, et d'ajouter DNS = X.X.X.X dans la section [Interface]

Exemple:
[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXX
ListenPort = 51820
Address = 10.0.0.2/24
DNS = 10.0.0.1
MTU = 1420

[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXX
AllowedIPs = 192.168.1.0/24, 10.0.0.0/24, 0.0.0.0/0
Endpoint = 192.168.1.X:51820

Pour ma part, une fois la liaison faite, je fait un ping du serveur depuis le client, puis google.fr ce qui me permet de confirmer le bon fonctionnement .

Les fichiers de configurations se trouve dans le partage Docker > Wireguard (/share/Docker/Wireguard/)
 
  • J'aime
Réactions: Dami1 et MilesTEG
@Dami1 : J'adore ton commentaire :), sa me fait réellement plaisir !

Tu peux utiliser mon conteneur Wireguard (Serveur) de manière officiel si tu le veux.