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

De Le Wiki de Lug
Aller à la navigation Aller à la recherche
 
Ligne 263 : Ligne 263 :
* Les clefs du serveur se trouvent dans "/opt/wgui/db/server/keypair.json"
* 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
* 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";

}