Configuriamo un semplice VPN con WireGuard e Raspberry Pi come server

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

Apparecchiatura

  • Raspberry Pi 3 con modulo LTE e indirizzo IP pubblico. Qui sarà presente il server VPN (di seguito chiamato edgewalker)
  • Telefono Android che deve utilizzare il VPN per tutte le comunicazioni
  • Laptop Linux che deve utilizzare il VPN solo all'interno della rete

Ogni dispositivo connesso al VPN deve essere in grado di collegarsi a tutti gli altri dispositivi. Ad esempio, il telefono deve poter collegarsi al server web sul laptop, se entrambi i dispositivi fanno parte della rete VPN. Se la configurazione risulta abbastanza semplice, si potrebbe considerare di connettere anche il desktop al VPN (via Ethernet).

Considerando che le connessioni cablate e wireless diventano sempre meno sicure nel tempo (attacchi mirati, attacco KRACK contro WPA2 e attacco Dragonblood contro WPA3), prendo seriamente in considerazione l'uso di WireGuard per tutti i miei dispositivi, indipendentemente dall'ambiente in cui operano.

Installazione del software

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

Ho l'ultima versione di Fedora Linux 31, e prima di installarla non ho avuto la voglia di leggere la guida. Ho semplicemente trovato i pacchetti wireguard-tools, li ho installati, e poi non riuscivo a capire perché nulla funzionasse. Ulteriori ricerche hanno mostrato che non avevo installato il pacchetto wireguard-dkms (con il driver di rete), e non era presente nel repository della mia distribuzione.

Se avessi letto le istruzioni, avrei seguito i passi corretti:

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

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

$ sudo apt install wireguard

Sul telefono Android ho installato l'app WireGuard VPN dall'official Google App Store.

Installazione delle chiavi

Per l'autenticazione dei nodi, Wireguard utilizza un semplice schema di chiave privata/pubblica 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 dà tre coppie di chiavi (sei file). Non ci riferiremo ai file nelle configurazioni, ma copieremo qui il contenuto: ogni chiave è una riga in base64.

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

La configurazione è abbastanza 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]
# mobile phone
PublicKey = 
AllowedIPs = 10.200.200.3/32

Alcune osservazioni:

  • Nei posti appropriati è necessario inserire le righe dai file con le chiavi
  • La mia rete VPN utilizza un intervallo privato 10.200.200.0/24
  • Per i comandi PostUp/PostDown ho indicato l'interfaccia di rete esterna wwan0, potrebbero averne un'altra (ad esempio, eth0)

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

$ sudo wg-quick up wg0

Un piccolo dettaglio: come server DNS ho utilizzato . La cosa più interessante e nuova per me è stata la causa del significante aumento del traffico delle richieste DNS. Di questo e di cosa fare al riguardo parla il mio post. associato all'interfaccia di rete br0, ho anche aggiunto i dispositivi wg0 nella 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, per esempio:

interface=br0
interface=wg0

Inoltre, ho aggiunto una regola iptables 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:

  • Al posto di edgewalker, bisogna indicare l'IP pubblico o l'host del server VPN
  • Impostando AllowedIPs in 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 passare attraverso i "normali" canali aperti. Verrà utilizzato anche un server DNS preconfigurato sul laptop.

Per il testing e 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 sul 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 su un laptop, il telefono deve utilizzare il nostro server VPN come server DNS (riga DNS), e deve anche 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 Android VPN e configurare automaticamente il tunnel VPN.

Conclusione

La configurazione di WireGuard è semplicemente straordinaria rispetto a OpenVPN.

Fonte: habr.com

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