Appunti Wireguard
Wireguard
Sul server, installiamo wireguard e wireguard-tools. Il primo pacchetto contiene il core della gestione VPN, il secondo ci è utile per amministrare facilmente le connessioni (vedi wg-quick).
apt install wireguard wireguard-tools
Su sistemi debian <= 10 (buster), il pacchetto non è presente nei repository mainline ma deve essere aggiunto tramite i debian backports. Nota: potrebbe anche essere necessario aggiornare il kernel!
Configurazione del server
A differenza di altri protocolli VPN come OpenVPN, wireguard ha un approccio "peer to peer", per cui la procedura di configurazione del server rispecchia per buona parte quella di ciascun client.
Innanzitutto è necessario generare la coppia di chiavi pubblica/privata del server
# wg genkey | tee /etc/wireguard/server.privkey | wg pubkey > /etc/wireguard/vpn.golem.linux.it.pubkey
Per la configurazione è sufficiente creare un singolo file, ad esempio /etc/wireguard/wg0.conf
[Interface] # Carica la chiave privata dal percorso dove la abbiamo generata precedentemente PostUp = wg set %i private-key /etc/wireguard/vpn.golem.linux.it.privkey # Porta UDP di ascolto del server, a piacere ListenPort = 51820 # Indirizzo del server all'interno della VPN Address = 10.40.0.1
Il server può essere avviato tramite systemd, e con lo stesso sistema si può impostare l'avvio automatico.
Si noti che @wg0 corrisponde al file di configurazione precedentemente creato.
# systemctl start wg-quick@wg0 # systemctl enable wg-quick@wg0
Configurazione del client
Lato client, generare una coppia di chiavi pubblica/privata:
$ wg genkey | tee client.example.com.privkey | wg pubkey > client.example.com.pubkey
Comunicare dunque la propria chiave pubblica al sysop, che si occuperà di aggiungerla tra quelle consentite al server, e vi comunicherà il vostro indirizzo IP, da aggiungere al file di configurazione, come segue. Prestare particolare attenzione a modificare i campi della sezione Interface, come indicato nelle note.
[Interface] # PrivateKey = YoUrGoRgEoUsAnDsEcUrEpRiVaTeKeY= # vedi note, scegliere questo... # PostUp = wg set %i private-key ./client.example.com.privkey # vedi note, ...oppure questo Address = 2001:470:c844:100::200/64 # vedi note # vpn.golem.linux.it [Peer] PublicKey = w63aGvoyPaUTgA8nW/NJS6Qqp2hUFvHRBbIH8Qb5ISY= AllowedIPs = 2000::/3 Endpoint = vpn.golem.linux.it:51280 PersistentKeepalive = 37
Note
Interface(sezione di configurazione dell'endpoint locale)- scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.
- PrivateKey: chiave privata del client, da custodire con cura, inline
- PostUp = command: chiave privata del client, da custodire con cura, e caricata automaticamente da un file esterno (es. creato col comando mostrato in precedenza)
- Address: indirizzo IP comunicato dal sysop: riportarlo accuratamente, altrimenti non sarà possibile utilizzare la VPN
- scegliere una delle seguenti opzioni per indicare la chiave privata del client, scommentando la riga apposita.
[Peer](sezione di configurazione dell'endpoint remoto / server)- PublicKey: chiave pubblica del server (sì, è proprio quella)
- AllowedIPs: indirizzi raggiungibili tramite la VPN, a scelta:
2001:470:c844::/48: solo la rete IPv6 virtuale del GOLEM2000::/3: tutti gli indirizzi IPv6 (è possibile utilizzare la VPN del GOLEM per navigare davvero in IPv6)
- Endpoint: indirizzo del server
- PersistentKeepalive: timer per mantenimento del tunnel attivo (in secondi); particolarmente utile se l'indirizzo IP del client cambia o è soggetto a NAT
La connessione può essere attivata tramite systemd come sul server (spostandola in /etc/wireguard/, vedi sopra), oppure manualmente utilizzando wg-quick:
# Attivazione del tunnel wg-quick up client.example.conf # Disattivazione del tunnel wg-quick down client.example.conf
Naturalmente, affinché il collegamento funzioni, il client deve essere abilitato alla connessione dal sysop.
Per farlo, il sysop aggiunge un blocco peer per ciascun client alla configurazione /etc/wireguard/wg0.conf, così:
... altri client ...
# porceddu.net.golem.linux.it [Peer] PublicKey = tHeClIeNtFaNtAsTiCpUbLiCkEy= AllowedIPs = 2001:470:c844:100::200/128, 2001:470:c844:200::/62
... altri client ...