Mijn Wireguard speeltuin
Pasgeleden ben ik wat intensiever weer met Wireguard in de weer geweest en het leek me een goed/helder idee om mijn speeltuin eens te beschrijven. Om met Wireguard te spelen heb ik 3 virtuele machine’s (Fedora Minimal, 4GB RAM, 32GB opslag) die ik aan elkaar geknoopt heb met Wireguard tunnels om het een en ander te testen en ermee te spelen, namelijk:
- Hoe verbind je 3 machines met elkaar?
- Hoe regel je bepaalde zaken firewalltechnisch?
- Hoe regel je als er een van de 3 uitvalt?
- Hoe configureer je Wireguard überhaupt om hiermee om te gaan?
Een snel overzicht is dus:
VM Naam | IP adres | IP adres Wireguard | Public key | Private key |
---|---|---|---|---|
fedora-wg-peer-a | 10.0.2.1 | 192.168.2.1 | sM+FwQaDp4uONuO8jmcuXYtBfe/6rjMLcolPCCrkl3c= | QNJxdNBLaPgcFfRzNB5MkGThx7wtKExBNSd6rH+BY2s= |
fedora-wg-peer-b | 10.0.2.2 | 192.168.2.2 | k6NreYFv0YgVtNHmSLwJG7fEL8iSVq6imv9ip979G10= | IH2F8844GkcQHVuh7NiM2YsLoJN4dGCkN0GBtDXiQ2Y= |
fedora-wg-peer-c | 10.0.2.3 | 192.168.2.3 | WzAmgv0Ol1TbP1dG8YEWMFXohErymCe4AGmzN50pyC0= | 6Nc464UBcQgoRBvFuVVnZ7Nzkcs741EGP+9IC/yWlmQ= |
Op alle machines draait, als test, ook nog het volgende:
- httpd (apache) om te testen met verschillende websites die wel of niet beschikbaar zijn met een Wireguard verbinding
Op fedora-wg-peer-a
draait een NFS server die de hoofdcontent voor alle httpd servers host en verdeeld. Dit ook om te testen en te kijken hoe bepaalde (netwerk)diensten beperkt kunnen worden tot het alleen draaien via een bepaald netwerk of via een bepaalde Wireguard tunnel.
Hoe verbind je 3 machines met elkaar?
Op dezelfde manier eigelijk als 2 machines. Van machine naar machine. In het kort:
- van
fedora-wg-peer-a
naarfedora-wg-peer-b
- van
fedora-wg-peer-a
naarfedora-wg-peer-c
- van
fedora-wg-peer-b
naarfedora-wg-peer-a
- van
fedora-wg-peer-b
naarfedora-wg-peer-c
- van
fedora-wg-peer-c
naarfedora-wg-peer-a
- van
fedora-wg-peer-c
naarfedora-wg-peer-b
Complete configuratie van fedora-wg-peer-a
Om het makkelijk (of leesbaar) te houden hier de complete Wireguard configuratie van fedora-wg-peer-a
.
De public key uit /etc/wireguard/publickey
:
sM+FwQaDp4uONuO8jmcuXYtBfe/6rjMLcolPCCrkl3c=
De private key uit /etc/wireguard/privatekey
:
QNJxdNBLaPgcFfRzNB5MkGThx7wtKExBNSd6rH+BY2s=
Het configuratiebestand uit /etc/wireguard/wg0.conf
:
[Interface]
Address = 192.168.2.1/32
ListenPort = 51820
PrivateKey = QNJxdNBLaPgcFfRzNB5MkGThx7wtKExBNSd6rH+BY2s=
# Fedora Wireguard Peer B
[Peer]
PublicKey =k6NreYFv0YgVtNHmSLwJG7fEL8iSVq6imv9ip979G10=
AllowedIPs = 192.168.2.2/32
Endpoint = 10.0.2.2:51820
# Fedora Wireguard Peer C
[Peer]
PublicKey = WzAmgv0Ol1TbP1dG8YEWMFXohErymCe4AGmzN50pyC0=
AllowedIPs = 192.168.2.3/32
Endpoint = 10.0.2.3:51820
Complete configuratie van fedora-wg-peer-b
Om het makkelijk (of leesbaar) te houden hier de complete Wireguard configuratie van fedora-wg-peer-b
.
De public key uit /etc/wireguard/publickey
:
k6NreYFv0YgVtNHmSLwJG7fEL8iSVq6imv9ip979G10=
De private key uit /etc/wireguard/privatekey
:
IH2F8844GkcQHVuh7NiM2YsLoJN4dGCkN0GBtDXiQ2Y=
Het configuratiebestand uit /etc/wireguard/wg0.conf
:
[Interface]
Address = 192.168.2.2/32
ListenPort = 51820
PrivateKey = IH2F8844GkcQHVuh7NiM2YsLoJN4dGCkN0GBtDXiQ2Y=
# Fedora Wireguard Peer A
[Peer]
PublicKey = sM+FwQaDp4uONuO8jmcuXYtBfe/6rjMLcolPCCrkl3c=
AllowedIPs = 192.168.2.1/32
Endpoint = 10.0.2.1:51820
# Fedora Wireguard Peer C
[Peer]
PublicKey = WzAmgv0Ol1TbP1dG8YEWMFXohErymCe4AGmzN50pyC0=
AllowedIPs = 192.168.2.3/32
Endpoint = 10.0.2.3:51820
Complete configuratie van fedora-wg-peer-c
Om het makkelijk (of leesbaar) te houden hier de complete Wireguard configuratie van fedora-wg-peer-c
.
De public key uit /etc/wireguard/publickey
:
WzAmgv0Ol1TbP1dG8YEWMFXohErymCe4AGmzN50pyC0=
De private key uit /etc/wireguard/privatekey
:
6Nc464UBcQgoRBvFuVVnZ7Nzkcs741EGP+9IC/yWlmQ=
Het configuratiebestand uit /etc/wireguard/wg0.conf
:
[Interface]
Address = 192.168.2.3/32
ListenPort = 51820
PrivateKey = 6Nc464UBcQgoRBvFuVVnZ7Nzkcs741EGP+9IC/yWlmQ=
# Fedora Wireguard Peer A
[Peer]
PublicKey = sM+FwQaDp4uONuO8jmcuXYtBfe/6rjMLcolPCCrkl3c=
AllowedIPs = 192.168.2.1/32
Endpoint = 10.0.2.1:51820
# Fedora Wireguard Peer B
[Peer]
PublicKey = k6NreYFv0YgVtNHmSLwJG7fEL8iSVq6imv9ip979G10=
AllowedIPs = 192.168.2.2/32
Endpoint = 10.0.2.2:51820
Firewallconfiguratie voor Wireguard
Om het voor mezelf makkelijk te maken te bepalen welke diensten wel of niet bekeken of gebruikt mogen worden vanaf een bepaald netwerk heb ik voor Wireguard een aparte firewalld
zone aangemaakt, op de volgende manier:
sudo firewall-cmd --permanent --new-zone=wireguard
sudo firewall-cmd --permanent --zone=wireguard --change-interface=wg0
sudo firewall-cmd --reload
Om te testen of dit ook echt werkte heb ik alle pings (ICMP echo-requests
) op de standaard firewalld-zone (public
) uitgezet. Als ik dan ping naar 10.0.2.1
zou dat niet moeten werken, maar een ping naar 192.168.2.1
wel.
Het uitzetten/blokkeren van ICMP echo-request
heb ik als volgt gedaan:
sudo firewall-cmd --zone=public --permanent --add-icmp-block=echo-request
sudo firewall-cmd --reload
En inderdaad, een ping 10.0.2.1
werkte niet, maar een ping 192.168.2.1
(vanaf een van de twee andere hosts, in dit geval fedora-wg-peer-c
) werkte wel!
NFS voor httpd
Om de content voor de 3 verschillende httpd servers gelijk te maken heb ik alle inhoud gedeeld via NFS, met de volgende configuratie(s).
De configuratie voor de NFS share via /etc/exports.d/httpd.exports
:
/srv/nfs/httpd 192.168.2.1/29(rw,sync,no_subtree_check)
En dan het volgende in /etc/fstab
om de NFS share te koppelen:
192.168.2.1:/srv/nfs/httpd /var/www/html/ nfs4 defaults,context=system_u:object_r:httpd_sys_content_t:s0,no_fail 0 0
HTTPD configuratie
Om makkelijk te testen of Wireguard werkt heb ik op alle peers Apache geïnstalleerd met 2 VirtualHosts
, eentje die voor iedereen een site serveert, en eentje die dat alleen doet voor Wireguard-peers.
Die configuratie is in /etc/httpd/conf.d/vhosts.conf
en ziet er als volgt uit:
# fedora-wg-peer-a
<VirtualHost *:80>
ServerName 10.0.2.1
DocumentRoot "/var/www/html/public/"
<Directory "/var/www/html/public/">
Options -Indexes +FollowSymlinks +MultiViews
Require all granted
AllowOverride None
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName 192.168.2.1
DocumentRoot "/var/www/html/private/"
<Directory "/var/www/html/private/">
Options -Indexes +FollowSymLinks +MultiViews
Require all granted
AllowOverride None
</Directory>
</VirtualHost>
Op alle peers heb deze configuratie, met aanpassingen waar nodig.
Peer | ServerName public | ServerName private |
---|---|---|
fedora-wg-peer-a |
10.0.2.1 | 192.168.2.1 |
fedora-wg-peer-b |
10.0.2.2 | 192.168.2.2 |
fedora-wg-peer-c |
10.0.2.3 | 192.168.2.3 |
… En meer
Ik blijf mijn speeltuin steeds verder uitbreiden. Als er meer bijkomt zal ik deze post ook bijwerken met de nodige informatie.