====== Wireguard ======
E' stato installato su una VM debian su hyper-v un server wireguard, sull'indirizzo rttswg.units.it. La VM ha una interfaccia gigabit ethernet. Risponde al nome rttswg.units.it (router trieste wireguard).
===== Wireguard =====
Wireguard è un protocollo per VPN sviluppato recentemente (2019) con la semplicità e l'efficienza in mente. Non ha possibilità di scegliere il tipo di crittografia e scambio chiavi, punta ad essere sicuro "by default". Non è quantum safe di default, ma con l'aggiunta di una chiave condivisa riesce ad esserlo.
A livello di rete, è basato su UDP, di default in porta 51820
Essendo basato su UDP abbiamo dovuto dire al fortinet di "rilassare" alcune protezioni verso l'host.
===== Configurazione server =====
La configurazione è stata fatta alla via debian classica, in /etc/network/interfaces
iface wg0 inet static
address 10.180.0.254
netmask 255.255.255.0
pre-up ip link add $IFACE type wireguard
pre-up wg setconf $IFACE /etc/wireguard/wg0.conf
post-up ip route add 172.30.218.0/24 via 10.180.0.16 dev wg0
post-up ip route add 172.30.219.0/24 via 10.180.0.12 dev wg0
post-down ip link del $IFACE
mtu 1420
Da notare: se è necessario instradare reti aggiuntive è necessario aggiungere le rotte sia in questo file di configurazione, sia a livello di infrastruttura (Fortinet).
I dettagli sul protocollo sono presenti in /etc/wireguard/wg0.conf , lo riporto per commentarlo senza le chiavi.
[Interface]
ListenPort = 51820
PrivateKey = [chiaveprivatadelserver]
[Peer]
PublicKey = [chiavepubblicadelserver]
AllowedIPs = 10.180.0.X/32, [indirizzodieventualiretiremote/mask]
PresharedKey = [presharedkeycondivisatraserveresingoloclient]
E' importante precisare sul server le reti per ogni singolo peer senza sovrapposizioni, pena ogni sorta di peste bubbonica...
Dopo eventuali cambi di configurazione è necessario un
ifdown wg0; ifup wg0
Se qualcosa fosse andato storto, e quindi non torna su il server, prima di riprovare dare un
ip link delete wg0
===== Gestione chiavi =====
Per ogni peer son necessarie 3 chiavi:
* chiave privata, da cui deriva la
* chiave pubblica
* preshared key, indipendente dalle altre 2
*
Per generare le chiavi ho usato un simpatico tool https://github.com/warner/wireguard-vanity-address che consente di fare sì che le chiavi pubbliche abbiano un pezzo della stringa che rimanda al nome del client. Non è installato sul server, l'ho usato dalla mia workstation, per esempio:
wireguard-vanity-address --in 3 ln1
Non esagerate col numero di caratteri, se no ci potete passare le giornate ad aspettare un output.
Per generare le psk invece
wg genpsk
Per essere almeno vagamente ordinati, questi li salviamo in /etc/wireguard in sottocartelle dai nomi significativi.
===== Troubleshooting =====
Il primo strumento, da root su rttswg è il comando wg
interface: wg0
public key: RttSVBFHOCRlcRUWpjAthEbpG1v+Q3VixM3kxX3EMU4=
private key: (hidden)
listening port: 51820
peer: LN1N/peG592O2MNzBMqA6JzEpmLpMBGcBZirx2/syV4=
preshared key: (hidden)
endpoint: 5.91.30.169:15054
allowed ips: 192.168.8.0/24, 10.180.0.232/32
latest handshake: 1 minute, 47 seconds ago
transfer: 33.70 MiB received, 21.98 MiB sent
peer: wrt3Vr+Yiiw7qKtHv7qqr+TGWzUNuqiHoqTOwQbg9gg=
preshared key: (hidden)
allowed ips: 192.168.3.0/24, 10.180.0.248/32
Riporto solo 2 entry a titolo di esempio. La prima è una connessione attiva, la seconda è disattiva.
Se qualcosa non va, e le connessioni sono su, è altamente probabile uno scazzo di routing, o sul server o a livello di infrastruttura, o il NAT sull'endpoint che rompe le scatole.
===== Configurazione client =====
Riporto a titolo di esempio una configurazione funzionante per un client:
[Interface]
Address = 10.180.0.X/32
PrivateKey = [chiaveprivatadelclient]
DNS = 140.105.114.55, 140.105.114.66
MTU = 1420
[Peer]
PublicKey = RttSVBFHOCRlcRUWpjAthEbpG1v+Q3VixM3kxX3EMU4=
PresharedKey = [presharedkeycondivisatraserveresingoloclient]
Endpoint = rttswg.units.it:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21
I Gl.Inet non hanno un comportamento coerente nella gestione del passaggio della configurazione. Le macchine col modem 4G richiedono di passargli proprio un file di configurazione. Le macchine solo ethernet è possibile inserire la configurazione "al volo".