首先,卓悦究竟是做什么的(请阅读我在下面写的猜测)?
在这里,我发现 Bonjour 可以自动发现 IP 网络上的计算机、设备和服务。但我认为它不仅“发现 IP 网络上的设备”,还通过为运行 Bonjour 的设备分配 IP 地址来创建 IP 网络。我对吗?
我仍然想念本质。它以下列方式工作吗?首先,我以物理方式连接设备(例如笔记本电脑),以便它们可以相互通信。然后,比方说,在我运行 Bonjour 的某些笔记本电脑上,这些笔记本电脑以自动方式为它们自己分配 IP 地址。因此,笔记本电脑(运行 Bonjour 的地方)构建了一个 IP 网络。它以这种方式工作吗?
或者可能是一台运行 Bonjour 的计算机不被视为一项服务,它不会仅仅因为 Bonjour 在这台计算机上运行而广播自己。我的意思是在计算机上运行的应用程序需要使用 Bonjour 来广播自己。因此,是应用程序自己广播自己(而不是计算机)并且它不是自动完成的(应用程序需要明确地广播自己)。这样对吗?
我的应用程序究竟如何广播自己?我可以使用命令行注册服务吗(以便所有使用 Bonjour 的应用程序都知道出现了新服务)?
此外,我想要一个使用 Bonjour 创建的 IP 网络的应用程序。为此,我的应用程序需要知道网络中存在哪些设备/服务。更详细地说,我的应用程序需要有一个服务列表。列表中的每个服务都应该有一个名称、它运行的 IP 地址和应用程序使用的端口。Bonjour 能否以某种方式提供这些信息?如果是这种情况,它究竟是如何工作的。我的程序如何从 Bonjour 获取这些信息?我的程序可以读取 Bonjour 创建的包含上述信息的文件吗?我可以在命令行中使用一些命令来检索这些信息吗?
我对从文件、环境变量或命令行中的命令访问有关服务的信息特别感兴趣。这些选项在我看来是最简单的!因为在这些情况下,我不需要使用任何额外的库来通过特定的编程语言与 Bonjour 进行通信。
PS 如果我的问题中有不清楚的地方,请提出问题。我将尝试以更清晰的方式提出我的问题。
PPS我使用的是 Windows 7。
补充:我计划用 PHP 编写我的应用程序。每台计算机都应该运行一个 Apache Web 服务器。我想用 Bonjour 来帮助计算机发现彼此(计算机在本地网络中工作)。
我有一个使用 Samba 的基于 Debian Linux 的文件服务器,现在可以被 Mac OS X 客户端成功访问。
我希望通过 Bonjour 以更加用户友好的方式提供此资源。
是否有可能配置 Linux 服务器,以便它通过 Bonjour 在本地网络上宣布自己?如果是这样,如何?
我对术语有点迷茫。我想开始使用Bonjour。作为第一步,我试图找到一种简单的方法来使用它。我想我可能可以从命令行调用 Bonjour 来注册和发现服务。
当我问其他人怎么做时,我被告知 mDNS(适用于 Mac 和 Linux,但不适用于 Windows)。人们还告诉我,我可以使用“dns-sd”(适用于 Windows)。有人告诉我,“dns-sd”只是 mDNS 的别名。
但!后来我发现 DNS 服务发现和多播 DNS 是两个不同的东西(它们是兼容的,一起使用时效果特别好,但它们不需要彼此)。
此外,在我看来,mDNS 和 DNS-SD 是 Bonjour 的三个主要组件中的两个。这样对吗?我可以在没有 Bonjour 的情况下使用它们吗?在我的 Windows 7 上,我安装了 Bonjour,并且能够在命令行中运行“dns-sd”。但我无法运行 mDNS。
所以,我现在有点困惑。任何人都可以请澄清一下情况吗?
我为我们的办公室购买了 Mountain Lion Server,认为 Bonjour 会自动启用通过 VPN 连接的任何计算机,以查看办公室网络上运行的所有计算机和应用程序(例如 Bento)。希望我们这些在家工作的人感觉就像我们在办公室一样,所有网络服务都通过 VPN 连接透明地工作。但是,我发现 Bonjour(又名 mDNS)在默认情况下无法通过 VPN 工作。
我可以将 Mountain Lion Server 配置为通过 VPN 自动传递 Bonjour 流量吗?有什么理由不这样做吗?
首先是一些背景知识:我们有一个实验室,其中包含一些运行在隔离 LAN 上的专用 Linux 服务器。所有服务器运行相同的操作系统 (Debian Linux) 和相同的专有服务器软件,服务器进程相互通信以保持数据同步。这意味着就任何客户端而言,客户端连接到哪个服务器并不重要——任何服务器都将返回与其他任何服务器相同的数据。
这些 Linux 服务器都运行 avahi-daemon 来为自己发布 mDNS 主机名,这意味着客户端可以输入例如“ http://linux-server-1.local”。进入他的 Web 浏览器并连接到 Linux 服务器 #1,依此类推。
这一切都很好,只是这意味着坐在客户端机器上的用户(通常是安装了 Bonjour 的 Mac 或 Windows 笔记本电脑)必须知道(或弄清楚)哪些 Linux 服务器当前在线,并且他必须确保他连接到其中之一。例如,如果服务器#2 今天离线,并且客户端输入“ http://linux-server-2.local”。进入他的网址栏,他不会得到回应。当然,这不是世界末日,但对于希望一切“正常工作”的新手用户来说,这很烦人,而且它还使健壮的客户端脚本的开发变得更加复杂(因为客户端脚本需要知道如何明确处理离线服务器)。
考虑到这一点,我的问题是:是否可以配置 Avahi 来发布任播风格的 mDNS 主机名别名?目标是任何人都可以坐在他的笔记本电脑上,输入“ http://any-linux-server.local”。(或类似的),并连接到当前在线的服务器之一(同样,哪个服务器无关紧要)。
请注意,这需要在客户端笔记本电脑没有任何特殊配置的情况下工作,因为我们无法控制它们(除了需要安装 Bonjour 之外)。
另请注意,我们不能依赖单独的名称服务器或代理框的存在,或依赖任何特定 Linux 服务器的存在,因为这会引入我们试图避免的单点故障。
我刚刚在我们的办公室安装了一个新的 OSX 服务器,并验证了我们的有线网络 (192.168.126.0/24) 一切正常。
我遇到的问题是我们的客户端(Mac 笔记本电脑)主要通过无线连接,它们在不同的子网 (192.168.1.0/24) 上运行,并且 mDNS 广播没有到达这个子网。
网络配置对我来说有点陌生(我不管理这个位置的网络,但直到最近才管理服务器),但是我不相信两个子网之间有任何防火墙或路由规则可能会导致流量被拒绝。
我想知道这是否只是 mDNS 广播无法通过两个不同的子网进行广播(我仍在阅读广播以了解更多信息),或者还有其他我可以尝试的东西。
我有一个 FreeBSD 9 路由器(Soekris net6501)通过 dsl 调制解调器(桥接)连接到互联网,为两个内部子网 10.0.1.0/24(LAN)和 10.0.2.0/24(wifi 网)执行 NAT。
有子网之类的东西之间的路线ssh host-A.wifi从host-B.lan作品。
但是,10.0.2.0/24 网络上的无线客户端(如 iPad 和 iPhone)似乎无法在 LAN 上找到东西(例如,在 LAN 上播放到 Apple-TV)。
我不完全确定,但我认为这是因为 Apple 使用 Bonjour,Bonjour 使用多播来查找内容,而多播不跨子网路由。
根据FreeBSD 手册,要路由多播,我需要编译内核options MROUTING并创建一个/etc/mrouted.conf,但我找不到任何好的配置文件示例。
mroutedFreeBSD 中启用路由的首选解决方案吗?/etc/mrouted.conf在 10.0.1.0/24 和 10.0.2.0/24 之间创建路由?我有一台运行 Debian 8 的服务器。最近我使用本教程在其上安装了 OpenVPN 。一切都很好。我使用 Tunnelblick 客户端在我的 macbook 上进行了测试。使用谷歌检查我的IP,连接到VPN再次检查,它更改为与我的服务器LAN相同的IP。所以我知道这一切都很好。
我的问题是,当我通过 VPN 连接时,该 LAN 上所有计算机(所有 OSX 的 AFP 协议)上的文件共享没有显示在我的 Finders 侧边栏上。我能够使用 Finder 的“连接到服务器”工具通过连接手动连接到它们,afp://192.168.0.100并且效果很好。所以我假设这是 Bonjour 的问题。
根据我的研究,我发现 Bonjour (mDNS) 不会广播到不同的子网。所以我在ifconfig通过 VPN 连接时在我的 macbook 上运行。它是 192.168.43.206。我连接到的网络上的所有计算机都是192.168.0.10到192.168.0.200。所以我猜这是我问题的根源?
我认为我的解决方案可能是将我的 OpenVPN 配置切换到“桥接”模式?我阅读了一些论坛和文章,指出这是解决方案,但我什至不确定我是否正确诊断了我的问题。而且我还没有真正掌握桥接模式设置。
希望有人能给我一些澄清。
大约一年前,我们在校园内使用单播DNS-SD设置了AirPrint,结果证明取得了巨大成功,因此我们正在考虑尝试让AirPlay工作,以便我们的教职员工和学生可以在我们的教室投影仪上无线显示内容.
还有一些其他因素阻碍了理想的实现(用户名和密码身份验证,对于初学者),但我一直在尝试设置一个有效的演示。让 AirPrint 工作基本上只是通过 DNS-SD 域而不是多播 (.local) 域来宣传相同记录的问题,但为 AirPlay 做同样的事情似乎并没有削减它。设备无法将 DNS-SD AirPlay 服务器识别为可用。
我已经在此处上传了我的 DNS-SD 配置的屏幕截图和原始配置(来自 AirServer,它通常适用于多播)。
我意识到这仍然是一个相当新的功能并且缺乏文档,但是有没有人能够通过 DNS-SD 使 AirPlay 工作?如果它仅适用于多播,我可以接受,但它的潜力对我们来说非常有吸引力,我认为值得问问其他人是否已经弄清楚了。
首先,我对网络和 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 工作。 …
我的机器上有四个网络:
我的 OS X (10.5) 似乎更喜欢在我的无线网络上为 machinename.local 使用 VMWare 的 NAT。有没有办法改变关闭VMWare界面的偏好?
在我的 LAN 上,我有三个基本相同的 Debian Linux 机器运行 Avahi。其中一个既有IPv4地址又有IPv6地址,另外两个只有IPv6地址。它们都显示在我 Mac 上的 Bonjour 浏览器中,如下所示:
Workgroup Manager (_workstation._tcp.) - 4
box-1 [00:60:2b:02:45:f8]
[fe80::260:2bff:fe02:45f8]:9
192.168.1.78:9
box-2 [00:60:2b:02:46:1b]
[fe80::260:2bff:fe02:461b]:9
box-3 [00:60:2b:02:42:e2]
[fe80::260:sbff:fe02:42e2]:9
Run Code Online (Sandbox Code Playgroud)
在我的 Mac 上,一切都很好……我可以解析 box-1.local.、box-2.local. 和 box-3.local.、ping6 到其中任何一个、ssh 到其中任何一个等.
然而,我的 Windows 7 机器只能看到 box-1。例如,在命令提示符窗口中执行 dns-sd 会让我得到这个:
C:\>dns-sd -B _ssh._tcp
Browsing for _ssh._tcp
Timestamp A/R Flags if Domain Service Type Instance Name
12:41:14.492 Add 2 17 local. _ssh._tcp. box-1 SSH
Run Code Online (Sandbox Code Playgroud)
通过其 Bonjour 名称和 IPv6 ping 该框有效:
C:\>ping -6 msli-dcm-2-10330688.local.
Pinging msli-dcm-2-10330688.local. [fe80::260:2bff:fe02:45f8%17] with 32 bytes of …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 iOS 应用程序,该应用程序使用 Bonjour 在同一 WiFi 网络上进行设备发现。它在某些网络上运行良好,但在其他网络(如星巴克或 Panera)上运行良好。设备看到自己,但看不到彼此。
我得到了一个提示,这些网络可能正在使用水平分割 DNS。我已经确认我无法从另一台设备 ping 通一台设备。
问题是,如果 WiFi 网络无法工作,我想显示一条错误消息。
我想也许我无法在这样的网络上 ping 自己,但我可以。
从单个设备检测水平分割的最佳策略是什么?换句话说,我无法在运行时 ping 另一个设备,因为我对其他设备一无所知。