Appunti Wireguard

Da GolemWiki.
Jump to navigation Jump to search

Golem-template-note-warning.png Questa pagina contiene alcune informazioni sparse su Wireguard provenienti dalla vecchia pagina sulla VPN del GOLEM.


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
  • [Peer] (sezione di configurazione dell'endpoint remoto / server)
    • PublicKey: chiave pubblica del server (sì, è proprio quella)
    • AllowedIPs: indirizzi raggiungibili tramite la VPN, a scelta:
    • 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 ...