通过 WLAN 和 VLAN 实现 mDNS / Bonjour

通过 WLAN 和 VLAN 实现 mDNS / Bonjour

我这里有以下情况:

Zyxel USG20 -> VLAN -> Server (192.168.50.xx) (local_1)
|
| -> Switch -> wired devices (192.168.80.xx) (local_2)
-> LEDE WLAN ROUTER -> Mobile Devices (192.168.80.xx) (local_2)

我在 VLAN 部分运行 Homekit 服务器,其 IP 在 50.xx 范围内。现在我希望能够通过 mDNS/Bonjour 从 80.xx 范围内的移动设备发现 IP

我在 USG20 中为端口 5353 添加了规则,使其从 local_2 传递到 local_1,并为 IP 244.0.0.251 添加了规则,使其从 local_2 传递到 local_1

但我无法发现 VLAN 中的服务器。我必须做什么才能使此设置正常工作?

谢谢。

答案1

这个是正常的 -mDNS 用途A本地链路多播组(IPv4 上为 224.0.0.251,IPv6 上为 FF02::FB),路由器/网关从不转发该组。某些实现还通过将所有 mDNS 数据包标记为 IP TTL=1 来强制执行此操作。(这一切都假设您的路由器已启用多播转发……)

为了跨网络/子网工作,mDNS 需要在应用层进行代理 - 例如,在 Linux 或 BSD 路由器上,您可以运行启用代理的 avahi-daemon。


由于您有 Raspberry Pi 和具有 802.1Q VLAN 的交换机,因此您可以将 Rpi 用作中继,同时将其连接到“客户端”和“服务器”VLAN。(请注意,您不应该为 Rpi 创建专用 VLAN;那样就完全没有意义了。)

在评论中您指出 Rpi 位于端口 4 上。

  1. 在交换机中,标记端口 4(不是LAG 4) 对于一个 VLAN 设置为“未标记”,对于所有其他 VLAN 设置为“标记”。如果交换机提供配置端口的“PVID”,请确保它与未标记的 VLAN 匹配。

    (或者,也可以使所有 VLAN 都“带标签”。)

  2. 在 Rpi 中,为每个标签它将接收的 VLAN。假设它运行 Linux,您可以暂时使用以下命令执行此操作:

    ip link add eth0.100 link eth0 type vlan id 100
    ip link set eth0.100 up
    dhclient eth0.100
    

    (如何使其永久化取决于您的分布。)

  3. 在 Rpi 中,启用代理(反射)/etc/avahi/avahi-daemon.conf

    [reflector]
    enable-reflector=yes 
    

相关内容