首先,我对网络和 Unix/Ubuntu/Linux 发行版都很陌生。只是一个警告,对于任何设置/代码可能看起来有点难看。
基本上,我的最终目标是在不同的 wifi 网络或 LTE 上从我的 iPhone 成功地 AirPlay 镜像到远程 Ubuntu 服务器。
TL;DR:使用 mdns-repeater/avahi-daemon 和 OpenVPN,我仍然无法将 mDNS 请求从 eth0 传递到 tun0。
首先,我知道我需要一个支持镜像的基于 Ubuntu/Linux/Unix 的操作系统的 AirPlay 接收器(希望是开源的)。我找到了几个,大多数用于 Mac OS/Windows,或者根本不支持镜像。经过更多的搜索,我在 Magic Mirror [Link 1 below] 中找到了Slave,这是一个运行和工作的开源 Linux AirPlay 服务器/接收器(基于我的调试,因为我没有物理访问我运行它的服务器) )。
现在,我知道 AirPlay 只能通过 LAN 运行(当时不明白 Bonjour 如何只在同一子网上工作),所以我研究了一些 VPN 选项。OpenVPN 似乎是最灵活和最容易设置的。为了加快速度并保证我在设置 OpenVPN 时不会犯任何错误,我使用了这里的预制脚本[下面的链接 2]。经过测试和完美运行,VPN 连接没有 DNS 泄漏,所有流量路由都成功通过 VPN。
我的 VPN 就像我的设备现在在我服务器的 LAN 上一样,并且我在 Magic Mirror(AirPlay 服务器)中成功运行了 Slave。所以它现在应该可以工作了,对吧?毫不奇怪,它没有,因为我不明白 AirPlay 服务器实际上发送了 mDNS/Bonjour 请求(或探测?真正的术语现在让我忘记了......)。作为家庭,常规用户,由于这些mDNS请求是zeroconf(零配置),这太神奇了!但作为企业或商业用户,这很难跨 VLAN 工作。
通过研究,我得出的最终结果是,我需要某种 mDNS 中继器/代理/网桥类型设置。我最终得到了 mDNS 中继器。我尝试使用两个程序。
Avahi-Daemon [下面的链接 3] Avahi 似乎是最受关注和记录最多的,所以我决定使用它。我编辑了配置文件以允许 配置位置 /etc/avahi/avahi-daemon.conf
[reflector]
enable-reflector=yes
Run Code Online (Sandbox Code Playgroud)
和
[server]
allow-point-to-point=yes
Run Code Online (Sandbox Code Playgroud)
如此处[下方链接 4]和此处[下方链接 5] 所述。
在调试模式下运行 Avahi 守护进程 (avahi-daemon --debug) 乍一看似乎可以工作,但是一旦魔镜中的 Slave(在 eth0 接口上运行,OpenVPN 在 tun0 接口上运行)运行,它就会以某种方式看到 mDNS 数据包但总是输出一堆这些:
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Received packet from invalid interface.
Run Code Online (Sandbox Code Playgroud)
强制 Avahi 仅使用 eth0 和 tun0,在许多其他更改和设置时将始终输出此信息。
为了验证它不仅仅是我运行的输出错误
tcpdump -i eth0 udp port 5353
和
tcpdump -i tun0 udp port 5353
(mDNS 请求通过的端口)eth0 成功接收来自过滤器的数据包,而 tun0 没有收到。所以不是输出错误。我什至在端口 7000(AirPlay 服务器侦听镜像的端口)上尝试过
Avahi 没有成功,我怀疑这可能只是因为它自 2011 年以来就没有更新过。
mdns-repeater [下面的链接 6] 不需要配置文件或设置,这是我选择的下一个选项。这似乎工作正常。运行 mdns-repeater
mdns-repeater eth0 tun0 -f
Run Code Online (Sandbox Code Playgroud)
只需添加您想要重复请求的接口和 -f 用于前台/调试。就是这样!我在魔镜中运行 Slave 并且 mdns-repeater 成功检测并重复了请求(至少根据它的日志)。但遗憾的是,运行与tcpdump
上面相同的命令,请求仍然没有通过隧道 (tun0)。
现在从我的调试中我只能得出结论,它要么是 iptables/firewall 的原因,要么是 OpenVPN 以某种方式过滤端口或请求的原因。在 OpenVPN 中与过滤相关的配置中没有找到任何内容,我转向了我的 iptables 理论。但是运行并iptables -L
没有带来什么,实际上 iptables 中没有规则。
对iptables知之甚少,不知道是不是这个原因。对于我自己的调试,我添加了所有我能找到的与允许 mDNS/Bonjour/AirPlay 相关的不同 iptables 规则。似乎没有任何帮助。
任何和所有的帮助表示赞赏!我知道这是一篇很长的文章,我不想让任何小问题落空。
TL;DR:使用 mdns-repeater/avahi-daemon 和 OpenVPN,我仍然无法将 mDNS 请求从 eth0 传递到 tun0。
此处所有资源链接: http : //pastebin.com/mVkpZwRY抱歉,我目前没有足够的声誉来获得 2 个以上的链接。
小智 2
不知道答案,但首先 tun 接口不支持广播。如果你使用水龙头,他们就会这样做。尽管在 OVPN 文档中似乎 tap 用于桥接,但您可以在使用 tun 的配置中使用它们。它们的行为几乎相同,但当您 ifconfig 它们时,它们会指示 BROADCAST 作为受支持的选项。
归档时间: |
|
查看次数: |
5291 次 |
最近记录: |