一、关于nsswitch.conf文件
/etc/nsswitch.conf 是 Linux 系统的 名称服务切换配置文件,用于定义系统在查找各类信息(如用户、组、主机名等)时的查询顺序和方式。其中 hosts 行的配置直接影响系统解析域名时的行为顺序。,通过合理调整 hosts 顺序,可以精准控制域名解析策略,是解决网络问题的重要调试手段。
二、麒麟桌面操作系统的默认配置
cat /etc/nsswitch.conf

上图里的hosts参数解析表
| 参数 | 作用描述 | 对应配置文件 |
|---|---|---|
| files | 优先查询本地hosts文件 | /etc/hosts |
| mdns4_minimal | 使用mDNS协议解析.local域名(仅IPv4) | /etc/nss_mdns.conf |
| [NOTFOUND=return] | 条件控制:当mdns4_minimal返回"未找到"时,终止后续查询 | – |
| dns | 通过DNS服务器解析 | /etc/resolv.conf |
| wins | 通过Windows Internet Name Service解析NetBIOS名称 | /etc/samba/smb.conf |
三、调整顺序会改变解析优先级
以下是配置这个文件参数顺序的典型案例:
桌面系统可以用以下命令,打开编辑器直接编辑,编辑后保存退出即可。重启系统
sudo pluma /etc/nsswitch.conf
1.屏蔽广告/恶意域名
hosts: files dns
在 /etc/hosts 中添加 0.0.0.0 ads.com 后,因 files 优先,直接屏蔽广告域名解析。
2.开发环境本地测试
hosts: files dns
开发时将 api.example.com 指向 127.0.0.1,确保本地服务优先于公网 DNS 记录生效。
3.解决 DNS 污染问题
hosts: files dns
在 hosts 中固化正确 IP,避免被劫持的 DNS 返回错误地址。
4.加速内网服务访问
hosts: files mdns4_minimal [NOTFOUND=return] dns
内网机器通过 hosts 直接映射 IP,跳过 DNS 查询降低延迟。
5.容器/K8s 服务发现
hosts: dns files
在动态环境中让 DNS 优先,确保服务 IP 实时更新,避免 hosts 静态记录过时。
6.无 DNS 环境的离线运行
hosts: files myhostname
禁用 DNS 查询,完全依赖本地 hosts 和主机名解析。
五、经典问题解决方案
1.本地开发域名被公网解析
现象:app.test 总解析到公网IP而非本地
解决:在hosts添加 127.0.0.1 app.test 并设置 hosts: files dns
2.内网机器访问缓慢
现象:访问内网服务器每次都要等待DNS超时
解决:在hosts添加内网IP映射,配置 hosts: files [NOTFOUND=return] dns
3.屏蔽广告域名失效
现象:已在hosts屏蔽的域名仍能访问
解决:调整顺序为 files dns 并清除浏览器缓存
4.典型报错修复:
若出现 sudo: unable to resolve host 错误,在 hosts 文件中添加:
127.0.0.1 localhost your_hostname
5.访问不了外网网站,但QQ和微信都正常:
可以尝试将dns参数放在files的前面或者后面:
hosts: files dns mdns4_minimal [NOTFOUND=return] wins
六、注意事项
1.域名解析验证:
getent hosts baidu.com # 测试解析
strace -e trace=openat getent hosts baidu.com # 跟踪解析过程
2.检查DNS缓存
resolvectl statistics # 检查DNS缓存
resolvectl flush-caches # 清除 systemd-resolved 服务 DNS 缓存
3.重启服务生效:
sudo systemctl restart systemd-resolved
4.修改前备份原配置:
sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
5.避免删除myhostname项,否则可能导致主机名解析异常
6.企业域环境慎用[NOTFOUND=return]参数,可能中断域控查询
7.容器环境建议保持默认dns files顺序
七、恢复默认配置
sudo sed -i 's/^hosts:.*$/hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname/' /etc/nsswitch.conf
sudo systemctl restart systemd-resolved
通过合理调整DNS解析顺序,可使网络访问效率提升。建议根据实际业务需求灵活配置,兼顾安全性与效率。




