Ubuntu 修改 DNS

[复制链接]
发表于 2026-10-5 18:42:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Ubuntu 下改 DNS 其实分两种改法:一种改完重启还在(永久),一种重启就丢(临时)。很多人直接编辑 /etc/resolv.conf,改完当下 ping 通了,一重启又断网,白折腾一场。原因是现在 Ubuntu 桌面版默认由 systemd-resolved 这个服务托管 /etc/resolv.conf,它是个软链接,你手写的内容会被下一次服务拉起的配置覆盖掉。下面把两条路径都写清楚,方便按需选用。

一、先搞明白为什么直接改 resolv.conf 不保险

在 18.04 之后的 Ubuntu 上,先执行下面这行看看:

ls -l /etc/resolv.conf

如果输出的开头是 lrwxrwxrwx,说明它是个符号链接,真实文件在 /run/systemd/resolve/resolv.conf。这时候你直接 vi 编辑 /etc/resolv.conf,改的只是链接指向的那份运行时文件,系统重启或服务重启后就会被重新生成覆盖。要"永久"生效,得改上游配置,也就是 /etc/systemd/resolved.conf。

二、永久修改:修改 resolved.conf

第一步,打开配置文件:

sudo vi /etc/systemd/resolved.conf

找到 [Resolve] 这一段,在它下面加 DNS。注意下面这些行默认是被 # 注释掉的,注释符号要去掉,否则不生效:

[Resolve]
DNS=114.114.114.114
DNS=8.8.8.8
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

这里给出两个稳定的公共解析地址作为示例:114.114.114.114 是国内可用性较好的一个,8.8.8.8 是 Google 的公共 DNS。实际生产环境建议先用 dig 或 nslookup 各测一次再定,不要照抄。

三、重启服务并设为开机自启

改完配置要立即生效,同时保证下次开机也生效,两条命令一起执行:

sudo systemctl restart systemd-resolved
sudo systemctl enable systemd-resolved

可以用下面这行确认服务状态是 active,避免只是"看着像好":

systemctl status systemd-resolved

四、把 resolv.conf 交给 systemd 托管

如果想让链接指向 systemd 实际生成的文件,先把原文件备份一份,再重建软链接。备份这一步别省,出问题时还能回滚:

sudo mv /etc/resolv.conf /etc/resolv.conf.bak
sudo ln -s /run/systemd/resolve/resolv.conf /etc/

执行完再 cat /etc/resolv.conf,里面出现的 nameserver 应该就是你在第二步写进去的那两个地址。

五、只想临时改一次:直接改 resolv.conf

调试场景下,重启一次机器代价太大,可以直接改运行时文件:

sudo vi /etc/resolv.conf

把内容替换成下面这种格式即可,每行一个:

nameserver 8.8.8.8

这种改法的局限很明确:重启后失效。它适合"先验证是不是 DNS 解析的问题"这一步,不适合长期用。

六、改完怎么验证

三个检查点,按顺序来:

  1. 看实际生效的解析地址:cat /etc/resolv.conf;
  2. 看服务认不认你的配置:systemd-resolve --status;
  3. 看解析是否真的通:ping -c 4 baidu.com 或 dig baidu.com。

如果第 3 步还是不通,问题大概率不在 DNS,而在网卡没起来(ONBOOT 不是 yes)或者网络本身不通,这时候该查 ip addr 而不是继续加 DNS。

七、几个常踩的坑

  • 改了没反应:检查 [Resolve] 段上面的 #DNS= 是不是还带着注释符号,哪怕只漏一个 # 都不生效;
  • 写进去了但被覆盖:NetworkManager 接管时它会自己写 resolv.conf,此时应该改 NetworkManager 的连接 DNS,而不是 resolved.conf;
  • 服务器版 vs 桌面版:纯命令行服务器有时根本没装 systemd-resolved,那改 /etc/resolv.conf 加 nameserver 反而是最直接的办法;
  • 误删了软链接:备份过的 .bak 文件在,重新按第四节建回软链接即可,别直接删文件。

八、选哪种改法

一句话总结:要持久就改 /etc/systemd/resolved.conf 并重启 systemd-resolved;只要当下通一下就改 /etc/resolv.conf 加 nameserver。 调试时先临时改,确认是解析问题再动永久配置,能少走很多弯路。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表