# 通过NAT网关SNAT规则实现独享型ELB将流量送至公网IP地址后端服务器
#### 应用场景
在华为云组网场景中，当您需要使用弹性负载均衡（ELB）将客户端请求经公网转发至后端服务器时，可采用独享型ELB + NAT网关（SNAT）的组合方案，该方案通过ELB的IP类型后端与NAT网关的SNAT规则实现ELB将流量通过公网IP传输到后端服务器。
**典型场景**
- 后端服务器位于云下IDC（Internet Data Center），需要通过公网与ELB通信
- 后端服务器部署在其它VPC或其它云平台，需经公网可达
- 需要利用公网链路实现跨地域/跨云的负载均衡流量分发
**流量链路**
客户端 → ELB → SNAT → 公网IP → 目的服务器
#### 方案架构
**架构说明**
本实践方案在同一个VPC下创建独享型ELB实例和NAT网关，利用NAT网关的SNAT功能将ELB转发流量经公网IP到达后端目的服务器。
**架构要素**
| 组件               | 说明                                       |
|:---|:---|
| 独享型ELB（ELB-Test） | 在VPC-Test中创建，开启"IP类型后端"开关，绑定EIP对外提供服务    |
| NAT网关（NAT-Test）    | 在VPC-Test中创建，开启SNAT功能，为VPC内子网提供SNAT转换能力 |
| SNAT+弹性公网IP      | NAT网关绑定的EIP，用于SNAT源地址转换，将私网流量转换为公网流量    |
| 后端目的服务器          | 位于公网可达位置的服务器，通过公网IP接收ELB转发的请求          |
| 客户端               | 通过ELB的EIP访问服务                         |
   
**流量转发过程**
1. 客户端发起请求，访问ELB绑定的弹性公网IP（ELB-EIP）。
2. ELB接收请求，根据监听器规则和后端服务器组配置，将请求转发至IP类型后端（即后端服务器的公网IP）。
3. ELB转发的流量经过VPC内部路由，命中NAT网关的SNAT规则。
4. NAT网关（SNAT）将源IP从ELB的私网IP转换为NAT网关绑定的SNAT-EIP。
5. 转换后的流量通过公网到达后端目的服务器的公网IP。
6. 后端服务器处理请求并沿原路返回响应。
 
#### 约束与限制
- 由于IP类型后端功能仅独享型ELB支持，所以本方案仅适用独享型负载均衡。
- 创建ELB时必须开启IP类型后端开关，创建后不可修改。
- ELB的后端子网必须被NAT网关SNAT规则覆盖，否则流量不会经过SNAT。
- 后端服务器安全组需放通来自SNAT-EIP的入方向访问。
- 用户需根据业务流量选择合适的NAT网关规格，避免规格不足导致丢包。
- IP类型后端的健康检查流量也会经过SNAT，需确保健康检查路径可达。
 
#### 资源规划说明
|    资源    |      数量      |                                                                                                                                              说明                                                                                                                                               |
|---|---|---|
| 虚拟私有云和子网 | 1个VPC + 2个子网 | - VPC-Test：172.16.0.0/12  - 子网subnet-frontend：172.16.0.0/16  - 子网subnet-backend：172.18.0.0/16   |
| 独享型ELB   | 1个           | 开启"IP类型后端"开关，所属VPC为VPC-Test，前端子网为subnet-frontend，后端子网为subnet-backend。 注意： 建议在本方案中**不要将ELB的后端子网与其他业务共用**，否则将导致其他业务流量转发至公网IP地址。                                                                                                                                    |
| NAT网关    | 1个           | 所属VPC为VPC-Test，开启SNAT功能。                                                                                                                                                                                                                                                                      |
| 弹性公网IP   | 3个           | - ELB-EIP：ELB绑定，对外提供服务。  - SNAT-EIP：NAT网关绑定，用于SNAT转换。  - Client-EIP：客户端ECS绑定，用于公网访问ELB。               |
| 弹性云服务器   | 1台           | ECS-client，用于模拟客户端访问。                                                                                                                                                                                                                                                                         |
| 后端目的服务器  | 1台           | 位于公网可达位置，部署业务服务（如Nginx）。                                                                                                                                                                                                                                                                      |
   
