Configuriamo un semplice VPN con WireGuard e un Raspberry Pi come server

Poiché WireGuard diventerà parte del futuro kernel Linux 5.6, ho deciso di esplorare come integrare al meglio questo VPN con il mio router LTE/access point su Raspberry Pi.

Attrezzature

  • Raspberry Pi 3 con modulo LTE e indirizzo IP pubblico. Qui sarà il server VPN (d'ora in poi chiamato edgewalker)
  • Un telefono Android che deve utilizzare il VPN per tutte le comunicazioni
  • Un laptop Linux che deve utilizzare il VPN solo all'interno della rete

Ogni dispositivo che si collega al VPN deve avere accesso a tutti gli altri dispositivi. Ad esempio, il telefono dovrebbe poter accedere al server web sul laptop, se entrambi i dispositivi fanno parte della rete VPN. Se la configurazione risulta abbastanza semplice, potrei considerare di collegare anche il desktop al VPN (tramite Ethernet).

Dato che le connessioni cablate e wireless diventano sempre meno sicure nel tempo (attacchi mirati, attacco KRACK che sfrutta WPA2 e attacco Dragonblood contro WPA3), sto seriamente considerando di utilizzare WireGuard per tutti i miei dispositivi, indipendentemente dall'ambiente in cui operano.

Installazione software

WireGuard offre pacchetti precompilati per la maggior parte delle distribuzioni Linux, Windows e macOS. Le app per Android e iOS sono disponibili tramite i negozi delle applicazioni.

Ho l'ultima versione di Fedora Linux 31 e prima di installarla non mi sono preso la briga di leggere la guida. Ho semplicemente trovato i pacchetti wireguard-tools, li ho installati e poi non capivo perché nulla funzionasse. Un'ulteriore ricerca ha rivelato che mi mancava il pacchetto wireguard-dkms (con il driver di rete), e non era presente nel repository della mia distribuzione.

Se avessi letto le istruzioni, avrei adottato i passaggi corretti:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Sulla Raspberry Pi ho installato la distribuzione Raspbian Buster, dove è già presente il pacchetto wireguard, lo installiamo:

$ sudo apt install wireguard

Sul mio telefono Android ho installato l'app WireGuard VPN dal negozio ufficiale Google App Store.

Installazione delle chiavi

Per autenticare i nodi, WireGuard utilizza un semplice schema di chiavi pubbliche/ private per l'autenticazione dei nodi VPN. Puoi facilmente generare le chiavi VPN con il seguente comando:

$ wg genkey | tee wg-laptop-private.key | wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key | wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key | wg pubkey > wg-mobile-public.key

Questo ci fornisce tre coppie di chiavi (sei file). Non faremo riferimento ai file nelle configurazioni, ma copieremo qui il contenuto: ogni chiave è una riga in base64.

Creazione del file di configurazione per il server VPN (Raspberry Pi)

La configurazione è piuttosto semplice, ho creato il seguente file /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# telefono mobile
PublicKey = 
AllowedIPs = 10.200.200.3/32

Un paio di osservazioni:

  • È necessario inserire le righe dei file contenenti le chiavi nei posti appropriati
  • La mia rete VPN utilizza un intervallo interno 10.200.200.0/24
  • Per i comandi PostUp/PostDown ho specificato l'interfaccia di rete esterna wwan0, la tua potrebbe essere diversa (ad esempio, eth0)

La rete VPN può essere facilmente attivata con il seguente comando:

$ sudo wg-quick up wg0

Un piccolo dettaglio: come server DNS ho utilizzato dnsmasq con vincolo all'interfaccia di rete br0, ho anche aggiunto i dispositivi wg0 alla lista dei dispositivi autorizzati. In dnsmasq questo si fa aggiungendo una nuova riga con l'interfaccia di rete nel file di configurazione /etc/dnsmasq.conf, ad esempio:

interface=br0
interface=wg0

Inoltre, ho aggiunto una regola iptable per consentire il traffico sulla porta UDP in ascolto (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Ora che tutto funziona, possiamo impostare l'avvio automatico del tunnel VPN:

$ sudo systemctl enable wg-quick@wg0.service

Configurazione del client sul laptop

Sul laptop creiamo un file di configurazione /etc/wireguard/wg0.conf con le stesse impostazioni:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Note:

  • Invece di edgewalker, dovresti indicare l'IP pubblico o l'hostname del server VPN
  • Impostando AllowedIPs con 10.200.200.0/24, utilizziamo la VPN solo per accedere alla rete interna. Il traffico verso tutti gli altri indirizzi IP/server continuerà a fluire tramite i canali "normali" aperti. Verrà inoltre utilizzato un server DNS preconfigurato sul laptop.

Per testare e impostare l'avvio automatico, utilizziamo gli stessi comandi wg-quick e systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Configurazione del client su telefono Android

Per il telefono Android, creiamo un file di configurazione molto simile (lo chiameremo mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

A differenza della configurazione sul laptop, il telefono deve utilizzare il nostro server VPN come server DNS (riga DNS), e instradare tutto il traffico attraverso il tunnel VPN (AllowedIPs = 0.0.0.0/0).

Invece di copiare il file sul dispositivo mobile, è possibile convertirlo in un codice QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

Il codice QR verrà visualizzato nella console come ASCII. Può essere scansionato dall'app VPN di Android per impostare automaticamente il tunnel VPN.

Risultato

Configurare WireGuard è semplicemente fantastico rispetto a OpenVPN.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster