« WireGuard LXC Alpine Linux » : différence entre les versions

De Le Wiki de Lug
Aller à la navigation Aller à la recherche
 
(14 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{Barre de progression|100|largeur=400px|hauteur=10|couleur1 = green|texte=Testé et approuvé}}
{{Barre de progression|100|largeur=400px|hauteur=10|couleur1 = green|texte=Testé et approuvé}}
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = A noter qu'il existe une version Docker tout en un (VPN + GUI de gestion) beaucoup plus simple à mettre en place, mais avec surcouche réseau d'un conteneur, nommé [https://github.com/wg-easy/wg-easy wg-easy] (non testé).
}}


= LXC Alpine 3.12 =
= LXC Alpine 3.12 =
== WireGuard Server ==
== Installation de WireGuard Server ==
Avec un téléphone android connecté !!! :
Avec un téléphone android connecté !!! :


Ligne 19 : Ligne 25 :
  lxcalpine:~# apk update && apk upgrade
  lxcalpine:~# apk update && apk upgrade
  lxcalpine:~# apk add wireguard-tools
  lxcalpine:~# apk add wireguard-tools
 
== Configuration de WireGuard Server ==
On génère la configuration sur [https://www.wireguardconfig.com/ '''wireguardconfig''']
On génère la configuration sur [https://www.wireguardconfig.com/ '''wireguardconfig''']


Ligne 137 : Ligne 143 :
  lxcalpine:~# rc-update add wireguard default
  lxcalpine:~# rc-update add wireguard default
  lxcalpine:~# service wireguard start
  lxcalpine:~# service wireguard start
On peut [[#Test|tester]] avec "wg", rebooter pour vérifier etc...
On peut [[#Test_du_service|tester]] avec "wg", rebooter pour vérifier etc...


== (Optionnel) QR Code ==
== (Optionnel) QR Code ==
Ligne 147 : Ligne 153 :


voila!
voila!
== Ajout d'un utilisateur ==
On crée les clefs de cryptage pour le nouvel utilisateur dans le repertoir "tmp" :
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = Remplacer <font color = blue>nom_utilisateur</font> par le nom souhaité.
}}
# cd /tmp/
# umask 077
# name="<font color = blue>nom_utilisateur</font>"
# wg genkey | tee "${name}.key" | wg pubkey > "${name}.pub"
# wg genpsk > "${name}.psk"
On peuple le fichier de configuration de WireGuard avec le nouvel utilisateur :
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = Remplacer <font color = blue>10.0.0.5/32</font> par une adresse VPN libre.
}}
# echo "" >> /etc/wireguard/wg0.conf
# echo "[Peer]" >> /etc/wireguard/wg0.conf
# echo "PublicKey = $(cat "${name}.pub")" >> /etc/wireguard/wg0.conf
# echo "PresharedKey = $(cat "${name}.psk")" >> /etc/wireguard/wg0.conf
# echo "AllowedIPs = <font color = blue>10.0.0.5/32</font>" >> /etc/wireguard/wg0.conf
Ensuite on peuple le fichier de configuration utilisateur, il faut d'abord récupérer la clef pubique du serveur (ici en bleu) :
# wg
<font color = green>interface</font>: <font color = darkgreen>wg0</font>
  public key: <font color = blue>MaClEfPubLiQUe=</font>
  private key: (hidden)
<font color = grey>...</font>
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = <font color = blue>10.0.0.5/24</font> adresse VPN libre sélectionner dans le fichier utilisateur ci-dessus / <font color = blue>192.168.1.0/24</font> l'adresse du serveur cible à atteindre (différentes configuration possible [[#Configuration_de_WireGuard_Server|voir la configuration serveur)]]
}}
# echo "[Interface]" > "/etc/wireguard/${name}.conf"
# echo "Address = <font color = blue>10.0.0.5/24</font>" >> "/etc/wireguard/${name}.conf"
# echo "ListenPort = <font color = green>51820</font>" >> "/etc/wireguard/${name}.conf"
# echo "PrivateKey = $(cat "${name}.key")" >> "/etc/wireguard/${name}.conf"
# echo "" >> "/etc/wireguard/${name}.conf"
# echo "[Peer]" >> "/etc/wireguard/${name}.conf"
# echo "PublicKey = <font color = blue>MaClEfPubLiQUe=</font>" >> "/etc/wireguard/${name}.conf"
# echo "PresharedKey = $(cat "${name}.psk")" >> "/etc/wireguard/${name}.conf"
# echo "AllowedIPs = <font color = blue>192.168.1.0/24</font>" >> "/etc/wireguard/${name}.conf"
# echo "Endpoint = <font color = blue>monserveurvpn.exemple.net</font>:<font color = green>51820</font>" >> "/etc/wireguard/${name}.conf"
Enfin on redémarre le service pour appliquer les changement :
# service wireguard restart
= wireguard-ui =
[https://github.com/ngoduykhanh/wireguard-ui Source github]
== Installation ==
On récupère le programme :
# mkdir -p /opt/wgui
# cd /opt/wgui
# <nowiki>https://</nowiki>github.com/ngoduykhanh/wireguard-ui/releases/download/v<font color = greenn>0.6.2</font>/wireguard-ui-v<font color = greenn>0.6.2</font>-linux-amd64.tar.gz
# tar -xzf wireguard-ui-v<font color = greenn>0.6.2</font>-linux-amd64.tar.gz
# rm wireguard-ui-v<font color = greenn>0.6.2</font>-linux-amd64.tar.gz
On peut tester le fonctionnement du serveur en lançant le bin :
# /opt/wgui/wireguard-ui
Le serveur web sera accessible sur le port 5000, avec l'utilisateur "admin" et mot de passe "admin" par défault (penser à changer le mot de passe immédiatement).
== Création des scripts RC ==
=== (Optionnel) Script pour surveillé wg0.conf ===
On crée le script exécutable :
# vi /usr/local/bin/wgui
#!/bin/sh
wg-quick down wg0
wg-quick up wg0
# chmod +x /usr/local/bin/wgui
Puis le script RC pour l'utiliser :
# vi /etc/init.d/wgui
#!/sbin/openrc-run
command=/sbin/inotifyd
command_args="/usr/local/bin/wgui /etc/wireguard/wg0.conf:w"
pidfile=/run/${RC_SVCNAME}.pid
command_background=yes
# chmod +x /etc/init.d/wgui
Enfin on inscrit le script RC au système :
# rc-service wgui start
# rc-update add wgui default
=== Script RC pour lancer le GUI automatiquement ===
# vi /etc/init.d/wireguard-ui
#!/sbin/openrc-run
name="wireguard-ui"
directory="/opt/wgui"
command="/opt/wgui/wireguard-ui"
command_background="yes"
pidfile="/run/${RC_SVCNAME}.pid"
depend() {
    need net
}
# chmod +x /etc/init.d/wireguard-ui
# rc-update add wireguard-ui default
# rc-service wireguard-ui start
# reboot
== Importation ancienne configuration ==
"wireguard-ui" est un projet fonctionnel mais dont le développement est abandonné/lent. L'interface web n'est pas prévu pour lire une ancienne configuation, si vous ne démarrez pas votre VPN avec la GUI (donc en partant de 0) il faudra modifier des fichiers .json à la main dans "/opt/wgui/db/"
A noter qu'un utilisateur à créé [https://github.com/ngoduykhanh/wireguard-ui/issues/485 un script d'import automatisé] (non testé).
Certains paramètres pourront être recréé via la GUI, d'autres devront être modifié à la main (pensez a sauvegarder votre wg0.conf et fichiers clients), exemples :
* Les clefs du serveur se trouvent dans "/opt/wgui/db/server/keypair.json"
* il est possible de recréer les utilisateur via la GUI, mais si vous spécifiez la "PublicKey" et "PresharedKey" alors il faudra renseigner la "private_key" dans "/opt/wgui/db/clients/<font color = green>client</font>.json
== vhost nginx ==
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = Voir [[Nginx_ReverseProxy_LXC_Alpine_Linux|Reverse Proxy Nginx]]
}}
server {
listen 80;
    listen [::]:80;
    server_name    <font color = blue>wireguard.exemple.net</font>;
    # return 404;
    return 301 <nowiki>https://</nowiki>$host$request_uri;
}
server {
server_name    <font color = blue>wireguard.exemple.net</font>;
    error_page 403  <nowiki>https://</nowiki><font color = blue>wireguard.exemple.net</font>;
    location / {
            #proxy_set_header Upgrade          $http_upgrade;
            #proxy_set_header Connection        "upgrade";
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            #proxy_set_header X-Forwarded-Host  $host;
            #proxy_set_header X-Forwarded-Port  $server_port;
            proxy_pass http://<font color = blue>IP_SERVEUR_WEB</font>:5000;
            # proxy_pass <nowiki>https://</nowiki>IP_SERVEUR_WEB:PORT; #Alternatif pour redirection sur https
            #proxy_buffering off; #activer pour désactiver le "buffering"
    }
    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/<font color = blue>wireguard.exemple.net</font>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<font color = blue>wireguard.exemple.net</font>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/<font color = blue>wireguard.exemple.net</font>/chain.pem;
    #ssl_stapling on;
    #ssl_stapling_verify on;
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
}

