前言
为有效阻止第三方(如广告商)对网络流量的监视与干涉,使用加密DNS协议不失为一种可靠的方法,可有效提升安全性和隐私性。
结合本人的亲身实践,本文以dnscrypt-proxy为例来介绍实现DNS流量加密的一种方式。
大部分内容在官网上(特别是installation的部分)均有介绍,本文仅做略微扩充。
在Windows上安装并运行dnscrypt-proxy
下载dnscrypt-proxy-win64-*.zip
并解压缩,进入目录,用文本编辑器修改example-dnscrypt-proxy.toml
,输入你所期望的服务器设置。保存修改后,将该文件改名为dnscrypt-proxy.toml
。然后,在当前目录下用管理员权限打开powershell,运行以下命令:
.\dnscrypt-proxy
如果不报错,说明你的配置就是成功的。
这里以匿名DNS(Anonymized DNS)为例来介绍一下配置相关的内容。文件public-resolvers.md和relays.md分别列举了公共DNS服务器与匿名DNS中继器。只要两者不同属同一个实体和国家,哪怕它记录日志,也没办法取得你的个人信息。
在dnscrypt-proxy.toml
文件中,一个最低限度的配置可以为如下:
listen_addresses = ['127.0.0.1:53']
[static]
[static.'scaleway-fr']
stamp = 'sdns://AQcAAAAAAAAADjIxMi40Ny4yMjguMTM2IOgBuE6mBr-wusDOQ0RbsV66ZLAvo8SqMa4QY2oHkDJNHzIuZG5zY3J5cHQtY2VydC5mci5kbnNjcnlwdC5vcmc'
[anonymized_dns]
routes = [
{ server_name='scaleway-fr', via=['sdns://gRE2NC40Mi4xODEuMjI3OjQ0Mw'] },
]
其中listen_address
部分代表了dnscrypt-proxy会监听本地的53端口。static
部分表示DNS解析器scaleway-fr
的地址将直接由下面stamp
的值来指定,而非从网络中获取。[anonymized_dns]
中的routes
部分则规定了如何连接DNS解析器,其中via
部分规定了一个匿名DNS中继器的地址。
若dnscrypt-proxy能够运行成功,那么可以按下Ctrl+C以停止运行。接着可以运行以下命令,从而将该程序注册为一个系统服务:
.\dnscrypt-proxy -service install
注意,这仍然需要管理员权限才能实现。
如果没有报错,那么继续运行以下命令:
.\dnscrypt-proxy -service start
如此,dnscrypt-proxy就能作为一个系统服务而运行了。
要查看该服务的运行情况,可以打开开始菜单,搜索“service”,你会看到有一个名叫“服务”的应用跳出来。打开这个应用,你可以在名称中找到“DNSCrypt client proxy”,这就是你刚注册的系统服务。你可以设置其启动类型。当启动类型为“自动”时,说明它会在开机时自动启动。
最后,虽然这不是必须,但我建议你修改你的网络设置,将DNS服务器地址一律改为127.0.0.1,这样就能迫使所有DNS流量都经过dnscrypt-proxy的加密。
在Linux上安装并运行dnscrypt-proxy
虽然官网有介绍针对Linux不同发行版的安装方法,但我觉得针对Linux的那个通用方法最可行。
和前面Windows的方法类似,你需要下载dnscrypt-proxy-linux_x86_64-*.tar.gz
,解压缩,修改dnscrypt-proxy.toml
文件,并在终端中运行dnscrypt-proxy
。
如果你在dnscrypt-proxy.toml
指定了53端口,而其他程序有占用这个端口,那么你必须事先停止其他程序的运行。这点在官网里也有写到了,参考官方教程即可。
在官方教程中,通过将/etc/resolv.conf
修改为如下内容:
nameserver 127.0.0.1
options edns0
这使得在dnscrypt-proxy启动之后,你的所有流量都会先经过dnscrypt-proxy的加密,再发送给DNS服务器。
在将dnscrypt-proxy安装为系统服务后,你可以使用如下命令启动该服务:
systemctl start dnscrypt-proxy.service
以下命令则能够实现上述服务的开机自启动:
systemctl enable dnscrypt-proxy.service
整个过程不需要你去修改配置中的user_name
。
你可以通过
systemctl list-units --type service
来查看各系统服务的运行情况,确保结果符合预期。
更新应用程序
用最新的可执行文件dnscrypt-proxy
去替换,再重启服务即可。
结语
虽然过程较为繁琐,但是好处的确是有的。某些网站的加载速度是变快了的。除此之外的好处还有很多,我就不讲了。总之对我来讲这番努力是值得的。