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所配置的主机名
相关推荐
BestOrNothing_201514 小时前
(3)Ubuntu 22.04 双系统安装全过程记录
linux·ubuntu22.04·双系统安装
西门吹-禅14 小时前
【sap fiori cds up error】
java·服务器·sap cap cds
带娃的IT创业者15 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
寂柒16 小时前
Linux——基础IO
linux
杨云龙UP16 小时前
Oracle ASM磁盘组空间分配与冗余理解
linux·运维·数据库·sql·oracle
朽棘不雕16 小时前
Linux权限
linux
互成16 小时前
加密系统哪款最好用?2026年五款加密系统深度对比测评
运维·网络·安全
minji...16 小时前
Linux 库制作与原理(三)深入动静态链接原理
linux·运维·服务器·c++
CDN36016 小时前
游戏服稳定运行:360CDN SDK 游戏盾实测体验
运维·游戏·网络安全
bukeyiwanshui17 小时前
Linux实践
linux·运维·服务器