WireGuard è una moderna tecnologia VPN (Virtual Private Network) con crittografia all'avanguardia. Rispetto ad altre soluzioni simili, come IPsec e OpenVPN, WireGuard è più veloce, più facile da configurare e più performante. È multipiattaforma e può essere eseguito quasi ovunque, inclusi Linux, Windows, Android e macOS. Wireguard è una VPN peer-to-peer; non utilizza il modello client-server. A seconda della sua configurazione, un peer può fungere da server o client tradizionale.
WireGuardworks creando un'interfaccia di rete su ciascun dispositivo peer che funge da tunnel. I peer si autenticano a vicenda scambiandosi e convalidando le chiavi pubbliche, imitando il modello SSH. Le chiavi pubbliche vengono mappate con un elenco di indirizzi IP consentiti nel tunnel. Il traffico VPN è incapsulato in UDP.
In questo tutorial, configureremo WireGuard su una macchina Ubuntu 18.04 che fungerà da server VPN. Ti mostreremo anche come configurare WireGuard come client. Il traffico del client verrà instradato attraverso il server Ubuntu 18.04.
Questa configurazione può essere utilizzata come protezione dagli attacchi Man in the Middle, navigare sul Web in modo anonimo, aggirare i contenuti con restrizioni geografiche o consentire ai tuoi colleghi di connettersi in modo sicuro alla rete aziendale quando lavorano in remoto.
Prerequisiti #
Avrai bisogno di un server Ubuntu 18.04 a cui puoi accedere come root o account con privilegi sudo.
Configurazione del server WireGuard #
In questa sezione, installeremo WireGuard sulla macchina Ubuntu e lo configureremo per fungere da server. Inoltre configureremo il sistema per instradare il traffico dei clienti attraverso di esso.
Installazione di WireGuard su Ubuntu 18.04 #
WireGuard è incluso nei repository Ubuntu predefiniti. Per installarlo esegui i seguenti comandi:
sudo apt update
sudo apt install wireguard
WireGuard funziona come un modulo del kernel, che viene compilato come un modulo DKMS. In caso di successo, vedrai il seguente output:
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-88-generic/updates/dkms/
depmod...
DKMS: install completed.
Quando aggiorni il kernel, il modulo WireGuard verrà compilato rispetto al nuovo kernel.
Configurazione WireGuard #
WireGuard viene fornito con due strumenti da riga di comando denominati wg
e wg-quick
che consentono di configurare e gestire le interfacce WireGuard.
Esegui il comando seguente per generare le chiavi pubbliche e private:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
I file verranno generati nel /etc/wireguard
directory. Puoi visualizzare i file con cat
o less
. La chiave privata non dovrebbe mai essere condivisa con nessuno.
Ora che le chiavi sono state generate, dovremo configurare il dispositivo tunnel che indirizzerà il traffico VPN.
Il dispositivo può essere configurato sia dalla riga di comando utilizzando il ip
e wg
oppure creando il file di configurazione con un editor di testo.
Crea un nuovo file chiamato wg0.conf
e aggiungi i seguenti contenuti:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
L'interfaccia può essere denominata in qualsiasi modo, tuttavia si consiglia di utilizzare qualcosa come wg0
o wgvpn0
. Le impostazioni nella sezione dell'interfaccia hanno il seguente significato:
-
Indirizzo:un elenco separato da virgole di indirizzi IP v4 o v6 per
wg0
interfaccia. Utilizza gli IP di un intervallo riservato alle reti private (10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16). -
ListenPort:la porta su cui WireGuard accetterà le connessioni in entrata.
-
PrivateKey - una chiave privata generata da
wg genkey
comando. (Per vedere il contenuto del file esegui:sudo cat /etc/wireguard/privatekey
) -
SaveConfig:se impostato su true, lo stato corrente dell'interfaccia viene salvato nel file di configurazione all'arresto.
-
PostUp - comando o script che viene eseguito prima di aprire l'interfaccia. In questo esempio, utilizziamo iptables per abilitare il masquerading. Ciò consentirà al traffico di lasciare il server, fornendo ai client VPN l'accesso a Internet.
Assicurati di sostituire
ens3
dopo-A POSTROUTING
in modo che corrisponda al nome dell'interfaccia di rete pubblica. Puoi trovare facilmente l'interfaccia eseguendo il seguente comando:ip -o -4 route show to default | awk '{print $5}'
-
PostDown - comando o script che viene eseguito prima di abbassare l'interfaccia. Le regole di iptables verranno rimosse una volta che l'interfaccia è inattiva.
Il wg0.conf
e privatekey
i file non dovrebbero essere leggibili agli utenti normali. Usa chmod
per impostare i permessi su 600
:
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
Una volta fatto, porta il wg0
interfaccia utilizzando gli attributi specificati nel file di configurazione:
sudo wg-quick up wg0
Il comando produrrà un output simile al seguente:
[#] 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 ens3 -j MASQUERADE
Esegui wg show wg0
per verificare lo stato e la configurazione dell'interfaccia:
sudo wg show wg0
interface: wg0
public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
private key: (hidden)
listening port: 51820
Puoi anche eseguire ip a show wg0
per verificare lo stato dell'interfaccia:
ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
Per portare l'interfaccia WireGuard all'avvio, eseguire il comando seguente:
sudo systemctl enable wg-quick@wg0
Rete del server e configurazione del firewall #
Affinché NAT funzioni, è necessario abilitare l'inoltro IP. Apri il /etc/sysctl.conf
file e aggiungi o decommenta la seguente riga:
sudo nano /etc/sysctl.conf
/etc/sysctl.confnet.ipv4.ip_forward=1
Salva il file e applica la modifica:
sudo sysctl -p
net.ipv4.ip_forward = 1
Se stai usando UFW per gestire il tuo firewall, devi aprire il traffico UDP sulla porta 51820
:
sudo ufw allow 51820/udp
Questo è tutto. Il peer Ubuntu che fungerà da server è stato impostato.
Installazione client Linux e macOS #
Le istruzioni di installazione per tutte le piattaforme supportate sono disponibili su https://wireguard.com/install/. Sui sistemi Linux, puoi installare il pacchetto utilizzando il gestore dei pacchetti di distribuzione e su macOS con brew
. Dopo aver installato WireGuard, segui i passaggi seguenti per configurare il dispositivo client.
Il processo per configurare un client Linux e macOS è praticamente lo stesso che hai fatto per il server. Inizia generando le chiavi pubbliche e private:
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
Crea il file wg0.conf
e aggiungi i seguenti contenuti:
sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Le impostazioni nella sezione dell'interfaccia hanno lo stesso significato di quando si configura il server:
- Indirizzo:un elenco separato da virgole di indirizzi IP v4 o v6 per il
wg0
interfaccia. - PrivateKey - Per vedere il contenuto del file sulla macchina client, esegui:
sudo cat /etc/wireguard/privatekey
La sezione peer contiene i seguenti campi:
- PublicKey - una chiave pubblica del peer a cui vuoi connetterti. (Il contenuto del
/etc/wireguard/publickey
del server file). - Endpoint:un IP o un nome host del peer a cui desideri connetterti seguito da due punti, quindi un numero di porta su cui è in ascolto il peer remoto.
- AllowedIPs:un elenco separato da virgole di indirizzi IP v4 o v6 da cui è consentito il traffico in entrata per il peer e a cui è diretto il traffico in uscita per questo peer. Stiamo utilizzando 0.0.0.0/0 perché stiamo instradando il traffico e vogliamo che il peer del server invii pacchetti con qualsiasi IP di origine.
Se devi configurare client aggiuntivi, ripeti gli stessi passaggi utilizzando un indirizzo IP privato diverso.
Installazione client Windows #
Scarica e installa il pacchetto Windows msi dal sito Web WireGuard.
Una volta installato, apri l'applicazione WireGuard e fai clic su "Aggiungi tunnel" -> "Aggiungi tunnel vuoto..." come mostrato nell'immagine seguente:
Una coppia di chiavi pubbliche viene creata automaticamente e visualizzata sullo schermo.
Immettere un nome per il tunnel e modificare la configurazione come segue:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0
Nella sezione dell'interfaccia aggiungi una nuova riga per definire l'indirizzo del tunnel del client.
Nella sezione peer aggiungi i seguenti campi:
- PublicKey - la chiave pubblica del server Ubuntu (
/etc/wireguard/publickey
file). - Endpoint:l'indirizzo IP del server Ubuntu seguito da due punti e la porta WireGuard (51820).
- IP consentiti - 0.0.0.0/0
Al termine, fai clic sul pulsante "Salva".
Aggiungi il client peer al server #
L'ultimo passaggio consiste nell'aggiungere la chiave pubblica del client e l'indirizzo IP al server:
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2
Assicurati di modificare il CLIENT_PUBLIC_KEY
con la chiave pubblica che hai generato sulla macchina client (sudo cat /etc/wireguard/publickey
) e modificare l'indirizzo IP del client se è diverso. Gli utenti Windows possono copiare la chiave pubblica dall'applicazione WireGuard.
Una volta terminato, torna alla macchina client e apri l'interfaccia di tunneling.
Client Linux e macOS #
Sui client Linux eseguire il comando seguente per visualizzare l'interfaccia:
sudo wg-quick up wg0
Ora dovresti essere connesso al server Ubuntu e il traffico dal tuo computer client dovrebbe essere instradato attraverso di esso. Puoi verificare la connessione con:
sudo wg
interface: wg0
public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
private key: (hidden)
listening port: 48052
fwmark: 0xca6c
peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 1 minute, 22 seconds ago
transfer: 58.43 KiB received, 70.82 KiB sent
Puoi anche aprire il browser, digitare "qual è il mio ip" e dovresti vedere l'indirizzo IP del tuo server Ubuntu.
Per fermare il tunneling, abbassa il wg0
interfaccia:
sudo wg-quick down wg0
Client Windows #
Se hai installato WireGuard su Windows, fai clic sul pulsante "Attiva". Una volta che i peer sono connessi, lo stato del tunnel cambierà in Attivo: