/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
答案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 刷新名称服务/开关