Installatie en configuratie Wireguard op Fedora

Inleiding

Deze handleiding gaat over het installeren en configureren van een Wireguard VPN tunnel op Fedora. Hoewel de Wireguard Quickstart pagina erg veel info heeft en helder is, is dat een algemene pagina voor élke Linux distributie en slaat daarom wat handigheidjes over.

Installatie

Het grootste deel van Wireguard komt standaard met het systeem mee in de Linuxkernel. Het enige wat je zelf moet installeren is de software om Wireguard tunnels aan te kunnen maken en te kunnen beheren. Dat doe je met

sudo dnf install wireguard-tools

Configuratie

De Wireguard Quickstart pagina begint met het aanmaken van een Wireguard interface. Dit is een stap die je over kunt slaan in Fedora, als de configuratie voor de interface is aangemaakt in /etc/wireguard/wg0.conf en de Wireguard service geactiveerd is zal dit voor je gedaan worden.

Om te beginnen ga je naar de map /etc/wireguard en zet je de umask waarde op 0077 (standaard is 0022), dit om te voorkomen dat andere (systeem)processen of gebruikers (privé)sleutels uitlezen. Daarna maak je een privé- en publieke sleutel voor de Wireguard interface. Doe dat allemaal met:

sudo -i
cd /etc/wireguard/
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Als dat gedaan is heb je nu een publickey en een privatekey. Kopieer de inhoud van /etc/wireguard/privatekey, want die heb je voor de configuratie van de wg0-interface nodig.

Configuratie wg0-interface

Maak een nieuw (leeg) bestand /etc/wireguard/wg0.conf aan en plaats daar het volgende in

[Interface]
# Dit is een voorbeeldadres. Pas dit aan naar je eigen 
# netwerkconfiguratie.
Address = 192.168.200.10/32

# In de rest van deze handleiding worden `192.168.200.10(/32)`
# en `192.168.200.11(/32)` gebruikt.

# De standaard Wireguard poort. Pas aan als je wilt, maar 
# vergeet dan niet de firewall en de peer configuratie ook aan te 
# passen.
ListenPort = 51820

# Pas dit aan naar de inhoud van je privatekey
PrivateKey = aap-noot-mies

Sla het bestand op en activeer de wg0-interface met

sudo systemctl enable --now wg-quick@wg0.service

Als alles goed is gegaan zie je nu, als je ip l uitvoert een nieuwe netwerkinterface genaamd wg0. Als je wg uitvoert zie je meer informatie, zoals de public key, private key en poort van de interface, en verbonden peer(s) als die er zijn.

Configuratie peer(s) en overzicht van peer(s)

Nu Wireguard zelf geconfigureerd is komt het toevoegen van een peer. Een peer is een andere machine met ook Wireguard. Hiermee maak je dus de Wireguard tunnel. Het mooie van Wireguard is dat je een machine kunt “peeren” met zoveel andere machines als je zelf wilt. Om het hier nu makkelijk te houden houd ik het bij één peer.

Host Hostnaam IP adres IP adres Wireguard publickey
Host A host-a 10.0.1.10 192.168.200.10 vfqtR6uMWHLxKGByl7JcGM9II2wWd8xI89yu2BY5WAc=
Host B host-b 10.0.1.11 192.168.200.11 csGk/ZDbQDSVAwU3yB+QaQYEfMclo0TPflQViB9KxEQ=

Configuratie host-a

Hieronder de configuratie van host-a, en de peering tussen host-a en host-b.

Zo ziet de inhoud van het configuratiebestand /etc/wireguard/wg0.conf op host-a eruit:

[Interface]
Address = 192.168.200.10/32
ListenPort = 51820
PrivateKey = iJPT8GDVehA24H7Oxyt1UjJ/UXCXX+I3bDJ0yax/Qn4=

Een overzicht van de public- en privatekey van host-a:

Publickey Privatekey
vfqtR6uMWHLxKGByl7JcGM9II2wWd8xI89yu2BY5WAc iJPT8GDVehA24H7Oxyt1UjJ/UXCXX+I3bDJ0yax/Qn4=

