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.