马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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 解析的问题"这一步,不适合长期用。
六、改完怎么验证
三个检查点,按顺序来:
- 看实际生效的解析地址:
cat /etc/resolv.conf;
- 看服务认不认你的配置:
systemd-resolve --status;
- 看解析是否真的通:
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企服评测-应用市场 编辑提示 |