Solaris為什麼 Solaris 10 上的
為什麼 Solaris 10 上的 host
和 nslookup
可以解析主機名,而 ping
和 telnet
卻不能?
/etc/resolv.conf
包含一個活動的名稱伺服器(由ping
命令報告)host
或者nslookup
能夠解決google.com
$ host google.com google.com has address 74.125.228.3 google.com has address 74.125.228.4 ... $ nslookup google.com ... Non-authorative answer: Name: google.com Address: 74.125.228.0 Name: google.com Address: 74.125.228.1 ..
ping
或telnet
無法解決google.com
$ ping google.com ping: unknown host google.com $ telnet google.com google.com: node name or service name not known
似乎
ping
並且telnet
無法解析主機名,因為它們沒有查詢配置的 DNS 伺服器(host
並且nslookup
似乎使用不同的 DNS 查詢程式碼),解決方案是:覆蓋:
/etc/nsswitch.conf
_/etc/nsswitch.dns
cp /etc/nsswitch.dns /etc/nsswitch.conf
Adam,您沒有告訴我們您使用的是哪個版本的 Solaris。
Solaris 上的所有主機查找都通過 Solaris 命名服務守護程序。唯一的例外是
nslookup
對 DNS 伺服器進行直接 DNS 查詢。命名服務守護程序基本上充當命名資訊的記憶體。其他作業系統也有類似的服務。Solaris 命名服務在該/etc/nsswitch.conf
文件中進行配置。我真的非常希望您使用的是舊版本,例如 Solaris 10 或更早版本。否則,您現在已經手動編輯了一個您不再應該編輯的文件:
/etc/nsswitch.conf
文件。無論如何,假設您使用的是Solaris 10或更早版本:您
/etc/nsswitch.conf
應該有這樣的條目:hosts: files dns
這告訴 Solaris 命名服務應首先在本地文件(即
/etc/hosts
)中查找主機,然後在 DNS 中查找。當然,您也可以在這裡只有“dns”,但人們通常會想要它,以便/etc/hosts
可以覆蓋 DNS 中的內容。您現在可能必須重新啟動命名服務守護程序:
svcadm restart /system/name-service-cache
您始終可以使用 Solaris
getent
命令驗證您的命名服務設置:getent hosts google.com
該
getent
命令驗證 Solaris 命名服務是否按預期工作。您不能使用它nslookup
來驗證這一點。如果您使用的是Solaris 11,那麼您可以使用 nolan600 對這個問題的回答。該
getent
命令也適用於 Solaris 11。希望你可以使用其中的一些。