Ubuntu20.04 系统中设置dns并生效,解决无法上网的问题

Ubuntu20.04 系统中设置dns并生效,解决无法上网的问题,第1张

如题,Ubuntu 20.04 LTS 版本安装之后,发现偶尔报错Temporary failure in name resolution,搜索一番之后大部分意见认为是系统的DNS设置不全面,建议重新设置一下DNS。

直接修改的是/etc/resolv.conf ,原文内容如下:

直接添加新的[dns]例如:

结果reboot重启之后,还是原来的内容不变,仔细查看才发现/etc/resolv.conf本身在第一行的注释里面已经写了“Do not edit"。经过查阅相关资料,找到如下方法可以修改Ubuntu20.04 LTS版本的DNS,

首先修改 /etc/systemd/resolved.conf 文件,在其中添加dns信息,例如:

然后退出保存。

然后以root身份在[ubuntu]终端中依次执行如下命令:

再查看/etc/resolv.conf文件就可以看到新的dns信息已经写入其中了。

由于历史原因一直在用经典网络的 ECS,在安全性方面要弱于 VPC,所以决定将服务器迁移到 VPC 中。给 ECS 配置自定义 DNS 服务器的好处是可以给 ECS 分配自定义后缀的域名,比如 web01.abc ,这样在内网定位服务器就很方便,不用去记一堆内网 IP,如果配置得当,还可以通过 host $ip 这个命令寻找 IP 对应的服务器。

一开始的时候我按照给经典网络 Centos ECS 配 DNS 服务器的方法来 *** 作,直接修改 /etc/resolv.conf ,把里面的 nameserver 配置改成了自己内网中 DNS 服务器 IP,但是发现重启服务器之后会被重置成阿里云分配的 DNS 服务器。

经过研究之后发现,是 Ubuntu 的 resolvconf 会在每次启动的时候将 /etc/resolv.conf 覆盖。 /etc/resolv.conf 本质上是一个软链,会链接到 /run/resolvconf/resolv.conf ,而后者可以通过 resolvconf -u 命令重新生成,生成的内容来自于两个地方:

所有我一开始的思路是:

在删除了 /run/resolvconf/interface/eth0.dhclient 文件之后,执行 service networking restart &&resolvconf -u 之后,发现 /etc/resolv.conf 里的内容变成了我们期望的值。

但是后来发现同一个 VPC 的不同子网之间 ECS 无法互通,检查之后发现是路由表配置不正确,原因就是之前把 DHCP 给改成了静态 IP,看来 DHCP 是不能禁了,只好重新寻找解决方案。

想到阿里云 DNS 服务器的值是来源于 DHCP,于是就尝试搜索禁止从 DHCP 获得 DNS 服务器,找到了一个相关的 问答 ,有两种方法,一是将 /etc/dhcp/dhclient.conf 文件中 request 配置项的 domain-name, domain-name-servers, domain-search 参数移除,二是在 /etc/dhcp/dhclient.conf 文件中追加一行 supersede domain-name-servers $dns_ip。

为了保险起见,我把两个方法都用上,然后执行 rm -f /run/resolvconf/interface/eth0.dhclient &&service networking restart &&resolvconf -u ,再重启了一次服务器。检查 /etc/resolv.conf 符合预期,与其他子网 ECS 也能互通,搞定。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6559606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-24
下一篇 2023-03-24

发表评论

登录后才能评论

评论列表(0条)

保存