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:

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:

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:


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.