Da WireGuard
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 (
Installazione del software
WireGuard fornisce
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
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
su10.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