Dernière version du 4 avril 2026 à 13:45

100 % Testé et approuvé

   

LXC Alpine 3.12

Installation de WireGuard Server

Avec un téléphone android connecté !!! :

Incroyablement économe !

On autorise le routage :

lxcalpine:~# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
lxcalpine:~# sysctl -p
net.ipv4.ip_forward = 1
lxcalpine:~# rc-update add sysctl default

Puis on install :

lxcalpine:~# apk update && apk upgrade
lxcalpine:~# apk add wireguard-tools

Configuration de WireGuard Server

On génère la configuration sur wireguardconfig

# vi /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = *****************************************
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = *****************************************
PresharedKey = *****************************************
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = *****************************************
PresharedKey = *****************************************
AllowedIPs = 10.0.0.3/32

[Peer]
PublicKey = *****************************************
PresharedKey = *****************************************
AllowedIPs = 10.0.0.4/32

# vi /etc/wireguard/client1.conf

[Interface]
Address = 10.0.0.2/24
ListenPort = 51820
PrivateKey = *****************************************

[Peer]
PublicKey = *****************************************
PresharedKey = *****************************************
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = myserver.dyndns.org:51820

Test du service

lxcalpine:~# wg-quick up wg0

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
lxcalpine:~# wg
interface: wg0
  public key: *****************************************
  private key: (hidden)
  listening port: 51820

