关于 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-resolv
和 no-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
我也就知道这么多了吧。