在我的公司中,当我安装 Ubuntu 时,我无法 ping 任何本地机器:
$ ping foobar.mycompany.local
ping foobar.mycompany.local: Name or service not known
Run Code Online (Sandbox Code Playgroud)
但是,如果我把dns
在/etc/nsswitch.conf
位于列表的开始,那么它的工作原理:
# hosts: files mdns4_minimal [NOTFOUND=return] dns
hosts: dns files mdns4_minimal [NOTFOUND=return]
Run Code Online (Sandbox Code Playgroud)
我想了解为什么。
use*_*686 15
您的公司使用以 结尾的 DNS 域.local
,它实际上是一个特殊用途的后缀,由 IETF 保留用于多播 DNS。因此,因为您安装了 mDNS 客户端 (mdns4_minimal),它被配置为优先处理所有*.local
名称。
(不幸的是,在企业内部网中仍然普遍的做法是仅组成一个不存在的域名或IP 地址范围,并希望它永远不存在......)
一一浏览您配置的模块:
hosts: files mdns4_minimal [NOTFOUND=return] dns
Run Code Online (Sandbox Code Playgroud)
[NOTFOUND=return]
表示在此错误后不应继续处理;即“未找到”应立即返回给程序。为什么额外的“[NOTFOUND=return]”?根据各种消息来源,它可以加速不成功的查询并防止信息泄漏,并减少公共 DNS 服务器的负载。
假设某人的网络实际上使用了mDNS(这在 Linux/macOS 上很常见)。如果用户尝试解析“MyLittleLaptop.local”但没有找到,系统将继续尝试下一个模块('dns'),并将查询发送到公共 DNS(例如,发送到学校的 DNS 服务器,或咖啡店的路由器)。
但是 - 根据 IETF 的保留 -*.local
名称不可能存在于公共 DNS 中,因此这样的查询将毫无用处,它所做的只是向网络管理员透露您的个人信息。因此添加了 [NOTFOUND=return] 标签以阻止它完全到达 DNS。
如果您的公司网络使用.local
内部 DNS 并且您相当确定它永远不会使用 mDNS,您可以删除整个模块 – 结果:
hosts: files dns
Run Code Online (Sandbox Code Playgroud)
如果您想优先考虑 DNS,但保留使用 mDNS 的可能性,请将其移至最后:
hosts: files dns mdns_minimal
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4278 次 |
最近记录: |