写点什么

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

2019 年 11 月 15 日

在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 查询延迟。



接下来,我将基于上述架构图一步一步说明如何使用 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 请求,当请求增加时,也可方便的调整实例类型到更大的配置。



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



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



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


yum install bind-utils bind


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



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 服务的安全性:



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



配置 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 服务器:



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



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



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


安装配置 DNS 从服务器

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



从服务器的 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 能够支持客户。


作者简介



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


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/vpc-bind-dns/


2019 年 11 月 15 日 08:00180

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

评论

发布
暂无评论
发现更多内容

Kubernetes生产环境最佳实践

xcbeyond

Kubernetes 容器 28天写作

硬核!我花5小时肝出这篇Redis缓存解决方案,带你起飞!

云流

数据库 redis 缓存架构

怎么理解Kafka消费者与消费组之间的关系?

码农架构

Java 消息队列 消息中间件 架构·

技术赋能教育,浅谈教育机构转型的制胜关键

华为云开发者社区

音视频 在线教育

宅米网技术架构演进分析

andy

Appium下的WDA使用个人开发者证书配置

行者AI

自动化测试

区块链有望被主流接纳的四个场景

CECBC区块链专委会

区块链

666666666666666666666

Paul

大数据

太牛了!美团Android开发工程师岗位职能要求,大厂面试题汇总

欢喜学安卓

android 程序员 面试 移动开发

Invalid bound statement (not found)

任广印

Java MyBatisPlus

为什么强烈推荐 Java 程序员使用 Google Guava 编程!

沉默王二

Java Guava

946页神仙文档,连阿里P8面试官都说太详细了,搞懂这些直接是P7级

Crud的程序员

Java 架构

15道类和对象面试题,快看看自己会几道

田维常

类集

从设计模式理解Vue响应式(多图警告)

coolFish(呔呆)

JavaScript vue.js 响应式 设计模式 前端教程

12.4G阿里巴巴面经公开:技术笔记+视频讲解+简历模板,绝了!

996小迁

Java 架构 面试 程序人生

直击金三银四!阿里甩出2020互联网公司1000道面试真题集锦,收录成册,全网首发!

程序员小毕

Java 程序员 面试 分布式 微服务

幕后故事 | YRCloudFile助力顶级视效制作公司MORE VFX打造视觉盛宴

焱融科技

高性能 存储 焱融科技 3D渲染 影视制作

java中的类和object,其实没那么难~

田维常

类集

个人web分享92道JavaScript面试题附加回答

魔王哪吒

程序员 面试 前端 面试题 程序媛

数字货币写进多地“十四五”规划纲要草案 专家建议扩大数字人民币试点范围

CECBC区块链专委会

数字经济

2021最新Windows10环境下安装MacOS系统(黑苹果)亲测有效!!(VM安装黑苹果)

💤

macos 黑苹果 windows vmware

每日知识总结

country

一文带你解读Volcano架构设计与原理

华为云开发者社区

架构 Kubernetes 负载 Volcano 集群

认识Nacos注册中心

登风

nacos

5G机遇 | 如何解决在核心场景的高并发、超低延迟需求?

VoltDB

数据库 5G 通信 VoltDB

工具介绍 | 百度开源Server-Agent:高性能、高效率的任务调度执行引擎

百度开发者中心

开源

顺利拿到OPPO公司Android架构师offer,Android跨进程通信导论,全套教学资料

欢喜学安卓

android 程序员 面试 移动开发

有一说一!Alibaba技术官甩出的SpringCloud笔记绝了,GitHub已标星81.6k

Crud的程序员

spring SpringCloud

区块链如何帮助联合国支持全球教育?

CECBC区块链专委会

区块链

就业篇-如何抉择自己合适的路 (三)

小诚信驿站

程序员 成长笔记 28天写作

超赞!终于有人用130个案例把微服务方方面面完美演示出来了

程序员小毕

Java 架构 面试 分布式 微服务

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

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