论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
运维.售后
›
运维.售后
›
【Linux】MDNS:局域网域名剖析
【Linux】MDNS:局域网域名剖析
曹旭辉
论坛元老
|
5 天前
|
显示全部楼层
|
阅读模式
楼主
主题
1940
|
帖子
1940
|
积分
5820
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
MDNS(Multicast DNS)是一种用于局域网内设备名称剖析的协议。与传统的DNS差异,MDNS不依赖于中心化的DNS服务器,而是通过多播地址在网络中广播名称剖析哀求。这使得在没有配置专用DNS服务器的环境下,设备可以通过其主机名在网络中被其他设备发现。
MDNS常见的应用场景包括打印机、智能家居设备、无线路由器等设备的自动发现。本文将具体介绍如安在生产环境中使用MDNS,包括安装、配置和实际应用。
MDNS根本概念
什么是MDNS
MDNS(Multicast DNS)是一种在局域网内(通常是同一子网中)进行名字剖析的协议,它通过UDP多播来查询和响应哀求。与传统的DNS协议依赖于单一的DNS服务器差异,MDNS通过向特定的多播地址发送DNS查询哀求,使得网络上的全部设备都可以响应并提供其主机名。
MDNS协议的作用
无需配置DNS服务器
:无需一个中心化的DNS服务器,设备可以在网络中自动发现。
设备发现
:在一个局域网中,通过MDNS协议可以让设备自动发现相互,尤其适用于如打印机、摄像头、路由器等设备。
零配置网络
:MDNS支持零配置网络(Zeroconf),设备无需手动配置就可以进行通信和发现。
MDNS的工作原理
MDNS在局域网中使用UDP协议通过多播发送哀求。以下是其工作原理:
查询哀求
:设备使用MDNS查询特定的名称(例如“myprinter.local”),该哀求会通过UDP广播发送到特定的多播地址(224.0.0.251)。
响应
:网络上的其他设备假如知道该名称对应的IP地址,会以MDNS响应返回哀求设备。
名字剖析
:设备通过收到的响应,获取目标设备的IP地址,进而进行通信。
MDNS的数据包结构
MDNS使用的消息格式与传统DNS相似。数据包的主要部门包括:
头部
:包罗查询范例、响应范例等信息。
标题部门
:即设备发出的查询哀求。
资源记录部门
:包罗了对查询哀求的响应,如设备的IP地址等。
安装 Avahi
安装步调
在 Linux 系统中,安装 Avahi 是非常简单的。以下是常见 Linux 发行版的安装步调。
在 Ubuntu/Debian 系统上安装
sudo apt update
sudo apt install avahi-daemon avahi-utils libnss-mdns
复制代码
avahi-daemon
:Avahi 的焦点守护历程。
avahi-utils
:包罗一些有效的命令行工具,用于调试和管理 mDNS 服务。
libnss-mdns
:使系统可以或许剖析 .local 域名。安装这个库后,hostname.local 可以被剖析为局域网内的 IP 地址。
在 CentOS/RHEL 系统上安装
sudo yum install avahi avahi-tools nss-mdns
复制代码
在 Arch Linux 系统上安装
sudo pacman -S avahi nss-mdns
复制代码
启动 Avahi 服务
安装完成后,启动并使 Avahi 服务开机自启动。
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon
复制代码
你可以使用以下命令检查 Avahi 服务的状态:
sudo systemctl status avahi-daemon
复制代码
配置 Avahi
Avahi 的配置文件位于 /etc/avahi/avahi-daemon.conf,你可以根据需求对其进行调解。以下是一些常用的配置项:
配置文件位置
主配置文件
:/etc/avahi/avahi-daemon.conf
服务文件
:/etc/avahi/services/(用来定义要发布的服务)
配置文件剖析
打开并编辑 /etc/avahi/avahi-daemon.conf 文件:
sudo nano /etc/avahi/avahi-daemon.conf
复制代码
[server] 部门
这个部门定义了 Avahi 守护历程的举动和网络接口设置。
[server]
host-name=mydevice # 主机名,发布服务时使用
domain-name=local # 默认的域名
use-ipv4=yes # 启用 IPv4
use-ipv6=no # 禁用 IPv6(可根据需求启用)
enable-dbus=yes # 启用 DBus 支持(用于与应用程序的交互)
复制代码
[publish] 部门
用于设置是否发布本机的服务信息。
[publish]
publish-addresses=yes # 是否发布本机的 IP 地址
publish-hinfo=yes # 是否发布硬件信息
publish-workstation=yes # 是否发布工作站信息
复制代码
[reflector] 部门
决定是否启用 MDNS 反射功能,使得 MDNS 查询可以跨子网传播。
[reflector]
enable-reflector=no # 是否启用反射
复制代码
修改主机名
Avahi 会默认使用系统的主机名来发布 mDNS 服务。你可以使用 hostnamectl 命令修改主机名:
sudo hostnamectl set-hostname mydevice
复制代码
修改后,重启 Avahi 服务以使修改生效:
sudo systemctl restart avahi-daemon
复制代码
使用 Avahi 发布 mDNS 服务
在局域网中,你可以通过 Avahi 来发布本身想要的服务,例如 HTTP 服务、SSH 服务等。Avahi 使用 .service 文件来定义和发布服务,这些文件通常存放在 /etc/avahi/services/ 目录中。本文将通过一个简单的示例,教你如何创建一个 .service 文件,发布一个 HTTP 服务。
创建服务文件
起首,我们必要在 /etc/avahi/services/ 目录中创建一个新的服务文件,Avahi 会通过这些文件来发布你所定义的服务。
打开终端,并使用 nano 或其他文本编辑器创建一个新的服务文件:
sudo nano /etc/avahi/services/http.service
复制代码
你将看到一个空白的文件,这里可以添加你的服务定义。
定义服务内容
在服务文件中,你必要定义该服务的范例、端口以及服务的名称。以下是一个发布 HTTP 服务的示例:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group PUBLIC "-//Avahi//DTD Service Group//EN" "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name> <!-- 自动替换为主机名 -->
<service>
<type>_http._tcp</type> <!-- 服务类型,_http._tcp 表示 HTTP 服务 -->
<port>8080</port> <!-- 服务端口号,假设服务在 8080 端口 -->
</service>
</service-group>
复制代码
<name>:指定服务的名称。在这个例子中,%h 表现使用本机的主机名,Avahi 会自动更换成实际的主机名。例如,假如本机的主机名是 mydevice,那么在局域网中该服务将被命名为 mydevice.local。
<type>:定义服务的范例,这里我们使用 _http._tcp 来表现 HTTP 服务。
<port>:指定服务的端标语,这里我们假设 HTTP 服务运行在 8080 端口。
重启 Avahi 服务
当你完成了服务文件的编辑后,必要重启 Avahi 守护历程,使配置生效。
运行以下命令来重启 Avahi 服务:
sudo systemctl restart avahi-daemon
复制代码
Avahi 会自动加载 /etc/avahi/services/ 目录中的全部服务文件,发布你定义的 HTTP 服务。
测试服务是否发布成功
你可以使用 avahi-browse 命令来检察和验证已发布的服务。
执行以下命令来列出全部可以通过 mDNS 访问的服务:
avahi-browse -a
复制代码
假如统统正常,你应该可以或许在输出中看到类似如下的信息,表现你发布的 HTTP 服务已经生效:
+ eth0 IPv4 mydevice _http._tcp local
+ eth0 IPv4 mydevice.local _http._tcp local
复制代码
在上面的输出中,mydevice.local 就是你发布的 HTTP 服务名称。你可以在局域网内的其他设备上通过浏览器访问 http://mydevice.local:8080 来访问这个服务。
小结
通过上述步调,你已经成功创建并发布了一个 HTTP 服务。你可以通过创建类似的 .service 文件来发布其他范例的服务,只必要修改 <type> 和 <port> 标签的内容即可。
例如,假如你想发布一个 SSH 服务,可以使用以下服务文件:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group PUBLIC "-//Avahi//DTD Service Group//EN" "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type> <!-- SSH 服务 -->
<port>22</port> <!-- SSH 默认端口 -->
</service>
</service-group>
复制代码
发现 mDNS 服务
使用 avahi-browse 命令发现服务
avahi-browse 是一个命令行工具,用于查找网络中发布的服务。它可以资助你在本地或远程网络上发现服务。
列出全部服务:
avahi-browse -a
复制代码
列出特定范例的服务:
avahi-browse -r _http._tcp
复制代码
-r 选项表现递归显示服务。
使用 avahi-resolve 命令剖析主机名
avahi-resolve 命令可以用来剖析设备的主机名。例如,剖析 mydevice.local:
avahi-resolve -n mydevice.local
复制代码
该命令会返回主机的 IP 地址。
调试 mDNS
检察 Avahi 日记
你可以使用 journalctl 命令检察 Avahi 的日记,以资助诊断标题:
sudo journalctl -u avahi-daemon
复制代码
使用 avahi-daemon 命令调试
Avahi 提供了调试选项,可以用来启动一个更加具体的日记输出:
sudo avahi-daemon --debug
复制代码
该命令将显示 Avahi 服务的调试信息,资助你排查标题。
启用 mDNS 反射
假如你必要跨子网使用 mDNS,可以在 /etc/avahi/avahi-daemon.conf 中启用反射功能:
[reflector]
enable-reflector=yes
复制代码
高级管理和操作
使用 DBus 与 Avahi 交互
Avahi 提供了 DBus 接口,允许你通过编程方式与 Avahi 交互。你可以使用 DBus 来管理服务的发布和发现。
自定义服务范例
Avahi 允许你自定义服务范例。假如你希望发布一个非标准的服务(如自定义应用),你只必要定义一个独特的服务范例并相应地进行发布。
控制 Avahi 的服务缓存
Avahi 会缓存已发布的服务。假如你希望扫除缓存并重新加载服务,可以使用:
sudo systemctl restart avahi-daemon
复制代码
MDNS的安全性和留意事项
MDNS固然方便,但在某些环境中可能会带来安全隐患。以下是一些留意事项:
MDNS流量的广播性质
:MDNS的查询和响应是通过局域网广播的,可能被网络中的恶意设备监听或伪造。
加密标题
:MDNS本身并不加密通信,因此通信内容可能被中心人攻击(MITM)。
不适用于广域网
:MDNS设计用于局域网内,不适适用于广域网或互联网中,跨网段的MDNS查询通常无法工作。
如何进步安全性
使用VPN或专用网络来隔离MDNS流量。
配合防火墙策略,限制MDNS的使用范围。
使用TLS等加密协议加固设备之间的通信。
总结
MDNS在局域网内提供了一个方便的设备发现和名称剖析机制,尤其适用于零配置网络环境。本文介绍了如安在Linux上安装、配置和使用MDNS,涵盖了从安装Avahi到使用工具进行设备发现和调试的全过程。通过公道配置和使用MDNS,您可以在一样平常生产环境中进步设备互联和通信的便利性。然而,在使用MDNS时,必要关注其安全性标题,特别是在大型网络或对安全性要求较高的环境中。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
曹旭辉
论坛元老
这个人很懒什么都没写!
楼主热帖
网络安全应急响应 - 03 - 日志分析与内 ...
Redis - 介绍与使用场景
Nmap抓包分析与绕过Windows防火墙 ...
Mysql 的Innodb引擎和Myisam数据结构和 ...
【docker系列】docker API管理接口增加 ...
一招教你如何高效批量导入与更新数据 ...
聊聊Spring事务控制策略以及@Transacti ...
用代码收集每天热点内容信息,并发送到 ...
C#中的CSV文件读写
Java如何将字符串转换颜色呢? ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
IOS
快速回复
返回顶部
返回列表