4 min read

DNSdist配置并启用原生DNS-over-HTTPS(DoH)

这篇文章是基于你已经按照前述文章完成了DNSdist的部署和基本的DoH服务设置,以及相关的防火墙规则设置,这说明你本地已经可以正常访问你设置的DoH服务。如果你还没有做好准备,请移步至《DNSdist配置并启用DNS-over-HTTP(DoH)》。

a view of the empire building in new york city
Photo by Saul Macias / Unsplash

准备SSL证书

SSL证书是为你的服务器通信提供传输加密的非对称密钥,是建立SSL/TLS HTTPS链接必不可少的条件。为了适配各种设备,你可能需要使用公开信任的SSL证书来部署到你的DoH服务器。

CertBot 和 Let'sEncrypt

如果你的DoH服务所在服务器的80端口没有被其他端口所占用,或该服务器上不具有任何的其他WEB服务正在运行,另外还需要将你访问DoH服务器的域名解析到服务器的公网IP地址。如果你满足这些条件,那么你完全可以通过CertBot以ACME的方式来获取一个Let'sEncrypt签发的公开信任的SSL证书,这个过程非常简单,您可以参考《如何使用 Certbot 命令列工具建立免費的 TLS/SSL 頂層網域憑證》一文进行CertBot的设置。

这种方式获取的是为期三个月有效期的TLS/SSL证书,但如果设置好,CertBot会帮助你在到期之前自动续期。

自定义SSL证书

由于我还是认为通过WEB界面申请SSL证书更加方便,我通过提供商的网站为测试域名dns.csetang.com申请了一个为期三个月的测试证书用于本次测试。记下来就是将证书保存到你的服务器上。

使用下列命令创建文件并不保存证书内容:

nano /etc/dnsdist/ssl.pem

将你的证书内容复制进去并保存。

同样的方式,你还需要使用下列命令创建文件并保存私钥文件

nano /etc/dnsdist/ssl.key

保存之后,打开你的DNSdist配置文件

sudo nano /etc/dnsdist/dnsdist.conf

修改原来的监听部分配置,将你的证书和私钥路径填写进去

-- Add a new DoH listen address and port
addDOHLocal("10.243.245.122:8053", "/etc/dnsdist/ssl.pem", "/etc/dnsdist/ssl.key", null, {exactPathMatching=false})

这里我们还是使用的8053端口作为DoH端口,你也可以修改为其他端口。

修改证书权限

下面还有一个步骤就是修改证书和私钥文件的权限,因为DNSdist是用dnsuser运行的

sudo chown dnsuser:dnsuser /etc/dnsdist/ssl.pem
sudo chown dnsuser:dnsuser /etc/dnsdist/ssl.key

确保修改后certs目录下文件如下所示展示权限(PS: 中途我尝试过将证书文件放在 dnsuser 的 用户目录下,但无论最后如何修改权限,都会在启动的时候出现启动失败“权限不足”的错误,希望你不要遇到这种错误。)

重启DNSdist

现在执行下列命令重启DNSdist

sudo systemctl restart dnsdist
sudo systemctl status dnsdist

启动成功,接下来我们就可以使用上一篇文章提供的测试工具继续测试啦,测试结果如下图:

修改了测试脚本中的doh_url为最新的HTTPS地址
DoH HTTPS执行查询成功

上图表示通过HTTPS协议查询DoH结果成功,接下来你就可以在你的网络环境中使用DNS-over-HTTPS安全解析服务了。