ubuntu 修改DNS的正确步骤

(本文的内容,依据本人实际操作ubuntu18.04,修改DNS的步骤总结得出)

ubuntu上网慢的一个根本原因

就是因为/etc/resolve.conf中存在 nameserver 127.0.0.53回环地址。这是因为ubuntu操作系统未配置DNS服务器,使用应用默认的127.0.0.53,这个会导致电脑连 wifi 的时候,陷入一个不停地进行dns解析的死循环。

如果,您打开的网页过多,最终会导致uubuntu系统进入OOM(OOM,全称“Out Of Memory”,意思“内存用完了”)。电脑也会直接断电关机。

修改DNS

网上有很多修改DNS的方法,就是:
sudo gedit /etc/resolv.conf
在resolv.conf内容里的nameserver 127.0.0.53,行首加入# 号。再在最下边另起一行,加入:
nameserver 8.8.8.8 (或者是nameserver 114.114.114.114 )

将DNS改成8.8.8.8,这个DNS服务器是谷歌公司提供的公用DNS服务器。主要为了替代ISPs或其他公司提供的DNS服务。

而114.114.114.114则是国内移动、电信和联通通用的DNS。

两个DNS服务器各有利弊。

如果。在国内上网,114的解析成功率相对来说更高,国内用户使用的比较多,速度相对快、稳定,是国内用户上网常用的DNS。

8.8.8.8是GOOGLE公司提供的DNS,该地5261址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。但其机房在国外,国内无节点。所以,更适合在国外、或者经常访问国外网站的用户使用!

我们将DNS更改为8.8.8.8或114.114.114.114之后,电脑连网则一切正常。打开网页时,不会再不停地进行dns解析........ 直到您重新启动电脑。

当您重新启动系统之后,会发现,电脑上网依旧是慢。这个时候,您在终端输入命令:
cat /etc/resolv.conf查看resolv.conf内容,会发现,被您注释掉的nameserver 127.0.0.53又回来了。

怎么回事?
原来,在您重启系统,或禁用NetworkManager 后,域名服务器被写入resolv.conf,无效的127.0.0.53也会被写入,127.0.0.53是systemd-resolve提供的,可以防止解析主机名 。

怎么办?

难道每次开机都要重新改一遍这个?

永久修改DNS的方法:

1)修改resolved.conf文件 :

大家注意,这个是resolved.conf,不是前面提过的resolv.conf。
这个resolved.conf在/etc/systemd/目录内,前面的resolv.conf在/etc目录内,注意两者的区别。

先打开终端,输入:
sudo gedit /etc/systemd/resolved.conf

然后,修改resolved.conf 内容里的DNS:
找到# DNS=,删掉# 号,改成如下内容:

1
2
3
4
5
6
7
8
9
10
[Resolve]
DNS=114.114.114.114
DNS=8.8.8.8
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

保存。然后,终端输入::
systemctl restart systemd-resolved.service

查看结果,终端输入:
systemd-resolve --status

$ systemd-resolve --status
Global
DNS Servers: 114.114.114.114
8.8.8.8
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa

最后,重启系统或者network-manager。

什么?重启系统?
前面的那个/etc目录内的resolv.conf,不又是变回那个该死127.0.0.53了吗?

是的,又变回去了。这个是ubuntu17.0之后特有问题,systemd-resolvd服务会一直覆盖DNS。我们就要:

2)干掉systemd-resolvd

干掉systemd-resolvd之前,我们先要找一个人来接替他的工作。
这个人就是unbound(貌似很强大)。
Unbound是一个缓存DNS解析器,unbound是Red Hat(红帽)公司推荐的DNS软件。就是他了,接下来,打开终端:

1
2
3
4
5
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo apt install unbound
sudo rm -rf /etc/resolv.conf
sudo vim  /etc/NetworkManager/NetworkManager.conf

在[main]
下面添加
dns=unbound
将dns服务替换为unbound
reboot
重启电脑即可,开机查看resolve.conf发现nameserver自动配置