Come configurare il server e il client WireGuard VPN su Ubuntu 20.04

Configura una VPN self-hosted utilizzando Wireguard

UN VPN (rete privata virtuale) 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 nella posizione 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 mediante 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 per 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 client VPN Wireguard in Ubuntu 20.04.

Installazione

Per questo articolo, sto configurando un server Wireguard su un Linode Ubuntu 20.04 e un client Wireguard sul mio computer locale con Ubuntu 20.04.

Il pacchetto filo di protezione installa sia Wireguard Server che Client. Esegui il seguente comando sia sul computer server che sul computer client.

sudo apt install wireguard

Configurazione del server

Chiavi di sicurezza

Abbiamo bisogno di generare un insieme 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 su 077. 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 viene creato un file 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.

Sulla riga successiva, generiamo la coppia di chiavi pubblica/privata per il server. Vengono salvati in file chiave_privata e chiave pubblica. Per visualizzare le chiavi, eseguire:

gatto chiave_privata gatto chiave_pubblica

Copia la chiave privata, ne abbiamo bisogno nel passaggio successivo.

Nota: Non condividere mai la tua chiave privata pubblicamente!

File di configurazione

Creiamo un file di configurazione per Wireguard Server. Puoi scegliere qualsiasi nome per il file. Creeremo un file wg0.conf in questo esempio.

vim wg0.conf

Aggiungi quanto segue al file.

[Interfaccia] Indirizzo = 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 rispetto all'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

Prendere nota dell'indirizzo IP del server. Questo è necessario 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 il in Affiggere e Post-Giù con la tua interfaccia; in questo esempio è eth0.Affiggere e Post-Giù le direttive vengono utilizzate per specificare quali comandi devono essere eseguiti rispettivamente all'avvio e all'arresto del server. Nel nostro esempio, usiamo 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 usa vim, premere Esc, quindi digita :wq e premere accedere per salvare ed uscire.

Se stai usando a ufw firewall sul server, dobbiamo consentire le connessioni UDP alla porta per il server VPN, 51190.

ufw consenti 51190/udp

Avvio del servizio

Ora che la configurazione è terminata, possiamo avviare il servizio VPN Wireguard.

Abilitare il servizio da avviare all'avvio, eseguire:

systemctl abilita wg-quick@wg0

Nota che qui wg0 è il nome del file di configurazione.

Iniziare il servizio, eseguire:

servizio wg-quick@wg0 start

Verificare che il servizio è stato avviato con successo:

servizio wg-quick@wg0 stato

Verificare che l'interfaccia abbiamo creato nel file di configurazione è stato avviato, utilizzando il comando IP.

ip uno spettacolo 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 chiave pubblica/privata coppia 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 ora vengono generate rispettivamente nei file chiave_cliente_privata e chiave_pubblica_cliente.

Verificare che siano stati creati, utilizzando gatto 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 vuoi. Lo creeremo con il nome wg0-client per questo esempio.

vim wg0-client.conf

Aggiungi la seguente configurazione.

[Interfaccia] # Indirizzo IP e chiave privata dell'indirizzo client = 10.20.43.2/24 PrivateKey = [Peer] # Chiave pubblica, indirizzo IP e porta del server PublicKey = Endpoint = :51190 IP consentiti = 0.0.0.0/0, : :/0

Immettere l'indirizzo di sottorete per il client. Come descritto in precedenza, usiamo 10.20.43.2 per il cliente in questo esempio.

Aggiungi la chiave privata del client generato nel passaggio precedente nella riga 4 nel codice di configurazione sopra.

In "Peer", aggiungiamo informazioni sul server VPN Wireguard vogliamo connetterci.

Inserisci la chiave pubblica del server. Inserisci il indirizzo IP del server, che abbiamo notato in precedenza, e portiamo nel formato indicato contro 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 immessi 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 usa vim, premere Esc, quindi digita :wq e premere accedere per salvare ed uscire.

Abilita il servizio clienti eseguire ad ogni avvio e avviarlo.

systemctl abilita il servizio wg-quick@wg-client wg-quick@wg-client start

Verificare se il servizio è stato avviato.

servizio wg-quick@wg-stato del client

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 indietro al server. Primo, interrompi il servizio VPN.

servizio wg-quick@wg0 stop

Quindi, apri il file di configurazione per aggiungi la configurazione per il peer (cliente).

vim /etc/wireguard/wg0.conf

Aggiungere le seguenti righe al file.

[Peer] PublicKey = IP consentiti = 10.20.43.2/32

Ora, riavviare il servizio VPN.

servizio wg-quick@wg0 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. Esegui quanto segue sul client:

ping 10.20.43.1

Prossimo, apri un browser web e apri qualsiasi sito web per verificare se è possibile connettersi 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 //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 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.