centos7上部署mDns
简介
mDNS即多播DNS(Multicast DNS),mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信,使用的端口为5353。
mdns 使用组播地址为: 224.0.0.251 (ipv6: FF02::FB) 端口为5353,mdns 是用于局域网内部的,并且主机的域名为.local 结尾,每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁(域名),和我的IP地址是多少。然后其他有mdns服务的主机就会响应,也会告诉你,它是谁(域名),它的IP地址是多少。 当然设备需要服务时,就是使用mdns 查询域名对对应的ip地址,对应的设备收到该报文后同样通过组播方式应答,此时其他主机设备也是可以收到该应答报文,其他主机也会记录域名和ip 以及ttl 等,更新缓存。
比如,A主机进入局域网,开启了 mDNS 服务,并向 mDNS 服务注册以下信息:我提供 FTP 服务,我的IP是 192.168.1.101,端口是 21。当B主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 FTP 服务器,B主机的 mDNS 就会去局域网内向其他的 mDNS 询问,并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 21 的主机,也就是 A 主机提供 FTP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了。
安装
centos7在master节点或者nginx节点安装avahi和nss-mdns
1 | yum install nss-mdns avahi avahi-tools |
配置
指定域名的形式
可以不部署在服务所在的服务器上
在配置目录/etc/avahi/services/ 中新建一个服务文件
1 | <service-group> |
在/etc/avahi/hosts中增加域名解析,这里ip使用高可用ip,域名和步骤1配置文件中host-name一致,配置完后会自动加载配置;
1 | 193.169.203.10 sygl-front.local |
不指定域名
不指定域名,解析出来的address就是本机ip,所以对应端口的服务需要部署在本机
1 | <service-group> |
比如在237和236上使用该配置,识别到的地址如下
1 | [root@sygl ~]# avahi-browse -tr _sygl._tcp |
验证
在其他服务器上执行avahi-browse -tr _sygl._tcp 可以看到注册上来的服务
参考
手动注册服务
1 | avahi-publish-service -s cherry-front _sygl._tcp 49663 -H cherry-front.local |
手动注册域名
1 | avahi-publish -a -R cherry-front.local 193.169.203.10 |
检查局域网中服务
1 | 所有服务 |
跨vlan
mdns正常只能在同vlan下发现,如果需要跨vlan使用,需要工厂IT在交换机上进行配置mDNS网关或mDNS中继,参考配置文档:
https://support.huawei.com/enterprise/zh/doc/EDOC1100213112/dbe419e9
产品局域网验证
mac
同一个局域网内,mac在终端执行
1 | dns-sd -B _sygl._tcp |
windows
windows需要下载bonjour sdk,安装后在终端执行
1 | dns-sd -B _sygl._tcp |
参考:
跨网段 AirPlay 投屏:跨越 VLAN 打通 mDNS 多播 - 知乎 (zhihu.com)
网络协议学习-mDNS_胖哥王老师的博客-CSDN博客


