4 min read

DNSdist配置并配合Nginx启用DNS-over-HTTPS(DoH)

这篇文章是之前发布的《基于DNSdist搭建动态的私有化DNS(DnsOverHttp(s))服务》的引申文章,且前提是你已经通过这个系列的上一篇文章《DNSdist配置并启用原生DNS-over-HTTPS(DoH)》完成了基本的DoH服务配置,如果你对这篇文章所述内容感到疑惑或者很难进入,推荐你先从之前的文章开始阅读,以了解全貌。基于这些前提,我们这篇文章主要考虑一种场景下:

在DoH部署的同一台服务器上还存在WEB服务(这通常是Nginx或者Apahce)在80端口提供服务,但现在我们还需要DoH也在80和443端口提供DoH查询服务。

面对上述情况,我们采用的方案是使用DNSdist开启本地监听,然后使用Nginx作为反代理来对外提供DoH服务,这样做我们还可以向配置Nginx网站的证书那样为DoH配置SSL证书并管理续期(比如使用ACME SSL插件实现自动续期)。

创建Nginx网站

我们这里的测试环境是基于宝塔面板,创建Nginx网站,绑定用于提供DoH服务的域名:

创建新网站

创建完成后,你需要将对应域名的DNS A记录解析到你服务器的IP地址。

配置SSL证书

完成创建之后,你还需要点击网站管理并为这个域名配置SSL证书,这里我们测试的是使用Let'sEncrypt签发的SSL证书

选择证书配置类型
配置证书完成

完成证书配置之后,你可以访问一下该网站,以确保设置正确!

访问DoH测试网站

展示以上界面则表示网站创建并且证书配置成功。

修改监听地址

接下来修改DNSdist配置文件,以监听本地8053端口,并且提供HTTP服务,因为证书我们会在Nginx上配置。修改服务器配置环节:

-- Add a new DoH listen address and port
addDOHLocal("127.0.0.1:8053", null, null, null, {exactPathMatching=false})

然后重新启动DNSdist服务:

sudo systemctl restart dnsdist
sudo systemctl status dnsdist

配置反代理

现在配置你的Nginx网站返代理本地DoH服务即可

宝塔面板->网站管理->反代理
点击添加反代理
参考图片输入本地DoH服务信息,并保存

点击保存,然后使用之前文章发布的测试工具,测试你的DoH服务地址即可,记得此时你的DoH服务地址已经变为了 https://dns.csetang.com/dns-query 对应的域名应该替换为你自己的。

Nginx DoH 服务测试成功

至此,你已经成功使用Nginx代理了DoH服务并提供HTTPS加密。