Thanks for the reply.

Since I can't control the peers (they're mostly just running the official Wireguard apps), the way I've got it implemented is that 224.0.0.0/4 is explicitly in their lists of AllowedIPs. On the hub side, I took approach (1) for the proof of concept.

If I were to extend the implementation, my gut says that it'd be better to separate AllowedIPs and MulticastIPs logically, and to make the ranges opt-in and per-peer. However, I haven't tried implementing that yet so I don't know how hard/useful it would be.

~Derrick


On 9/21/20 4:17 AM, Florian Werner wrote:
I would appreciate multicast support for Wireguard. My wish and use-case would 
be full support for in band dynamic address assignment, i.e. without any 
external protocol or other shared information except the public key.

At least for the IPv6 case (with I only consider here, but IPv4 can be added 
too), link-local scope multicast (FF02::/64) and the unspecified address (::) 
are enough to bootstrap any address assignment and to enable learning of 
self-assigned addresses (e.g. FE80::/64) of peers and eventually dynamic 
assignment (and learning) of global unicast addresses. This could all be 
accomplished only by standard protocols (IPv6 Neighbor Discovery, SLAAC, 
DHCPv6). The only modification would be for Wireguard to (optionally) send all 
packages with a multicast destination address to all peers and for Wireguard to 
receive packages with a (all or only some) multicast destination address from 
any peer. (if someone wants a detailed explanation of this, just ask)

There are multiple ways to implement multicast addresses:
(1) always make FF00::/8 and 224.0.0.0/4 special: send it to all peers and 
receive it from all
(2) like (1) but opt in for multicast per Wireguard interface
(3) like (1) but opt in for multicast per peer
(4) make FF00::/8 and 224.0.0.0/4 special, but only send/receive them if listed 
in AllowedIPs
(5) like (4) but allow smaller subnets (e.g. FF02::/64)
(6) make FF00::/8 and 224.0.0.0/4 special and allow for fine grained filtering 
for sending and receiving, i.e. AllowedIPs but separate between send and 
receive.

Regards,
Florian

I know this has come up a few times before, but if there was resolution,
I couldn't find it.

I am trying to set up a hub-and-spoke network with many clients
connected to a single concentrator. One application I need to support
relies on mDNS. Because Wireguard does not allow overlapping ranges (for
understandable reasons), this works on point-to-point links with two
peers but not on hub-and-spoke or other multi-peer setups. This would be
possible if every peer had its own hub interface, but that seems like an
inelegant, error-prone workaround.

Some have suggested running vxlan or another encapsulation method on top
of Wireguard, but that's not possible in this situation because I do not
control the software running on the peers. Typically, they'll just be
running the official Wireguard apps for MacOS or Windows.

Hacking Wireguard to understand the multicast range and to
clone-and-forward this traffic to all peers does work. If there is wider
interest in that specific feature, I'm happy to work what I have into
something that could be upstreamed. Currently the range is global and
hard-coded, but I could imagine wanting fine-grained control over which
peers were interested in specific multicast addresses, e.g., for a
user-space daemon managing IGMP subscriptions. However, before I spent
time on any of the above, I wanted to gauge whether there was interest
and whether that kind of feature might be accepted at all.

Thanks, ~Derrick


Reply via email to