Configura una semplice VPN con WireGuard e Raspberry Pi come server

Da WireGuard diventare parte di del futuro kernel Linux 5.6, ho deciso di vedere come integrare al meglio questa VPN con il mio Router/punto di accesso LTE su Raspberry Pi.

Attrezzatura

  • Raspberry Pi 3 con modulo LTE e IP pubblico. Ci sarà un server VPN (di seguito denominato edgewalker)
  • Un telefono Android che deve utilizzare una VPN per tutte le comunicazioni
  • Laptop Linux che necessita di utilizzare la VPN solo all'interno della rete

Ogni dispositivo che si connette a una VPN deve essere in grado di connettersi a ogni altro dispositivo. Ad esempio, un telefono dovrebbe essere in grado di connettersi a un server Web su un laptop se entrambi i dispositivi fanno parte di una rete VPN. Se la configurazione è abbastanza semplice, puoi pensare di connetterti a una VPN e a un desktop (tramite Ethernet).

Considerando che le connessioni cablate e wireless stanno diventando sempre meno sicure nel tempo (attacchi mirati, Attacco hacker KRACK WPA2 и Attacco Dragonblood contro WPA3), sto seriamente pensando di utilizzare WireGuard per tutti i miei dispositivi, indipendentemente dall'ambiente in cui si trovano.

Installazione del software

WireGuard fornisce pacchetti precompilati per la maggior parte delle distribuzioni Linux, Windows e macOS. Le app per Android e iOS vengono fornite tramite cataloghi di app.

Ho l'ultima Fedora Linux 31 ed ero troppo pigro per leggere il manuale prima dell'installazione. Ho appena trovato i pacchi wireguard-tools, li ho installati e quindi non sono riuscito a capire perché non funzionava nulla. Ulteriori indagini hanno rivelato che il pacchetto non era installato wireguard-dkms (con un driver di rete) e non era nel repository della mia distribuzione.

Se avessi letto le istruzioni avrei fatto i passi giusti:

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

Ho la distribuzione Raspbian Buster installata sul mio Raspberry Pi, c'è già un pacchetto wireguard, installalo:

$ sudo apt install wireguard

Ho installato l'app sul mio telefono Android WireguardVPN dal catalogo ufficiale del Google App Store.

Installazione delle chiavi

Per autenticare i nodi, Wireguard utilizza un semplice schema di chiave privata/pubblica per autenticare i nodi VPN. Puoi creare facilmente 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 faremo riferimento ai file in configs, ma copieremo qui il contenuto: ogni chiave è una riga in base64.

Creazione di un file di configurazione per un 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 = <copy private key from wg-server-private.key>
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 = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Un paio di note:

  • Nei posti appropriati è necessario inserire le righe dai file con le chiavi
  • La mia VPN utilizza l'intervallo interno 10.200.200.0/24
  • Per le squadre PostUp/PostDown Ho un'interfaccia di rete esterna wwan0, potresti averne una 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 collegato all'interfaccia di rete br0, ho aggiunto anche dispositivi wg0 all'elenco dei dispositivi consentiti. In dnsmasq, ciò avviene aggiungendo una nuova riga con l'interfaccia di rete al file di configurazione /etc/dnsmasq.conf, ad esempio:

interface=br0
interface=wg0

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

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

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

$ sudo systemctl enable [email protected]

Configurazione del client portatile

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

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Osservazioni:

  • Invece di edgewalker, devi specificare un IP pubblico o un host del server VPN
  • Impostando AllowedIPs su 10.200.200.0/24, utilizziamo la VPN solo per accedere alla rete interna. Il traffico verso tutti gli altri indirizzi/server IP continuerà a passare attraverso canali aperti "normali". Verrà utilizzato anche il server DNS preconfigurato sul laptop.

Per i test e l'avvio automatico utilizziamo gli stessi comandi wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Configurazione di un client su un telefono Android

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

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

A differenza della configurazione del laptop, il telefono dovrebbe utilizzare il nostro server VPN come server DNS (string DNS), oltre a far passare tutto il traffico attraverso il tunnel VPN (AllowedIPs = 0.0.0.0/0).

Invece di copiare il file sul tuo dispositivo mobile, puoi convertirlo in un codice QR:

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

Il codice QR verrà visualizzato sulla console come ASCII. Può essere scansionato dall'app VPN per Android e impostare automaticamente un tunnel VPN.

conclusione

Configurare WireGuard è semplicemente magico rispetto a OpenVPN.

Fonte: habr.com

Aggiungi un commento