Marvin Pascale

[B.Log]

30 Aprile 2024

Wireguard GUI

In questo articolo vedremo l’installazione e la configurazione di due GUI per wireguard. Se non lo hai già fatto, ti consiglio di leggere gli articoli precedenti dove spiego più nel dettaglio cosa è wireguard e perché è ad oggi la mia scelta se si parla di VPN moderne.

NB: Questo articolo funge da compendio al video pubblicato sul mio canale.

Pillole wireguard GUI

wg-easy

La prima gui che andiamo a vedere è wg-easy. E’ la gui per wireguard più semplice da installare e gestire ed è basata su docker.

Prenderò come esempio una distribuzione Almalinux 9; come primo passo installiamo i wireguard tools

# dnf install wireguard-tools -y

abilitiamo il modulo Linux per iptables

# echo ip_tables > /etc/modules-load.d/ip_tables.conf
# modprobe ip_tables

Crediamo una cartella per il nostro docker stack (es: /opt/docker/wg-easy) ed editiamo il file docker-compose.yml

version: "3.8"
volumes:
  etc_wireguard:

services:
  wg-easy:
    environment:
      # Change Language:
      # (Supports: en, ua, ru, tr, no, pl, fr, de, ca, es, ko, vi, nl, is, pt, chs, cht, it, th, hi)
      - LANG=it
      # ⚠️ Required:
      # Change this to your host's public address
      - WG_HOST=[IP O FQDN]

      # Optional:
      - PASSWORD=123_password_figa!
      # - PORT=51821
      # - WG_PORT=51820
      # - WG_DEFAULT_ADDRESS=10.8.0.x
      # - WG_DEFAULT_DNS=1.1.1.1
      # - WG_MTU=1420
      # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
      # - WG_PERSISTENT_KEEPALIVE=25
      # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
      # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
      # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
      # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
      - UI_TRAFFIC_STATS=true
      - UI_CHART_TYPE=3 # (0 Charts disabled, 1 # Line chart, 2 # Area chart, 3 # Bar chart)

    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    volumes:
      - etc_wireguard:/etc/wireguard
    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

ora ci basta avviare lo stack

# docker compose up -d

e consultare la pagina http://[IP O FQDN SERVER]:51821 da un browser

wg-easy

wireguard-ui

L’altra proposta è un po’ più articolata ma fornisce qualche strumento in più. I servizi gireranno nativamente sulla nostra macchina GNU/Linux.

Anche in questo caso partiremo da una Almalinux 9.

# dnf install wireguard-tools -y

editiamo il file /etc/sysctl.conf e abilitiamo l’ipv4 forward.

net.ipv4.ip_forward=1

carichiamo la nuova configurazione

# sysctl -p

ora procediamo con l’installazione e la configurazione della nostra GUI

# mkdir /opt/wireguard-ui
# cd /opt/wireguard-ui/
# wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz
# tar -xf wireguard-ui-v0.6.2-linux-amd64.tar.gz && rm -f wireguard-ui-v0.6.2-linux-amd64.tar.gz

creiamo il file /opt/wireguard-ui/.env

SESSION_SECRET=2PGqERMCk3XgPDWWmbdMdMqQH
WGUI_USERNAME=marvin
WGUI_PASSWORD=123_password_super_sicura

e inseriamo anche due file bash per il postup e il postdown dei server wireguard

NB: nel mio caso l’interfaccia pubblica è l’eth0 ma può variare da ambiente a ambiente.

/opt/wireguard-ui/postup.sh

#!/usr/bin/bash
# /opt/wireguard-ui/postup.sh
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

/opt/wireguard-ui/postdown.sh

#!/usr/bin/bash
# /opt/wireguard-ui/postdown.sh
iptables -D FORWARD -i wg0 -j ACCEPT
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

ora procediamo con la creazione dei due servizi e la configurazione del systemd path

/etc/systemd/system/wireguard-ui-daemon.service

[Unit]
Description=WireGuard UI Daemon
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/opt/wireguard-ui
EnvironmentFile=/opt/wireguard-ui/.env
ExecStart=/opt/wireguard-ui/wireguard-ui -bind-address "0.0.0.0:5000"

[Install]
WantedBy=multi-user.target

/etc/systemd/system/wgui.service

 [Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart [email protected]

[Install]
RequiredBy=wgui.path

/etc/systemd/system/wgui.path

[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target

questo ultimo notificherà le modifiche al file di configurazione /etc/wireguard/wg0.conf facendo eseguire un riavvio del servizio wireguard.

Eseguiamo il reload, avviamo i servizi e configuriamo l’esecuzione automatica al boot.

# systemctl daemon-reload
# systemctl enable --now wgui.{path,service} wireguard-ui-daemon.service

Avviati i servizi non ci resta che collegarci alla pagina web http://[IP O FQDN SERVER]:5000 e procedere con la configurazione finale.

wireguard-ui

Extra

Entrambe le soluzioni offrono un GUI intuitiva e semplice. Come detto anche nel video consiglio di non esporre direttamente i servizi web ma di utilizzare ad esempio un reverse proxy.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: