通过隧道从eth0重复mDNS / Bonjour请求(tun0)

首先,我在networking和Unix / Ubuntu / Linux发行版上都很新颖。 只是一个警告,任何设置/代码可能看起来有点难看。

基本上,我的最终目标是在不同的WiFinetworking或LTE上,通过我的iPhone将AirPlay Mirror成功地连接到远程Ubuntu服务器。

TL; DR:使用mdns-repeater / avahi-daemon和OpenVPN,我仍然无法将m0NS请求从eth0传递到tun0。

首先,我知道我需要一个基于Ubuntu / Linux / Unix的操作系统的AirPlay接收器,它支持镜像(希望是开源的)。 我发现了一对夫妇,大部分是Mac OS / Windows,或者根本不支持镜像。 经过一番search后,我发现在魔镜[下面的链接1]的奴隶 ,一个开源的Linux AirPlay服务器/接收器运行和工作(基于我的debugging,因为我没有物理访问服务器,我运行它)。

现在,我知道AirPlay只能通过局域网(当时不知道Bonjour如何在同一个子网上工作),所以我研究了一些VPN选项。 OpenVPN似乎是最灵活和最容易设置的。 为了加快速度,并保证我不会在设置OpenVPN的时候出错,我使用了一个预先制作好的脚本[Link 2 below] 。 testing和工作完美,VPN连接没有DNS泄漏,所有的stream量路由成功通过VPN。

我有我的VPN,好像我的设备现在在我的服务器的局域网上,我的魔镜(AirPlay服务器)中的从属成功运行。 所以它现在应该只是工作,对不对? 毫不奇怪,它没有,因为我不明白的AirPlay服务器实际上发出mDNS / Bonjour请求(或探测器?真正的术语是现在滑了我的脑海..)。 作为常规用户的家庭,由于这些mDNS请求是零configuration(zero configuration),所以这太神奇了! 但作为一个企业或商业用户,这很难在VLAN之间工作。

通过研究,我想出了最终的结果,我需要某种types的mDNS中继器/代理/网桥types设置。 我结束了与mDNS中继器。 有两个我试图使用的程序。

Avahi-Daemon [下面的链接3] Avahi似乎是最受关注和最有logging的,所以我决定使用它。 我编辑了configuration文件以允许configuration位置/etc/avahi/avahi-daemon.conf

[reflector] enable-reflector=yes 

 [server] allow-point-to-point=yes 

正如这里解释的[链接4下面]这里[链接5下面]

在debugging模式下运行Avahi守护进程(avahi-daemon –debug)似乎乍一看起来很好,但是一旦魔术镜中的slave(在eth0接口上运行,在tun0接口上运行的OpenVPN)运行,它就会以某种方式看到mDNS数据包但总是输出一堆这些:

 Received packet from invalid interface. Received packet from invalid interface. Received packet from invalid interface. Received packet from invalid interface. 

强制Avahi仅使用eth0和tun0,在其他许多更改和设置下将始终输出此信息。

要validation它不只是我跑的输出错误

tcpdump -i eth0 udp port 5353tcpdump -i tun0 udp port 5353 (mDNS请求经过的端口)eth0成功接收来自filter的数据包,而tun0不接收数据包。 所以不是输出错误。 我甚至在7000端口(AirPlay服务器侦听镜像的端口)

Avahi没有成功,我怀疑这可能是因为自2011年以来没有更新。

mdns-repeater [下面的链接6]没有configuration文件或设置需要,这是我采取的下一个选项。 而且这似乎是正常工作。 运行mdns-repeater

 mdns-repeater eth0 tun0 -f 

只需添加要重复请求的接口,使用-f进行前台/debugging即可。 而已! 我在魔镜中运行了Slave,mdns-repeater成功检测到并重复了请求(至less根据其日志)。 但是,可悲的是,运行相同的tcpdump命令,如上所示,请求仍然没有通过隧道(tun0)。

现在从我的debugging,我只能得出结论,这是要么iptables /防火墙或OpenVPN过滤端口或请求以某种方式的原因。 在configuration相关的筛选OpenVPN中没有find,我转移到我的iptables理论。 但运行iptables -L没有带来什么,从字面上没有规则在iptables中。

对iptables知之甚less,我不知道这是否是原因。 对于我自己的debugging,我添加了每个不同的iptables规则,我可以find与允许mDNS / Bonjour / AirPlay有关的任何东西。 似乎没有任何帮助。

任何和所有的帮助表示赞赏! 我知道这是一个长时间的阅读,我不希望任何小问题通过。

TL; DR:使用mdns-repeater / avahi-daemon和OpenVPN,我仍然无法将m0NS请求从eth0传递到tun0。

所有链接到这里的来源: http : //pastebin.com/mVkpZwRY 道歉,我没有足够的声誉超过2个链接的时刻。

不知道答案,但一开始tun界面不支持广播。 如果你使用水龙头他们这样做。 在OVPN文档中,似乎tap是用于桥接的,您可以在使用tun的configuration中使用它们。 他们将performance几乎相同,但是当你ifconfig的时候会指明BROADCAST为支持的选项。