DNS污染 作为防火长城两种主要屏蔽方式之一(另一种是 IP封锁),其主要工作原理是:
防火长城对所有经过骨干出口路由的域名查询进行入侵检测,一经发现与黑名单关键词相匹配的域名查询请求,防火长城会马上伪装成目标域名的解析服务器给查询者返回虚假结果。由于通常的域名查询没有任何认证机制,而且域名查询通常基于的UDP协议是无连接不可靠的协议,查询者只能接受最先到达的格式正确结果,并丢弃之后的结果。
由此可知,防火长城进行入侵检测的基础是域名查询请求采用UDP协议,无任何认证机制。下文介绍的 dnscrypt-proxy 采用TCP协议发送域名查询请求,并对请求进行加密,避免了防火长城的入侵检测和投毒污染,从而可查询真实的IP地址。
官网下载 libsodium 源码包,解压缩后编译安装:
./configure make && make check sudo make install sudo ldconfig
官网下载 dnscrypt-proxy 源码包,解压缩后编译安装:
./configure make && make check sudo make install
sudo touch /etc/init/dnscrypt.conf sudo vim /etc/init/dnscrypt.conf sudo ln -s /lib/init/upstart-job /etc/init.d/dnscrypt sudo adduser --system --quiet --home /run/dnscrypt --shell /bin/false --group --disabled-password --disabled-login dnscrypt sudo vim /etc/rc.local
按照以上步骤创建配置文件 /etc/init/dnscrypt.conf
并按照该 gist 内容编辑之。然后创建运行 dnscrypt-proxy
的用户,并在启动文件 /etc/rc.local
中加入以下两行,确保 dnscrypt-proxy
能够开机正常启动。
mkdir /run/dnscrypt service dnscrypt start
安装成功后重新启动 dnscrypt-proxy
,并确认其已正确安装。
sudo killall -KILL dnscrypt-proxy sudo service dnscrypt start dnscrypt start/running, process 1337
最后,还需要配置一下网络接口,Ubuntu用户可按照如上截图配置 NetworkManager ,然后重启之。其中 DNS Servers 那一栏和 /etc/init/dnscrypt.conf
中的 local-address
参数必须保持一致。本文选择 OpenDNS 作为DNS服务器,对应 resolver-name
参数为 opendns
,你也可以从 dnscrypt-resolvers.csv 中选择其他DNS服务器。完成以上配置后可访问 这个网站 检查 dnscrypt-proxy
是否正常工作。
随着防火长城的不断升级,其自动化、智能化程度不断提高。作为一名有节操有追求的挨踢从业者,只有不断去理解其工作原理,对症下药,才能更加轻松的翻越长城,融入世界。