使用DNSProxy搭建一个支持EDNS的DoH服务器

https://lala.im/7705.html

DNSProxy是AdguardTeam开发的一个简单的DNS代理服务器,它支持目前所有的DNS协议。包括DoT/DoH/DNSCrypt等。最最最重要的是还支持EDNS(ECS)。

我最近一直在找一个可以支持EDNS的DoH解决方案,试过很多开源的程序,比如DNSDist/Unbound之类的,但是无一例外要么是支持的不够完善,要么是配置起来太复杂了。。

我知道AdguardTeam这个开发团队其实本身就有一个项目是支持EDNS的:AdGuardHome。但是这个程序跑起来比较重,有很多我不需要用到的功能。

就在我纠结的时候,突然发现AdguardTeam还有一个DNSProxy的项目,这个就非常好了,有所有我需要用到的功能,而且配置起来非常简单,这里就给大家推荐一下吧。

咱毕竟懂的也不多,关于EDNS具体是个啥原理,我也不能随便乱说,如果你想了解这块的话可以看看维基百科或者Google:

https://en.wikipedia.org/wiki/EDNS_Client_Subnet

只是从个人使用体验来说的话,有EDNS支持的话,你访问国内的一些网站就不会慢了,比如B站/163/QQ/斗鱼直播这些。可以省去做国内外分DNS解析的步骤。

目前个人使用感觉良好,废话就不多说了,下面是搭建步骤。

首先装一下需要用到的工具:

apt -y update
apt -y install wget nginx python-certbot-nginx supervisor

设置nginx/supervisor开机自启:

systemctl enable --now nginx supervisor

下载解压dnsproxy的预编译文件:

cd /opt
wget https://github.com/AdguardTeam/dnsproxy/releases/download/v0.33.8/dnsproxy-linux-amd64-v0.33.8.tar.gz
tar -xzvf dnsproxy-linux-amd64-v0.33.8.tar.gz
mv linux-amd64 dnsproxy

其实dnsproxy可以直接拿来用,把它监听在443端口就行了,但是我机器上面还要做站或者搞点其他的东西,所以这里我选择用nginx反代dnsproxy的服务。

这里先新建一个nginx站点配置文件:

nano /etc/nginx/conf.d/dnsproxy.conf

写入如下配置:

server {
   listen 80;
   server_name dns.imlala.best; # 换成你的域名
   client_max_body_size 0;

location /dns-query {
   proxy_pass         https://127.0.0.1:10443; # 后续dnsproxy监听的端口号
   proxy_set_header X-Real-IP $remote_addr; # 传递客户端的真实ip到dnsproxy,否则dnsproxy的edns功能不能用
   }
}

然后用certbot签发一个ssl证书:

certbot --nginx

之后你需要重新编辑这个站点配置文件:

nano /etc/nginx/conf.d/dnsproxy.conf

在如下行加上http2的配置:

listen 443 ssl http2; # managed by Certbot

重载nginx使其生效:

systemctl reload nginx

现在新建supervisor配置文件:

nano /etc/supervisor/conf.d/dnsproxy.conf

写入如下配置:

[program:dnsproxy]
priority=1
command=/opt/dnsproxy/dnsproxy -l 127.0.0.1 --https-port=10443 --tls-crt=/etc/letsencrypt/live/dns.imlala.best/fullchain.pem --tls-key=/etc/letsencrypt/live/dns.imlala.best/privkey.pem -u https://dns.google/dns-query -f 8.8.8.8:53 -f 8.8.4.4:53 --cache --edns -p 0
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/dnsproxy.log

之前已经用certbot申请好了证书,所以你只需要把上面的证书和私钥换成你自己的就可以了,其他的配置都不需要改动。

现在启动dnsproxy就大功告成啦:

supervisorctl update

经过上面的步骤后,你的DoH服务地址就是:

https://dns.imlala.best/dns-query

接下来我们需要在电脑上装支持DoH的客户端,这里推荐一个YogaDNS:

https://yogadns.com/

安装之后,初次运行选这个:

选择DNS Servers:

点击Add添加DNS服务器:

按下图的格式来填写:

配置好了后最好点击旁边的Check检测一下,如果显示绿色那就是没有问题。

接着点击Rules:

在这里选择你的DNS服务器:

开始享受无污染的DNS服务吧~

其实这个YogaDNS还支持很多高级功能,比如按照域名来分DNS解析之类的,有需求的可以自己折腾着看看

没有评论: