如果我不想使用.local
mDNS 服务,我可以使用不同的顶级域名 (TLD) 吗?
举个例子,我可以设置一些家用 NAS 设备,并将它们命名为:
- 电影.nas
- 图片.nas
或者将某些打印机重命名为
- 客厅.打印机
- 楼上.打印机
或者将我家里的某些 IoT 设备重命名为更有意义的名称,例如:
- 露台灯
- 卧室灯
- 车库门
- 车道摄像头
我该怎么做?这会导致什么问题?
答案1
尽管从技术上讲,该协议是可行的(而且有些设备忘记添加后缀),但它与大多数实现不兼容,其中许多实现甚至不会将名称路由到 mDNS 处理程序,除非它们带有后缀.local
。(Linux 上的 Avahi 是我所知道的常见 PC 操作系统上唯一允许添加其他后缀的实现。)
答案2
不,.local.
是这mDNS顶级域名。来自RFC 6762:
本文档规定 DNS 顶级域名
.local.
是一个具有特殊语义的特殊域,即任何以 结尾的完全限定名称.local.
都是链路本地的,并且此域中的名称仅在其来源的链路上有意义。
这类似于 169.254/16 前缀中的 IPv4 地址或 FE80::/10 前缀中的 IPv6 地址,它们是链路本地的并且仅在其来源的链路上有意义。任何以 结尾的名称的 DNS 查询
.local.
都必须发送到 mDNS IPv4 链路本地多播地址 224.0.0.251(或其 IPv6 等效地址 FF02::FB)。
只有在使用 时,您才能获得这些特殊语义.local
。因此,您应该相应地命名您的设备:
movies.nas.local.
pictures.nas.local.
livingroom.printer.local.
upstairs.printer.local.
patio.lights.local.
bedroom.lights.local.
garage.door.local.
driveway.camera.local.
但是,您仍然可以设置您的 DNS,以便简单movies.nas
解析为您的本地地址。
.local.
以 结尾的名称是否因为用户明确输入了以 结尾的完全限定域名而出现.local.
,或者因为用户输入了不合格域名并且主机软件附加了后缀.local.
(因为该后缀出现在用户的搜索列表中)并不重要。.local.
后缀出现在搜索列表中可能是因为用户手动配置了它,或者是因为它是通过 DHCP 接收的 [RFC2132] 或通过任何其他机制配置 DNS 搜索列表。在这方面,.local.
后缀的处理方式与 DNS 搜索列表中可能出现的任何其他搜索域并无不同。如果没有其他常规 DNS 服务器可用,则对不以
.local.
MAY 结尾的名称的 DNS 查询将发送到 mDNS 多播地址。这可以允许同一链路上的主机在网络中断(中断与更大 Internet 的通信)期间继续使用彼此的全局唯一 DNS 名称进行通信。当通过本地多播解析全局名称时,使用 DNS 安全扩展 (DNSSEC) 更为重要 [RFC4033] 或其他安全机制来确保响应是可信的。通过本地多播解析全局名称是一个有争议的问题,本文不会进一步讨论它 […]。(从3. 多播 DNS 名称)
对于不以 结尾的名称,将故障转移到多播 DNS 的选项
.local.
应为用户配置选项,并且应默认禁用,因为可能存在与对看似全局的名称进行意外本地解析相关的安全问题。.local.
在安全的隔离网络上,或者在未来的某些网络上,机器专门使用 DNSSEC 进行所有 DNS 查询,并且多播 DNS 响应器能够生成适当的加密 DNSSEC 签名,从而防止欺骗,启用不以 结尾的名称的多播 DNS 可能是合适的。通过附加(或不附加)来查找不合格(相对)名称的选项 由是否出现(或不出现)在客户端的 DNS 搜索列表中
.local.
控制。.local.
如果 DNS 查询全球的DNS 名称被发送到 mDNS 多播地址(在网络中断期间,中断与更大互联网的通信),这是尤其使用 DNSSEC 非常重要,因为用户可能会误以为他或她正在与某个真实主机通信,而实际上他或她正在与某个伪装成该名称的本地主机通信。对于以 结尾的名称,这一点并不那么重要
.local.
,因为用户应该知道这些名称仅具有本地意义,并不暗示具有全局权限。大多数计算机用户都会忽略在完全限定域名末尾输入尾随的点,这会使它变成相对域名(例如
www.example.com
)。如果发生网络中断,对输入的名称进行正向解析的尝试将会失败,从而导致应用搜索列表(.local.
如果存在)。恶意主机可以www.example.com.
通过应答 的结果多播 DNS 查询来伪装成www.example.com.local.
。为避免这种情况,主机不得将搜索后缀.local.
(如果存在)附加到包含两个或更多标签的任何相对(部分限定)主机名。附加.local.
到单标签相对主机名是可以接受的,因为用户不应该期望单标签主机名会按原样解析。但是,搜索列表中同时包含 和 的用户example.com
应该local
注意,如果他们www
在 Web 浏览器中输入 ,他们可能无法立即清楚显示的页面是www.example.com
还是www.local
。(从21. 安全注意事项)
那么你可以在所有客户端上设置名称解析器,使其在搜索列表中使用.local.
,而不仅仅是,这样它就会通过 mDNS 解析、、和(以及其他所有内容);至少在没有全局解析器可用的情况下。这正是问题所在,您可能会与一些全局名称发生冲突,例如、、、、和.
.nas
.printer
.lights
.door
.camera
.camera
.movie
.furniture
.lighting
.house
.frontdoor
.kitchen
还有很多很多实际上是注册的顶级域名。
解决此问题的一种方法是自己购买相应的全局域名,以确保不会以冲突的方式被其他人使用,但建议的方法是为您的 mDNS 设备使用单标签域名,即
movies-nas.local.
pictures-nas.local.
livingroom-printer.local.
upstairs-printer.local.
patio-lights.local.
bedroom-lights.local.
garage-door.local.
driveway-camera.local.
此外,如果您使用 mDNS 进行服务发现(RFC6763),你可以给这些服务赋予完全任意的用户友好名称,例如
My most lovely NAS._http._tcp.local.
The livingroom machine._ipp._tcp.local.
在服务浏览器中,只有第一个标签才会作为服务名称被用户看到。