Configurazione di una VPN con WireGuard (server)

La configurazione del server può essere fatta in vari modi, qui vengono indicati i punti principali (configurazione di wireguard, di iptables, del forwarding e di dnsmasq).

Per la configurazione di wireguard, è necessario generare una coppia di chiavi pubblica/privata per il server come descritto nel paragrafo precedente «Generazione delle chiavi».

È necessario creare un file con lo stesso nome dell’interfaccia di rete che si vuole creare (es. /etc/wireguard/wg0.conf) contente la chiave privata del server, la chiave pubblica di ciascun client e gli indirizzi IP statici di ciascuna macchina (per la sintassi vedere man wg).

Per la configurazione di iptables, se si desidera che le macchine sulla VPN non escano sulla Internet pubblica:
PostUp = iptables -I FORWARD -i %i -o %i -j ACCEPT; iptables -A FORWARD -j REJECT;
PostDown = iptables -I FORWARD -i %i -o %i -j ACCEPT; iptables -A FORWARD -j REJECT;

Se invece si desidera che escano sulla Internet pubblica:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

Se si desidera che i client comunichino fra loro modificare il file /etc/sysctl.d/99-sysctl.conf per abilitare la riga:
net.ipv4.ip_forward=1
e poi ricaricare i valori seguendo
sysctl --system

Si è deciso di usare dnsmasq come server di DNS per la VPN creando un file /etc/dnsmasq.d/wireguard.conf con un contenuto simile al seguente.
domain-needed
bogus-priv
interface=wg0
bind-interfaces
addn-hosts=/etc/hosts.wireguard
expand-hosts
domain=vpn.example.com,192.168.2.0/25

Il /25 invece di un più comune /24 è per usare la seconda metà di indirizzi per testare un’altra VPN separata modificando in seguito la configurazione di iptables.
Il file /etc/hosts.wireguard contiene la corrispondenza tra nomi e IP statici contenuti in. /etc/wireguard/wg0.conf es.:
192.168.2.1 client1
192.168.2.2 client2
192.168.2.254 server

Non si può sfruttare la funzionalità DHCP di dnsmasq per gestire il DNS perché WireGuard mantiene una mappatura tra le chiavi pubbliche e gli indirizzi IP quindi non può gestire i pacchetti previsti dal protocollo DHCP perché provengono da un sistema che non ha ancora un indirizzo IP (in altre parole, WireGuard funziona a livello 3, livello rete o network layer, mentre DHCP funziona a livello 2, livello di collegamento dati o data link layer).

Se sul sever è installato systemd, i seguenti comandi mettono in funzione la configurazione aggiornata.
systemctl reload dnsmasq

Installare gli strumenti che permettono a systemd di configurare Wireguard:

apt install wireguard-tools

poi abilitare il servizio e lanciarlo:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0

La configurazione del client è spiegata in un articolo separato.

© CC-BY-SA Gruppo Utenti Linux Livorno