VPN WireGuard
Introduzione¶
WireGuard è una rete privata virtuale (VPN) peer-to-peer (P2P) gratuita e open-source. È un'alternativa moderna, leggera e sicura alle VPN convenzionali con grandi basi di codice che si basano su connessioni TCP. Poiché WireGuard è una VPN P2P, ogni computer aggiunto alla rete WireGuard comunica direttamente con gli altri. Questa guida utilizza un modello hub-spoke, con un peer WireGuard a cui viene assegnato un indirizzo IP pubblico come gateway per il passaggio di tutto il traffico. Ciò consente al traffico WireGuard di bypassare Carrier Grade NAT (CGNAT) senza abilitare il port-forwarding sul router. Ciò richiede un sistema Rocky Linux con un indirizzo IP pubblico. Il modo più semplice per raggiungere questo obiettivo è quello di creare un server privato virtuale (VPS) attraverso un provider cloud di vostra scelta. Al momento in cui scriviamo, Google Cloud Platform offre un livello gratuito per le sue istanze e2-micro.
Prerequisiti¶
I requisiti minimi per questa procedura sono i seguenti:
- La possibilità di eseguire comandi come utente root o di utilizzare
sudo
per elevare i privilegi - Un sistema Rocky Linux con un indirizzo IP accessibile pubblicamente
Installazione di WireGuard¶
Installare i pacchetti extra per Enterprise Linux (EPEL):
sudo dnf install epel-release -y
Aggiornare i pacchetti di sistema:
sudo dnf upgrade -y
Installare WireGuard:
sudo dnf install wireguard-tools -y
Configurazione di server WireGuard¶
Creare una cartella in cui inserire i file di configurazione e le chiavi di WireGuard:
sudo mkdir -p /etc/wireguard
Creare un file di configurazione con un nome a scelta che termini con l'estensione .conf
:
Note
È possibile creare più tunnel VPN WireGuard sullo stesso computer, ognuno dei quali utilizza un file di configurazione, un indirizzo di rete e una porta UDP diversi.
sudo touch /etc/wireguard/wg0.conf
Generare una nuova coppia di chiavi private e pubbliche per il server WireGuard:
wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub
Modificare il file di configurazione con l'editor preferito.
sudo vi /etc/wireguard/wg0.conf
Incollare quanto segue:
[Interface]
PrivateKey = server_privatekey
Address = x.x.x.x/24
ListenPort = 51820
È necessario sostituire server_privatekey
con la chiave privata generata in precedenza. È possibile visualizzare la chiave privata con:
sudo cat /etc/wireguard/wg0
Successivamente, è necessario sostituire x.x.x.x/24
con un indirizzo di rete compreso nell'intervallo di indirizzi IP privati definito da [RFC 1918] (https://datatracker.ietf.org/doc/html/rfc1918). L'indirizzo di rete utilizzato in questa guida è 10.255.255.0/24
.
Infine, è possibile scegliere qualsiasi porta UDP per accettare le connessioni con WireGuard VPN. Per gli scopi di questa guida si utilizza la porta UDP 51820
.
Abilita l'inoltro IP¶
L'inoltro IP consente l'instradamento dei pacchetti tra le reti. Ciò consente ai dispositivi interni di comunicare tra loro attraverso il tunnel WireGuard:
Attivare l'inoltro IP per IPv4 e IPv6:
sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv6.conf.all.forwarding=1
Configurazione di firewalld
¶
Installazione di firewalld
:
sudo dnf install firewalld -y
Dopo aver installato firewalld
, abilitarlo:
sudo systemctl enable --now firewalld
Creare una regola permanente del firewall che consenta il traffico sulla porta UDP 51820 nella zona pubblica:
sudo firewall-cmd --permanent --zone=public --add-port=51820/udp
Successivamente, il traffico dall'interfaccia WireGuard sarà consentito ad altre interfacce della zona interna.
sudo firewall-cmd --permanent --add-interface=wg0 --zone=internal
Aggiungere una regola del firewall per abilitare il masquerading IP sul traffico interno. Ciò significa che i pacchetti inviati tra peer sostituiranno l'indirizzo IP del pacchetto con l'indirizzo IP del server:
sudo firewall-cmd --permanent --zone=internal --add-masquerade
Infine, ricaricare firewalld
:
sudo firewall-cmd --reload
Configurazione del peer WireGuard¶
Poiché tutti i computer di una rete WireGuard sono tecnicamente dei peer, questa procedura è quasi identica alla configurazione del server WireGuard, ma con leggere differenze.
Creare una cartella in cui inserire i file di configurazione e le chiavi di WireGuard:
sudo mkdir -p /etc/wireguard
Creare un file di configurazione, dandogli un nome a scelta, che termini con l'estensione .conf
:
sudo touch /etc/wireguard/wg0.conf
Generare una nuova coppia di chiavi private e pubbliche:
wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub
Modificare il file di configurazione con il proprio editor, aggiungendo questo contenuto:
[Interface]
PrivateKey = peer_privatekey
Address = 10.255.255.2/24
[Peer]
PublicKey = server_publickey
AllowedIPs = 10.255.255.1/24
Endpoint = serverip:51820
PersistentKeepalive = 25
Sostituire peer_privatekey
con la chiave privata del peer memorizzata in /etc/wireguard/wg0
sul peer.
È possibile utilizzare questo comando per visualizzare la chiave in modo da poterla copiare:
sudo cat /etc/wireguard/wg0
Sostituire server_publickey
con la chiave pubblica del server memorizzata in /etc/wireguard/wg0.pub
sul server.
È possibile utilizzare questo comando per visualizzare la chiave in modo da poterla copiare:
sudo cat /etc/wireguard/wg0.pub
Sostituire serverip
con l'IP pubblico del server WireGuard.
È possibile trovare l'indirizzo IP pubblico del server utilizzando il seguente comando sul server:
ip a | grep inet
Il file di configurazione del peer ora include una regola PersistentKeepalive = 25
. Questa regola indica al peer di eseguire il ping del server WireGuard ogni 25 secondi per mantenere la connessione del tunnel VPN. Senza questa impostazione, il tunnel VPN si interrompe dopo l'inattività.
Abilitare WireGuard VPN¶
Per abilitare WireGuard, eseguire il seguente comando sia sul server che sul peer:
sudo systemctl enable wg-quick@wg0
Avviare quindi la VPN eseguendo questo comando sia sul server che sul peer:
sudo systemctl start wg-quick@wg0
Aggiungere la chiave client alla configurazione del server WireGuard¶
Emettere la chiave pubblica del peer e copiarla:
sudo cat /etc/wireguard/wg0.pub
Sul server, eseguire il comando seguente, sostituendo peer_publickey
con la chiave pubblica del peer:
sudo wg set wg0 peer peer_publickey allowed-ips 10.255.255.2
L'uso di wg set
apporta solo modifiche temporanee all'interfaccia di WireGuard. Per le modifiche permanenti della configurazione, è possibile modificare manualmente il file di configurazione e aggiungere il peer. È necessario ricaricare l'interfaccia WireGuard dopo aver apportato qualsiasi modifica permanente alla configurazione.
Modificare il file di configurazione del server con l'editor preferito.
sudo vi /etc/wireguard/wg0.conf
Aggiungere il peer al file di configurazione. Il contenuto dovrebbe essere simile a quello riportato di seguito:
[Interface]
PrivateKey = +Eo5oVjt+d3XWvFWYcOChaLroGj5vapdXKH8UZ2T2Fc=
Address = 10.255.255.1/24
ListenPort = 51820
[Peer]
PublicKey = 1vSho8NvECkG1PVVk7avZWDmrd2VGZ2xTPaNe5+XKSg=
AllowedIps = 10.255.255.2/32
Disattivare l'interfaccia:
sudo wg-quick down wg0
Attivare l'interfaccia:
sudo wg-quick up wg0
Visualizzazione delle interfacce WireGuard e test della connettività¶
È possibile visualizzare le informazioni di WireGuard sia sul server che sul peer:
sudo wg
È possibile verificare la connettività inviando un ping al server dal peer:
ping 10.255.255.1
Conclusione¶
Seguendo questa guida, si è riusciti a configurare una VPN WireGuard utilizzando il modello hub-spoke. Questa configurazione offre un modo sicuro, moderno ed efficiente per collegare più dispositivi attraverso Internet. Controllare il sito web ufficiale di WireGuard.
Author: Joseph Brinkman
Contributors: Steven Spencer, Ganna Zhyrnova