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