#### 准备工作
在开始配置之前，请确保完成以下准备工作：
1. 创建虚拟私有云和子网：创建VPC-Test以及子网subnet-frontend、subnet-backend。具体操作请参考[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
2. 购买客户端ECS：购买一台ECS用作访问客户端ECS-client并绑定EIP。具体操作请参考[快速购买和使用Linux ECS](https://support.huaweicloud.com/qs-ecs/ecs_01_0103.html)。
3. 后端服务器部署服务：在公网可达的后端目的服务器上部署业务服务（如Nginx），确保服务正常运行并监听相应端口。
 
#### 配置步骤
1. **创建NAT网关并配置SNAT**
   1. 进入[购买公网NAT网关](https://console.huaweicloud.com/vpc/?locale=zh-cn#/nat/public/createNat)页面。
   
   2. 根据界面提示配置相关参数。
      关键参数配置如下：
      
      | 参数    | 示例             | 说明              |
      |:---|:---|:---|
      | 名称    | NAT-Test       | NAT网关名称。        |
      | 规格    | 小型             | 根据业务流量需求选择合适规格。 |
      | 虚拟私有云 | VPC-Test       | NAT网关所属的VPC。    |
      | 子网    | subnet-backend | NAT网关使用的子网。     |
         
      
   
   3. 单击"立即购买"，在"规格确认"页面，您可以再次核对公网NAT网关信息。
   
   4. 确认无误后，单击"提交"。
   
   5. 单击已购买的NAT网关名称，进入详情页。
   
   6. 选择"SNAT规则"页签，单击"添加SNAT规则"。
      关键参数配置如下：
      
      | 参数 | 示例          | 说明                                                                                                      |
      |:---|:---|:---|
      | 弹性公网IP  | SNAT-EIP       | 选择或新购EIP，用于SNAT源地址转换。                                                                                      |
      | 网段      | subnet-backend | 需要SNAT转换的子网，ELB后端子网。 注意： 建议在本方案中**不要将ELB的后端子网与其他业务共用**，否则将导致其他业务流量转发至公网IP地址。 |
         
      
   
   
   
   7. 单击"确定"，完成SNAT规则配置。
      ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
      添加SNAT规则后，subnet-backend子网内的资源访问公网时，源IP将被转换为SNAT-EIP。
      
    
2. **创建独享型ELB实例并开启IP类型后端**
   1. 进入[购买弹性负载均衡页面](https://console.huaweicloud.com/vpc/?locale=zh-cn#/elb/create/custom)。
   
   2. 根据界面提示配置相关参数。
      关键参数配置如下：
      
      | **参数** | **示例**        | **说明**                           |
      |:---|:---|:---|
      | 实例类型     | 独享型             | 请选择独享型，IP类型后端仅独享型支持。                |
      | 名称       | ELB-Test        | ELB实例名称。                            |
      | 所属VPC    | VPC-Test        | 与NAT网关相同的VPC。                       |
      | 前端子网     | subnet-frontend | ELB接收客户端请求的子网。                      |
      | 后端子网     | subnet-backend  | ELB转发流量的子网，需与NAT网关SNAT规则匹配。         |
      | IP类型后端   | 开启              | 必须开启，支持添加IP类型后端服务器。                 |
      | 网络类型     | IPv4 私网         | 网络类型选择IPv4 私网，同时为ELB绑定弹性公网IP实现公网访问。 |
      | 弹性公网IP   | ELB-EIP         | 新购或使用已有EIP。                         |
         
      ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/caution_3.0-zh-cn.png)
      - IP类型后端开关在ELB创建后不可修改，创建时必须开启。
      
      - ELB的后端子网必须与NAT网关SNAT规则覆盖的子网一致，确保ELB转发流量能命中SNAT规则。
        
   
   3. 单击"立即购买"，完成ELB实例的创建。
    
3. **创建后端服务器组并添加IP类型后端**
   1. 进入后端服务器组列表页面。
   
   2. 单击页面右上角"创建后端服务器组"按钮。
   
   3. 配置后端分配策略。
      关键参数配置如下：
      
      | **参数** | **示例**   | **说明**                        |
      |:---|:---|:---|
      | 名称          | server_group | 后端服务器组名称。                         |
      | 实例类型        | 独享型          | 与ELB实例类型匹配。                       |
      | 所属负载均衡器     | 关联已有         | 选择已创建的ELB实例。                      |
      | 后端协议        | HTTP         | 根据后端业务协议选择，可选HTTP/HTTPS/TCP/UDP等。 |
      | 分配策略类型      | 加权轮询算法       | 负载均衡调度算法。                         |
         
      
   
   4. 单击"下一步"，添加后端服务器并配置健康检查。
   
   5. 切换到"IP类型后端"页签，单击"添加"。
   
   6. 在添加IP类型后端页面配置相关参数。
      
      | **参数** | **示例** | **说明**                          |
      |:---|:---|:---|
      | IP类型后端IP | x.x.x.x    | 填写后端目的服务器的公网IP地址，ELB将根据该IP地址转发流量。 |
      | 业务端口     | 80         | 后端服务器业务监听端口。                      |
      | 权重       | 1          | 后端服务器权重，默认1。                      |
         
      
   
   
   
   7. 单击"确定"，完成IP类型后端的添加。
   
   8. 保持健康检查开启，其余健康检查参数保持默认。
   
   9. 单击"下一步"，确认配置后单击"立即创建"。
    
4. **添加监听器并选择后端服务器组**
   1. 进入弹性负载均衡列表页面。
   
   2. 在目标ELB实例的操作列，单击"添加监听器"。
      关键参数配置如下：
      
      | **参数** | **示例** | **说明**  |
      |:---|:---|:---|
      | 前端协议       | HTTP     | 监听器接收请求的协议。 |
      | 监听端口       | 80       | 监听器接收请求的端口。 |
         
      
   
   3. 单击"下一步：配置后端分配策略"。
   
   4. 后端服务器组选择"使用已有"，选择[3]创建的后端服务器组server_group。
   
   5. 单击"下一步：确认配置"。
   
   6. 确认配置无误后，单击"提交"。
    
5. **（可选）配置安全组和网络ACL**
   根据业务需要，确保以下网络访问策略已正确配置：
   
   | **方向** | **源/目的** | **协议** | **端口** | **说明**                |
   |:---|:---|:---|:---|:---|
   | 入方向       | 0.0.0.0/0    | TCP       | 80        | ELB允许客户端请求接入（安全组/网络ACL）。 |
   | 出方向       | 0.0.0.0/0    | TCP       | 80        | ELB允许向后端服务器转发请求。         |
   | 后端服务器入方向  | SNAT-EIP     | TCP       | 80        | 后端服务器允许来自SNAT-EIP的请求。    |
      
   ![](https://support.huaweicloud.com/bestpractice-elb/public_sys-resources/note_3.0-zh-cn.png)
   由于ELB转发流量经NAT网关SNAT转换后，后端服务器看到的源IP为SNAT-EIP，因此后端服务器的安全组需放通来自SNAT-EIP的访问。
   
 
#### 配置验证
- **通过客户端ECS验证**
  1. 远程登录客户端ECS-client。
  
  2. 执行以下命令测试连通性： **curl -v http://\<ELB-EIP\>:\<监听端口\>**
     
  
  
  
  3. 如果成功收到后端服务器返回的业务响应内容（如Nginx默认欢迎页），表明ELB已成功通过公网将请求转发至后端服务器。
   
- **通过浏览器验证**
  使用浏览器访问http://\<ELB-EIP\>，若页面显示后端服务器的业务内容，说明请求已被ELB实例通过SNAT成功转发到后端目的服务器。
  
- **验证SNAT转换**
  在后端服务器上查看访问日志，确认请求的源IP为NAT网关的SNAT-EIP（而非ELB的私网IP），说明流量经过了NAT网关的SNAT转换。
  
 
#### 常见问题
- **客户端访问ELB无响应**
  - 检查ELB监听器配置是否正确
  
  - 检查ELB-EIP是否绑定成功
  
  - 检查后端服务器组中是否已添加IP类型后端
   
- **ELB健康检查异常**
  - 检查后端服务器是否正常运行并监听对应端口
  
  - 检查后端服务器安全组是否放通了来自SNAT-EIP的访问
  
  - 检查健康检查配置的协议和端口是否与后端业务一致
   

- **后端服务器收不到请求**
  - 确认NAT网关SNAT规则已正确配置，且覆盖ELB的后端子网
  
  - 确认NAT网关状态为"运行中"
  
  - 在后端服务器上抓包确认是否有来自SNAT-EIP的请求
   

- **请求响应延迟较大**
  - 公网链路本身存在一定延迟，对比私网直连场景评估
  
  - 检查NAT网关规格是否满足流量需求
  
  - 检查后端服务器负载是否过高
   
 
