利用谷歌DNS over HTTPS (DoH)实现纯净DNS解析

寻找纯净DNS服务器还是比较难的,那为何不自己在本机建一个?还是靠自己比较可信一些。本篇适用于Linux系统,文章所用系统为Fedora 28。

前提条件,你需要能正确通过(直连/反代)访问dns.google.com这个网站。以下命令均由root执行。

下载客户端

我们使用的是开源的Google DoH客户端Dingo,各个平台的二进制下载在Release里面。

由于我们是Linux系统,我们下载Linux AMD64版本。本文撰稿时为0.13版:

wget https://github.com/pforemski/dingo/releases/download/0.13/dingo-linux-amd64 -O /usr/local/bin/dingo
chmod +x /usr/local/bin/dingo

配置Systemd Unit

在/etc/systemd/system下生成Systemd服务


如果你有dns.google.com的反代服务,ExecStart需要换成以下内容,替换掉中文部分。

ExecStart=/usr/local/bin/dingo -gdns:server 服务器IP -gdns:sni 服务器域名 -gdns:host 服务器域名 -port 53 -gdns:nopad

通过systemctl start dingo启动服务后即可修改/etc/resolv.confnameserver 127.0.0.1。我们来测试下:

$ dig @127.0.0.1 google.com +short
172.217.160.78

dingo还支持edns的配置,加上-gdns:edns x.x.x.x/y可获取x.x.x.x/y (CIDR)网段能解析出来的结果。如果你使用北京联通,可使用北京联通的网段,这样上淘宝、优酷等带CDN的大网站解析出来的就依然是针对你本地网络优化的IP。

我们尝试用上海电信114.80.0.0/12启用edns后解析出来www.taobao.com的地址:

% nslookup www.taobao.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
www.taobao.com  canonical name = www.taobao.com.danuoyi.tbcache.com.
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 114.80.174.46
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 101.227.209.253
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 101.227.209.252
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 114.80.174.47

通过查询,这4个IP均为上海电信。

我们再采用杭州移动的IP段218.205.48.0/20来测试:

% nslookup www.taobao.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
www.taobao.com  canonical name = www.taobao.com.danuoyi.tbcache.com.
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 211.138.122.237
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 218.205.84.251
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 218.205.84.250
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 211.138.122.253

查询可知这4个IP均为淘宝在杭州移动的CDN节点。

记得设置开机启动以及修改网卡DHCP的默认DNS服务器地址

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据