作者:admin,发布日期:2020-05-17
阅读:9617;评论:0
什么是加密DNS?为什么要使用加密DNS?
由于国内运营商网络的问题,很多宽带自带的DNS存在劫持问题,甚至某些宽带存在劫持53端口,直接强制使用运营商DNS。这就有可能会造成DNS解析结果的异常或者污染,也有可能具有个人隐私泄露的风险。所以,要防止DNS污染,就需要使用加密DNS,对DNS请求的过程全程加密,这样运营商即使获取到了你的数据包,也无法对其解密,更无法对其进行修改。这篇文章我们就会用到github的开源项目dnscrypt-proxy来使你的电脑接入DNS服务商提供的公共加密DNS服务。
方案
我们会用到dnscrypt-proxy程序,将其安装为Windows下的服务,这样这个服务就可以做到开机自动请求,处理我们的连接。同时该程序会在本地监听一个端口号为53的UDP端口,用于接收系统的DNS请求。所以当我们需要使用dnscrypt的时候,我们直接将系统的DNS设置为127.0.0.1,这样程序接收到请求后,会按照规范给dnscrypt公开服务器发送请求,并且将返回的信息返回给系统。下图为请求过程。
项目地址
https://github.com/DNSCrypt/dnscrypt-proxy
安装
我们可以直接从release页面下载编译好的二进制程序。
打开此链接进行下载:https://github.com/DNSCrypt/dnscrypt-proxy/releases
选择win32或者win64 zip包,分别代表32位和64位程序。minisig用于下载zip包的完整性校验。
下载完成后将其解压,然后将其内部的文件夹复制到你常用的目录,用于存放程序,这里我把文件夹放到了C:\Program Files下面,将其当作普通程序。
需要注意的是,如果放到系统文件夹下面,最好对其设置普通用户的读写权限,以防止出现问题。
复制完成后,我们运行文件夹内的service-install.bat来安装dnscrypt-proxy的服务,此处需要管理员权限。
配置
将example-dnscrypt-proxy.toml复制一份,改名为dnscrypt-proxy.toml,程序启动时会读取此配置文件内的配置。
一般我们只需要配置server_names,设置一个你需要用的服务器即可,当然也可以配置多个,第一个请求失败会自动向第二个服务器请求。
server_names = ['alidns-doh']
去掉前面的# 注释,如果该项没有配置,程序会自动从自带的服务器列表中获取一个推荐的服务器进行请求。
我在这里使用了阿里的加密dns服务,其他可选的可以使用dns.sb 或者 rubyfish提供的一些加密dns服务。
自带的服务器列表可以从下面的网站中看到
https://dnscrypt.info/public-servers/
当然我们也可以看到下面这段
[sources] ## An example of a remote source from https://github.com/DNSCrypt/dnscrypt-resolvers [sources.'public-resolvers'] urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'] cache_file = 'public-resolvers.md' minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' prefix = '' ## Anonymized DNS relays [sources.'relays'] urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/relays.md', 'https://download.dnscrypt.info/resolvers-list/v2/relays.md'] cache_file = 'relays.md' minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' refresh_delay = 72 prefix = ''
sources段中配置了服务器列表以及列表的下载地址,这份列表会实时更新,当然你也可以自建。
当dnscrypt-proxy启动时,会自动从配置好的sources地址中下载列表文件,供程序使用,文件会存在程序目录中。
设置系统dns
右键使用的网卡,选择属性,然后在属性界面中双击IPV4协议。
将主DNS设置为127.0.0.1即可
开启局域网访问
可以修改dnscrypt-proxy配置,使其监听全部IP,以实现局域网共享dns。
将原有监听配置修改为以下配置即可
listen_addresses = ['0.0.0.0:53']
使用dnscrypt-proxy后windows 网络图标提示感叹号或者其他错误请求
此问题在博主系统中100%复现,解决方法比较折中,在DNS设置中添加一个标准DNS协议的备用服务器,这样就可以解决问题。而且实测系统会先从主DNS服务器中获取解析结果。