因此,这个问题似乎已在互联网上讨论过很多次,但答案往往不完整。(我确实读过这个问题,但我对答案并不满意)
这是我的情况(看起来我并不孤单)。我家里有 2 个 wifi,出于安全考虑,它们允许访问不同的 VLAN。
VLAN 10:主 VLAN。IP:192.168.10.x/24
VLAN 20:访客 VLAN IP:192.168.20.x/24
我有一台连接到 VLAN 10 的 Chromecast(第二代),我想让它在 VLAN 20 上也可用。我的路由器是 PfSense 驱动的 Netgate SG-3100。
我找到了这个Reddit 主题建议使用 Avahi 包转发 mDNS 请求,我照做了。为了测试目的,我还允许所有 IPv4 和 IPv6 流量在防火墙内从 VLAN 20 跨越到 VLAN 10,反之亦然。
一开始,avahi 根本不起作用,但我发现这个软件包开箱即用:
- PfSense 错误 #3972(运行命令
dbus-daemon --system
可修复该问题) - Avahi 守护进程在重启后无法启动:手动重启有效。鉴于论坛帖子建议添加看门狗服务
这个问题解决后,我的情况有了很大的改善。我捕获了 VLAN 20 上的流量数据包,可以看到 mDNS 跨越了 VLAN。
太棒了!我让路由器通知 VLAN 20,VLAN 10 上的 IP 为 192.168.10.20 有一个 chromecast。但这不起作用...
即使如此,我的 Android 手机也无法识别 Chromecast。我尝试进一步了解 chromecast 协议,但我的观察是,在 mDNS 发布后,chromecast 和设备都开始通过加密通信 (TLSV1.2) 协议与 Google API 通信。我观察到工作网络上的 2 个设备之间没有数据包交换。
因此,我的手机知道有可用的 chromecast,也知道它的唯一标识符(在 mDNS 消息中发布)。两个设备都主动与 Google VPN 服务器对话。我认为这就足够了,但似乎还不够。
要么我在这里遗漏了一些东西,要么谷歌服务器因为某种原因阻止了通信(最有可能是不同的网络检测)。
这是我的手机连接到正确的网络并且发现成功时的通信数据包捕获。我们看到我的 Android 手机使用 Google API 打开了一个加密通道。不久之后,chromecast 也开始与 Google API 通信,并且它们交替进行。
知道我还能看什么吗?