Configuratie van host-b

Hieronder de configuratie van host-b, en de peering tussen host-b en host-a.

Zo ziet de inhoud van het configuratiebestand /etc/wireguard/wg0.conf op host-b eruit:

[Interface]
Address = 192.168.200.11/32
ListenPort = 51820
PrivateKey = iABd18lP7lfEzS4sCJBMCOyjwIxN0wbZ+xfuw35tR1A=

Een overzicht van de public- en privatekey van host-b:

Publickey Privatekey
csGk/ZDbQDSVAwU3yB+QaQYEfMclo0TPflQViB9KxEQ= iABd18lP7lfEzS4sCJBMCOyjwIxN0wbZ+xfuw35tR1A=

Peeren host-a met host-b

Om host-a te peeren met host-b voeg je het volgende toe aan het configuratiebestand /etc/wireguard/wg0.conf op host-a:

[Peer]
PublicKey = csGk/ZDbQDSVAwU3yB+QaQYEfMclo0TPflQViB9KxEQ=
AllowedIPs = 192.168.200.11/32
Endpoint = 10.0.1.11:5280

Sla het bestand op en herstart de Wireguard netwerk interface. Dat doe je met

sudo systemctl restart wg-quick@wg0.service

Hierna zie je een nieuwe peer als je wg uitvoert:

peer: vfqtR6uMWHLxKGByl7JcGM9II2wWd8xI89yu2BY5WAc=
  endpoint: 10.0.1.10:51820
  allowed ips: 192.168.200.10/32
  transfer: 0 KiB received, 0 KiB sent

Peeren host-b met host-a

Om host-b te peeren met host-a voeg je het volgende toe aan het configuratiebestand /etc/wireguard/wg0.conf op host-b:

[Peer]
PublicKey = vfqtR6uMWHLxKGByl7JcGM9II2wWd8xI89yu2BY5WAc=
AllowedIPs = 192.168.200.10/32
Endpoint = 10.0.1.10:5280

Sla het bestand op en herstart de Wireguard netwerk interface. Dat doe je met

sudo systemctl restart wg-quick@wg0.service

Hierna zie je een nieuwe peer als je wg uitvoert:

peer: csGk/ZDbQDSVAwU3yB+QaQYEfMclo0TPflQViB9KxEQ=
  endpoint: 10.0.1.11:51820
  allowed ips: 192.168.200.11/32
  transfer: 0 KiB received, 0 KiB sent

Testen tunnel

Om de tunnel tussen host-a en host-b te testen voer je op allebei de machines het volgende uit:

Op host-a:

ping 192.168.200.11

Op host-b:

ping 192.168.200.10

Als het goed is komt er op beide hosts verkeer binnen. Als dit lukt stop je met pingen. Voer voor de zekerheid nog een keer wg uit op beide machines, je ziet dan bij de peer een regel latest handshake erbij gekomen zijn, en de transfer regel is bijgewerkt.

Firewallconfiguratie

sudo firewall-cmd --new-zone=wireguard --permanent
sudo firewall-cmd --set-description="Wireguard firewalld zone" --zone=wireguard --permanent
sudo firewall-cmd --add-interface=wg0 --zone=wireguard --permanent
sudo firewall-cmd --reload

Dit maakt een nieuwe firewall zone voor Wireguard, met als interface de net aangemaakte wg0 netwerk interface. Stel dat je nu ssh toe wilt voegen aan deze firewall zone, en ssh wilt verwijderen uit de standaard firewalld zone (FedoraWorkstation op Fedora Workstation)

sudo firewall-cmd --zone=wireguard --add-service=ssh --permanent
sudo firewall-cmd --zone=FedoraWorkstation --remove-service=ssh --permanent
sudo firewall-cmd --reload

Bonusvermelding

Voor het berekenen van IP adres ranges gebruik ik zelf de tool ipcalc hiervoor. In mijn ogen een broodnodig stuk gereedschap als je met netwerk interfaces en VPN tunnels aan de slag gaat.