SDB:修改DNS

跳转至: 导航, 搜索
本文教您如何在 openSUSE 下修改 DNS。在国内当你发现无法刷新软件源的时候可能会用到。

什么是 DNS?

首先你要隐约了解什么是域名IP。IP 可以理解为一串不好记的数字,域名可以理解为 IP 地址的一个好记的别名(网址)。而 DNS 就是把域名和 IP 地址相绑定的一种服务,在 Linux 下又叫 nameserver 名称服务器。如果 DNS 出了问题,互联网用户访问域名就无法找到相对应的 IP 地址(这个过程叫做解析 resolve),从而无法访问那个网站。还记得国内几次因为 DNS 而造成的大规模断网事件吧。

为什么要修改 DNS?

因为 DNS 是一种基础网络服务,所以一般由 ISP(上网服务提供商,也即我们所说的电信、联通、铁通、长城宽带等)架设 namesever 并提供服务。这在原理上是没有什么问题的。但是境内的 ISP 比较无良:

  • 有选择同步。DNS 作为一种网络服务,自然也需要由服务器来提供。但是这个服务器在物理位置上不可能离用户太远,那样查询起域名对应的 IP 来耗时太久,铜线长距离传输有衰减,而且就算是光也有速度的啊。所以 DNS 服务其实也是许多服务器间相互同步数据的结果,总有一个服务器的物理位置离你较近。而用户电脑一般是使用 DHCP 也就是由主机分配给你可以使用的 IP 地址和配置信息的,这个配置信息就包括 DNS。而 ISP 在为你分配 IP 地址的时候,一般直接把 DNS 指定为自己提供的,这样可以保证物理位置离你较近。于是这里就有文章可做了,ISP 会有选择的同步 DNS,可能是审查的需要,也可能是一些 ISP 实力较弱承担不了那么大数据的业务。这就导致了你访问某些网站的时候,会 404 错误(当然熟悉科学上网的同学会知道,在国内 404 不止是这样的原因,还有比如防火长城的主动入侵检测发现你访问的网站不健康直接中断你的连接并给你发送 404 返回代码)。
  • DNS 劫持。很多同学都会遇到访问一个网站,结果被跳转到了电信的广告页面。这种行为就是 DNS 劫持。ISP 可以任意篡改域名和 IP 地址的绑定结果,它可能在检测到你访问的网站长时间无响应或不健康的时候,直接把它的广告页面的 IP 地址返回给你。如果是公益的也就忍了,但是却是对你没什么用的广告啊,相当于你在缴纳了上网费用之后还在帮 ISP 赚广告费。
  • DNS 污染。解决 DNS 劫持的方式很简单,不用 ISP 提供的 DNS 就行了。但是 DNS 还有一个特性,就是你的电脑只接收返回最快的 IP 地址,而不去判断这种绑定是否是真实的。所以针对一些不健康的网站,防火长城可以通过在检测到你在访问它们的时候,主动给你先发回一个错误的 IP 地址,于是你的电脑就认为这个 IP 地址是那个网站,而忽略了正确的 DNS 服务器返回的 IP 地址,但这个 IP 地址可能根本没有部署服务器,于是你很自然地得到了一个 404 错误让你以为该网站不存在。这种无良做法只有通过对 DNS 通信进行加密,让防火长城检测不到来解决。

查看 DNS

在 Linux 下查看 DNS 的方法有两种,都很简单:

  • 查看 /etc/resolv.conf 文件
cat /etc/resolv.conf


会得到:

nameserver 202.96.69.38
nameserver 202.96.64.68

这样的结果。其中第一个是主 DNS 服务器,只有它无响应时才会使用后面的次 DNS 服务器。所以无论你设置再多,基本都是主 DNS 服务器在做查询,一般设置两个就可以了。

  • nslookup 命令(因为它要使用现在的 DNS 来查询嘛)
nslookup baidu.com


会得到:

Server:         202.96.69.38
Address:        202.96.69.38#53

修改 DNS

你已经知道了国内 ISP 提供的 DNS 有多渣,那么肯定想要知道如何修改。

只需要去编辑 /etc/resolv.conf 或在 NetworkManager 配置网络的时候手动输入就可以了。

可用的 DNS

  • Google DNS(但不建议使用,因为 Google 自己也经常朝不保夕)
8.8.8.8
8.8.4.4
  • opendns
208.67.222.222
208.67.220.220
199.91.73.222
178.79.131.110
223.5.5.5
223.6.6.6

以上 DNS 不一定能够保证您逃脱 DNS 污染/防火长城的魔爪(因为还可以直接封锁 IP),但对付 ISP 的 DNS 劫持确实相当有效。而且它们背后也都配置了 CDN,服务器物理位置离你也很近。

这样的 DNS 你通过搜索可以找到很多,但使用前最好 ping 一下那个 IP 地址,因为个别情况下那个地址在境内是屏蔽的,会导致你干脆就上不了网。实际上你自己也可以在 openSUSE 上架设一个 DNS 服务器,就是意义不大而已。

DNS 加密

openSUSE 下面实现 DNS 加密也非常简单,只需安装 opendns 开发的 dnscrypt 软件包即可。

一键安装:

Oneclick.png

之后

sudo systemctl enable dnscrypt-proxy.service
sudo systemctl start dnscrypt-proxy.service


即可。

继续阅读