# 无公网IP的弹性云服务器访问Internet
#### 操作场景
为保证安全和节省公网IP资源，通常只为特定的弹性云服务器配置公网IP，可直接访问Internet，其他弹性云服务器只配置私网IP，无法直接访问Internet。
因此，当只配置了私网IP的弹性云服务器需要访问Internet，执行软件升级、给系统打补丁或者其他需求时，可选择以下方案：
- [（推荐）通过NAT（NAT Gateway）网关服务]
  NAT网关能够为VPC内的弹性云服务器提供SNAT和DNAT功能，通过灵活简易的配置，即可轻松构建VPC的公网出入口，实现多个弹性云服务器共享弹性公网IP访问Internet或使弹性云服务器对互联网提供服务。
  
- [通过Linux操作系统的代理主机]
  如果您已拥有一台绑定了EIP的弹性云服务器，可将该弹性云服务器作为代理，为同一网段且同一安全组内的其他无公网IP的云服务器提供访问通道，正常访问Internet。
  
 
#### 约束与限制
表1约束与限制 
| 约束项   | 通过NAT（NAT Gateway）网关服务                                                                                                                                                            | 通过Linux操作系统的代理主机                                                                                                                                                                                     |
|:---|:---|:---|
| 服务依赖 | 依赖NAT网关的SNAT和DNAT功能                                                                                                                                                             | 不涉及                                                                                                                                                                                                   |
| 资源依赖  | - 弹性公网IP  - 公网NAT网关：与需要访问Internet的弹性云服务器处于同一VPC内   | - 弹性公网IP  - 代理弹性云服务器：已绑定弹性公网IP，且与需要访问Internet的弹性云服务器处于同一网段、同一安全组内   |
| 支持的状态 | 运行中                                                                                                                                                                             | 运行中                                                                                                                                                                                                  |
   
#### 前提条件
- 通过NAT（NAT Gateway）网关服务
  - 已购买弹性公网IP。
  
  - 已购买和其他需要访问Internet的弹性云服务器处于同一VPC内的公网NAT网关。
   
- 通过Linux操作系统的代理主机
  - 已拥有一台绑定了公网IP的弹性云服务器作为代理弹性云服务器。
  
  - 代理弹性云服务器和其他需要访问Internet的弹性云服务器均处于同一网段，并且在同一安全组内。
   
 
 #### （推荐）通过NAT（NAT Gateway）网关服务
