阿里云首页

阿里云VPC环境中如何通过ECS绑定EIP实现SNAT和DNAT功能

概述

本文主要介绍在阿里云VPC环境中,使用EIP绑定到ECS实例结合iptables的路由转发功能,分别实现SNAT功能和DNAT功能。

详细信息

以下步骤分两种功能(SNAT和DNAT)的应用场景分别介绍如下:

实现SNAT

同一VPC下存在多台ECS实例,对其中1台进行绑定EIP后,另外的ECS通过绑定EIP的ECS实例进行访问外网。

  1. 绑定同一VPC下的其中1台ECS实例,EIP如何绑定到ECS实例,请参考绑定ECS实例
  2. 使用SSH终端工具,如Xshell等,执行以下命令,登录绑定EIP的ECS实例。
    ssh root@[$IP]
    说明:[$IP]为绑定的EIP。
  3. 依次执行以下命令,开启系统的IP转发功能。
    sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
    sysctl -p
    系统显示类似如下。
  4. 执行以下命令,实现SNAT转换。
    iptables -t nat -I POSTROUTING -s [$Intranet_CIDR] -j SNAT --to-source [$Intranet_IP]
    说明:
    • [$Intranet_CIDR]为内网网段,例如:172.16.X.0/24。
    • [$Intranet_IP]为绑定EIP的ECS实例的内网IP地址。
  5. 登录专有网络控制台,添加目标网段为0.0.0.0/0的路由。如何添加路由,请参考添加自定义路由条目
    说明:下一跳ECS实例,选择绑定EIP的ECS实例。
  6. 登录和绑定EIP的ECS实例同一VPC的实例,查看IP地址,执行以下命令,确认是内网地址。
    ifconfig eth0
    系统显示类似如下。
  7. 执行以下命令,确认实例可以访问外网。
    curl -I http://www.aliyun.com
    系统显示类似如下。
  8. 依次执行以下命令,关闭绑定EIP的ECS实例的IP转发功能。
    sed -i 's/net.ipv4.ip_forward = 1/net.ipv4.ip_forward = 0/g' /etc/sysctl.conf
    sysctl -p
    系统显示类似如下。
  9. 登录和绑定EIP的ECS实例同一VPC的实例,执行以下命令,确认不可以访问外网。
    ping -c 2 www.taobao.com
    系统显示类似如下。

实现DNAT

通过映射后端服务,提供外部访问,请参考以下步骤执行:

  1. 如何绑定EIP并开启IP转发功能,请参考实现SNAT的前三步。
  2. 执行以下命令,实现DNAT转换。
    iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to [$Destination_IP]
    说明:[$Destination_IP]为需要转发到请求的目的IP地址,非绑定EIP的ECS实例IP。
  3. 登录转发到的ECS实例,执行以下命令,让转发的数据包实现“双向通路”。
    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
  4. 登录转发到的ECS实例,依次执行以下命令,查看转发到的实例IP。
    ifconfig eth0
    curl localhost
    系统显示类似如下。

  5. 使用浏览器访问EIP地址,显示被转发到的ECS实例IP。

适用于

  • 弹性公网 IP
  • 云服务器 ECS
  • 专有网络 VPC
首页 阿里云VPC环境中如何通过ECS绑定EIP实现SNAT和DNAT功能