WireGuard e NetworkManager

Contestualizzazione

Mentre ero in Erasmus in Norvegia, avevo provato WireGuard per rimanere connesso alla rete di casa, in cui si trova il mio NAS.

Da allora, ho continuato a usarlo abbastanza. Qualche volta ho usato ancora OpenVPN, ma preferisco parecchio WireGuard, principalmente perché è molto più leggero e evita che il mio router faccia da collo di bottiglia, e perché è molto più semplice da configurare.

Altre caratteristiche a suo favore sono che a Marzo di quest’anno è stato direttamente integrato nel kernel Linux e che a tal proposito il suo autore ha fatto fare una verifica di sicurezza a terze parti, che hanno espresso un giudizio positivo. Si può volere di più?

Be’, in realtà sì. Per diverso tempo, per avviare la VPN ho usato uno script shell, che aveva bisogno di essere eseguito da root. Questa soluzione non mi entusiasmava troppo, e avrei preferito un’integrazione con Network Manager, possibilmente con la GUI.

In realtà qualcosa c’era già due anni fa quando provato WireGuard, ma erano patch di terze parti, non incluse con le varie distribuzioni.

Solamente 6 mesi dopo è stato aggiunto il supporto a WireGuard in Network Manager 1.16, ma non mi ero più informato. E purtroppo, ancora oggi, non è supportato a pieno da tutti i vari frontend; una mancanza notevole sono GNOME Control Center e l’applet di GNOME Shell.

Però si può configurare completamente da nmcli e da nm-connection-editor. In particolare io consiglio quest’ultimo, perché consente veramente di configurare tutto, solo che l’ho scoperto dopo aver proceduto con nmcli, quindi nel resto dell’articolo parlerò quasi solo di questo strumento. Notate che nemmeno nmtui, che è una specie di nm-connection-editor basato su ncurses, supporta WireGuard.

Configurazione

Se anche voi venite da un qualche script di configurazione, probabilmente avrete usato un qualche file di configurazione, passato al comando wg setconf. In caso, il metodo più semplice per passare alla gestione con Network Manager, è importarlo. Non ho provato dalla GUI, ma ho provato con nmcli. Dalla cartella dove si trova il file (wg.conf, nel mio caso) come utente normale, diamo questo comando:

nmcli c import type wireguard file wg.conf

Metà del lavoro è fatta. Però la connessione si chiamerà Wg, o qualcosa di simile e, soprattutto, non avrà la configurazione di IP, che WireGuard non gestisce, quindi il tunnel non sarà ancora funzionante.

Dando, ancora da utente non privilegiato, il comando nmcli c edit Wg, entriamo in una modalità interattiva per cambiare le impostazioni. Cominciamo dal nome:

nmcli> set connection.id 'Nuovo Nome'

Proseguiamo poi con l’indirizzo IP:

nmcli> set ipv4.addresses ip/mask

Al posto di ip e di mask vanno messi dei valori dalla rete virtual che si vuole creare, e.g. 10.70.60.2/24.

Non intendo usare il tunnel anche per connettermi ad Internet con un altro indirizzo, perciò non ho impostato un gateway. Però volevo comunque connettermi al resto della rete di casa, quindi ho aggiunto un instradamento statico:

nmcli> set ipv4.routes 10.20.0.0/24

dove 10.20.0.0 è il prefisso dell’altra rete, e 24 è il netmask.

Quest’ultimo passo è completamente opzionale, ma se intendete farlo, dovete configurare firewall e instradamenti nei dispositivi dell’altra rete, quanto meno nel router. Il mio router ha OpenWRT e avevo già il setup funzionante di OpenVPN, dunque ho semplicemente aggiunto anche WireGuard alla stessa zona. Se anche voi usate OpenWRT, ma non avete alcuna configurazione al riguardo, vi rimando al sito ufficiale.

Alla fine di tutte le modifiche, dobbiamo salvarle:

nmcli> save

Dopodiché possiamo uscire con CTRL-D, quindi disconnettere e riconnettere la connessione. La disconnessione userà per l’ultima volta il nome vecchio, la connessione invece quello nuovo:

nmcli c d Wg
nmcli c u Nuovo\ Nome

A questo punto il procedimento è completo e non ha mai avuto bisogno di diventare root.

Attenzione: l’impostazione predefinita è che la connessione si avvii automaticamente quando avviate il sistema operativo. Siccome a me va bene così, non ho cercato come disabilitare questo comportamento.

Non è difficile cambiare queste impostazioni da CLI, ma a meno che non ne abbiate bisogno (e.g. computer senza server X), consiglio la GUI. È veramente completa, per esempio, facendo doppio click su un peer si possono anche di impostare le chiavi simmetriche (che devono essere state scambiate in anticipo) per maggiore resistenza post-quantum.

In ogni caso, visto che uso spesso questo tunnel, sono soddisfatto di questa soluzione.