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所配置的主机名
相关推荐
TG:@yunlaoda360 云老大13 分钟前
华为云国际站代理商跨境容灾是如何实现的?
服务器·数据库·华为云
来鸟 鸣间17 分钟前
MIPI D-PHY 理解
linux·音视频·sensor·mipi
么么...23 分钟前
在 Ubuntu 上安装 Docker 并部署 MySQL 容器
linux·运维·经验分享·笔记·mysql·ubuntu·docker
云川之下31 分钟前
【网络】华为交换机S3700与S5700详解
服务器·网络·华为
翼龙云_cloud34 分钟前
亚马逊云渠道商:Lightsail 如何制定备份与快照策略以平衡安全及成本?
运维·安全·云计算·aws
咕噜签名-铁蛋38 分钟前
云服务器故障服务保障体系构建与实践
服务器
·云扬·40 分钟前
Linux系统下MySQL服务器关键配置优化指南
linux·服务器·mysql
zhendianluli1 小时前
如何阅读理解用户手册里的函数文档, 以man 2 stat举例
linux·运维
同聘云1 小时前
阿里云云服务器云备份满了可以删除吗?不小心把备份删除了怎么办
服务器·阿里云·云计算
打码人的日常分享1 小时前
企业数据资产管控和数据治理解决方案
大数据·运维·网络·人工智能·云计算