
# 通过DNS解析器和Linux Bind实现跨账号域名解析
#### 应用场景
华为云DNS解析器主要用于混合云DNS解决方案，即客户本地网络无缝连接到华为云虚拟私有云（VPC）基础设施网络，其主要目标是简化DNS管理，实现华为云环境中域名的高效解析。
通过使用DNS解析器，组织可以解析本地DNS基础设施和华为云之间的DNS查询，从而实现本地网络和华为云资源之间的连接，促进混合部署并实现无缝通信，也避免了在华为云环境中构建另一套DNS来解析本地网络与华为云之间的域名，从而节省管理成本。
在本实践中，我们将实现以下目标：
- 在本地网络环境中部署Linux Bind服务器，实现跨账号DNS解析。
- 配置华为云环境中的DNS解析器，实现域名解析。
- 通过域名实现跨账号服务器之间的通信。
#### 解决方案
如[图1]所示，为了演示本地网络与华为云之间的DNS解析，我们将在业务账号中创建3个VPC，其中隔离VPC用于部署一个Linux Bind服务器，本地网络的IP地址范围为172.28.0.0/16，另外两个VPC分别用于DNS解析器的使用和连通性测试。在生产账号中创建一个VPC，用于承载生产工作负载。所有VPC将通过企业路由器连接，以实现不同账号资源之间的通信。
- VM01：本地网络中的服务器。
- ECS01：业务账号中的测试服务器。
- ECS02：生产账号中的测试服务器。
DNS解析器关联业务VPC，所有DNS规则将在不同账号的不同VPC之间共享。
云上ECS实例发出的DNS查询将首先发送到华为云DNS服务器，如果是请求线下IDC自建DNS的内网域名（转发规则指定的域名），则通过出站终端节点转发到线下IDC自建DNS来解析。
图1解决方案示意图   
![](https://support.huaweicloud.com/bestpractice-dns/zh-cn_image_0000002407780449.png "点击放大")
![](https://support.huaweicloud.com/bestpractice-dns/public_sys-resources/note_3.0-zh-cn.png)
本实践所涵盖的本地网络环境与华为云环境中的IP地址均为示例，仅供参考使用。实际应用中，请根据真实网络规划进行部署。
#### 准备工作
- 您需要熟悉以下基本概念：
  - 华为云基础架构（HFA）中的多账号结构策略。
  
  - 使用企业路由器或VPC对等连接实现VPC网络互通。
  
  - 华为云环境中的DNS解析。
  
  - 熟悉Linux环境及BIND软件包的使用。
   
- **业务部署区域** ：目前DNS解析器已经在部分区域上线，您需要在已上线区域规划业务，详细请参见[解析器简介](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_1030.html#section0)。
- **资源访问管理**：在多账号环境中，您需要使用华为资源访问管理（Resource Access Manager，简称RAM）服务，在不同账号之间共享DNS规则，避免在每个账号中重复创建解析器规则。DNS解析器和规则应该仅配置在业务账号中。
- **账号权限** ：您需要至少在3个不同的华为云账号中拥有Root权限，具体用途如下：
  
  | 账号类型 | 用途                |
  |:---|:---|
  | 中转账号 | 用于通过企业路由器连接不同VPC  |
  | 业务账号 | 用于托管共享资源（如DNS解析器） |
  | 生产账号 | 用于托管生产工作负载        |
     
  
 
#### 步骤一：建立不同账号之间的VPC连接
1. 在业务账号中，创建3个不同VPC，用途如下：
   - 关联Linux Bind服务器作为本地网络。
   
   - 关联DNS解析器。
   
   - 关联业务账号中的测试服务器。
    
2. 在生产账号中，创建1个VPC，关联生产账号中的测试服务器。
3. 在中转账号中，创建企业路由器并配置VPC连接和路由表。
   1. 将企业路由器共享给业务账号和生产账号。
   
   2. 在生产账号中，创建VPC连接将生产VPC添加到企业路由器。
   
   3. 在业务账号中，创建VPC连接将账号中所有VPC添加到企业路由器。
   
   4. 在中转账号中配置企业路由器的路由表，如下所示：
      - 将业务账号下的所有VPC关联到默认路由表。
      
      - 在企业路由器的默认路由表中，为业务账号和生产账号中的所有VPC创建传播。
      
      - 将生产VPC关联到自定义路由表。
      
      - 在企业路由器的自定义路由表中，为业务账号和生产账号中的所有VPC创建传播。
       
    
 
#### 步骤二：部署服务器
1. 在业务账号中部署Linux Bind服务器，并在业务账号和生产账号中部署测试服务器。
   1. 在业务账号中，购买弹性云服务器，具体信息如下：
      - **ECS-** **VM01**：作为内部部署网络中的测试服务器，私网IP：172.28.0.101。
      
      - **ECS01**：作为本地网络中的主Linux Bind服务器，私网IP：172.28.0.214。
      
      - **ECS-Common**：作为业务账号中的测试服务器，私网IP：10.6.48.101。
       
   
   2. 在ecs-vm01中，将DNS服务器IP指向Linux Bind服务器的IP地址172.28.0.214。
   
   3. 在生产账号中，购买弹性云服务器。 **ECS02**：作为生产账号的测试服务器，私网IP：10.16.8.101。
      
    
2. 设置业务账号中的 Linux Bind 服务器。
   1. 登录Linux Bind服务器**ECS-** **VM01** ，输入以下命令安装 bind 实用工具并修改 Bind 的主配置文件。
      ```
      $ sudo yum update
      $ sudo yum install bind-utils
      $ vim /etc/named.conf
      ```
      
   
   2. 修改BIND主配置文件。
      - 配置受信任的ACL列表，仅允许从**ECS01** 、**ECS-VM01** 、**备用Linux Bind** 、**ECS-Common** 、**ECS02** 的地址进行DNS查询。
        对应IP地址：172.28.0.101、172.28.0.214、172.28.0.78、10.6.48.101、10.16.8.101
        
      
      - 绑定服务器监听53端口，确保安全组绑定测试服务器允许53端口。
      
      - 从受信任的IP地址列表中允许查询。
      
      - 如果有备用DNS服务器，允许传输到备用DNS服务器。
       
   
   
   
   3. 在 Linux Bind 服务器上配置本地文件，输入以下命令插入脚本：
      ```
      $ vim /etc/named/named.conf.local
      zone "test.example.com" {
          type master;
          file "/etc/named/zones/db.test.example.com"; # 区域文件路径
      };
      zone "28.172.in-addr.arpa" {
          type master;
          file "/etc/named/zones/db.172.28"; # 172.28.0.0/24 子网
      };
      ```
      
   
   4. 创建正向区域文件，通过以下命令编辑文件。
      ```
      $ sudo chmod 755 /etc/named
      $ sudo mkdir /etc/named/zones
      $ sudo vim /etc/named/zones/db.test.example.com
      ```
      根据下图修改并插入高亮信息。
      ![](https://support.huaweicloud.com/bestpractice-dns/zh-cn_image_0000002407570665.png "点击放大")
      
   
   5. 创建反向区域文件，通过以下命令编辑文件。
      ```
      $ sudo vim /etc/named/zones/db.172.28
      ```
      根据下图修改并插入高亮信息。
      ![](https://support.huaweicloud.com/bestpractice-dns/zh-cn_image_0000002374091000.png "点击放大")
      
   
   6. 检查BIND配置语法。
      ```
      $ sudo named-checkconf
      $ sudo named-checkzone test.example.com
      /etc/named/zones/db.test.example.com
      $ sudo named-checkzone 128.10.in-addr.arpa /etc/named/zones/db.172.28
      ```
      
   
   7. 启动BIND服务。
      ```
      $ sudo systemctl enable named
      $ sudo systemctl start named
      ```
      
    
 
#### 配置DNS解析器
1. 在业务账号中，创建入站终端节点和出站终端节点。 详细请参见[创建入站终端节点](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_1032.html#section1)和[创建出站终端节点](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_1031.html#section1)。
   
2. 配置出站规则，并将DNS查询转发到Linux Bind服务器。 详细请参见[添加转发规则](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_1033.html#section2)。
   
3. 在同一账号中，将创建的出站规则共享至生产账号。 详情请参见[创建转发规则共享](https://support.huaweicloud.com/usermanual-dns/dns_usermanual_1034.html#section2)。
   
4. 在生产账号中，进入DNS服务，将生产VPC与被共享的DNS解析器出站规则关联。
 
#### 结果验证
在同一账号内测试DNS解析
- 从ECS-VM01解析其关联的内网域名。 **nslookup host1.test.example.com**
  ![](https://support.huaweicloud.com/bestpractice-dns/zh-cn_image_0000002373931104.png "点击放大")
  
- 从ECS-Common解析ECS-VM01关联的域名。 **nslookup host1.test.example.com**
  ![](https://support.huaweicloud.com/bestpractice-dns/zh-cn_image_0000002407730525.png "点击放大")
  
#### 总结
在本文中，我们学习了如何在华为云环境中部署Linux Bind DNS服务器，并结合DNS解析器在多账户环境中进行域名解析。
DNS解析器有助于避免从本地环境到华为云环境中重复设置域名控制器，从而降低管理成本。
