Poiché WireGuard del futuro del kernel Linux 5.6, ho deciso di vedere come integrare al meglio questo VPN con il mio .
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 (, e ), prendo seriamente in considerazione l'uso di WireGuard per tutti i miei dispositivi, indipendentemente dall'ambiente in cui operano.
Installazione del software
WireGuard fornisce 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 wireguardSul telefono Android ho installato l'app 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.keyQuesto 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/32Alcune 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/PostDownho 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=wg0Inoltre, ho aggiunto una regola iptables per consentire il traffico sulla porta UDP in ascolto (51280):
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPTOra che tutto funziona, possiamo impostare l'avvio automatico del tunnel VPN:
$ sudo systemctl enable wg-quick@wg0.serviceConfigurazione 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:51820Note:
- Al posto di edgewalker, bisogna indicare l'IP pubblico o l'host del server VPN
- Impostando
AllowedIPsin10.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.serviceConfigurazione 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.confIl 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
