![Olawale Olaleye Olawale Olaleye](https://d1.awsstatic.com/xuefezha-jennie/%e7%ba%a7%e5%88%ab_level%201.01c35fea97656a6beac50b0c8ae81e8afc1eedef.png)
![](https://d1.awsstatic.com/xuefezha-jennie/Group%20281.67a8494bd80a4bd979e37efcb490ada486dd72ae.png)
许多客户通常使用本地部署的 DNS 基础设施来解析内部域名的 DNS 查询。2018 年,AWS 推出了 Amazon Route 53 Resolver 终端节点,让客户能够将 Route 53 与本地 DNS 基础设施集成,实现混合 DNS 解析。2023 年,我们进一步改进了这项集成功能,新增了DNS-over-HTTPS (DoH) 加密功能。该功能通过基于 HTTPS 的 DNS 协议加密 DNS 解析请求和响应。DoH 能够防止未经授权的用户窃听和篡改 DNS 查询,从而增强隐私保护。
与 DNSSEC 不同,DoH 加密是对客户端与 DNS 解析器之间或 DNS 解析器之间的连接进行加密,从而提升 DNS 请求和响应的机密性与完整性。你可以使用这项功能来加密以下内容:
- 从本地客户端和解析器发往 Amazon Route 53 Resolver 入站端点的 DNS 查询
- Amazon VPC 中的客户端通过 Amazon Route 53 Resolver 出站端点发往本地 DNS 解析器的 DNS 查询
此功能可以帮助客户满足加密 DNS 流量的合规性要求,比如美国联邦机构必须遵守的 Office of Management and Budget Memorandum(白宫管理与预算办公室备忘录)M-22-09 Moving the U.S. Government Toward Zero Trust Cybersecurity Principles(推动美国政府走向零信任网络安全原则)中的 DNS 流量加密要求。
本文将介绍如何使用 Route 53 Resolver 端点来设置 DoH 加密和使用解析器的查询日志来验证 DNS 解析是否是通过 DoH 协议完成的,以及配置运行 Ubuntu 22 和 Microsoft Windows Server 2022 的 EC2 实例来演示如何使用这项功能。要完成以下实验步骤,你必须已经具备了设置和配置 VPC 以及本地 DNS 解析器的相关知识和经验。
配置步骤
Route 53 Resolver 支持基于 DoH 协议的入站端点和出站端点。为了对 DNS 查询进行加密,我们需要执行以下步骤:
- 创建支持 DoH 协议的入站端点和出站端点。
- 配置运行 Ubuntu 22 和 Microsoft Windows Server 2022 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,让实例通过 DoH 协议向 Route 53 入站端点发送 DNS 查询。
- 根据 Route 53 Resolver 的查询日志来验证实例是否通过 DoH 协议发送 DNS 解析请求。
- 配置 Route 53,将来自 Route 53 Resolver 出站端点的 DNS 查询通过 DoH 协议转发到本地 BIND 服务器。
前提条件
在开始之前,请确保满足以下前提条件:
- 已使用 AWS Transit Gateway 通过 AWS Direct Connect 或 AWS Site-to-Site VPN 建立第 3 层私有连接,用于传输本地网络和 AWS 之间的 DNS 流量。
- 已创建了一个虚拟私有云 (VPC),其中包含两个分布在不同可用区的子网。这两个子网分别用于创建 Amazon Route 53 Resolver 入站端点和出站端点。你也可以选择为你的 VPC 启用 IPv6。你的 VPC 可以运行在双栈模式下,让你的资源能够通过 IPv4、IPv6 或同时使用这两种协议进行通信。IPv4 和 IPv6 的通信是相互独立的。
- 已创建一个私有托管区 (Private Hosted Zone, PHZ),并将其与你的 VPC 关联。你也可以使用 Amazon Route 53 Profiles 以 Profile 形式来定义标准的 DNS 配置,其中需包含 Route 53 私有托管区关联。
- 为入站端点和出站端点创建安全组,允许所有来源的 TCP 和 UDP 流量通过 53 端口。安全组配置需遵循安全组入站和出站规则的建议配置,以避免连接跟踪 (Connection Tracking) 的影响。更多相关信息,请参阅如何利用连接跟踪优化来提升网络性能的博文。
- 在 Amazon Route 53 中配置解析器查询日志记录,将 DNS 查询记录发送到 Amazon CloudWatch Logs。
- 如果你使用可能影响网络性能的其他架构设计,请检查 Amazon Route 53 端点配额。
下方图 1 展示了通过 VPC Attachment 接入 AWS Transit Gateway 的共享服务 VPC。Transit Gateway 通过 Direct Connect 或 Site-to-Site VPN 连接将网络连接延伸到本地网络。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/Picture1-9%20(1).c1e7998f4adeefdae860b8e1bd6d9af2dc1c5a02.png)
图 1:共享服务 VPC 通过 Transit Gateway 连接到本地网络(使用 Direct Connect 和 Site-to-Site VPN)
创建启用了 DoH 的 Amazon Route 53 Resolver 入站端点
Amazon Route 53 Resolver 端点支持以下三种协议:Do53、DoH 和 DoH-FIPS。
- Do53:(默认协议)通过 Route 53 Resolver 传输数据时使用 UDP 或 TCP 协议,不进行额外加密。
- DoH:数据通过加密的 HTTPS 会话进行传输。
- DoH-FIPS:数据通过符合 FIPS 140-2 加密标准的加密 HTTPS 会话进行传输。目前仅入站端点支持 DoH-FIPS。更多相关信息,请参阅 FIPS PUB 140-2。
注意:DoH 和 DoH-FIPS 不能同时启用。根据具体需求,你可以选择:仅使用 Do53、仅使用 DoH、仅使用 DoH-FIPS、同时使用 Do53 和 DoH、或同时使用 Do53 和 DoH-FIPS。另外,你不能直接将入站端点的协议从仅使用 Do53 改为仅使用 DoH 或 DoH-FIPS。反之亦然。这样的限制是为了防止协议更改时,入站流量发生瞬时中断。
如需将入站解析器的协议从 Do53 改为 DoH 或 DoH-FIPS,必须先启用 Do53 和 DoH 组合,或 Do53 和 DoH-FIPS 组合。然后,根据 Route 53 Resolver 的查询日志记录来确认是否所有入站流量已切换到 DoH 或 DoH-FIPS 协议。最后,编辑入站端点的配置,删除对 Do53 协议的支持。
完成以下配置,创建支持 DoH 的全新 Route 53 Resolver 入站端点(如图 2 所示):
- 指定一个自定义端点名称。
- 从下拉菜单中,选择转发本地环境 DNS 查询的目标 VPC。
- 在 Security group for this endpoint(端点安全组)字段,选择此端点要使用的安全组。
- 在 Endpoint Type(端点类型)字段,选择 Dual-stack(双栈)。如果设置为双栈端点,该端点将同时具有 IPv4 和 IPv6 地址。你网络中的 DNS 解析器可以向 IPv4 地址或 IPv6 地址转发 DNS 查询。
- 在 Protocols for this endpoint(端点协议)字段下,选择 DoH,通过 HTTPS 加密 DNS 查询请求和响应。
- 选择接收来自本地网络的入站 DNS 查询的可用区。为了实现高可用性,建议至少选择两个可用区。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/inbound_endpoint-new.fc0f03e6bce67ca4e832f139d12256a9eef05bf6.png)
图 2:创建用于将 DNS 查询转发至 VPC 中的 Amazon Route 53 入站端点
创建入站端点后,请记录下其 IPv4 和 IPv6 地址(如图 3 所示),后续需要使用 IP 地址来配置 Windows 或 Linux DNS 客户端。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/Inbound-Endpoint-example.44073f8f1752848c869aae3472d88a25d8fb516c.png)
图 3:Amazon Route 53 入站端点详细信息
配置 Microsoft Windows Server DNS 客户端
从 Windows Server 2022 开始,Microsoft Windows Server DNS 客户端支持 DoH。请按照以下步骤进行配置:
步骤 1:以管理员身份运行 PowerShell,将 Route 53 Resolver 入站端点添加为支持 DoH 的 DNS 服务器端点。请将以下命令中的解析器 IP 地址和区域替换为你创建的入站解析器的 IP 地址和部署区域。
C:\> Add-DnsClientDohServerAddress -ServerAddress 'resolver-IP address' -DohTemplate 'https://route53resolver.Region.amazonaws.com/dns-query’ -AllowFallbackToUdp $True -AutoUpgrade $True
ServerAddress AllowFallbackToUdp AutoUpgrade DohTemplate
------------- ------------------ ----------- -----------
10.2.0.54 False False https://route53resolver.Region.amazonaws.com/dns-query
步骤 2:将 Route 53 Resolver 入站端点设置为默认 DNS 服务器端点。请将服务器地址替换为你的 Route 53 Resolver 入站端点的 IP 地址。同时,将接口索引 (InterfaceIndex) 替换为你的环境中对应的具体值。
C:\> Set-DnsClientServerAddress -InterfaceIndex 2 -ServerAddresses Route53-resolver-inbound-endpoint-IP-address
步骤 3:验证 DNS 解析是否正常运行。我们将使用 PowerShell DNS 解析命令来解析 ipv4.aws.example.internal 的 A 记录。
C:\> Resolve-DnsName -Name ipv4.aws.example.internal
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
ipv4.aws.example.internal A 17 Answer 10.2.1.10
你也可以选择根据指定条件将 DNS 查询转发到 Route 53 Resolver 入站端点的 IP 地址,以查询 AAAA 记录或公共 DNS 名称。
配置 Ubuntu 22 通过 dnsdist DNS 代理支持 DoH
Ubuntu 22 原生不支持 DoH。你可以通过添加 DNS 代理来支持 DoH。该代理在 53 端口上接收传统的 UDP DNS 查询,然后使用 DoH 连接到 DNS 解析器。我们使用开源 DNS 代理 dnsdist 来实现 DoH 支持。登录到运行 Ubuntu 22 的 x86 EC2 实例后:
步骤 1:安装 dnsdist 1.7.0 或更高版本。Dnsdist 1.7.0 及更高版本均支持 DoH。可以直接从 dnsdist 的开发商 PowerDNS 平台获取 dnsdist 1.7.0。首先添加 PowerDNS 的软件源,然后安装 dnsdist。
步骤 1a:使用 sudo 命令切换到 root 用户
$ sudo -s
步骤 1b:添加 PowerDNS 的软件库秘钥和软件库:
$ echo "deb [signed-by=/etc/apt/keyrings/dnsdist-18-pub.asc arch=amd64] http://repo.powerdns.com/ubuntu jammy-dnsdist-18 main" >> /etc/apt/sources.list.d/pdns.list
$ echo -e "Package: dnsdist* \nPin:origin repo.powerdns.com\nPin-Priority: 600" >> /etc/apt/preferences.d/dnsdist-18
$ install -d /etc/apt/keyrings; curl https://repo.powerdns.com/FD380FBB-pub.asc | tee /etc/apt/keyrings/dnsdist-18-pub.asc
步骤 1c:更新可用软件包并安装 dnsdist
$ apt-get update && apt-get install dnsdist
步骤 2:dnsdist 安装完成后,编辑 dnsdist.conf 文件,监听本地主机(127.0.0.1 或 ::1)上的 DNS 查询,并将 DNS 查询通过 DoH 协议传输至 Route 53 Resolver 入站端点进行解析。
步骤 2a:以超级用户身份,使用你熟悉的文本编辑器,执行 sudo 命令打开 /etc/dnsdist/dnsdist.conf。
$ sudo nano /etc/dnsdist/dnsdist.conf
步骤 2b:配置 dnsdist,使其监听本地主机上的 DNS 查询,然后将 DNS 查询发送到 Route 53 Resolver 入站端点,让 Route 53 Resolver 解析 DNS 查询。
将以下内容添加到 /etc/dnsdist/dnsdist.conf 文件中:请务必将下面针对的 IPv4 和 IPv6 示例中的 IP 地址和区域替换为你的 Route 53 Resolver 端点的 IP 地址和区域:
IPv4:
addLocal("127.0.0.1:53")
newServer({address=”Route53-resolver-inbound-endpoint-IPv4-address:443”, tls=”openssl”, subjectName=”route53resolver.Region.amazonaws.com”, dohPath=”/dns-query”, validateCertificates=true})
IPv6:
addLocal(“[::1]:53”)
newServer({address=”[Route53-resolver-inbound-endpoint-IPv6-address]:443”, tls=”openssl”, subjectName=”route53resolver.Region.amazonaws.com”, dohPath=”/dns-query”, validateCertificates=true})
保存文件并退出编辑,然后重启 dnsdist 服务。
步骤 3:使用 nslookup 来验证 dnsdist 是否能够通过 DoH 转发 DNS 查询。我们将向本地主机发起查询,让 dnsdist 将查询转发到 Route 53 Resolver 入站端点。以解析 ipv4.aws.example.com 为例
$ nslookup ipv4.aws.example.internal 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1
Non-Authoritative answer:
Name: ipv4.aws.example.internal
Address: 10.2.1.10
你可以通过解析器的查询日志来验证本地客户端是否通过 DoH 发送和接收 DNS 查询。通过 CloudWatch Logs Insights 搜索 DNS 查询日志结果,可以看到一个新的字段 transport。如图 4 所示,客户端通过 DoH 作为传输方式与 Route 53 Resolver 入站端点进行通信。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/doh_log_ipv4.31041bf8faf26d69a59be8f82368f1cde505c9e9.png)
图 4:Route 53 Resolver 的 DNS 查询日志中显示使用 DoH 作为传输方式
使用支持 DNS-over-HTTPS 的 Route 53 Resolver 入站端点
图 5 展示了一个常见的客户配置场景,其中配置了一个支持 DoH 的双栈 Route 53 Resolver 入站端点。在这个示例架构中,本地客户端与 Amazon Route 53 Resolver 入站端点之间的 DNS 查询请求和响应都通过 DoH 进行加密。在从客户环境通过 Direct Connect 或 Site-to-Site VPN 将查询传输到 AWS 的过程中,可以使用 DoH 加密来加强机密性和完整性保护。在以下示例中,一台本地应用程序服务器需要解析私有托管区的某个 DNS 地址:
- 本地应用程序服务器向本地 DNS 解析器发送了一个查询请求,查询 ipv4.aws.example.internal 的 A 记录。
- 本地 DNS 解析器通过 DoH 协议,将 DNS 查询按条件转发到 Route 53 Resolver 入站端点对应的 IPv4 地址。
- Route 53 Resolver 入站端点服务器接收并处理该查询。
- (4a) 入站端点服务器检查该私有托管区的 aws.example.internal 是否与其关联。(4b) VPC DNS 解析器检查该私有托管区的 aws.example.internal 是否与其关联。
- Route 53 Resolver 将该 EC2 实例的 IPv4 地址返回给入站端点服务器。
- Route 53 Resolver 入站端点服务器将 A 记录响应发送回本地 DNS 解析器。
- 本地解析器将解析结果返回给本地应用程序服务器。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/InboundEndpoint-Traffic-Flow.1f301885309aa541882c68a856ef2eb7b7077fa3.png)
图 5:Route 53 Resolver 入站端点服务器通过 DNS-over-HTTPS 处理查询和响应的流程
为 Route 53 Resolver 出站端点配置 DNS-over-HTTPS
现在,让我们配置一个支持 DoH 的出站端点,将来自某 VPC 中 EC2 实例的 DNS 查询转发到本地网络的 DNS 解析器。
步骤 1:完成以下设置,配置一个出站端点:
- 指定一个自定义端点名称。
- 从下拉菜单中选择 VPC,从该 VPC 中的服务器发起的 DNS 查询请求转发到本地网络 DNS 解析器。
- 选择该端点要使用的安全组。
- 在 Endpoint Type(端点类型)字段,选择 Dual-stack(双栈)。如果设置为双栈端点,该端点将同时具有 IPv4 和 IPv6 地址。你网络中的 DNS 解析器可以向 IPv4 地址或 IPv6 地址转发 DNS 查询。
- 选择向本地网络发送出站 DNS 查询的服务器所属的可用区。为了实现高可用性,建议至少选择两个可用区。指定用于接收转发 DNS 查询的目标 IP 地址。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/outbound-endpoint-new.25bd1de6ba87af799495a6ecd53fdfc0d6956803.png)
图 6:创建 Amazon Route 53 Resolver 出站端点
步骤 2:创建解析器规则,将 DNS 查询转发到本地 DNS 解析器。每条规则都需要包含一个域名和一个或多个用于转发 DNS 查询的目标 IP 地址。图 7 展示了一条转发规则示例,该规则通过 DoH 协议将 foo.example.com 的 DNS 查询转发到本地 DNS 解析器。
如图 7 所示,每条规则都需要关联一个或多个目标 IP 地址。如果出站端点仅支持 IPv4,那么目标地址只能是 IPv4 地址。如果出站端点采用双栈模式,则目标地址可以是 IPv4 地址或 IPv6 地址。目标地址必须全部是 IPv4 地址或者全部是 IPv6 地址。同一条规则中不能同时使用这两种类型的地址。在本例中,我们设置了一个支持 IPv6 的 DNS 解析器作为目标。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/outbound-resolver-rule.3d66290df2edda43d45232870be6945c50913b80.png)
图 7:创建通过 DoH 发送 DNS 查询到 IPv6 解析器的 Route 53 Resolver 规则
重要说明
Route 53 出站解析器通过 DoH 协议访问的目标解析器必须具有公共可信证书颁发机构 (CA) 签发的证书。目前,出站解析器端点不支持私有 CA 签发的证书,这类证书都会被拒绝。
步骤 3:创建出站解析器规则后,需要验证出站解析器能否正确地将查询转发到本地端点。
在本例中,我们使用 BIND 搭建了一个支持 DoH 的本地 DNS 解析器。我们已在 BIND 中为 foo.example.com 域名配置了 A 记录和 AAAA 记录。
为验证出站解析器能否将来自指定 VPC 中的 DNS 查询转发到 BIND DNS 解析器,我们启动一个 Ubuntu 22 EC2 实例,用它向该 VPC 发送针对 foo.example.com 的 DNS 查询。VPC 的内置 DNS 解析器 (Route 53) 会根据我们之前配置的解析器规则,将查询转发到本地 BIND 解析器。
从输出结果可以看到,出站解析器成功地将查询转发到了 BIND 服务器,并将响应返回给了 EC2 实例。
$ nslookup foo.example.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-Authoritative answer:
Name: foo.example.com
Address: 172.16.0.10
Name: foo.example.com
Address: 2001:db8:5678:abc
可以看出,本地 DNS 解析器成功解析出了 foo.example.com 的 IPv4 和 IPv6 地址。
使用支持 DNS-over-HTTPS 的 Route 53 Resolver 出站端点
图 8 展示了配置支持 DoH 的双栈 Route 53 Resolver 出站端点示例。如图 8 所示,启用 DoH 可以为从出站端点转发到本地 DNS 解析器的 DNS 查询提供加密保护。这样可以提升 DNS 查询在客户本地网络和 AWS 之间传输时的机密性和完整性。让我们看一个示例:
- 双栈子网中的 EC2 实例针对本地资源 (foo.example.com) 发起一个 A 记录 DNS 查询,并将 DNS 查询请求发送给 Route 53 Resolver。
- 当 DNS 查询到达 EC2 实例所在 VPC 中的 Route 53 Resolver 时,Route 53 Resolver 系统会根据关联的解析器规则对该 DNS 查询进行评估。系统会将 DNS 查询与该 VPC 关联的所有解析器规则进行匹配。然后,会根据匹配到的规则类型,选择转发该 DNS 查询的路径。示例中,已配置一条 Route 53 Resolver 规则,用于转发指向到本地数据中心中 foo.example.com 域名的查询。
- 如果 DNS 查询匹配到转发规则,就会被发送到共享服务 VPC 中出站端点的 IPv4 地址。请注意,EC2 实例与出站端点之间无需建立网络连接。
- Route 53 Resolver 出站端点会通过 Direct Connect 或 Site-to-Site VPN 连接并使用 DoH 协议将查询转发到本地 DNS 解析器。
- 本地 DNS 解析器会根据查询进行解析,并通过 DoH 将包含 IPv4 地址的响应返回给出站端点服务器。
- 出站端点服务器随后将 DNS 查询响应发送给 Route 53 Resolver。
- Route 53 Resolver 将包含 IPv4 地址的 DNS 查询响应返回给 EC2 实例。
![](https://d1.awsstatic.com/meixuadu/encrypt-dns-queries/Picture28-1.9bcc9c960397d18a806af9a010b246fa2b261964.png)
图 8:通过 DNS-over-HTTPS 转发来自 Route 53 Resolver 出站端点的查询和返回响应的流程图
清理资源
有关 Amazon Route 53 端点的定价信息,请参阅 Amazon Route 53 定价。如果你不希望实验过程中创建的资源继续产生费用,可以按照以下步骤删除资源:
- 删除入站解析器端点和出站解析器端点
- 终止为了此次实验而创建的 EC2 实例
总结
本文向你展示了如何创建支持 DNS-over-HTTPS (DoH) 协议的 Amazon Route 53 入站解析器端点和出站解析器端点。基于 DoH 的 DNS 查询转发功能不仅可以加密你的 DNS 查询和响应,还能通过最小化查询中信息交换的可见性来增强隐私保护。我们为你详细讲解了如何配置,让 Windows Server 2022 EC2 实例和 Ubuntu 22 实例实现 DoH 传输,并通过测试验证了配置的有效性。我们还介绍了这项功能的常见使用场景,并演示了如何利用 DoH 加密来增强 DNS 查询的机密性和完整性。更多关于如何使用 Amazon Route 53 Resolver 端点的 DNS-over-HTTPS 传输功能的信息,请参阅 Amazon Route 53 开发人员指南。
更多教程
快速搭建容量高达 35GB 的免费个人网盘
本教程将介绍如何搭建一个没有使用限制的免费私人网盘。
构建企业专属智能客服机器人
本文将演示如何结合多种服务,打造企业专属的智能客服。
使用生成式 AI 构建多语言问答知识库
使用多种服务,构建可汇总搜索结果的多语言知识库。
免费套餐
AWS 海外区域
拓展海外业务或个人体验
免费使用 100 余种云产品或服务, 长达 12 个月
AWS 中国区域
发展中国业务
免费使用 40 余种核心云服务产品,长达 12 个月