Linux DNS解析核心是/etc/resolv.conf,但现代系统由systemd-resolved或NetworkManager动态管理,直接修改易被覆盖;应先用ls -l /etc/resolv.conf判断软链接指向,再按管理服务配置对应文件。

Linux DNS 解析的核心配置文件是 /etc/resolv.conf,但它不是“改了就生效”的静态文件——现代系统大多由 systemd-resolved、NetworkManager 等服务动态管理,直接编辑容易被覆盖。真正有效的配置,取决于谁在控制这个文件。
先确认谁在管 resolv.conf
运行这条命令:
ls -l /etc/resolv.conf
看输出是不是软链接。常见情况有:
- 指向
/run/systemd/resolve/stub-resolv.conf→ 由systemd-resolved管理 - 指向
/var/run/NetworkManager/resolv.conf→ 由NetworkManager管理 - 显示 “No such file or directory” 或是普通文件 → 可能未被接管,可手动编辑(但需防覆盖)
再查服务状态:
systemctl is-active systemd-resolved 或 nmcli dev show | grep DNS
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
按管理方选正确配置方式
别硬改 /etc/resolv.conf,而是找对入口:
- 若用
systemd-resolved:编辑/etc/systemd/resolved.conf,修改DNS=和FallbackDNS=行,然后执行sudo systemctl restart systemd-resolved - 若用
NetworkManager(桌面环境常见):用命令设置连接级 DNS,例如nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
再禁用自动获取:nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes
最后重载连接:nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1" - 若想彻底手动控制(如服务器环境):停用 systemd-resolved,删掉软链接,新建普通文件:
sudo rm /etc/resolv.confecho -e "nameserver 8.8.8.8\nnameserver 1.1.1.1\noptions timeout:1 attempts:2" | sudo tee /etc/resolv.conf
为防覆盖,还可加锁:sudo chattr +i /etc/resolv.conf
resolv.conf 里写什么才真起作用
只有以下几类行会被 glibc 解析器读取:
-
nameserver 8.8.8.8:最多认前 3 个 IPv4 地址,顺序使用,第一个超时才试第二个;不支持端口(除非 glibc ≥2.34 且配合options ndots:) -
search example.com corp.local:补全短域名(如 ping db → 尝试 db.example.com),最多 6 个域,总长 ≤256 字节;与domain冲突时,search优先 -
options timeout:1 attempts:2:控制 libc 的 UDP 查询行为(每次等 1 秒,每个 server 重试 2 次);注意 systemd-resolved、dnsmasq 不读这个
注释行(# 开头)和空行会被忽略,写再多 nameserver 第 4 个起也无效。
为什么 nslookup 成功但 curl 失败
因为两者走的路径不同:
-
nslookup google.com是直连/etc/resolv.conf第一个 nameserver,绕过系统解析器 -
curl google.com走的是 glibc 的getaddrinfo(),受/etc/nsswitch.conf中hosts:行控制(比如hosts: files dns表示先查/etc/hosts,再查 DNS)
所以即使 resolv.conf 正确,如果 nsswitch.conf 里禁用了 dns,或者 /etc/hosts 里有错误条目,curl 仍会失败。验证真实解析可用:getent hosts google.com。

















