关于 DNS 的一些折腾

Table of Contents

加速 DNS 查询速度并防止 DNS 污染和 DNS 劫持的解决方案。

前言

今天下午神奇的遇到了一件奇怪的事情,我无法访问 github 了! 于是用命令 dig 了一下 github.com,得到了下面的结果,差点没把我吓死。

; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> github.com \\
;; global options: +cmd \\
;; Got answer: \\
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3569 \\
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 \\

;; QUESTION SECTION: \\
;github.com.                    IN      A \\

;; ANSWER SECTION: \\
github.com.             0       IN      A       1.1.1.1 \\

;; Query time: 8 msec \\
;; SERVER: 127.0.0.1#53(127.0.0.1) \\
;; WHEN: Mon May 02 12:49:41 CST 2016 \\
;; MSG SIZE  rcvd: 44 \\

这 DNS 污也太严重了吧,我可是用了 dnsmasq 的,简直无法想像。

折腾过程

因为上述原因,我只能重新折腾一下 DNS 了。

可能因为原本只是单蠢的使用了 dnsmasq,所以出现了这个问题。我这样告诉自己。

于是我花了点时间在电脑上安装了 dnscrypt,使用 dnscrypt 作为 dnsmasq 的前置代理。

安装 dnscrypt-proxy

至于 dnsmasq 的安装方法我就不说了,直接 sudo apt-get install dnsmasq 即可

dnscrypt 的安装需要如下三步:

sudo add-apt-repository ppa:anton+/dnscrypt
sudo apt-get update
sudo apt-get install dnscrypt-proxy

配置 dnscrypt 以便 dnsmasq 连接

dnscrypt 的配置文件为 /etc/default/dnscrypt-proxy

编辑这个文件,修改 local-address=127.0.0.2:53 这一行为 local-address=127.0.0.1:5301

配置 dnsmasq

dnsmasq 的配置文件为 /etc/dnsmasq.conf

编辑它,取消掉 no-resolvno-poll 这两行前的注释,并在文件的末尾添加 server=127.0.0.1#5301

PS:不知道为什么使用 dnscrypt 的默认配置的监听端口 127.0.0.2#53 , 然后在 dnsmasq 这里设置 serve=127.0.0.2#53 是没有用的,好奇怪。

修改系统的 DNS

系统的 DNS 配置文件为 /etc/resolv.conf, 编辑这个文件,把该文件的第一行非注释语句改为 nameserver 127.0.0.1

重启所有服务令配置生效

修改好了配置之后需要把涉及到的服务全部重启一下,让配置生效,执行如下命令

sudo service dnscrypt-proxy restart
sudo service dnsmasq restart
sudo service networking restart

后记-关于 dig 命令的使用

dig 命令是个好命令:

  • 查看 dig 命令的手册: man dig
  • 使用系统的默认设置查询域名记录: dig <domain>
  • 使用指定的 DNS 服务器查询域名记录: dig <domain> @<dns server address>

注:

  • <domain> 为想要查询的域名,例如要查 google 的域名: dig google.com
  • <dns server address> 是想要使用的 dns 服务器的地址,例如用 google 的 dns 查询 google 的域名: dig google.com @8.8.8.8

我也就知道这么多了吧。

Date: <2016-05-02 Mon>

Author: Matrikslee

Created: 2017-05-29 Mon 17:57

Emacs 25.2.1 (Org mode 8.2.10)