所有姓名和地址均已更改。example.com 是我拥有的域名。
% ping foo.example.com
PING foo.example.com (1.1.1.1)
1.1.1.1 是一个我从未听说过的 IP 地址。其他程序 (ssh、curl) 也是如此
% host foo.example.com
foo.example.com has address 2.2.2.2
2.2.2.2 是正确的 IP 地址。
% grep foo /etc/hosts
(empty)
这是在 Mac 上。在 Linux 上,我会查找 /etc/nsswitch.conf 以获取其他主机信息来源。Mac 上有类似的东西吗?
答案1
为了实现 VPN 等功能,macOS 拥有一套复杂的 DNS 路由范围系统。因此,如果您现在要“工作”时需要建立 VPN 连接,则对您工作域名的查询可能会转到工作中的 DNS 服务器。
要查看整个列表,请运行:
scutil --dns
要像系统一样查询 DNS,请使用:
dns-sd -G v4v6 example.com
dns-sd -q example.com 255 255
(您必须按 Ctrl-C 才能退出dns-sd
)。
host
、dig
和命令nslookup
是用于 DNS 服务器故障排除的旧 unix 命令,它们包含自己的 DNS 解析器代码,不使用系统的库。因此,如果您不指定要它们使用的服务器,它们只会从自动生成的 中获取服务器/etc/resolv.conf
,而自动生成的 只会填充无范围查询的默认服务器。但像 这样的工具ping
可能只会调用gethostbyname(3)
使用系统范围 DNS 路由的服务器。
编辑以添加:我还应该提到,macOS 可以通过多种其他方式获取主机名到 IP 地址的解析信息,包括:
- mDNS(Apple Bonjour / IETF ZeroConf)
- 开放目录(Apple 的 LDAP 模式)
- 其他 LDAP
- 活动目录
- 胜利
- NetBIOS 名称服务
- NIS(以前称为 YellowPages/yp;Sun/Oracle 网络信息服务)
您可以使用dscl
命令行工具或目录实用程序应用程序编辑这些设置,该应用程序隐藏在:
/System/Library/CoreServices/[Applications]/Directory\ Utility.app