Linux系统/etc/hosts文件中配置了主机解析,但还是无法解析ip

Linux主机解析过程记录

问题记录:

/etc/hosts文件中配置了主机解析,但还是无法解析ip

复制代码
[root@rocky810 ~]# ping snerdi-hpc
ping: snerdi-hpc: Name or service not known
[root@rocky810 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.219 snerdi-hpc

[root@rocky810 ~]#
[root@rocky810 ~]# ping snerdi-hpc
ping: snerdi-hpc: Name or service not known

使用命令分析

复制代码
[root@rocky810 linux-x64]# strace -e trace=open,openat -f ping -c 1 snerdi-hpc
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libidn2.so.0", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libunistring.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/proc/sys/crypto/fips_enabled", O_RDONLY) = 3
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 5
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/etc/host.conf", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/lib64/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 5
openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
ping: snerdi-hpc: Name or service not known

可以看到虽然读取了/etc/hosts文件,但还是优先走的dns解析

原因:

查看/etc/nsswitch.conf文件

发现hosts这一行被注释掉了,将这一行注释取消就能正常解析

复制代码
shadow:     files sss
#hosts:      files dns myhostname

aliases:    files
ethers:     files
gshadow:    files
# Allow initgroups to default to the setting for group.
# initgroups: files
networks:   files dns
protocols:  files
publickey:  files
rpc:        files

主机名解析流程:

  1. glibc → 读取 /etc/nsswitch.conf

  2. 查看/etc/nsswitch.conf这个文件中是否存在下面这行内容

    复制代码
    hosts:      files dns myhostname
  3. 如果/etc/nsswitch.conf不存在上述该内容,glibc 内部就会使用它的"内置默认配置",一般都是dns解析。

  4. 如果/etc/nsswitch.conf存在上述内容,那么就会按照这一行的配置顺序进行解析

    复制代码
    hosts:      files dns myhostname
    先走/etc/hosts进行解析
    如果/etc/hosts没有解析成功,会进行dns解析
    最后如果上面两步都没有解析成功,会再查看当前主机名,即hostnamectl所配置的主机名
相关推荐
lihui_cbdd18 分钟前
HPC 集群上 OpenMM GPU 多版本安装实战指南
运维·服务器·人工智能·计算化学
G_dou_25 分钟前
Linux 搭建 Rust 开发环境:从 rustup 安装到 Cargo 镜像
linux·rust
Xpower 1726 分钟前
MCP 服务器暴露在公网:AI Agent 工具层正在变成新的安全边界
服务器·人工智能·安全
志栋智能1 小时前
超越监控:超自动化巡检提供的主动价值
运维·网络·人工智能·自动化
java_logo1 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
搜狐技术产品小编20231 小时前
破局与重构:纯端侧 Android 自动化引擎的尝试与未来推演
android·运维·重构·自动化
bsauce1 小时前
【kernel exploit】CVE-2026-23271 perf_event竞态UAF漏洞-ROP提权
linux·linux内核·内核漏洞·内核漏洞利用
深圳市晶科鑫实业有限公司1 小时前
5G与AIoT时代:如何选择晶振常用频率?
服务器·单片机·物联网·5g·智能路由器·健康医疗·信息与通信
三十..1 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
tianyuanwo2 小时前
Jenkins × Gerrit 集成:自动触发构建的全流程解析
运维·servlet·jenkins