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.