• 使用DNSdist在Ubuntu上设置DNS over HTTPS(DoH)解析器

    本教程将向您展示如何使用DNSdist在Ubuntu上设置自己的DNS over HTTPS(DoH)解析器,这样您的DNS查询就可以被加密并防止被窥探。 什么是HTTPS上的DNS?为什么它很重要 DNS(域名系统)负责将域名转换为IP地址。它是1987年设计的,没有考虑安全或隐私。默认情况下,DNS查询不加密。它们以明文形式在网络上发送,中间实体可以利用它们。例如,中国的防火长城(GFW)使用一种名为DNS缓存毒药的技术对中国互联网进行审查。(他们还使用其他方法,这超出了本文的范围。) GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。GFW向用户的DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机,因此用户无法访问谷歌。通用域名格式。 HTTPS是加密纯文本HTTP网页的标准方式。使用HTTPS上的DNS(DoH),您的DNS查询将被加密,因此第三方无法看到您的DNS查询。 为什么要运行自己的DoH解析器? 现在已经有一些公共DNS解析器,比如1.1.1.1和9.9.9.9,它们支持HTTPS上的DNS,所以如果您没有技能或时间运行自己的DNS,您可以使用它们。从Firefox版本61开始,您可以在浏览器设置中启用DNS over HTTPS,这是互联网安全和隐私方面的一大进步。Firefox默认使用Cloudflare解析器(1.1.1.1)。然而,一些人认为这允许Cloudflare收集Firefox用户的信息。他们似乎比Cloudflare更信任他们的ISP。但我认为,如果你对隐私心存疑虑,你应该运行自己的DoH解析器,这样Cloudflare和ISP都不能监视你。 DoH vs DoT 除了HTTPS上的DNS,还有另一个协议也旨在加密DNS查询。它被称为TLS上的DNS(DoT)。之前我在Ubuntu桌面上写了一篇关于通过TLS使用DNS的指南,但现在我正在切换到通过HTTPS使用DNS。 对于生活在中国等互联网审查严格的国家的人来说,使用DoH更为有利。 DoT在TCP端口853上运行,该端口很容易被国家防火墙屏蔽。 DoH在TCP端口443上运行,这是HTTPS网站的标准端口,这使得DoH非常难以阻止,因为如果TCP端口443被阻止,那么几乎所有HTTPS网站也将被阻止。 我的DoH解析器运行在中国境外的VPS(虚拟专用服务器)上,中国的防火长城无法拦截我的DNS查询。我甚至可以将我的DoH解析器的IP地址隐藏在Cloudflare CDN(内容交付网络)后面。 DoH的另一个优点是,它允许web应用程序通过现有的浏览器API访问DNS信息,因此不需要存根解析器。 主要DNS解析程序中的DoH支持 BIND将在9.17版本中支持DoH,该版本仍在开发中。Ubuntu 20.04和21.04存储库随BIND 9.16一起发布。 自版本4.0.0以来,结分解器支持DoH。目前的最新版本是5.11。它有Debian、Ubuntu、CentOS和Fedora的官方存储库。 Unbound从1.12.0版开始支持DoH。 PowerDNS递归程序目前不支持DoH。 实际上,我更喜欢用DNSdist运行DoH解析器,它在1.4.0版中增加了对DoH的支持。目前的最新版本是1.5。它有Debian、Raspbian、Ubuntu和CentOS的官方存储库。DNSdist是一个DNS负载平衡器,可以将DNS查询转发到后端DNS解析程序,因此无论您使用的是哪个DNS解析程序,都可以使用DNSdist运行自己的DoH服务器。DNSdist由PowerDNS团队开发。 先决条件 假设您在Ubuntu服务器上运行DNS解析器。你可以使用任何DNS解析程序(绑定、结解析、未绑定…)我个人使用绑定。 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 一旦DNS解析程序启动并运行,请按照以下说明操作。 第一步:在Ubuntu服务器上安装DNSdist 如果使用非LTS Ubuntu,则必须从默认存储库(sudo apt install dnsdist)安装dnsdist。如果您使用Ubuntu LTS,建议从上游存储库安装DNSdist,这样您将拥有最新的稳定版本。首先,需要为DNSdist创建一个源列表文件。 Ubuntu 20.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 18.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 16.04 echo“deb[arch=amd64] main“| sudo tee/etc/apt/sources.list.d/pdns.list 接下来,我们为DNSdist创建一个首选项文件来锁定包,这样就不会意外地从另一个存储库安装DNSdist。 sudo nano/etc/apt/preferences。d/dnsdist 将以下行添加到文件中。 包装:dnsdist*密码:origin repo。powerdns。com Pin优先级:600 保存并关闭文件。然后运行以下命令导入PowerDNS公钥,以便APT软件包管理器可以验证从该存储库下载的软件包的相互关系。 卷曲https://repo.powerdns.com/FD380FBB-pub.asc| sudo apt按键添加- 接下来,更新存储库列表并安装DNSdist。 sudo apt更新sudo apt安装dnsdist 默认情况下,DNSdist尝试绑定到端口53。因为您在端口53上有一个现有的DNS解析器,比如BIND监听,dnsdist。服务将无法启动。 由于我们只是部署一个DoH解析器,并不关心DNS负载平衡,所以我们可以将DNSdist配置为在另一个端口上侦听。编辑DNSdist配置文件。 sudo nano/etc/dnsdist/dnsdist。形态 此文件中没有内容。现在,只需在该文件中添加以下行,DNSdist就会监听TCP和UDP端口5353,而不是端口53。 setLocal(“127.0.0.1:5353”) 保存并关闭文件。然后重新启动DNSdist。 sudo systemctl restart dnsdist 检查它的状态。 systemctl状态dnsdist 它应该处于活动状态(正在运行)。 第2步:在Ubuntu服务器上安装Let's Encrypt Client(Certbot) HTTPS上的DNS需要在服务器端安装TLS证书。我们将获取并安装Let's Encrypt证书。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要检查版本号,请运行 certbot——版本 样本输出: certbot 0.40.0 步骤3:从Let's Encrypt获取受信任的TLS证书 我建议使用standalone或webroot插件获取dnsdist的TLS证书。 独立插件 如果你的Ubuntu服务器上没有运行web服务器,你可以使用独立插件从Let's Encrypt获取TLS证书。为子域(doh.example.com)创建DNS记录,然后运行以下命令。 sudo certbot certonly--独立--首选挑战http--同意tos--电子邮件[电子邮件 受保护]-d doh。实例通用域名格式 哪里: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看到,我成功地获得了证书。

    2022.03.23 浏览:57