软件技术学习笔记

个人博客,记录软件技术与程序员的点点滴滴。

使用DNS加密避免DNS污染

普通DNS协议不支持加密传输,DNS查询时可以被网络中的其它服务伪造数据包响应,查询到的域名IP地址是伪造的,称为“DNS污染”。

为了避免“DNS污染”,有这几种方案:DNSSEC、DNSCrypt、DNS-over-TLS (DoT)、DNS-over-HTTPS (DoH)。除了DNSSEC,其余三种协议都可以避免中间人窃听,是比较安全的传输协议。

DNS加密网络如下:

DNS加密网络

在Linux中安装DNSCrypt Server

在使用DNS加密网络时,可以使用公共服务器,也可以使用VPS搭建私有服务器。使用公共服务器时,请忽略本节。

参考How to setup your own DNSCrypt server in less than 10 minutesDNSCrypt server Docker image,使用Docker安装DNSCrypt Server——这是最便捷的方法。端口号可以自定义,不必占用HTTPS 443端口。

mkdir -p /etc/dnscrypt-server/keys

# Change the 'example.com' and '192.168.1.1:443'
docker run --name=dnscrypt-server -p 443:443/udp -p 443:443/tcp --net=host \
    --ulimit nofile=90000:90000 --restart=unless-stopped \
    -v /etc/dnscrypt-server/keys:/opt/encrypted-dns/etc/keys \
    jedisct1/dnscrypt-server init -N example.com -E '192.168.1.1:443'

# Show you DNS Stamp: sdns://xxx...
cat /etc/dnscrypt-server/keys/provider-info.txt

在Windows中安装DNSCrypt客户端

在Windows中,要使用DNSCrypt必需安装客户端,否则没法提供加密的DNS服务。仅使用公共服务器时,可以使用Simple DNSCrypt快速上手。当需要使用私有服务器时,还是命令行的dnscrypt-proxy才是最合适的。

因为在Simple DNSCrypt界面中修改设置之后,保存时会覆盖dnscrypt-proxy.toml,造成手动修改该文件的内容丢失,所以,当需要使用私有服务器时就不推荐使用Simple DNSCrypt。Simple DNSCrypt,其本质是在dnscrypt-proxy的基础上提供一个用户界面。

选择一:使用Simple DNSCrypt,仅使用公共服务

下载安装之后,在界面中修改语言到Chinese Simple,再勾选DNSCrypt服务、勾选哪些网卡,在可用服务中勾选cloudflarequad9-dnscrypt-ip4-nofilter-pri。到此,可以使用DNS加密服务了。界面中开启日志,查看是否成功。

选择二:使用dnscrypt-proxy,方便添加私有服务器

手工安装dnscrypt-proxy时,见: https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-Windows

下载最新的版本,如dnscrypt-proxy-win64-2.0.31.zip,解压。复制其中的example-dnscrypt-proxy.tomldnscrypt-proxy.toml

dnscrypt-proxy.toml中添加Static服务器,如下:

server_names = ["qzqDns", "cloudflare", "quad9-dnscrypt-ip4-nofilter-pri"]

...

[static]
  [static.'qzqDns']
  stamp = 'sdns://xxx...'

运行服务,查看一切是否正常:

.\dnscrypt-proxy.exe

修改网络适配器中的DNS到127.0.0.1。浏览网站,验证DNS解析是否正常。一切正常之后,再Ctrl+C停止服务。

最后安装系统服务:双击service-install.bat即可。

提升国内域名解析速度

当使用国外的DNS加密服务器时,因网络延时造成解析速度比较慢。要提升国内网站的浏览体验,需把国内域名解析转发到114.114.114.114。如下添加forwarding-rules.txt:

# forwarding-rules.txt
cn             114.114.114.114
baidu.com      114.114.114.114
bing.com       114.114.114.114
bdimg.com      114.114.114.114
bdstatic.com   114.114.114.114
bing.net       114.114.114.114


163.com        114.114.114.114
126.com        114.114.114.114
126.net        114.114.114.114
127.net        114.114.114.114
sohu.com       114.114.114.114
huawei.com     114.114.114.114
sina.com       114.114.114.114
sogou.com      114.114.114.114
sogoucdn.com   114.114.114.114
netease.com    114.114.114.114
yeah.net       114.114.114.114


taobao.com     114.114.114.114
tmall.com      114.114.114.114
vmall.com      114.114.114.114
jd.com         114.114.114.114
360buyimg.com  114.114.114.114
alicdn.com     114.114.114.114
tanx.com       114.114.114.114
aliyun.com     114.114.114.114
alibaba.com    114.114.114.114
alibabacloud.com  114.114.114.114
aliapp.org     114.114.114.114
aliapp.org     114.114.114.114


intel.com      114.114.114.114
eset.com       114.114.114.114


microsoft.com  114.114.114.114
windows.com    114.114.114.114
msedge.net     114.114.114.114
visualstudio.com         114.114.114.114
microsoftonline.com      114.114.114.114
microsofttranslator.com  114.114.114.114
msn.com                  114.114.114.114
live.com                 114.114.114.114
office.com               114.114.114.114
microsoftemail.com       114.114.114.114
aspnetcdn.com            114.114.114.114
windowsupdate.com        114.114.114.114


xunlei.com    114.114.114.114
sandai.net    114.114.114.114
qq.com        114.114.114.114
88cdn.com     114.114.114.114
weibo.com     114.114.114.114
youku.com     114.114.114.114
weixin.com    114.114.114.114

iqiyipic.com  114.114.114.114
ppstream.com  114.114.114.114
qy.net        114.114.114.114
iqiyi.com     114.114.114.114
akamaihd.net  114.114.114.114
msecnd.net    114.114.114.114
ip138.com     114.114.114.114
staticfile.org 114.114.114.114

然后,在dnscrypt-proxy.toml中启用forwarding_rules = 'forwarding-rules.txt'

最后,点击service-restart.bat重启服务。

在Android中使用加密DNS

在新版本的Android 9中,提供“无线和网络”->“加密DNS”选项,可指定加密DNS服务为1dot1dot1dot1.cloudflare-dns.com

有可用的DNS如下:

Google: dns.google
Cloudflare: 1dot1dot1dot1.cloudflare-dns.com
Quad9: dns.quad9.net
CleanBrowsing: security-filter-dns.cleanbrowsing.org
红鱼DNS: dns.rubyfish.cn