Wireguard VPN - l'intranet aziendale definitivo!
Installare un server VPN per me รจ sempre stata un’impresa impossibile!
Probabilmente la mia difficoltร era dovuta alla conoscenza poco profonda degli strumenti o della tecnologia. Ogni guida che ho letto a riguardo era solo una serie infinita di regole da impostare sul firewall, comandi su comandi, compilazioni di dipendenze e spesso, quando mi cimentavo nell’impresa, ottenevo quell’errore che chi aveva scritto il tutorial non aveva nemmeno previsto ๐จ sconforto infinito.
Sicuramente รจ una procedura lunga e non alla portata di tutti.
A quanto pare perรฒ con WireGuard la situazione รจ cambiata e di molto.
Come ho giร detto in altri miei articoli se hai esigenze molto piccole (pochi host in rete ed utilizzo non commerciale) esistono alcuni servizi che ti permettono di raggiungere lo stesso scopo senza preoccuparti di nulla o quasi.
In ogni caso, avere un tuo server VPN aziendale ti permette di avere il controllo totale sulla privacy dei tuoi dati. Infatti hai la certezza che i dati scambiati all’interno della VPN passino solo e soltanto attraverso i tuoi server, nessun servizio di terze parti รจ coinvolto.
Andiamo per gradi perรฒ…
Cos’รจ WireGuard?
Cito la homepage del progetto:
WireGuardยฎ is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
In sostanza WireGuard รจ una moderna implementazione open source di un server VPN che promette:
- crittografia avanzata;
- performance;
- facilitร di utilizzo.
Installazione WireGuard
Prerequisiti:
- Docker e docker-compose installato sul tuo server (se non sai come fare prova a dare un'occhiata qui);
- 5 min del tuo tempo ๐
Iniziamo!
Crea una nuova cartella (scegli tu il nome, per questo esempio io l’ho chiamata wgtest
)
ed al suo interno crea un nuovo file con nome docker-compose.yml
.
All’interno del file appena creato copia le seguenti righe:
version: '3'
services:
wireguard:
image: ghcr.io/linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Rome
- SERVERURL=<URL_O_IP_DEL_TUO_SERVER>
- SERVERPORT=51820
- PEERS=<NUMERO_DI_UTENTI_DA_CREARE>
- PEERDNS=auto
- INTERNAL_SUBNET=10.13.13.0
- ALLOWEDIPS=0.0.0.0/0
volumes:
- ./config:/config
- ./lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: always
Sostituisci:
<URL_O_IP_DEL_TUO_SERVER>
: ip o un CNAME che punta all’ip del tuo server;<NUMERO_DI_UTENTI_DA_CREARE>
: il numero di utenti che vuoi creare e che potranno utilizzare la VPN;- se preferisci puoi anche cambiare la porta della VPN, io ho scelto la
51820
, ricordati perรฒ di aggiornare sia la variabileSERVERPORT
che le regole inports
.
Non ti resta che avviare il container docker:
docker-compose up -d
Il container ti creerร tanti utenti quanti ne hai specificati nella variabile PEERS
.
Questo รจ un log di esempio con PEERS=2
:
Clicca per espandere
root@vmi567676:~/wgtest# dc up
Creating wireguard-test ... done
Attaching to wireguard-test
wireguard-test | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
wireguard-test | [s6-init] ensuring user provided files have correct perms...exited 0.
wireguard-test | [fix-attrs.d] applying ownership & permissions fixes...
wireguard-test | [fix-attrs.d] done.
wireguard-test | [cont-init.d] executing container initialization scripts...
wireguard-test | [cont-init.d] 01-envfile: executing...
wireguard-test | [cont-init.d] 01-envfile: exited 0.
wireguard-test | [cont-init.d] 10-adduser: executing...
wireguard-test |
wireguard-test | -------------------------------------
wireguard-test | _ ()
wireguard-test | | | ___ _ __
wireguard-test | | | / __| | | / \
wireguard-test | | | \__ \ | | | () |
wireguard-test | |_| |___/ |_| \__/
wireguard-test |
wireguard-test |
wireguard-test | Brought to you by linuxserver.io
wireguard-test | -------------------------------------
wireguard-test |
wireguard-test | To support the app dev(s) visit:
wireguard-test | WireGuard: https://www.wireguard.com/donations/
wireguard-test |
wireguard-test | To support LSIO projects visit:
wireguard-test | https://www.linuxserver.io/donate/
wireguard-test | -------------------------------------
wireguard-test | GID/UID
wireguard-test | -------------------------------------
wireguard-test |
wireguard-test | User uid: 1000
wireguard-test | User gid: 1000
wireguard-test | -------------------------------------
wireguard-test |
wireguard-test | [cont-init.d] 10-adduser: exited 0.
wireguard-test | [cont-init.d] 30-config: executing...
wireguard-test | Uname info: Linux 5bc81d64769a 4.15.0-141-generic #145-Ubuntu SMP Wed Mar 24 18:08:07 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
wireguard-test | **** It seems the wireguard module is already active. Skipping kernel header install and module compilation. ****
wireguard-test | **** Server mode is selected ****
wireguard-test | **** External server address is set to mytraefik.progressify.dev ****
wireguard-test | **** External server port is set to 51821. Make sure that port is properly forwarded to port 51820 inside this container ****
wireguard-test | **** Internal subnet is set to 10.13.13.0 ****
wireguard-test | **** AllowedIPs for peers 0.0.0.0/0 ****
wireguard-test | **** PEERDNS var is either not set or is set to "auto", setting peer DNS to 10.13.13.1 to use wireguard docker host's DNS. ****
wireguard-test | **** No wg0.conf found (maybe an initial install), generating 1 server and 2 peer/client confs ****
wireguard-test | grep: /config/peer*/*.conf: No such file or directory
wireguard-test | PEER 1 QR code:
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโ โโโโโ โโ โโโ โโ โโโโ โโ โโโโ โโโ โ โโโ โโ โโโโโ โโโโ
wireguard-test | โโโโ โ โ โโโโ โโ โ โโโโโ โโ โ โโโ โ โโ โโ โ โ โโโโ
wireguard-test | โโโโ โโโโโ โโโโโโโ โ โโโโโโโ โ โโโ โโโโโ โโโโโ โโโโโโโ โโโโโ โโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโ โ โโโโโ โ โ โโโ โ โ โ โโโ โ โ โโโ โโโโโโโโโโโโ
wireguard-test | โโโโ โโโโ โ โ โโ โ โ โโโโ โ โ โ โ โ โโ โ โ โโโโโโโโโโโโโโโ
wireguard-test | โโโโโ โโโโโโ โโโโโโโโโโ โโ โโโโโโโโ โโโโโโโโโโโโโโ โโโ โ โโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโ โ โโโโโ โโโโ โ โโโโโโโโโโโโโ โโ โโโ โโโโโโ
wireguard-test | โโโโโ โโโ โโ โโโโโโโโ โโโโ โโ โโ โโโโโโโโ โโ โโโ โโ โโ โโโโโโ
wireguard-test | โโโโโโโ โโโ โโโ โโ โ โโโโโโ โโโโโ โโ โโ โโโ โโ โ โ โโโโโ โโโโ
wireguard-test | โโโโโ โโโโโโโ โโโโโโ โ โ โโ โโโ โโโ โโโ โโโโ โ โ โ โโ โโโโโโโ
wireguard-test | โโโโโ โโ โโโโโ โโ โโโโโโโโโโโ โโ โโโ โ โ โโ โโโโโโ โโ โ โโโโโ
wireguard-test | โโโโ โโ โโโโโโโโโโ โโ โ โโโโโโโโโโโโโโ โโโโโโโ โโโโโโโโโ โโโโโ
wireguard-test | โโโโ โโโโ โโโโโโโ โโโโโโโ โโโโ โโโ โโโโโโโโโ โโ โโ โโ โโโ โโโโ
wireguard-test | โโโโโโโโ โโโ โโโ โโโโ โโโโโ โโโ โโโโโโ โโโโโโโ โ โโโ โโโโโโ
wireguard-test | โโโโโโ โ โโโ โ โโโโโโ โโโโโ โ โโโ โโ โโโโโโโโ โโโโ โโโ โโ โโโโโ
wireguard-test | โโโโโ โโโโโ โโ โโโโโ โโโโโ โโโ โโโโโ โโโโโโโโโโโโโโโโโโโ โโโโ
wireguard-test | โโโโโโ โโโโโโ โโโโโโ โโโ โโโโโโโ โโโโโโโโ โ โ โ โโโโโโ โโโโโโโโ
wireguard-test | โโโโ โ โโโโโโโโโ โโโโโ โโโโ โโโโโ โโโ โโโ โโ โโโโโ โโโโโ โโโโโ
wireguard-test | โโโโ โโโโโโ โโโ โ โโ โโโโโโโ โโ โโ โโ โโ โ โ โโ โโโโโโโโโ
wireguard-test | โโโโ โโโโโโโโโ โ โโ โโโโโ โโ โโโ โ โโ โ โโโโโ โโโโโ โโโโ โโโโโโ
wireguard-test | โโโโโโโ โโโโโโ โโโ โโโโโโโโ โโโโโโ โ โโ โโโโโโโโโโโโโโ โ โโโโโโโ
wireguard-test | โโโโ โโโโโโโโ โโโโโโโโ โโโโโโ โ โโโโโ โโโโโโโโ โ โโ โโ โโโโโโโ
wireguard-test | โโโโโโโโโโโโโ โ โ โโโโโโ โโโโโโโโโโโ โโ โโโโโ โ โโโโ โโโโโโโโ
wireguard-test | โโโโ โ โโโโโโโโโโโ โ โโโโโ โโโโโ โ โโโโโโ โโ โ โโโ โโโโ โโโโโ
wireguard-test | โโโโโโโโโโโโ โโ โ โโโโโโโโ โ โโโ โโโโ โ โ โ โโ โโโ โโโ โโโโ
wireguard-test | โโโโ โโโโโ โ โโโโโโโ โโ โโโ โโ โโโ โโโโโ โ โโโโโโโ โ โโโ โโโโโ
wireguard-test | โโโโ โ โ โโ โโโโ โโโ โโโ โโโ โ โ โโโโโโโโโโโ โโโโโโโ โ โโโโโโโโ
wireguard-test | โโโโ โโโโโ โโ โโ โโโโ โโโโ โโ โ โ โโ โโโโ โโโ โโโ โโโโ โโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | PEER 2 QR code:
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโ โโโโโ โโ โโโโโ โโโ โโโ โโ โโโโ โโโ โ โโโ โโ โโโโโ โโโโ
wireguard-test | โโโโ โ โ โโโโ โโโโ โโโโ โโ โ โโโ โ โโ โโ โ โ โโโโ
wireguard-test | โโโโ โโโโโ โโโโโโโ โ โโโโโโโ โ โโโ โโโโโ โโโโโ โโโโโโโ โโโโโ โโโโ
wireguard-test | โโโโโโโโโโโโโโโโ โ โ โโโโโ โ โ โโโ โ โ โ โโโ โ โ โโโ โโโโโโโโโโโโ
wireguard-test | โโโโ โโโโ โ โ โ โ โ โ โโโโ โ โ โ โ โ โโ โ โ โโ โโโโโโโโโโโโ
wireguard-test | โโโโโ โโโโโโโโโโโโโโโโโ โโ โโโโโโโโ โโโโโโโโโโโโโโ โ โ โ โโโโโโโ
wireguard-test | โโโโโโ โโโโโโ โโโ โ โโโโโ โโโโ โ โโโโโโโโโโโโโ โโ โโโ โโโโโโโโ
wireguard-test | โโโโโโ โโ โโ โโโโโโโโโโโโ โ โโ โโ โโโโโโโโ โโโโ โ โโ โโโ โโโโโโ
wireguard-test | โโโโ โโโโโ โโโ โโ โโโโโโโ โโโโโโ โโ โโ โโโโ โโโ โ โโโโโ โโโโ
wireguard-test | โโโโโโโ โ โโโ โโโโโโ โ โโ โโโโโโ โโโ โโโ โโโโ โ โ โ โโ โ โโโโโ
wireguard-test | โโโโโโโโโโโโโโ โโโ โโโโโโโโโโโ โโ โโโ โ โ โโ โโโโโโ โโ โโโโโโโ
wireguard-test | โโโโ โโ โ โโโ โโโโโโ โ โโโโโโโโโโโโโโ โโโโโโโ โโโโโโ โ โโโโโ
wireguard-test | โโโโ โโโ โโ โโโโโ โโโโโโโ โโโโ โโโ โโโโโโโโโ โโ โโ โโโ โโโ โโโโ
wireguard-test | โโโโโโโโ โโโ โโโโโ โโโ โโโโโ โโโ โโโโโโ โโโโโโโ โ โโโ โโโโโโ
wireguard-test | โโโโโโโโ โโโ โ โโ โโโ โโโโโ โ โโโ โโ โโโโโโโโ โโโโ โโโ โโ โโโโโ
wireguard-test | โโโโ โโ โโโ โโ โโโโโโโโโโโ โโโ โโโโโ โโโโโโโ โโโโโโโโโโโ โโโโ
wireguard-test | โโโโ โโโโโโ โ โโโโโโโ โโ โโโโ โโโโโโโโ โ โโ โโโโโ โโโโโโโโ
wireguard-test | โโโโ โโโโโโโโโโ โโโโโ โโโโโโโโโโ โโโ โโ โโโ โโโโโ โโโโโ โโโโโ
wireguard-test | โโโโโ โโโโโโ โ โโ โ โโ โโโโโโโ โโ โโ โโ โโ โ โ โโ โโโโโโโโโ
wireguard-test | โโโโ โโโโโโโโโ โโโโ โโโโโ โโ โโโ โ โโ โ โโโโโ โโโโโ โโโโ โโโโโโ
wireguard-test | โโโโโโโ โโโโโโ โโโโ โโโโโโโโ โโโโโโ โ โโ โโโโโโโโโโโโโโ โ โโโโโโโ
wireguard-test | โโโโ โโโโโโโโโ โโ โโโโโโ โโโโโโ โ โโโโโ โโโโโโโโ โ โโ โโ โโโโโโโ
wireguard-test | โโโโโโโโโโโโ โโ โโโโโโโโ โโโโโโโโโโโ โโ โโโโโ โ โโโโโ โ โโโโโโโ
wireguard-test | โโโโ โ โโโโโโโโโโโ โ โโโ โ โโ โโ โ โโโโโโ โโ โโ โโโโโโโโ โโโโโ
wireguard-test | โโโโโโโโโโโโ โโ โ โโโโ โโ โ โโโ โโโโ โ โโโ โโ โโโ โ โโโโ
wireguard-test | โโโโ โโโโโ โ โโโโโโโโโโโโโโโโโ โโโ โโโโโ โ โโโโโโโ โ โโโ โโโโโโ
wireguard-test | โโโโ โ โ โโ โ โโ โโโ โโโ โโโ โ โ โโโโโโโโโโโ โโโโโโโ โ โโโโโโโโ
wireguard-test | โโโโ โโโโโ โโโโ โ โโโโ โโโโ โโ โ โ โโ โโโโ โโโ โโโ โโโโ โโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
wireguard-test | [cont-init.d] 30-config: exited 0.
wireguard-test | [cont-init.d] 90-custom-folders: executing...
wireguard-test | [cont-init.d] 90-custom-folders: exited 0.
wireguard-test | [cont-init.d] 99-custom-scripts: executing...
wireguard-test | [custom-init] no custom files found exiting...
wireguard-test | [cont-init.d] 99-custom-scripts: exited 0.
wireguard-test | [cont-init.d] done.
wireguard-test | [services.d] starting services
wireguard-test | [services.d] done.
wireguard-test | [#] ip link add wg0 type wireguard
wireguard-test | [#] wg setconf wg0 /dev/fd/63
wireguard-test | [#] ip -4 address add 10.13.13.1 dev wg0
wireguard-test | [#] ip link set mtu 1420 up dev wg0
wireguard-test | [#] ip -4 route add 10.13.13.3/32 dev wg0
wireguard-test | [#] ip -4 route add 10.13.13.2/32 dev wg0
wireguard-test | [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
wireguard-test | .:53
wireguard-test | CoreDNS-1.8.4
wireguard-test | linux/amd64, go1.16.4, 053c4d5
In console mi ha creato esattamente 2 utenti (PEER 1
e PEER 2
)
con i relativi QR code pronti per essere scansionati.
Fine. Non devi fare altro! Bello vero?
Per configurare la tua VPN sui tuoi dispositivi scarica la varie app client direttamente dal sito ufficiale di WireGuard: https://www.wireguard.com/install/
Con le app mobile devi solo scansionare il QR e la VPN si configurerร automaticamente sui tuoi dispositivi.
Su PC invece devi scaricare il file che si trova nella cartella config/peerX/peerX.conf
(alla X
sostituisci il relativo numero, nel mio caso saranno disponibili solo peer1
e peer2
).
Diamo un occhiata a quel che รจ successo nella cartella dove abbiamo creato il docker-compose.yml
:
root@vmi567676:~/wgtest# ll
total 20
drwxr-xr-x 4 root root 4096 Nov 10 17:25 ./
drwx------ 13 root root 4096 Nov 10 17:23 ../
drwxr-xr-x 9 1000 1000 4096 Nov 10 17:25 config/
-rw-r--r-- 1 root root 599 Nov 10 17:25 docker-compose.yml
drwxr-xr-x 3 root root 4096 Nov 10 17:25 lib/
root@vmi567676:~/wgtest#
Il container ha creato 2 volumes: lib
e config
, posizioniamoci nella cartella config
:
root@vmi567676:~/wgtest# cd config/
root@vmi567676:~/wgtest/config# ll
total 44
drwxr-xr-x 9 1000 1000 4096 Nov 10 17:25 ./
drwxr-xr-x 4 root root 4096 Nov 10 17:25 ../
drwxr-xr-x 2 1000 1000 4096 Nov 10 17:25 coredns/
drwxr-xr-x 2 root root 4096 Nov 10 17:25 custom-cont-init.d/
drwxr-xr-x 2 root root 4096 Nov 10 17:25 custom-services.d/
-rw------- 1 1000 1000 162 Nov 10 17:25 .donoteditthisfile
drwx------ 2 1000 1000 4096 Nov 10 17:25 peer1/
drwx------ 2 1000 1000 4096 Nov 10 17:25 peer2/
drwxr-xr-x 2 1000 1000 4096 Nov 10 17:25 server/
drwxr-xr-x 2 1000 1000 4096 Nov 10 17:25 templates/
-rw------- 1 1000 1000 585 Nov 10 17:25 wg0.conf
Come ti dicevo nella mia installazione ci sono le cartelle peer1
e peer2
con all’interno:
- il file di configurazione (il
.conf
) - il QR code pronto da scansionare
Peer1 - Clicca per espandere
root@vmi567676:~/wgtest/config# ll peer1
total 24
drwx------ 2 1000 1000 4096 Nov 10 17:25 ./
drwxr-xr-x 9 1000 1000 4096 Nov 10 17:25 ../
-rw------- 1 1000 1000 258 Nov 10 17:25 peer1.conf
-rw------- 1 1000 1000 1025 Nov 10 17:25 peer1.png
-rw------- 1 1000 1000 45 Nov 10 17:25 privatekey-peer1
-rw------- 1 1000 1000 45 Nov 10 17:25 publickey-peer1
Peer2 - Clicca per espandere
root@vmi567676:~/wgtest/config# ll peer2
total 24
drwx------ 2 1000 1000 4096 Nov 10 17:25 ./
drwxr-xr-x 9 1000 1000 4096 Nov 10 17:25 ../
-rw------- 1 1000 1000 258 Nov 10 17:25 peer2.conf
-rw------- 1 1000 1000 1025 Nov 10 17:25 peer2.png
-rw------- 1 1000 1000 45 Nov 10 17:25 privatekey-peer2
-rw------- 1 1000 1000 45 Nov 10 17:25 publickey-peer2
Conclusioni
Le promesse di WireGuard sono tutte mantenute!
Installazione e configurazione in tempi record, performance al top, non si puรฒ chiedere di meglio.
Ho diviso questo articolo in 2 parti. La seconda puntata riguarda l’installazione di una web dashboard. Il pannello web in questione permette di configurare WireGuard senza doverti collegare ogni volta alla console SSH per creare nuovi utenti.
Spero di riuscire a pubblicarlo al piรน presto.
Nel frattempo puoi rileggerti qualche vecchio articolo o se vuoi restare in contatto con me puoi unirti al mio canale Telegram dove pubblico periodicamente sconti, news tech ed altro ๐
Sei riuscito a configurare il tuo server VPN?
AP
ย