Solaris

為什麼 Solaris 10 上的 hostnslookup 可以解析主機名,而 pingtelnet 卻不能?

  • July 13, 2017
  • /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
..
  • pingtelnet無法解決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

您始終可以使用 Solarisgetent命令驗證您的命名服務設置:

getent hosts google.com

getent命令驗證 Solaris 命名服務是否按預期工作。您不能使用它nslookup來驗證這一點。

如果您使用的是Solaris 11,那麼您可以使用 nolan600 對這個問題的回答。該getent命令也適用於 Solaris 11。

希望你可以使用其中的一些。

引用自:https://unix.stackexchange.com/questions/78888