peer: *****************************************
  preshared key: (hidden)
  allowed ips: 10.0.0.2/32

peer: *****************************************
  preshared key: (hidden)
  allowed ips: 10.0.0.3/32

peer: *****************************************
  preshared key: (hidden)
  allowed ips: 10.0.0.4/32

Fin du test :

lxcalpine:~# wg-quick down wg0
[#] ip link delete dev wg0
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Création du script init.d pour lancer le service

source

lxcalpine:~# vi /etc/init.d/wireguard
#!/sbin/openrc-run

depend() {
   need localmount
   need net
}

start() {
   ebegin "Starting wireguard"
   /usr/bin/wg-quick up wg0
   eend $?
}

stop() {
   ebegin "Stopping wireguard"
   /usr/bin/wg-quick down wg0
   eend $?
}

On active le script immédiatement et au redémarrage :

lxcalpine:~# chmod +x /etc/init.d/wireguard
lxcalpine:~# rc-update add wireguard default
lxcalpine:~# service wireguard start

On peut tester avec "wg", rebooter pour vérifier etc...

(Optionnel) QR Code

lxcalpine:~# apk add libqrencode

Exemple :

lxcalpine:~# qrencode -t ansiutf8 < /etc/wireguard/client1.conf

voila!

Ajout d'un utilisateur

On crée les clefs de cryptage pour le nouvel utilisateur dans le repertoir "tmp" :

# cd /tmp/
# umask 077
# name="nom_utilisateur"
# wg genkey | tee "${name}.key" | wg pubkey > "${name}.pub"
# wg genpsk > "${name}.psk"

On peuple le fichier de configuration de WireGuard avec le nouvel utilisateur :

# echo "" >> /etc/wireguard/wg0.conf
# echo "[Peer]" >> /etc/wireguard/wg0.conf
# echo "PublicKey = $(cat "${name}.pub")" >> /etc/wireguard/wg0.conf
# echo "PresharedKey = $(cat "${name}.psk")" >> /etc/wireguard/wg0.conf
# echo "AllowedIPs = 10.0.0.5/32" >> /etc/wireguard/wg0.conf

Ensuite on peuple le fichier de configuration utilisateur, il faut d'abord récupérer la clef pubique du serveur (ici en bleu) :

# wg
interface: wg0
  public key: MaClEfPubLiQUe=
  private key: (hidden)
...
# echo "[Interface]" > "/etc/wireguard/${name}.conf"
# echo "Address = 10.0.0.5/24" >> "/etc/wireguard/${name}.conf"
# echo "ListenPort = 51820" >> "/etc/wireguard/${name}.conf"
# echo "PrivateKey = $(cat "${name}.key")" >> "/etc/wireguard/${name}.conf"
# echo "" >> "/etc/wireguard/${name}.conf"
# echo "[Peer]" >> "/etc/wireguard/${name}.conf"
# echo "PublicKey = MaClEfPubLiQUe=" >> "/etc/wireguard/${name}.conf"
# echo "PresharedKey = $(cat "${name}.psk")" >> "/etc/wireguard/${name}.conf"
# echo "AllowedIPs = 192.168.1.0/24" >> "/etc/wireguard/${name}.conf"
# echo "Endpoint = monserveurvpn.exemple.net:51820" >> "/etc/wireguard/${name}.conf"

Enfin on redémarre le service pour appliquer les changement :

# service wireguard restart

wireguard-ui

Source github

Installation

On récupère le programme :

# mkdir -p /opt/wgui
# cd /opt/wgui
# https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
# tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
# rm wireguard-ui-v0.6.2-linux-amd64.tar.gz

On peut tester le fonctionnement du serveur en lançant le bin :

# /opt/wgui/wireguard-ui

Le serveur web sera accessible sur le port 5000, avec l'utilisateur "admin" et mot de passe "admin" par défault (penser à changer le mot de passe immédiatement).

Création des scripts RC

(Optionnel) Script pour surveillé wg0.conf

On crée le script exécutable :

# vi /usr/local/bin/wgui
#!/bin/sh
wg-quick down wg0
wg-quick up wg0
# chmod +x /usr/local/bin/wgui

Puis le script RC pour l'utiliser :

# vi /etc/init.d/wgui
#!/sbin/openrc-run

command=/sbin/inotifyd
command_args="/usr/local/bin/wgui /etc/wireguard/wg0.conf:w"
pidfile=/run/${RC_SVCNAME}.pid
command_background=yes
# chmod +x /etc/init.d/wgui

Enfin on inscrit le script RC au système :

# rc-service wgui start
# rc-update add wgui default

Script RC pour lancer le GUI automatiquement

# vi /etc/init.d/wireguard-ui
#!/sbin/openrc-run

name="wireguard-ui"
directory="/opt/wgui"
command="/opt/wgui/wireguard-ui"
command_background="yes"
pidfile="/run/${RC_SVCNAME}.pid"

depend() {
    need net
}
# chmod +x /etc/init.d/wireguard-ui
# rc-update add wireguard-ui default
# rc-service wireguard-ui start
# reboot

Importation ancienne configuration

"wireguard-ui" est un projet fonctionnel mais dont le développement est abandonné/lent. L'interface web n'est pas prévu pour lire une ancienne configuation, si vous ne démarrez pas votre VPN avec la GUI (donc en partant de 0) il faudra modifier des fichiers .json à la main dans "/opt/wgui/db/"

A noter qu'un utilisateur à créé un script d'import automatisé (non testé).

Certains paramètres pourront être recréé via la GUI, d'autres devront être modifié à la main (pensez a sauvegarder votre wg0.conf et fichiers clients), exemples :

  • Les clefs du serveur se trouvent dans "/opt/wgui/db/server/keypair.json"
  • il est possible de recréer les utilisateur via la GUI, mais si vous spécifiez la "PublicKey" et "PresharedKey" alors il faudra renseigner la "private_key" dans "/opt/wgui/db/clients/client.json

vhost nginx

server {
listen 80;
    listen [::]:80;
    server_name     wireguard.exemple.net;
   # return 404;
    return 301 https://$host$request_uri;
}

server {
server_name     wireguard.exemple.net;
    error_page 403  https://wireguard.exemple.net;

    location / {
            #proxy_set_header Upgrade           $http_upgrade;
            #proxy_set_header Connection        "upgrade";
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            #proxy_set_header X-Forwarded-Host  $host;
            #proxy_set_header X-Forwarded-Port  $server_port;
            proxy_pass http://IP_SERVEUR_WEB:5000;
            # proxy_pass https://IP_SERVEUR_WEB:PORT; #Alternatif pour redirection sur https
            #proxy_buffering off; #activer pour désactiver le "buffering"
    }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot


    ssl_certificate /etc/letsencrypt/live/wireguard.exemple.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/wireguard.exemple.net/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/wireguard.exemple.net/chain.pem;
    #ssl_stapling on;
    #ssl_stapling_verify on;

server_tokens off;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

}