dnscrypt-proxy是Gayhub上面的一个开源项目,项目本身就提供给了我们很多免费的公共DNS可用,如果你不想自建服务器的话用免费的也是可以的,只是DNS解析的速度会比较慢。
自建的话找一台线路好的机器,解析速度还是比公共的要快不少的,自建也很简单,官方都提供好了docker镜像。下面我在一台CentOS7X64的机器上进行安装。
首先安装docker:
cd yum -y install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm systemctl start docker systemctl enable docker.service
然后一条命令就可以安装了:
docker run --name=dnscrypt-server -p 443:443/udp -p 443:443/tcp --net=host jedisct1/dnscrypt-server init -N dns.lala.im -E 1.1.1.1:443
注:
1.dns.lala.im这个可以自己随便更改,即便是一个不存在的域名都可以。
2.1.1.1.1更改为你的服务器公网IP
3.443这个端口不能更改。
稍等一会就安装好了,会回显给你一串类似这样的sdns代码,复制保存好:
启动服务:
docker start dnscrypt-server
设置开机启动:
docker update --restart=unless-stopped dnscrypt-server
这样服务端就搭建好了,接下来是客户端,首先在这里下载符合你系统的客户端:
https://github.com/jedisct1/dnscrypt-proxy/releases
这里我以Win10为例,解压之后先复制一份配置文件保存为dnscrypt-proxy.toml:
然后编辑dnscrypt-proxy.toml,注释掉公共服务器这块:
然后在下面这里加上我们之前复制的那一串sdns代码:
保存配置文件,接着打开CMD或者PowerShell,运行客户端,如果回显中能够正常响应,则说明一切正常:
现在打开自己电脑主网卡的属性设置界面,找到TCP/IPv4这里点属性:
把DNS地址修改为127.0.0.1:
这样就大功告成了,现在我拿自己这个博客的域名测试下效果(我这个域名是被污染的。)可以看到,已经解析出正确的服务器IP地址了:
PING一下看看,也是正常的:
这样一直用PowerShell运行dnscrypt-proxy似乎不是一件明智之举,dnscrypt-proxy也为我们准备好了一个功能:安装系统服务。首先我们Ctrl+C退出当前运行中的dnscrypt-proxy。
然后我们可以通过下面的命令把dnscrypt-proxy安装为Windows的系统服务,这样dnscrypt-proxy每次就能自动运行了,而不再需要PowerShell:
./dnscrypt-proxy -service install
安装完成之后启动服务:
./dnscrypt-proxy -service start
如果一切正常,则看到类似如图回显:
更多管理命令:
./dnscrypt-proxy -service stop ./dnscrypt-proxy -service restart ./dnscrypt-proxy -service uninstall
要自己手动管理相关服务也是可以的:
在天朝这个独特的网络环境下,dnscrypt-proxy可以帮你解决GFW污染域名/DNS的问题,还能够帮助你解决运营商的DNS劫持等等各种蛋疼问题。用处还是挺大的。
参考文献:
https://github.com/jedisct1/dnscrypt-proxy/wiki/How-to-setup-your-own-DNSCrypt-server-in-less-than-10-minutes
https://github.com/jedisct1/dnscrypt-proxy/wiki/Installation-Windows
在家中树莓派上实测用dnscrypt-proxy客户端无法正常解析你的域名(在VPS上同样配置没有问题):
Resolving [lala.im]
Domain exists: probably not, or blocked by the proxy
Canonical name: lala.im.
IP addresses: 31.13.84.1
TXT records: –
Resolver IP: 60.215.138.245
似乎运营商已经可以识别出dnscrypt的流量并加以污染?
服务端需要境外服务器搭建,应该是这个问题。
dnscrypt-server在境外搭建没有问题,并且在境外VPS用搭建客户端也可以正常解析。
找到原因了,是因为树莓派同时配置了透明代理,导致本地DNS查询请求被转发给v2ray,造成无法正常返回解析结果,在iptables里面加入RETURN 127.0.0.0/8之后这个问题就解决了。
确实要境外…折腾了半天也发现了这个问题………
Adguard home 可以直接拦截域名 解析到自己设置的ip…反正域名污染的网址就这么几个……设置下…还不正常域名的解析速度
那直接改hosts不是更简单。。
博主,我曾经在这里https://linux.cn/article-3244-1.html看到一个关于DNSCrypt的评论,里面提到”虽然解决了dns被劫持、污染的问题,但却产生了容易被追踪的问题。这个软件与服务器通讯会发送一个身份验证的key,通过这个key就可以识别、锁定你,即使你更换了ip,甚至使用了vpn、隧道、代理。这个key是不变且唯一的,服务器始终知道是你。而且知道你一直在访问哪些网站。”.这个说法准确么?
这个我也不知道,最好问下程序的作者吧,不过我个人觉得这种东西都无所谓了,人在国内还有什么隐私不隐私追踪不追踪的,想找人他们有一万种方法找到你。
这玩意能做梯子?
不能。
可是这个需要每一个上你网站的人都要设置这个东西吧?
只是要单纯上我这个站最简单的方法就是改个hosts就行了。
dnscrypt-server的docker run命令中的–net=host应该去掉,否则docker会返回WARNING: Published ports are discarded when using host network mode且443端口并未开启。