基于ECS自建SNAT服务器实现多个ECS共享EIP访问公网
操作场景
当您在使用VPC的路由表功能时,需要在弹性云服务器上部署SNAT,使得VPC内其他没有绑定EIP的弹性云服务器可以通过它访问Internet。
该配置对VPC内所有子网生效。
前提条件
- 已拥有需要部署SNAT的弹性云服务器。
- 待部署SNAT的弹性云服务器操作系统为Linux操作系统。
- 待部署SNAT的弹性云服务器网卡已配置为单网卡。
SNAT服务器与NAT网关服务差异
NAT网关(NAT Gateway)能够为虚拟私有云内的云主机(弹性云服务器、裸金属服务器、云桌面)或者通过云专线/VPN接入虚拟私有云的本地数据中心的服务器,提供网络地址转换服务,使多个云主机可以共享弹性公网IP访问Internet或使云主机提供互联网服务。
对比SNAT服务器实例,NAT网关具有配置简单、灵活易用、支持跨子网部署、跨可用区部署、支持多种网关规格等优势,您可以在管理控制台选择“网络 > NAT网关”进行体验。
更多内容请参见《NAT网关用户指南》。
操作步骤
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域和项目。
- 在页面左上角单击图标,打开服务列表,选择“计算 > 弹性云服务器”。
- 在右侧弹性云服务器界面,单击需要设置SNAT的弹性云服务器名称,进入弹性云服务器详情页面。
- 在弹性云服务器详情页面单击“弹性网卡”页签。
- 单击网卡IP地址,在展开的网卡详情区域内设置“源/目的检查”状态为“关闭”。
默认情况下,“源/目的检查”状态为“启用”,系统会检查弹性云服务器发送的报文中源IP地址是否正确,否则不允许弹性云服务器发送该报文。这有助于防止伪装报文攻击,提升安全性。但在SNAT场景中,SNAT实例起转发作用,这种保护机制会导致报文的发送者无法接收到返回的报文。这种保护机制可以通过设置“源/目的检查”状态为禁用。
- 绑定EIP。
- 为弹性云服务器的私有IP绑定EIP。详情请参见将弹性公网IP绑定至实例。
- 为弹性云服务器的虚拟IP绑定EIP,详情请参见将虚拟IP绑定至实例或者EIP。
- 打开待配置SNAT弹性云服务器详情页面,通过remote login登录服务器。
- 执行如下命令,输入root密码,切换至root。
- 执行如下命令,检测弹性云服务器是否可以正常连接Internet。
执行如下命令前,关闭SNAT服务器上相应的IPtables 规则,开放安全组规则。
ping support.huawei.com
回显如下所示,表示弹性云服务器可以正常连接Internet。[root@localhost ~]# ping support.huawei.com PING support.huawei.com (xxx.xxx.xxx.xxx) 56(84) bytes of data. 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=51 time=9.34 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=51 time=9.11 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=51 time=8.99 ms
- 执行如下命令,查看Linux操作系统的IP转发功能是否已开启。
cat /proc/sys/net/ipv4/ip_forward
许多操作系统支持路由报文。操作系统需要在转发报文前将报文的源IP地址转换成操作系统的IP地址,因此,发送的报文带有公共发送者的IP地址,而返回的报文能够原路返回,这种方式称为SNAT。操作系统需要跟踪转换过IP地址的报文,确保返回的报文中目的IP地址可以被重写,且报文能够转发给原始的报文发送者。这一过程实现需要启用IP转发功能,并设置SNAT规则。
- 使用vi打开“/etc/sysctl.conf”文件,修改net.ipv4.ip_forward = 1,按“:wq”保存退出。
- 执行如下命令,使修改生效。
- 配置SNAT。
执行如下命令,允许网段(例如:192.168.1.0/24)内所有ECS访问外网。示例如图1所示。
iptables -t nat -A POSTROUTING -o eth0 -s subnet -j SNAT --to nat-instance-ip
如需实现重启后规则不丢失,则需把规则写在/etc/rc.local文件中。
- 执行以下命令进入/etc/rc.local文件。
- 执行14配置SNAT
- 执行以下命令保存并退出。
- 执行以下命令添加rc.local文件的执行权限。
- 执行如下命令,查看是否配置成功。如图2所示,则表示配置成功(例如:192.168.1.0/24)。
iptables -t nat --list
- 添加自定义路由,详见在路由表中添加路由。
目的地址是0.0.0.0/0,下一跳地址是SNAT服务器的私有IP或者虚拟IP(例如:192.168.1.4)。
按以上操作完成配置后,如果出现网络不通等情况,请检查您的安全组、网络ACL配置,是否放通了对应流量。