Installatie en configuratie Wireguard op Fedora

Inleiding

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

Update 26 september:

Door een aantal spel- en tikfouten is deze handleiding compleet herschreven op 26 september 2024.


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 Wireguardtunnels aan te kunnen maken en te kunnen beheren. Dat doe je met

sudo dnf install wireguard-tools

Overzicht

Om deze handleiding wat duidelijker te maken hier een kort overzicht van de gebruikte IP adressen en hosts.

Machine IP adres Wireguard IP adres Poort/protocol
Machine A 192.168.100.2/32 192.168.200.2/32 51820/UDP
Machine B 192.168.100.3/32 192.168.200.3/32 51820/UDP

Configuratie firewall

Voor je begint met het configureren van Wireguard is het belangrijk om de firewall te configureren dat UDP poort 51820 openstaat, omdat dit de poort is die door Wireguard gebruikt word. Dit kun je instellen in het configuratiebestand van Wireguard (/etc/wireguard/wg0.conf). Als je dat doet zorg er dan voor dat je de firewall poort ook aanpast!

sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload

Configuratie Wireguard

De Wireguard Quickstart pagina begint met het aanmaken van een Wireguard netwerkinterface. Dit is een stap die je in Fedora Linux kunt overslaan. Zodra de configuratie voor de Wireguardtunnel is aangemaakt in /etc/wireguard/wg0.conf én de service geactiveerd is zal dit namelijk automatisch voor je gedaan worden. Dit is iets wat je moet doen op élk apparaat waarop je Wireguard gaat gebruiken.

sudo -i
cd /etc/wireguard/
umask 0077
wg genkey | tee wg0.private | wg pubkey > wg0.public

Hierna heb je een public- en een privatekey voor Wireguard. Deze heb je beiden nodig voor het configureren van een Wireguardtunnel.

Aanmaken en configureren Wireguardinterface

Nu je de keys aangemaakt heb is het volgende wat je moet doen is een configuratiebestand aanmaken voor de Wireguardinterface wg0. Maak een nieuw (leeg) bestand /etc/wireguard/wg0.conf bestand aan en plaats daarin het volgende:

Machine A

# Hier worden de waardes van "Machine A" gebruikt.
# Pas dit aan waar nodig naar de waardes voor jouw
# eigen netwerk.

[Interface]
Address = 192.168.200.2/32
ListenPort = 51820

# Pas dit aan naar de inhoud van /etc/wireguard/wg0.private
PrivateKey = aap-noot-mies

Sla dit bestand op en activeer dan de wg0-netwerkinterface met

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

Als alles goed is gegaan zie je met het uitvoeren van ip l een nieuwe netwerkinterface genaamd wg0. Als je daarna sudo wg uitvoert zie je meer informatie over de net aangemaakte netwerkinterface, zoals de private- en publickey en de poort van de interface (51820), en verbonden peer(s) als die er zijn. Momenteel zijn er nog geen peer(s), dat komt hierna.

Machine B

# Hier worden de waardes van "Machine B" gebruikt.
# Pas dit aan waar nodig naar de waardes voor jouw
# eigen netwerk.

[Interface]
Address = 192.168.200.3/32
ListenPort = 51820

# Pas dit aan naar de inhoud van /etc/wireguard/wg0.private
PrivateKey = mies-noot-aap

Sla dit bestand op en activeer dan de wg0-netwerkinterface met

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

Als alles goed is gegaan zie je met het uitvoeren van ip l een nieuwe netwerkinterface genaamd wg0. Als je daarna sudo wg uitvoert zie je meer informatie over de net aangemaakte netwerkinterface, zoals de private- en publickey en de poort van de interface (51820), en verbonden peer(s) als die er zijn. Momenteel zijn er nog geen peer(s), dat komt hierna.


Peeren machine(s)

Nu je op alle machines Wireguard geïnstalleerd en geconfigueerd hebt is het tijd om de twee machines met elkaar te verbinden. In Wireguard word dat peeren genoemd.

Peeren Machine A met Machine B

Om Machine A met Machine B te peeren voeg je het volgende toe aan het configuratiebestand /etc/wireguard/wg0.conf op Machine A:

# Machine B
[Peer]
PublicKey = <inhoud van /etc/wireguard/wg0.public op "Machine B">
AllowedIPs = 192.168.200.3/32
Endpoint = 192.168.100.3:51820

Sla het configuratiebestand op, en herstart daarna de Wireguardinterface met:

sudo systemctl restart wg-quick@wg0.service

Hierna zie je Machine B als peer op Machine A als je op Machine A sudo wg uitvoert:

peer: mies-noot-aap
  endpoint: 192.168.100.3:51820
  allowed ips: 192.168.200.3/32
  transfer: 0 KiB received, 0 KiB sent

Peeren Machine B met Machine A

Om Machine B te peeren met Machine A voeg je het volgende toe aan het configuratiebestand /etc/wireguard/wg0.conf op Machine B:

# Machine A
[Peer]
PublicKey = <inhoud van /etc/wireguard/wg0.public op "Machine A">
AllowedIPs = 192.168.200.2/32
Endpoint = 192.168.100.2:51820

Sla het configuratiebestand op, en herstart daarna de Wireguardinterface met

sudo systemctl restart wg-quick@wg0.service

Hierna zie je Machine A als peer op Machine B als je op Machine B sudo wg uitvoert:

peer: aap-noot-mies
  endpoint: 192.168.100.2:51820
  allowed ips: 192.168.200.2/32
  transfer: 0 KiB received, 0 KiB sent

Testen tunnel

Om de tunnel tussen Machine A en Machine B te testen is het uitvoeren van een simpele ping vaak voldoende.

Op Machine A:

ping 192.168.200.3

Op Machine B:

ping 192.168.200.2

Troubleshooten

Als het goed is zie je op beide hosts dat er verkeer binnenkomt. Stop de ping op zowel Machine A als Machine B en voer op beide machines sudo wg uit. Je ziet dan bij de [Peer] een regel latest handshake erbij gekomen is, en dat de transfer regel is bijgewerkt.

Zie je dat niet? Dan is er ergens iets niet goed. Standaard is Wireguard erg stil en laat het ook niets achter in het systeemlogboek. Om dat te veranderen voer je het volgende uit:

sudo echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

Dit zorgt ervoor dat de wireguard kernelmodule meer output in het systeemlogboek, waaronder configuratiefouten en meer. Om dit te zien voer het het volgende uit:

sudo journalctl -b -f -g wireguard

Terwijl dat draait open een nieuwe terminal en probeer een andere Wireguard peer te pingen. Dit zou output moeten genereren in journalctl die je kunt gebruiken om te gaan troubleshooten. Mijn ervaring is vaak een foute key (verkeerd geplakt, vaak) of een verkeerd IP adres.


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.