VPC .2 解析器的真实身份 - AWS 内部 DNS 与 Route 53 Resolver 的关系
讲解 VPC 内的 DNS 解析器(CIDR+2 地址)究竟是什么、与私有托管区的集成、基于 Route 53 Resolver 端点的混合 DNS 以及 DNS 查询日志的利用方法。
VPC 的 CIDR+2 地址上有什么
创建 VPC 后,可以在 VPC CIDR 范围的起始地址加 2 的地址(如果是 10.0.0.0/16,则为 10.0.0.2)上使用 DNS 解析器。查看 EC2 实例的 /etc/resolv.conf 时,nameserver 设置的是这个地址。这个 .2 解析器是名为 Route 53 Resolver 的 AWS 托管 DNS 服务。来自实例的 DNS 查询被发送到这个 .2 解析器,由 Route 53 Resolver 进行名称解析。Route 53 Resolver 根据查询的内容执行不同的处理。如果是与 VPC 关联的私有托管区的域名,则返回私有托管区的记录。如果是 AWS 内部的服务端点(ec2.ap-northeast-1.amazonaws.com 等),则通过 AWS 的内部 DNS 解析。如果是其他域名,则通过公共 DNS(Route 53 的公有托管区或互联网的 DNS)解析。这种分配是自动进行的,用户无需进行设置。
私有托管区 - 仅在 VPC 内有效的 DNS
Route 53 的私有托管区是只能从 VPC 内部解析的 DNS 区。例如,创建名为 internal.example.com 的私有托管区,并设置将 api.internal.example.com 解析为 10.0.1.100 的记录。这样,VPC 内的实例可以通过 api.internal.example.com 访问内部服务,但从互联网无法解析。私有托管区可以关联到多个 VPC。如果将同一个私有托管区关联到开发、预发布、生产的各个 VPC,可以在各环境之间使用相同的内部 DNS 名称。但是,如果希望在各环境中解析为不同的 IP 地址,则需要为每个环境创建单独的私有托管区。私有托管区可以使用与公有托管区相同的域名。当 example.com 的公有托管区和私有托管区同时存在时,来自 VPC 内的查询优先使用私有托管区。这称为“水平分割 DNS”。
Route 53 Resolver 端点 - 实现混合 DNS
通过 Direct Connect 或 VPN 连接本地网络和 VPC 时,DNS 名称解析会成为问题。也就是说,存在希望从本地服务器解析 VPC 内私有托管区的域名,或反过来希望从 VPC 内的实例解析本地 Active Directory 域的需求。使用 Route 53 Resolver 端点,可以从本地 DNS 解析 VPC 内的私有名称,或者反过来从 VPC 内将查询转发到本地 DNS。入站端点接收来自本地 DNS 服务器的查询,并将其转发到 VPC 的 .2 解析器。在本地 DNS 服务器上为 VPC 的私有域设置条件转发器,并将转发目标设为入站端点的 IP 地址。出站端点将来自 VPC 内的查询转发到本地 DNS 服务器。通过 Route 53 Resolver 规则,设置将特定域(例:corp.internal)的查询转发到本地 DNS 服务器。端点会在多个可用区中创建 ENI,因此可以具备多可用区的冗余性。费用为每个 ENI 每小时 0.125 美元 + 每 100 万次 DNS 查询 0.40 美元(截至 2026 年 8 月)。
DNS 查询日志 - 可视化 VPC 内的 DNS 活动
Route 53 Resolver 的 DNS 查询日志是记录从指定 VPC 发出的 DNS 查询和响应的功能,Resolver 从缓存响应的查询不会被记录。日志中记录哪个实例在何时尝试解析了哪个域名。DNS 查询日志可以用于安全调查。恶意软件有时会使用 DNS 与 C2(Command and Control)服务器通信(DNS 隧道)。如果分析 DNS 查询日志,可以检测到对可疑域名的查询。例如,对随机字符串子域(a1b2c3d4.evil.com)的大量查询,是 DNS 隧道的征兆之一。查询日志的发送目标可以从 CloudWatch Logs、S3、Kinesis Data Firehose 这 3 种中选择。实时分析使用 CloudWatch Logs,长期保存和大规模分析使用 S3 和 Athena,流式分析使用 Kinesis。GuardDuty 自动分析 DNS 查询日志,并检测加密货币挖矿、C2 通信、数据泄露等威胁。如果使用 GuardDuty,可以把从 DNS 通信中检测威胁的工作交给 GuardDuty。
DNS 的陷阱 - enableDnsSupport 与 enableDnsHostnames
VPC 有 2 个与 DNS 相关的设置,某些设置值会导致无法进行 DNS 名称解析。enableDnsSupport(默认:true)是启用 VPC .2 解析器的设置。如果设为 false,VPC 内的实例将无法使用 .2 解析器,除非设置自定义 DNS 服务器,否则无法进行名称解析。enableDnsHostnames(默认:false,默认 VPC 中为 true)是一项设置。它为拥有公有 IP 地址的实例自动分配 DNS 主机名(ec2-1-2-3-4.compute-1.amazonaws.com)。此设置为 false 时,无法解析私有托管区中定义的名称。为了使用私有托管区,需要 enableDnsSupport 和 enableDnsHostnames 都为 true。另一个陷阱是 DHCP 选项集。分发给 VPC 实例的 DNS 服务器地址由 DHCP 选项集控制。如果在自定义 DHCP 选项集中将 DNS 服务器更改为本地 DNS,将不再使用 .2 解析器,私有托管区也将无法解析。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。