所有姓名和地址均已更改。 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
macOS 有一個複雜的範圍 DNS 路由系統,用於 VPN 等功能。因此,如果您現在有一個 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 解析器程式碼,且不使用系統的函式庫。因此,如果您不指定希望他們使用哪個伺服器,他們只會從 auto generated 中取得伺服器/etc/resolv.conf
,而 auto generated 只會填入用於無範圍查詢的預設伺服器。但是像這樣的工具ping
可能只是呼叫gethostbyname(3)
使用系統範圍內的 DNS 路由。
編輯補充:我還應該提到,macOS 可以透過多種其他方式取得主機名稱到 IP 位址解析訊息,包括:
- mDNS(Apple Bonjour / IETF ZeroConf)
- 開放目錄(LDAP 上的 Apple 模式)
- 其他LDAP
- 活動目錄
- 勝利
- NetBIOS 名稱服務
- NIS(以前稱為 YellowPages/yp;Sun/Oracle 網路資訊服務)
您可以使用dscl
命令列工具或目錄實用程式應用程式編輯這些設置,該應用程式隱藏在:
/System/Library/CoreServices/[Applications]/Directory\ Utility.app