Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 服務器「ping: unknown host」域名解析故障排查全流程:從 resolv.conf 到 nsswitch.conf

編輯:Linux 教學

服務器能 Ping 通網關、外網 IP,卻無法解析域名,經典「unknown host」故障。本文建立標準化排查決策樹,從配置文件到協議層逐層定位。

故障現象

[root@localhost ~]# ping www.pythontab.com
ping: unknown host www.pythontab.com

[root@localhost ~]# ping 192.168.1.1  # 網關通
PING 192.168.1.1 ... 64 bytes from ... icmp_seq=1 ttl=64 time=2.96 ms

三步排查決策樹

第一層:DNS 服務器配置 (/etc/resolv.conf)

# 檢查當前配置
cat /etc/resolv.conf
# 典型錯誤:僅有 search localdomain,無 nameserver

# 修復:添加可用 DNS (推薦內網 DNS + 公共 DNS 備用)
vi /etc/resolv.conf
search localdomain
nameserver 192.168.1.2    # 內網 DNS (首選)
nameserver 223.5.5.5      # 阿里云公共 DNS
nameserver 114.114.114.114 # 114 DNS

驗證: dig @192.168.1.2 www.pythontab.com 或 nslookup www.pythontab.com 192.168.1.2。

第二層:網關路由 (/etc/sysconfig/network-scripts/ifcfg-ethX)

# 檢查默認網關
grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-*
# 輸出:/etc/sysconfig/network-scripts/ifcfg-eth0:GATEWAY=192.168.1.1

# 臨時添加 (重啟失效)
route add default gw 192.168.1.1

# 永久生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 確保包含
GATEWAY=192.168.1.1
# 重啟網絡
systemctl restart network  # 或 service network restart

第三層:名稱解析順序 (/etc/nsswitch.conf)

# 檢查 hosts 行
grep hosts /etc/nsswitch.conf
# 正確:hosts: files dns
# 錯誤:hosts: files (缺少 dns,將不查詢 DNS 服務器)

# 修復
sed -i 's/^hosts:.*/hosts: files dns/' /etc/nsswitch.conf

綜合驗證命令鏈

# 1. 解析測試
dig www.pythontab.com +short
nslookup www.pythontab.com
getent hosts www.pythontab.com  # 走 nsswitch 流程

# 2. 連通性測試
ping -c 3 www.pythontab.com
curl -I https://www.pythontab.com  # 應用層驗證

# 3. 追蹤解析路徑
dig +trace www.pythontab.com  # 從根域遞歸追蹤

進階場景與陷阱

場景現象根因對策
DHCP 覆蓋 resolv.conf重啟 network 後 DNS 丟失/etc/sysconfig/network-scripts/ifcfg-eth0 中 PEERDNS=yes設 PEERDNS=no 或在 /etc/dhcp/dhclient.conf 中 supersede domain-name-servers 192.168.1.2;
systemd-resolved 托管/etc/resolv.conf 是指向 /run/systemd/resolve/stub-resolv.conf 的鏈接systemd-resolved 服務接管 DNS配置 /etc/systemd/resolved.conf [Resolve] DNS=...;或 systemctl disable systemd-resolved 回歸傳統
IPv6 優先導致解析慢/失敗dig 返回 AAAA 但無 IPv6 路由glibc 默認並行查 A/AAAA/etc/gai.conf 取消註釋 precedence ::ffff:0:0/96 100 強制 IPv4 優先
容器 / Kubernetes PodPod 內解析失敗CoreDNS 故障 / /etc/resolv.conf ndots:5 導致過度查詢檢查 CoreDNS 日誌;調整 dnsConfig options ndots:1

運維檢查清單

  • resolv.conf 存在至少一個可達 nameserver
  • ifcfg-ethX 配置 GATEWAY 且 network 服務正常
  • nsswitch.conf hosts 行包含 dns
  • 防火牆/安全組放行 UDP/TCP 53 (DNS)
  • 監控項:dig @ +time=2 +tries=1 成功率 > 99.9%

域名解析是服務發現的基石,將 DNS 健康度納入基礎設施 SLA 監控,而非事後排查。

Copyright © Windows教程網 All Rights Reserved