我在安装 Solaris 11 时遇到了一个非常奇怪的问题。DNS 解析不起作用,但奇怪的是,nslookup 可以并且连接正常:
root@solarisxyz:~# ping stackexchange.com
ping: unknown host stackexchange.com
root@solarisxyz:~# nslookup stackexchange.com
Server: 10.x.x.x (DNS)
Address: 10.x.x.x#y
Non-authoritative answer:
Name: stackexchange.com
Address: 64.34.119.12
root@solarisxyz:~# ping 64.34.119.12
64.34.119.12 is alive
文件的相关部分:
/etc/resolv.conf:(这和我们的 Linux 盒子有一样的东西)
domain us.oracle.com nameserver 10.x.x.x nameserver 10.x.x.x
/etc/主机:
# ::1 solarisxyz localhost (commented out) 127.0.0.1 localhost loghost solarisxyz
/etc/nsswitch.conf:
hosts: files dns # pretty much everything else set to files
答案1
从 Solaris 11 开始,网络配置发生了根本性的变化。nsswitch.conf 现在仅提供信息。假设您未处于自动模式,在这种情况下 DNS 已正确配置,以下是新过程:
http://docs.oracle.com/cd/E23824_01/html/E24456/gliyc.html#OSTELgllcu
答案2
使用 SMF 配置命名服务
以下示例显示如何使用 SMF 命令配置 DNS。
# svccfg
svc:> select dns/client
svc:/network/dns/client> setprop config/search = astring: \
("us.company.com" "eu.company.com" "companya.com" "companyb.com" "company.com" )
svc:/network/dns/client> setprop config/nameserver = net_address: \
( 138.2.202.15 138.2.202.25 )
svc:/network/dns/client> select dns/client:default
svc:/network/dns/client:default> refresh
svc:/network/dns/client:default> validate
svc:/network/dns/client:default> select name-service/switch
svc:/system/name-service/switch> setprop config/host = astring: "files dns"
svc:/system/name-service/switch> select system/name-service/switch:default
svc:/system/name-service/switch:default> refresh
svc:/system/name-service/switch:default> validate
svc:/system/name-service/switch:default>
# svcadm enable dns/client
# svcadm refresh name-service/switch
# grep host /etc/nsswitch.conf
hosts: files dns
# cat /etc/resolv.conf
答案3
我认为您的问题与 Solaris 名称服务守护程序有关,或者更准确地说,与这个野兽的配置有关。也许您已经手动编辑了 /etc/nsswitch.conf ?这可以解释为什么名称服务守护进程没有接收到它。
据我所知,nslookup 命令不使用 Solaris 名称服务。这可能解释了为什么您会看到 nslookup 按预期工作,而其他所有内容却不然。
在 Solaris 上,使用命令验证查找服务是否按预期工作始终是一个好主意getent
。在你的例子中它将是:
getent 主机 stackexchange.com
因此,问题是如何确保 Solaris 名称服务知道它必须在两个本地文件中查找主机名也在 DNS 中。请记住,在 Solaris 11 中,您不再应该/允许直接编辑 /etc/nsswitch.conf 等文件。它们由在 SMF 下运行的守护进程控制。以下是更改方法:
# svccfg svc:> 选择名称服务/交换机 svc:/system/name-service/switch> setprop config/host = astring: "文件 dns" svc:/system/name-service/switch> 选择 system/name-service/switch:default svc:/system/name-service/switch:default> 刷新 svc:/system/name-service/switch:default> 验证 svc:/system/name-service/switch:default> 退出 # svcadm 刷新名称服务/开关
此后,您会注意到您的/etc/nsswitch.conf
文件已被重新写入磁盘。如果您之前手动编辑过,您可能看不到任何实际变化。重新发出该getent
命令,希望它现在可以工作。
祝你好运。
答案4
首先请truss
从nscd
:
truss -aefld -vall -wall -rall -o truss-nscd.out -u nss_\*:: -u libnsl:: -p `pgrep nscd`
当上述truss
命令运行时,请尝试
truss -aefld -vall -wall -rall -o truss-getent_1.out -u a.out,libnsl:: getent hosts ANY_HOSTNAME
那么请暂时禁用nscd
:
svcadm disable name-service-cache
并运行:
truss -aefld -vall -wall -rall -o truss-getent_2.out -u a.out,libnsl:: -u nss_\*:: getent hosts ANY_HOSTNAME
现在您可以重新启用名称服务缓存:
svcadm enable name-service-cache
现在尝试...希望它会起作用。