Configura una VPN self-hosted utilizzando Wireguard
Una VPN (Virtual Private Network) consente all'utente di connettersi a una rete privata in remoto come se il computer dell'utente fosse connesso direttamente alla rete privata. La tecnologia è stata inizialmente sviluppata per consentire l'accesso remoto alla rete privata interna di un'azienda, per i dipendenti non effettivamente presenti nel luogo della rete interna.
Un server VPN viene distribuito nella posizione della rete interna. Questo server si trova sulla rete pubblica ed è possibile accedervi utilizzando un client VPN dal dipendente. L'autenticazione è necessaria per connettersi al server VPN. La comunicazione tra il server VPN e il client VPN è protetta utilizzando un protocollo di tunneling. Tieni presente che questa comunicazione può essere crittografata o meno, ma di solito nella maggior parte dei protocolli VPN è crittografata.
Un altro uso della VPN è quello di ottenere l'anonimato quando si accede a Internet o di aggirare le restrizioni geografiche imposte durante l'accesso ad alcuni siti web. In tali casi, la rete a cui l'utente desidera connettersi non è una rete privata, ma è Internet.
Nel corso degli anni sono stati sviluppati molti protocolli VPN. Questi protocolli utilizzano diversi protocolli di tunneling e algoritmi di crittografia per la comunicazione tra il server e il client.
Uno di questi protocolli, che sta guadagnando ampio uso di recente, è Wireguard . Wireguard è più leggero, più semplice e più performante rispetto ai noti protocolli VPN tradizionalmente utilizzati come OpenVPN, IPSec. È già implementato per Windows, Mac OS e un gran numero di distribuzioni Linux. In Linux, è implementato come modulo del kernel. È disponibile nei repository ufficiali di Ubuntu 20.04.
In questo articolo, vedremo come configurare un server e un client VPN Wireguard in Ubuntu 20.04.
Installazione
Per questo articolo, sto configurando un server Wireguard su un Ubuntu 20.04 Linode e un client Wireguard sul mio computer locale con Ubuntu 20.04.
Il pacchetto wireguard
installa sia Wireguard Server che Client. Eseguire il comando seguente sia sul computer server che sul computer client.
sudo apt install wireguard
Configurazione del server
Chiavi di sicurezza
Abbiamo bisogno di generare una serie di coppie di chiavi pubbliche/private per autenticare e proteggere la connessione Wireguard. Questo può essere fatto usando i seguenti comandi:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee private_key | wg pubkey > public_key
Nota che stiamo eseguendo tutte le attività di configurazione come superutente. Il motivo è che l'accesso alla directory /etc/wireguard
è impedito agli utenti normali e l'accesso alla directory non può essere ottenuto con i soli privilegi sudo per un utente normale.
Successivamente, impostiamo la maschera di creazione del file su077
. Ciò significa che ogni volta che un nuovo file viene creato in questa cartella da qualsiasi processo, i suoi permessi verranno automaticamente mascherati con 077. Ad es. se un file viene creato in questa cartella con autorizzazioni 777, viene automaticamente mascherato e le autorizzazioni diventano effettivamente 700. Questo viene fatto in modo che solo il proprietario del file abbia tutte le autorizzazioni sul file e tutti gli altri non abbiano autorizzazioni.
Nella riga successiva, generiamo la coppia di chiavi pubblica/privata per il server. Vengono salvati in file private_key
e public_key
. Per visualizzare le chiavi, eseguire:
cat private_key
cat public_key
Copia la chiave privata, ne abbiamo bisogno nel passaggio successivo.
Nota: non condividere mai pubblicamente la tua chiave privata!
File di configurazione
Creiamo un file di configurazione per il server Wireguard. Puoi scegliere qualsiasi nome per il file. Creeremo un file wg0.conf
in questo esempio.
vim wg0.conf
Aggiungi quanto segue al file.
[Interface]
Address = 10.20.43.1/24
SaveConfig = true
ListenPort = 51190
PrivateKey =
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Incolla la chiave privata che abbiamo precedentemente copiato nella riga 5 del codice sopra.
Dobbiamo configurare Wireguard su una sottorete (virtuale) diversa dall'indirizzo IP del server. Qui, ho usato 10.20.43.1 per il server e userò 10.20.43.2 per il client. Qualsiasi sottorete può essere utilizzata qui. Per ottenere l'indirizzo IP del server e dell'interfaccia, eseguire:
ifconfig
La parte evidenziata è l'indirizzo IP
Prendere nota dell'indirizzo IP del server. Ciò è richiesto durante la configurazione del client.
L'interfaccia utilizzata dal server, come si vede nell'immagine sopra, è eth0
. Il nome dell'interfaccia può variare in base alla rete dell'utente, può essere wlan0
o wlp2s0
nel caso in cui l'utente sia connesso a una rete WiFi tramite una scheda wireless.
Sostituisci in PostUp
e PostDown
con la tua interfaccia; in questo esempio è eth0
. PostUp
e le PostDown
direttive vengono utilizzate per specificare quali comandi devono essere eseguiti rispettivamente all'avvio e all'arresto del server. Nel nostro esempio, utilizziamo il iptables
comando per impostare le regole IP in modo che l'indirizzo IP del server sia condiviso dai client. Le regole verranno eliminate una volta arrestato il server.
Salva ed esci dal file. Quando si utilizza vim, premere Esc , quindi digitare :wq
e premere Invio per salvare ed uscire.
Se stai utilizzando un ufw
firewall sul server, dobbiamo consentire le connessioni UDP alla porta per il server VPN, 51190.
ufw allow 51190/udp
Avvio del servizio
Ora che la configurazione è terminata, possiamo avviare il servizio VPN Wireguard.
Per consentire l'avvio del servizio all'avvio, eseguire:
systemctl enable [email protected]
Nota che questo wg0
è il nome del file di configurazione.
Per avviare il servizio eseguire:
service [email protected] start
Verifica che il servizio sia stato avviato correttamente:
service [email protected] status
Verificare che l'interfaccia che abbiamo creato nel file di configurazione sia stata avviata, utilizzando il comando IP.
ip a show wg0
Il server VPN Wireguard è ora configurato e funzionante. Configuriamo ora il client.
Configurazione del cliente
La configurazione del client per Wireguard è più o meno la stessa di una configurazione del server. Generiamo le chiavi per il client, quindi creiamo un file di configurazione.
Chiavi di sicurezza
Per generare la coppia di chiavi pubblica/privata per il client, eseguire:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
Le chiavi pubblica e privata per il client sono ora generate rispettivamente in file client_private_key
e client_public_key
.
Verificare che siano stati creati, utilizzando il cat
comando.
cat client_private_key
cat client_public_key
Copia la chiave privata visualizzata quando è necessario aggiungerla al file di configurazione per il client.
File di configurazione
Crea il file di configurazione con il nome che desideri. Lo creeremo con il nome wg0-client
per questo esempio.
vim wg0-client.conf
Aggiungi la seguente configurazione.
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :51190
AllowedIPs = 0.0.0.0/0, ::/0
Immettere l'indirizzo di sottorete per il client. Come descritto in precedenza, utilizziamo 10.20.43.2
per il client in questo esempio.
Aggiungi la chiave privata del client generata nel passaggio precedente nella riga 4 del codice di configurazione sopra.
In "Peer", aggiungiamo le informazioni sul server Wireguard VPN a cui vogliamo connetterci.
Inserisci la chiave pubblica del server. Inserisci l' indirizzo IP del server , che abbiamo notato in precedenza, e porta nel formato specificato su Endpoint . Questa è la porta che abbiamo specificato nel file di configurazione del server e su cui è stato avviato il servizio VPN sul server.
Gli IP consentiti devono essere inseriti come specificato (0.0.0.0/0) in modo che qualsiasi richiesta su un IP pubblico dinamico utilizzato dal client venga sempre inoltrata al server VPN.
Salva ed esci dal file. Quando si utilizza vim, premere Esc , quindi digitare :wq
e premere Invio per salvare ed uscire.
Abilita l' esecuzione del servizio client ad ogni avvio e avvialo.
systemctl enable [email protected]
service [email protected] start
Verificare se il servizio è stato avviato.
service [email protected] status
Aggiunta di peer al server
Ora abbiamo il server e il client VPN attivi e funzionanti. Tuttavia, non viene stabilito un tunnel sicuro tra i due a meno che non stabiliamo una connessione peer-to-peer tra il server e il client.
Torna al server. Innanzitutto, interrompi il servizio VPN .
service [email protected] stop
Quindi, apri il file di configurazione per aggiungere la configurazione per il peer (client).
vim /etc/wireguard/wg0.conf
Aggiungi le seguenti righe al file.
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
Ora riavvia il servizio VPN .
service [email protected] start
Questo è tutto! Questa è tutta la configurazione necessaria per la configurazione del client e del server Wireguard VPN. Ora testiamo la nostra VPN.
Testare la VPN
Innanzitutto, eseguiamo un semplice ping dal client al server, per assicurarci che la comunicazione del tunnel VPN funzioni. Eseguire quanto segue sul client :
ping 10.20.43.1
Quindi, apri un browser Web e apri qualsiasi sito Web per verificare se sei in grado di connetterti a Internet dal computer client. Puoi anche controllare la tua connettività Internet dalla riga di comando usando wget
.
wget
Ora abbiamo verificato la connettività del tunnel e la connettività Internet. Se entrambi funzionano, ora dobbiamo assicurarci che tutto il traffico Internet in arrivo al client passi attraverso il server.
Per questo, dobbiamo semplicemente controllare l'indirizzo IP del client come visto da Internet. Un modo per farlo è andare su whatsmyip.org . Oppure dalla riga di comando, possiamo interrogare un altro servizio simile chiamato info IP, usando Curl.
Esegui quanto segue sulla macchina client
curl https://ipinfo.io/ip
Sì. È l'indirizzo IP pubblico del Linode in cui è ospitato il server VPN. È così che si ottiene l'anonimato utilizzando VPN, poiché in tutta Internet ora si vede l'IP del server VPN e non del tuo computer.
Conclusione
La facilità di configurazione è uno dei vantaggi più importanti di Wireguard rispetto al software VPN tradizionale come OpenVPN, che richiede un livello più elevato di conoscenze di rete e di routing per essere configurato. Tuttavia, manca una documentazione ufficiale dettagliata per Wireguard che potrebbe causare problemi se la configurazione di Wireguard genera errori o non funziona come previsto.
Tuttavia, Wireguard è una scelta eccellente se desideri una VPN self-hosted per comunicazioni sicure su Internet. Per saperne di più su Wireguard e sui protocolli e sulle tecnologie che utilizza, puoi controllare il sito ufficiale .