我在 OSX 电脑上遇到了主机名查找问题。根据 AppleHK3473针对 v10.6 的文档:
默认情况下,除了本地之外仅包含一个标签的主机名(例如“My-Computer.local”)将使用多播 DNS(Bonjour)进行解析。除了本地之外还包含两个或更多标签的主机名(例如“server.domain.local”)将使用 DNS 服务器进行解析。
经我测试,结果并不正确。如果我尝试在本地计算机上打开到远程端口的连接:
telnet example.domain.local 22
然后它将使用以下方式查找 IP 地址多播域名解析A
和查找旁边AAAA
。这会导致每次查找都出现两秒钟的查找超时。这可真是太多了!
当我尝试使用 IPv4 时,它不会使用多播查询来获取远程地址,而只使用简单A
查询。
telnet -4 example.domain.local 22
当我仅尝试使用 IPv6 时:
telnet -6 example.domain.local 22
然后它将使用多播 DNS 进行查找和 AAAA
再次,并再次出现 2 秒超时延迟。
我尝试为我的/etc/resolver/domain.local
和创建一个解析器条目/etc/resolver/local.1
,但它们都不起作用。
有什么方法可以禁用“向本地添加两个或更多标签”域的多播查找,或者只是为选定的子域(domain.local)禁用它?
谢谢你!
更新 #1
感谢@mralexgray 提供的scutil --dns
命令,现在我可以在列表中看到我的域名,但是顺序已经晚了:
DNS configuration
resolver #1
domain : adverticum.lan
nameserver[0] : 192.168.1.1
order : 200000
resolver #2
domain : local
options : mdns
timeout : 2
order : 300000
resolver #3
domain : 254.169.in-addr.arpa
options : mdns
timeout : 2
order : 300200
resolver #4
domain : 8.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300400
resolver #5
domain : 9.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300600
resolver #6
domain : a.e.f.ip6.arpa
options : mdns
timeout : 2
order : 300800
resolver #7
domain : b.e.f.ip6.arpa
options : mdns
timeout : 2
order : 301000
resolver #8
domain : domain.local
nameserver[0] : 192.168.1.1
order : 200001
resolver #8
如果我能将其移动到位置#2,也许会有效。
更新 #2
不,可能不会起作用,因为本地 DNS 服务器负责192.168.1.1
回答domain.local
请求,并且它位于 mDNS(resolver #2
)之前。
更新 #3
我可以减少文件中的 mDNS 超时/System/Library/SystemConfiguration/IPMonitor.bundle/Contents/Info.plist
,这会稍微加快查找速度,但这不是解决方案。
答案1
您是否尝试过在文件中定义名称/etc/hosts
?
10.0.1.1 ns1 ns1.local
10.0.1.200 www www.local
2001:470:20::9999 www ns1 www.example.net ns1.example.net
本地子网上还运行着哪些其他 DNS 服务?您可以通过显式提供本地 DNS 来解决很多问题,而且非常简单 - 使用DNSMasq,我全心全意推荐这样做。
您可能还需要使用dscacheutil -flushcache
↩ 或老办法sudo killall mDNSResponder
↩ 清除缓存。在极端情况下,我不建议这样做 - 您也可以完全禁用 mDNSResponder(Bonjour 等)↝
launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponderHelper.plist
launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
10.5 之后的系统通过一系列相当混乱的指令提供 DNS 解析,这些指令由配置,继承了旧版“系统踢球器”的功能。要获取其状态,请按 ↝ scutil --dns
↩ 键,该键显示 DNS 解析的系统顺序,例如 ↯
DNS 配置
解析器 #1 域:example.net 搜索域[0]:example.net 名称服务器[0]:127.0.0.1 订单:200000
解析器 #2 域:本地 选项:mdns 超时:2 顺序:300000
解析器 #3 域:254.169.in-addr.arpa 选项:mdns 超时:2 顺序:300200
解析器 #4 域:8.efip6.arpa 选项:mdns 超时:2 顺序:300400
如果您仍然遇到问题,请确保此列表“对您来说有意义” - 然后从那里开始......