Hallo zusammen,
ich stehe vor folgender Situation: Ich habe einen WireGuard-VPN-Server (Ubuntu 20.04, Interface-Name wg0, Subnetz 192.168.5.1/24), und einige Clients, die sich erfolgreich verbinden können, sich gegenseitig pingen, Internet und alles klappt.
Allerdings würde ich darüber gerne verschiedene Anwendungen laufen lassen, die normalerweise einen Broadcast ins lokale Netz schicken, um den anderen Teilnehmern bekannt zu werden.
(Als Beispiel: Zwei Android-Geräte mit dem Spiel Among Us, eines hostet lokal eine Spielrunde und das andere soll das Spiel finden. Wie ich aus Wireshark weiß, sendet in diesem Fall der Host kleine UDP-Pakete an den Broadcast, also 255.255.255.255:47777)
Ich sehe in Wireshark, dass die Anfrage an den Broadcast durchaus über das VPN geleitet wird und am Server/Gateway ankommt, aber die anderen Clients davon nichts erfahren.
Wireshark auf dem Server zeigt mir also zum Beispiel an, dass auf dem Interface wg0 von 192.168.5.101:44311 sekündlich Pakete an 255.255.255.255:47777 gehen. Auf dem Client 192.168.5.102 kommen aber keine an.
Wenn ich bewusst mittels
1 | iptables -t nat -A PREROUTING -i wg0 -p udp -d 255.255.255.255 -j DNAT --to 192.168.5.102 |
den UDP-Broadcast an ein bestimmtes Gerät weiterleite, erscheint dort etwa das gehostete Spiel.
Nun kann ich aber nicht dafür sorgen, dass der Broadcast einfach wie in einem "normalen" lokalen Netzwerk an alle Clients im entsprechenden Subnetz geht, obwohl
1 | ip route show |
unter anderem auch die korrekte benötigte Route kennt:
1 | 192.168.5.0/24 dev wg0 proto kernel scope link src 192.168.5.1 |
Wie kann ich dafür sorgen, dass sich WireGuard hier so verhält wie ein lokales Netz, und Pakete für den Broadcast an alle Clients rausschickt?
Danke im Voraus!
Anhang:
Inhalt der serverseitigen wg0.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [Interface] PrivateKey = <hier steht der Private Key> Address = 192.168.5.1/24 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -A FORWARD -o %i -j ACCEPT PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT ListenPort = 1195 [Peer] PublicKey = <Public Key des ersten Clients> AllowedIPs = 192.168.5.101/32 [Peer] (...) |
die wg0.conf für einen Client:
1 2 3 4 5 6 7 8 9 | [Interface] Address = 192.168.5.101/32 PrivateKey = <Private Key des Clients> DNS = 9.9.9.9 [Peer] PublicKey = <Public Key des Servers> Endpoint = meine_domain:1195 AllowedIPs = 0.0.0.0/0 |
Der Server startet mittels wg-quick:
1 2 3 4 5 6 7 | wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 192.168.5.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -A FORWARD -o wg0 -j ACCEPT |