表2NAT网关操作指引 
| 操作场景                   | 网关规则  | 相关链接                                                                                        |
|:---|:---|:---|
| 无公网IP的弹性云服务器访问Internet | SNAT | [通过公网NAT网关的SNAT规则访问公网](https://support.huaweicloud.com/qs-natgateway/nat_qs_0001.html)      |
| 无公网IP的弹性云服务器对互联网提供服务  | DNAT | [通过公网NAT网关的DNAT规则面向公网提供服务](https://support.huaweicloud.com/qs-natgateway/nat_qs_0006.html) |
   
 #### 通过Linux操作系统的代理主机
本节操作中，以代理弹性云服务器的操作系统是CentOS 7.9为例进行介绍，适用于CentOS 7.9及以下版本、Huawei Cloud EulerOS 2.0版本。
其他操作系统及版本，请您参考对应官网帮助文档进行配置，或采用[（推荐）通过NAT（NAT Gateway）网关服务]。
1. **关闭代理弹性云服务器的"源/目的检查"选项。**
   1. 登录[ECS控制台](https://console.huaweicloud.com/ecm/?#/ecs/manager/vmList)，进入弹性云服务器列表页面。
   
   2. 在弹性云服务器列表中的右上角，输入代理云服务器名称进行搜索。
   
   3. 单击代理弹性云服务器的名称，查看详情。
   
   4. 在代理弹性云服务器详情页面，选择"弹性网卡"页签，并展开![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0128851717.png)，关闭"源/目的检查"选项。
      图1关闭"源/目的检查"   
      ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001883532348.png "点击放大")
      默认情况下，"源/目的检查"状态为"启用"，系统会检查弹性云服务器发送的报文中源IP地址是否正确，否则不允许弹性云服务器发送该报文。这有助于防止伪装报文攻击，提升安全性。但在该场景中，这种保护机制会导致报文的发送者无法接收到返回的报文。因此，需设置"源/目的检查"状态为禁用。
      
    

2. **为代理弹性云服务器配置SNAT。**
   1. 登录代理弹性云服务器。 详细操作方法请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
      
   
   2. 执行以下命令，检测代理弹性云服务器是否可以正常连接Internet。 **ping www.huaweicloud.com**
      回显包含类似如下信息时，表示代理弹性云服务器可正常连接Internet。
      图2检测是否可以正常连接Internet   
      ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0098681001.png "点击放大") 
   
   3. （可选）执行以下命令，安装iptables服务并配置iptables服务开机自启动。 仅CentOS 7.x版本的弹性云服务器，需要执行此步骤。
      **yum install iptables-services -y**
      **systemctl start** **iptables**
      **systemctl enable iptables**
      
   
   4. 执行以下命令，查看代理弹性云服务器的IP转发功能是否开启。 **cat /proc/sys/net/ipv4/ip_forward**
      - 回显为"0"表示关闭，请执行[2.e]。
      
      - 回显为"1"表示开启，请执行[2.j]。
       
   
   5. 执行以下命令，打开IP转发功能配置文件。
      **vi /etc/sysctl.conf**
      
   
   6. 按"i"，进入编辑模式。
   
   7. 修改如下参数的值。 将参数"net.ipv4.ip_forward "的值修改为"1"。
      ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
      如果"sysctl.conf"文件中不存在参数"net.ipv4.ip_forward "，执行以下命令进行添加：
      **echo net.ipv4.ip_forward=1 \>\> /etc/sysctl.conf**
      
   
   8. 按"Esc"，输入**:wq** ，按"Enter"。
      保存设置并退出vi编辑器。
      
   
   9. 执行以下命令，使配置文件修改生效。 **sysctl -p /etc/sysctl.conf**
      
   
   10. 执行以下命令，清除原有iptables规则。
       **iptables -F**
       
   
   11. 执行以下命令，配置SNAT，使代理弹性云服务器所在的网段内其他弹性云服务器可通过代理弹性云服务器访问Internet。
       **iptables -t nat -A POSTROUTING -o eth0 -s** ***subnet/netmask-bits*** **-j SNAT --to** ***nat-instance-ip***
       假设代理弹性云服务器所在的网段为192.168.125.0，子网掩码为24位，私网IP地址为192.168.125.4，则执行如下命令。
       **iptables -t nat -A POSTROUTING -o eth0 -s** ***192.168.125.0/24*** **-j SNAT --to 192.168.125.4**
       ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
       为了确保重启后上述规则不丢失，可以执行**vi /etc/rc.local** 编辑**rc.local** 文件，将[2.k]中的规则复制到**rc.local**文件，按"ESC"退出编辑模式，输入":wq"保存并退出。
       
   
   12. 执行以下命令，保存iptables的配置并设置开机自启动。 **service iptables save**
       **chkconfig iptables on**
       1. 执行以下命令，查看SNAT配置是否成功。 **iptables -t nat --list**
          回显类似如[图3]所示时，表示SNAT配置成功。
          图3SNAT配置成功   
          ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0027174005.png "点击放大") 
        
    

3. **在弹性云服务器所属VPC的路由表中添加自定义路由。**
   1. 登录[VPC控制台](https://console.huaweicloud.com/vpc/?#/vpc/vpcs/list)，进入路由表列表页面。
   
   2. 选择需要添加路由表的虚拟私有云，单击"路由表"列的数字，进入路由表列表页面。
   
   3. 单击路由表名称，进入路由表详情页面。
   
   4. 在路由列表上方，单击"添加路由"。
   
   5. 根据界面提示，填写路由信息。
      - 目的地址：是目的网段，默认是0.0.0.0/0。
      
      - 下一跳地址：是代理弹性云服务器的私有IP地址。 您可以在弹性云服务器页面，查看该弹性云服务器的私有IP地址。
        
       
   
   6. 单击"确定"，完成自定义路由的添加。
    
4. **如需删除添加的iptables规则，需执行以下命令。**
   **iptables -t nat -D POSTROUTING -o eth0 -s** ***subnet/netmask-bits*** **-j SNAT --to** ***nat-instance-ip***
   假设代理弹性云服务器所在的网段为192.168.125.0，子网掩码为24位，私网IP地址为192.168.125.4，则执行如下命令。
   **iptables -t nat -D POSTROUTING -o eth0 -s 192.168.125.0/24 -j SNAT --to 192.168.125.4**
   
 
