在 Virtual Private Cloud 中自建基于 BIND 的 DNS 服务器

阅读数:33 2019 年 11 月 15 日 08:00

在Virtual Private Cloud中自建基于BIND的DNS服务器

Amazon Virtual Private Cloud (Amazon VPC) 是 AWS 提供的虚拟私有网络服务,允许您在 AWS 云中预配置出一个采用逻辑隔离的部分,让您在自己定义的虚拟网络中启动 AWS 资源。您可以完全掌控您的虚拟联网环境,包括选择自有的 IP 地址范围、创建子网,以及配置路由表和网关。

除了提供 IP 资源及网络连接,Amazon VPC 还提供 DNS 及 DHCP 等基础设施服务。当您将实例启动到默认 VPC 中时,我们为实例提供与其公有 IPv4 和私有 IPv4 地址对应的公有和私有 DNS 主机名。当您在非默认 VPC 中启动实例时,我们会为实例提供私有 DNS 主机名,并根据您为 VPC 和实例指定的设置来决定是否提供公有 DNS 主机名。

对于 us-east-1 区域,公有 (外部) DNS 主机名采用 ec2-.compute-1.amazonaws.com 形式,对于其他区域,则采用 ec2-.region.amazonaws.com 形式。例如,公有 IP 为 54.222.212.110 的 EC2 实例,其公有 DNS 名为 ec2-54-222-212-110.cn-north-1.compute.amazonaws.com.cn。我们将公有 DNS 主机名解析为该实例在所在网络外的公有 IPv4 地址及其在所在网络内的私有 IPv4 地址。

私有 (内部) DNS 主机名解析为实例的私有 IPv4 地址,并对 us-east-1 区域采用 ip-.ec2.internal 形式,对其他区域采用 ip-.region.compute.internal 形式 (其中 private.ipv4.address 是反向查找 IP 地址)。例如,私有 IP 地址为 10.206.2.239 的 EC2 实例,其私有 DNS 名为 ip-10-206-2-239.cn-north-1.compute.internal。您可以使用私有 DNS 主机名在同一网络中实现实例之间的通信,但我们无法解析实例所在网络之外的 DNS 主机名。要解析实例所在网络之外的主机名,可自建 DNS 服务器来为 VPC 及外部网络提供 DNS 服务。

常见的应用场景是在混合 IT 架构下,客户数据中心通过 VPN 或是 Direct Connect 专线连接到 AWS 上的 VPC,在 VPC 中配置 1 台 DNS 服务器,在客户数据中心也配置 1 台 DNS 服务器,服务器的主从角色客户可自行定义。通过多台 DNS 服务器为不同位置的客户端提供 DNS 服务,即能保证服务的高可用,又能就近提供服务,减少 DNS 查询延迟。

在Virtual Private Cloud中自建基于BIND的DNS服务器

接下来,我将基于上述架构图一步一步说明如何使用 BIND 搭建 DNS 服务器。本文不会涉及 BIND 的高级配置,如需了解 BIND 的高级配置,可参考 BIND 官方网站

安装配置 DNS 主服务器

首选需要准备一台 EC2 实例用于安装 BIND 软件,如何创建 EC2 实例可参考 Amazon EC2 入门指南。本次示例选用 Amazon Linux 操作系统的 AMI 来创建实例,实例类型选用了通用型实例类型: m4.large。BIND 对服务器硬件资源要求不高,在不启用 DNSSEC 的情况下 (不在本文讨论范围),普通配置的服务器即可承载 DNS 服务。m4.large 配置有 2 颗 vCPU 和 8G 内存,运行 DNS 服务能够支持中等规模的 DNS 请求,当请求增加时,也可方便的调整实例类型到更大的配置。

在Virtual Private Cloud中自建基于BIND的DNS服务器

创建 EC2 实例时需要指定安全组来开放服务端口,DNS 服务通过 UDP 53 端口提供 DNS 查询相应,通过 TCP 53 端口提供区域传送。因此,安全组队 VPC 网段开放 UDP 53 端口,对客户数据中心的 DNS 服务器开放 TCP 53 端口,如下图所示:

在Virtual Private Cloud中自建基于BIND的DNS服务器

DNS 服务器作为基础设施服务的重要性无须多言,Amazon EC2 持续监控 EC2 实例的状态以及底层硬件的状态,分别称为实例状态检查和系统状态检查。我们可创建状态检查报告,当任一状态检查失败时,执行重启操作,并将警报发送至指定邮箱。

在Virtual Private Cloud中自建基于BIND的DNS服务器

创建好警报之后,通过 SSH 登陆至 EC2 实例,并 yum 命令安装 bind 软件:

yum install bind-utils bind

安装好之后,我们接下来将创建一个示例的 DNS 域:aws.local,我们首先需要编辑 /etc/named.conf 文件,修改以下内容:

