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.