简介

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
2
3
4
5
6
7
8
<service-group>
<name>sygl-front</name>
<service protocol="ipv4">
<type>_sygl._tcp</type>
<port>49663</port>
<host-name>sygl-front.local</host-name>
</service>
</service-group>

在/etc/avahi/hosts中增加域名解析,这里ip使用高可用ip,域名和步骤1配置文件中host-name一致,配置完后会自动加载配置;

1
193.169.203.10 sygl-front.local

不指定域名

不指定域名,解析出来的address就是本机ip,所以对应端口的服务需要部署在本机

1
2
3
4
5
6
7
<service-group>
<name>sygl-front</name>
<service protocol="ipv4">
<type>_sygl._tcp</type>
<port>49663</port>
</service>
</service-group>

比如在237和236上使用该配置,识别到的地址如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@sygl ~]# avahi-browse -tr  _sygl._tcp
+ ens192 IPv4 sygl-front _sygl._tcp local
+ ens192 IPv4 sygl-front #2 _sygl._tcp local
= ens192 IPv4 sygl-front _sygl._tcp local
hostname = [linux.local]
address = [193.169.200.237]
port = [49663]
txt = []
= ens192 IPv4 sygl-front #2 _sygl._tcp local
hostname = [linux-2.local]
address = [193.169.200.236]
port = [49663]
txt = []

验证

在其他服务器上执行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
2
3
4
# 所有服务
avahi-browse -a -r
# 数益服务
avahi-browse -tr _sygl._tcp

跨vlan

mdns正常只能在同vlan下发现,如果需要跨vlan使用,需要工厂IT在交换机上进行配置mDNS网关或mDNS中继,参考配置文档:

05-mDNS网关配置-新华三集团-H3C

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博客