staging.inyokaproject.org

Es wurde noch keine Diskussion mit dem Artikel „Shell/mkdir“ verknüpft. Du kannst eine Diskussion erstellen oder ein vorhandenes Thema verknüpfen.

WireGuard Broadcast zwischen Clients ermöglichen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

der_große_Minitux

Anmeldungsdatum:
24. April 2019

Beiträge: 28

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

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

der_große_Minitux schrieb:

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?

Inhalt der serverseitigen wg0.conf:

[Peer]
PublicKey = <Public Key des ersten Clients>
AllowedIPs = 192.168.5.101/32

[Peer]
(...)

die wg0.conf für einen Client:

[Peer]
PublicKey = <Public Key des Servers>
Endpoint = meine_domain:1195
AllowedIPs = 0.0.0.0/0

Versuch mal bei Clients und Server, mit:

AllowedIPs = 192.168.5.0/24

, denn:

In other words, when sending packets, the list of allowed IPs behaves as a sort of routing table, and when
receiving packets, the list of allowed IPs behaves as a sort of access control list.

lt. wireguard.com

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

In einem WireGuard-Netz gibt es keinen Broadcast. Es macht auch keinen Sinn: Wie soll man etwas so verschlüsseln, dass alle es entschlüsseln können, aber es trotzdem vertraulich bleibt? Man kann etwas entweder nur geheim halten oder es veröffentlichen. Diesem Umstand entsprechend ist auch ein WireGuard-Interface keine Broadcast-Schnittstelle, sondern eine Punkt-zu-Punkt-Schnittstelle:

$ sudo ip link add VPN type wireguard
$ ip link show type wireguard
4: VPN: <POINTOPOINT,NOARP> mtu 1420 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/none 

Und Multicast funktioniert aus dem gleichen Grund auch nicht.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

kB schrieb:

In einem WireGuard-Netz gibt es keinen Broadcast. ... Und Multicast funktioniert aus dem gleichen Grund auch nicht.

Das ist so nicht richtig. In einem Linux-WG-Netz gibt es evtl. kein Broadcast.

Mit z. B. OpenBSD ist das wg-Interface keine Punkt-zu-Punkt-Schnittstelle:

wg0: flags=80c3<UP,BROADCAST,RUNNING,NOARP,MULTICAST> mtu 1392
	index 4 priority 0 llprio 3
	wgport #####
	wgpubkey ...
	wgpeer ...
		wgpsk (present)
		wgendpoint ###.###.###.## xxxxx
		tx: 487984, rx: 513280
		last handshake: 83 seconds ago
		wgaip 192.168.44.14/32
	groups: wg
	inet 192.168.44.1 netmask 0xffffffe0 broadcast 192.168.44.31

Ein Ping von einem Linux-WG-Peer an die Broadcast-Adresse funktioniert auch, wenn man es zulässt:

:~$ ping -b -c 1 192.168.44.31
WARNING: pinging broadcast address
PING 192.168.44.31 (192.168.44.31) 56(84) bytes of data.
64 bytes from 192.168.44.14: icmp_seq=1 ttl=64 time=0.103 ms

--- 192.168.44.31 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.103/0.103/0.103/0.000 ms

Mit FreeBSD und Linux gibt es Multicast beim WG:

wg0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1392
	options=80000<LINKSTATE>
	inet 192.168.xx.xx --> 192.168.xx.xx netmask 0xffffff00
	groups: tun
	nd6 options=101<PERFORMNUD,NO_DAD>
	Opened by PID 64389
wg0: flags=4817<UP,POINTOPOINT,RUNNING,NOARP,ALLMULTI,MULTICAST>  mtu 1392
        inet 192.168.yy.yy  netmask 255.255.255.0  destination 192.168.yy.yy
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 4500  (UNSPEC)
        RX packets 797301  bytes 195298089 (186.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1338120  bytes 270738640 (258.1 MiB)
        TX errors 59659  dropped 301699 overruns 0  carrier 0  collisions 0

der_große_Minitux

(Themenstarter)

Anmeldungsdatum:
24. April 2019

Beiträge: 28

Hallo,

danke für die Antworten.

Ich habe mir jetzt selbst mal einige Details zu WireGuard durchgelesen und muss wohl sagen, dass ihr mit dem Endergebnis Recht habt.

Für derartige Anwendungen scheint WireGuard aufgrund des P2P-Konzepts nicht zu funktionieren bzw. nicht sinnvoll zu sein, hier muss wohl wieder OpenVPN ran.

Danke trotzdem für die schnellen und guten Erklärungen!

Beste Wünsche an euch!

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14402

der_große_Minitux schrieb:

Ich habe mir jetzt selbst mal einige Details zu WireGuard durchgelesen und muss wohl sagen, dass ihr mit dem Endergebnis Recht habt.

Siehe auch "Interest in adding multicast support to Wireguard?": https://lists.zx2c4.com/pipermail/wireguard/2020-September/005825.html

Antworten |