OpenWRT 跨网段解析 mDNS 域名
在局域网中,由于 IP 地址都是动态分配的,很难确定每一台电脑的 IP 地址。此时使用 mDNS 使用局域网域名解析就非常方便。
对于 windows10 系统电脑。只需要在知道电脑设备的名字,即可通过
ping 设备名称.local
命令知道电脑的 IP 地址。
注意: 域名不区分大小写。
对于 IPv4,mDNS 设备间通过使用
udp
组播通信,组播地址为
224.0.0.251
,端口
5353
。组播规定为同一个局域网之间通信,无法实现跨不同网段间通信。
在上面这种网络结构之中,pc1 无法通过 mdns 发现 pc2 设备(知道 pc2 的 ip 地址)。之前通过在在路由器B上
配置 mDNS 端口映射
的方式实现 pc1 通过 mDNS 发现 pc2。但是过程相对比较复杂,并且不支持 pc2 发现 pc1。
Avahi 实现跨网段的解析 mDNS
- 在 路由器B (openwrt系统) 上安装 Avahi
opkg update
opkg install avahi-daemon
-
配置 Avahi 跨网段解析 mDNs,打开
/etc/avahi/avahi-daemon.conf
:
[server]
#host-name=foo
#domain-name=local
use-ipv4=yes
use-ipv6=yes
check-response-ttl=no
use-iff-running=no
allow-interfaces=br-lan,eth0.2 # 添加这一行: 接口 br-lan 为局域网接口,eth0.2 为 wan 口接口,根据实际情况修改
[publish]
publish-addresses=yes
publish-hinfo=yes
publish-workstation=no
publish-domain=yes
#publish-dns-servers=192.168.1.1
#publish-resolv-conf-dns-servers=yes
[reflector]
enable-reflector=yes # 修改这一行: 将 no 改为 yes 支持跨网段mdns
reflect-ipv=no
[rlimits]
#rlimit-as=
rlimit-core=0
rlimit-data=4194304
rlimit-fsize=0
rlimit-nofile=30
rlimit-stack=4194304
rlimit-nproc=3
可以使用
ifconfig
命令就可以查询网络接口。
-
重启
avahi
服务,并设置开机启动。
/etc/init.d/avahi-daemon restart
/etc/init.d/avahi-daemon enable
- 设置防火墙
Luci -> 网络 -> 防火墙 -> 通信规则 -> 新增
- 测试
在 pc1 上:
ping pc2.local
在 pc2 上:
ping pc1.local
结果都会返回对应设备的 IP 地址。
注意:虽然 pc2 可以解析到 pc1 的 IP 地址。但是由于 NAT 特性,仍然需要在路由器B上设置端口映射,通过访问路由器B来访问到 pc1 上的服务。
参考链接