gns解析失败本质是命名服务链中断,而非dns配置错误;需确认gns进程绑定私网ip而非localhost、检查dhcp转发是否通畅、验证dns转发链路及系统resolver配置(nsswitch.conf与resolv.conf)是否合规。

GNS解析失败不是DNS配错了,而是整个命名服务链断了——GNS本身不解析,它只转发;转发不出去,就全挂。
确认GNS进程真在监听私网地址,而非localhost或通配
GNS默认监听1535端口,但必须绑定到专用私网卡(如10.10.10.115),不能是127.0.0.1或*:1535。否则客户端请求直接被丢弃,srvctl、crsctl命令会静默失败。
- 运行
crsctl stat res -t | grep gns,状态必须为ONLINE;若为OFFLINE或INTERMEDIATE,先别改配置,查日志:$GRID_HOME/log/<hostname>/gnsd/gnsd.log</hostname>,搜"Failed to bind"或"No suitable interface" - 执行
netstat -tlnp | grep :1535,输出中必须含实际私网IP(如10.10.10.115:1535),不含127.0.0.1:1535或*:1535 - 若GNS资源未注册OCR,
gnsctl status可能返回UNKNOWN,此时需用crsctl stat res -t | grep gns交叉验证真实状态
验证DHCP是否响应GNS的转发请求
GNS不分配IP,它把DHCP发现包(DISCOVER)原样转发给后端DHCP服务器。如果DHCP没开、ACL拦截、作用域耗尽或防火墙挡了UDP 67,GNS就会返回NXDOMAIN或超时,SCAN VIP无法动态分配。
- 在RAC节点执行探测命令:
echo -n -e "\x01\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | nc -u -w1 <dhcp-server-ip> 67</dhcp-server-ip> - 检查DHCP服务器是否监听UDP 67,且允许来自GNS所在子网(通常是私网段,如
10.10.10.0/24)的请求 - 查防火墙:
iptables -L -n | grep 67或firewall-cmd --list-ports | grep 67,确保UDP 67对GNS主机开放
检查DNS转发链路是否通,别让GNS卡在上游DNS
GNS收到非集群域名查询(如www.example.com)会转发给FORWARDERS指定的DNS;但集群内域名(如rac-scan)依赖OCR缓存或自身处理。转发链路不通,会导致GNS启动后看似正常,实则无法解析SCAN名。
- 查看
$GRID_HOME/network/admin/gns.ora,确认FORWARDERS指向可用DNS(如192.168.31.1),且该DNS能被grid用户访问(用su - grid -c "nslookup www.baidu.com 192.168.31.1"测试) - 手动验证转发:
nslookup rac-scan $(cat $GRID_HOME/network/admin/gns.ora | grep FORWARDERS | awk '{print $3}'),应返回SCAN VIP - 若本地DNS不可靠,可临时改成公网DNS(如
8.8.8.8)最小化验证,排除上游干扰
排查本地resolver链路:nsswitch.conf和resolv.conf才是隐形杀手
RAC节点系统resolver配置错误,比DNS服务器宕机更难定位。常见问题包括/etc/nsswitch.conf里hosts行跳过DNS、/etc/resolv.conf中search域冗余导致拼接超时、GNS VIP未静态解析等。
-
/etc/nsswitch.conf中hosts行必须为files dns,删掉所有[NOTFOUND=return]或mdns4_minimal等条件跳转项;所有节点该行必须完全一致(空格都不能差) -
/etc/resolv.conf中search行只保留必需域名,且SCAN所在域名排最前(如search example.com);避免通配写法(如search local) -
/etc/hosts中必须有GNS VIP静态条目(哪怕只用于启动):192.168.56.100 gns-vip.example.com gns-vip;同时检查端口冲突:netstat -tuln | grep :1521(GNS默认也用1521,易与DB冲突)
真正卡住的地方往往不在GNS本身,而在它上下游之间那几毫秒的延迟或一行配置的空格——GNS VIP没进/etc/hosts、search多了一个域名、nsswitch.conf里少了个dns,都足以让SCAN解析静默失败,而日志里连ERROR都不会报。











