我有一个 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
,但我找不到任何好的配置文件示例。
- 我的问题是否与跨子网的多播有关?
mrouted
FreeBSD 中的首选解决方案是启用路由吗?- 如何创建
/etc/mrouted.conf
10.0.1.0/24 和 10.0.2.0/24 之间的路由?
答案1
感谢@chris-s,我通过使用 Avahi 而不是尝试路由多播流量来解决了我自己的问题。
这对我有用:
- 从 ports 树编译并安装
net/avahi
。dns/nss_mdns
- 添加
avahi_daemon_enable="YES"
和dbus_enable="YES"
至/etc/rc.conf
- 使用 avahi 配置文件(
/usr/local/etc/avahi/avahi-daemon.conf
)并将我的两个内部网络接口(两个内部子网)添加到allow-interfaces
密钥(以逗号分隔),并将enable-reflector
密钥设置为yes
使 avahi 将流量传播到所有内部网络。 - 编辑
hosts
条目/etc/nsswitch.conf
至hosts: files dns mdns
启动 avahi 守护进程后,您可以通过直接从 mdns 服务器计算机进行查找来检查它是否正常工作:
root@server / # getent hosts apple-tv.local
10.0.1.4 apple-tv.local
root@server / # getent hosts iphone4s.local
10.0.2.27 iphone4s.local
root@server / # getent hosts ipad.local
10.0.2.22 ipad.local
或者使用类似以下实用程序浏览 .local 域名Bonjour 浏览器或者互联网浏览器(都非常好)。您应该能够看到所有子网上的设备、主机和服务。
脚注是,我的库存 FreeBSD 9.0 安装默认/etc/syslogd.conf
没有记录消息,avahi-daemon
所以我一开始没有看到任何日志(添加了一个daemon.*
指向的选择器/var/log/daemon.log
)
答案2
广告 3:
phyint em0 rate_limit 0 igmpv1
phyint em1 rate_limit 0 igmpv1
但要注意,AppleTV 很可能会发送 TTL 为 1 的数据包,因此无法路由。
快速谷歌搜索显示,其他可能性是 Bonjour“代理”或将服务添加到 DNS。