为什么 Solaris 10 上的“host”和“nslookup”可以解析主机名,而“ping”和“telnet”则不能?

为什么 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
    ..
    
  • pingtelnet无法解决google.com

    $ ping google.com
    ping: unknown host google.com
    $ telnet google.com
    google.com: node name or service name not known
    

答案1

似乎ping无法telnet解析主机名,因为它们没有查询配置的 DNS 服务器(host并且nslookup似乎使用不同的 DNS 查询代码),解决方案是:

覆盖/etc/nsswitch.conf/etc/nsswitch.dns

cp /etc/nsswitch.dns /etc/nsswitch.conf

答案2

Adam,您没有告诉我们您使用的 Solaris 版本。

Solaris 上的所有主机查找都通过 Solaris 命名服务守护程序进行。唯一的例外是nslookup对 DNS 服务器进行直接 DNS 查询。命名服务守护进程基本上充当命名信息的缓存。其他操作系统也有类似的服务。 Solaris 命名服务在该文件中配置/etc/nsswitch.conf

我真的非常希望您使用的是较旧的版本,例如 Solaris 10 或更早版本。否则,您现在手动编辑了一个您不再应该编辑的文件:该/etc/nsswitch.conf文件。

不管怎样,假设你在索拉里斯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验证这一点。



如果你正在索拉里斯 11那么你可以使用 nolan600 的答案这个问题。该getent命令也适用于 Solaris 11。



希望你能使用其中的一些。

答案3

root@solaris:~# svccfg -s 名称服务/开关
svc:/system/name-service/switch> setprop config/host = "文件 dns"
svc:/system/name-service/switch> listprop 配置
配置应用程序
配置/默认字符串文件
config/value_authorization 字符串 Solaris.smf.value.name-service.switch
配置/打印机字符串“用户文件”
配置/主机字符串“文件 dns”
svc:/system/name-service/switch> 退出
root@solaris11:~# svcadm 刷新名称服务/开关

相关内容