要让 Airplay 跨 VLAN 工作,究竟需要什么?

网络工程 VLAN 层2 第3层
2021-07-20 14:28:38

模糊地说,AirPlay 似乎是开箱即用的,只能在局域网内使用。我不清楚确切的原因,但看起来至少发现依赖于广播。维基百科指出Airplay 是一种专有协议,这可能解释了为什么我发现的唯一文档是非官方的,比如github 上的这个规范

所以,我的问题是:

  1. 是否可以配置网络以使 Airplay 跨 VLAN 工作?
  2. 如果是这样,究竟必须允许什么在 VLAN 之间通过才能使其工作?
  3. 鉴于官方协议文档不可用,这在生产环境中是否是一个坏主意?
4个回答

“Airplay”一词有两种不同的含义。

第一个是关于服务发现的,它是能够接收 Airplay 流的设备向网络宣布“嘿!我可以接收 Airplay!”的方式。它通常是通过名为 Bonjour(至少苹果这样称呼)或DNS-SD 的服务完成的它正在使用多播,如果有人告诉您“Airplay 仅适用于本地 LAN”或其他内容,这就是重点。流媒体本身是“正常的”UDP 单播。

现在的主要问题是如何将有关 Airplay 接收器的信息提供给另一个网络中的潜在发送者。理论上有两种选择:

  1. 您可以转发多播。虽然这可能很棘手,但有路由器/防火墙能够做到这一点。RTFM 究竟如何,但其想法是您必须将目标地址为224.0.0.251 的多播流量转发到另一个网络,并且必须在不减少 TTL 的情况下执行此操作。

  2. 另一种选择是使用单播 DNS-SD。您可以使用普通 DNS 来宣布通常通过多播 DNS-SD 自动分发的相同信息,并且您可以使用 MacOSX 上的 dns-sd(1) 实用程序的一些帮助来获取准确地写入 DNS 区域文件的信息. 使用 Airplay 接收器在 LAN 中执行此命令,这将为您提供所需的所有信息:

    $ dns-sd -Z _airplay._tcp
    Browsing for _airplay._tcp
    ...
    
  3. 还有 DNS-SD 代理(例如 avahi 可以这样使用)。

现在,我说的是“理论上”,因为我还没有测试过它,无论你对协议、转发等做什么,都可能有一些你无法控制的障碍——毕竟是苹果。您可以正确地将所有信息发送给潜在的发件人,但 iOS/MacOSX 可能仍会拒绝它,因为它只是出于某种原因不喜欢它等等。

还有一个(虽然仍然是理论上的;)蛮力选项 - 为您的路由器地址创建一个 DNS-SD 条目,作为带有 Airplay 发送器的网络的 Airplay 接收器,并将 UDP 流转发(NAT)到真正的 Airplay 接收器。但即便如此,也有一些可能性(对于 Apple 工程师而言)可以打破它。

继续,测试它,让我们知道你的结果。

这是教育环境中的常见问题。Apple 在向学生/教职员工销售 iPad 和 Mac 方面做得非常出色,他们希望利用 Airplay/Airprint/其他 Bonjour 功能。但是,正如您所指出的,这些功能依赖于单个广播域来进行服务发现。企业/教育网络的结构并非如此。

这个问题非常普遍,以至于几年前许多教育机构的 IT 员工聚集在一起,请求 Apple 修复 Bonjour,以便在这些环境中更好地工作。


要直接解决您的问题,通常需要非常专业的配置来完成跨网络的 Airplay 服务。并且具体的配置将在很大程度上取决于您当前的无线解决方案(Cisco、Aerohive、Ubiquity 等)。一般而言,如果您搜索您的无线供应商和 Bonjour,您应该找到至少可以为您指明正确方向的文档。

我在部署Cisco 的 Avahi Bonjour 网关解决方案方面取得了喜忧参半的成功,除非您绝对需要,否则不建议您研究它。

我的底线是,正如您在第三个问题中指出的那样,您将永远受 Apple 的摆布,因为这是一个封闭的、专有的、未记录的服务*,适用于家庭网络环境。因此,除非 Apple 决定改变这一点,否则我会尽可能避免在企业网络中实施它。

* mDNSResponder 的底层代码是开放的、非专有的,并且在 Apache 许可下可用。但是,Apple 在其 iDevices 和 MacOS 内部的这种实现完全不受您的控制,并且可能随时更改。

Avahi可以在这里为您提供帮助。有很多选项,但这应该可以跨子网获得流量。您应该能够在 ddwrt 盒上获取它或使用 Raspberry Pi 和 dot1q 接口。

 enable-reflector= Takes a boolean value ("yes"  or  "no").  If  set  to
       "yes"  avahi-daemon  will  reflect  incoming mDNS requests to all local
       network interfaces, effectively allowing clients to browse  mDNS/DNS-SD
       services  on  all  networks  connected  to  the gateway. The gateway is
       somewhat intelligent and should work with all kinds  of  mDNS  traffic,
       though  some functionality is lost (specifically the unicast reply bit,
       which is used rarely anyway). Make sure to not run multiple  reflectors
       between the same networks, this might cause them to play Ping Pong with
       mDNS packets. Defaults to "no".

 reflect-ipv= Takes a boolean value ("yes" or "no"). If set to "yes" and
       enable-reflector  is  enabled,  avahi-daemon  will forward mDNS traffic
       between IPv4 and IPv6, which is usually not  recommended.  Defaults  to
       "no".

它不起作用,因为它是一种广播(多播)技术。(另见:Bonjour)穿越广播域(即 VLAN)需要代理。我不是 Mac 用户,但我以前见过这样的代理设置——因此 iDevices 可以访问无线和有线是不同局域网的打印机。我不记得使用的程序,但它不是免费的。