除了 DNS 和 /etc/hosts 之外,Mac 上的主机信息还可能来自哪里?

除了 DNS 和 /etc/hosts 之外,Mac 上的主机信息还可能来自哪里?

所有姓名和地址均已更改。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)。

hostdig和命令nslookup是用于 DNS 服务器故障排除的旧 unix 命令,它们包含自己的 DNS 解析器代码,不使用系统的库。因此,如果您不指定要它们使用的服务器,它们只会从自动生成的 中获取服务器/etc/resolv.conf,而自动生成的 只会填充无范围查询的默认服务器。但像 这样的工具ping可能只会调用gethostbyname(3)使用系统范围 DNS 路由的服务器。

编辑以添加:我还应该提到,macOS 可以通过多种其他方式获取主机名到 IP 地址的解析信息,包括:

  1. mDNS(Apple Bonjour / IETF ZeroConf)
  2. 开放目录(Apple 的 LDAP 模式)
  3. 其他 LDAP
  4. 活动目录
  5. 胜利
  6. NetBIOS 名称服务
  7. NIS(以前称为 YellowPages/yp;Sun/Oracle 网络信息服务)

您可以使用dscl命令行工具或目录实用程序应用程序编辑这些设置,该应用程序隐藏在:

/System/Library/CoreServices/[Applications]/Directory\ Utility.app

相关内容