在Virtual Private Cloud中自建基于BIND的DNS服务器

listen-on 缺省配置为 127.0.0.1,DNS 服务只会绑定到系统的环回接口,其他客户端无法访问,需要添加 EC2 实例的私有 IP 地址,才能提供外部访问

allow-query 缺省配置为 localhost,即只允许 DNS 服务器所在的 EC2 实例对自己进行 DNS 查询,添加 VPC 的网段可允许来自 VPC 内部的主机进行 DNS 查询。注:也可将此参数设置为 0.0.0.0/0,因为前面安全组设置里只允许了 VPC 内的 IP 访问 UDP 53 端口。

此外,还需要增加对 aws.local 这个域的定义,在 /etc/named.conf 中增加以下内容,allow-transfer 指定了只允许从 DNS 服务器进行区域传送,限定允许区域传送的范围颗可提高 DNS 服务的安全性:

在Virtual Private Cloud中自建基于BIND的DNS服务器

上述配置说明 aws.local 域的具体解析配置在文件 /var/named/aws.local.db 里,其内容如下,在这个示例配置中,定义了两条 A 记录,分别是 dns.aws.local 对应 10.206.0.212 和 www.aws.local 对应 10.206.0.213

在Virtual Private Cloud中自建基于BIND的DNS服务器

配置 Amazon VPC 使用自建 DNS 服务器

Amazon VPC 通过 DHCP 服务为 VPC 中的 EC2 及其他连网组件动态分配 IP 地址,动态主机配置协议 (DHCP) 提供了将配置信息传递到 TCP/IP 网络中主机的标准。DHCP 消息中的 options 字段包含配置参数。这些参数包括域名、域名服务器以及“netbios-node-type”。接下来我们将创建一个新的 DHCP 选项集,并在选项集中将域名服务器指向刚才创建的 DNS 服务器。

在 AWS 控制台中选择 VPC 服务,并在左边的菜单中选择“DHCP 选项集”,点击“创建 DHCP 选项集”按钮,输入以下信息,域名服务器可指定多个 DNS 服务器,按照顺序第一个为 VPC 内的 DNS 服务器,第二个为客户数据中心的 DNS 服务器:

在Virtual Private Cloud中自建基于BIND的DNS服务器

创建好 DHCP 选项集之后选择左边菜单中“您的 VPC”选项,选中要修改的 VPC,从“操作”下拉菜单中选择“编辑 DHCP 选项集”

在Virtual Private Cloud中自建基于BIND的DNS服务器

选择刚才创建的 DHCP 选项集并保存:

在Virtual Private Cloud中自建基于BIND的DNS服务器

在您将新的 DHCP 选项集与 VPC 关联之后,任何现有实例以及您在 VPC 内启动的所有新增实例都将使用这些选项。 无需重新开始或重新启动实例。根据实例更新 DHCP 租赁权的频率,它们会在几个小时内自动拾取更改。如果您愿意,您也可以使用实例上的操作系统,直接更新租赁权。

安装配置 DNS 从服务器

在客户数据中心安装配置 DNS 服务器的步骤与在 Aamazon EC2 中安装配置 DNS 服务器的步骤相同,除了 /etc/named.conf 的配置稍有差别:

在Virtual Private Cloud中自建基于BIND的DNS服务器

从服务器的 type 类型为 slave,file 参数对应的域配置文件会自动根据从主 DNS 服务器接收到的更新来进行创建和更新,masters 指定 aws.local 域的主域名服务器,最后一个参数 allow-transfer 禁用了区域传送。

配置好从 DNS 服务器之后,可将客户数据中心内的连网设备设置为从 DNS 服务器,第二 DNS 服务器设置为 AWS 上的主 DNS 服务器。

总结

Amazon VPC 提供 DHCP 服务和 DNS 服务,为 VPC 中的 EC2 实例提供 IP 地址分配和域名解析服务,为每个 EC2 实例创建特定格式的 DNS 域名。如果用户希望使用自定义域名,或者希望使用一套域名统一管理云上和云下的资源,可自行搭建 DNS 服务器来提供 DNS 解析服务,Amazon VPC 能够支持客户。

作者简介

在Virtual Private Cloud中自建基于BIND的DNS服务器

刘旭东,AWS 解决方案架构师 。负责基于 AWS 的云计算方案的咨询和架构设计,具有超过十年以上企业客户服务经验,同时致力于 AWS 云服务在国内和全球的应用和推广。在大数据解决方案、企业级解决方案,混合云架构,基础设施运维管理,以及 Serverless 无服务器架构及 IoT 等领域有着广泛的设计与实践经验。在加入 AWS 之前曾任职 HPE 技术顾问,有超过十年的虚拟化/云计算架构设计经验, 始终推动技术实现商业价值。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/vpc-bind-dns/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布