配置SNAT服务器
操作场景
当您在使用VPC的路由表功能时,需要在弹性云服务器上部署SNAT,使得VPC内其他没有绑定EIP的弹性云服务器可以通过它访问Internet。
该配置对VPC内所有子网生效。
前提条件
- 已拥有需要部署SNAT的弹性云服务器。
- 待部署SNAT的弹性云服务器操作系统为Linux操作系统。
- 待部署SNAT的弹性云服务器网卡已配置为单网卡。
操作步骤
- 登录管理控制台。
- 在页面左上角单击图标,打开服务列表,选择“计算 > 弹性云服务器”。
- 在右侧弹性云服务器界面,单击需要设置SNAT的弹性云服务器名称,进入弹性云服务器详情页面。
- 在弹性云服务器详情页面单击“网卡”页签。
- 单击网卡IP地址,在展开的网卡详情区域内设置“源/目的检查”状态为“关闭”。
默认情况下,“源/目的检查”状态为“启用”,系统会检查弹性云服务器发送的报文中源IP地址是否正确,否则不允许弹性云服务器发送该报文。这有助于防止伪装报文攻击,提升安全性。但在SNAT场景中,SNAT实例起转发作用,这种保护机制会导致报文的发送者无法接收到返回的报文。这种保护机制可以通过设置“源/目的检查”状态为禁用。
- 绑定EIP。
- 为弹性云服务器的私有IP绑定EIP,详情请参见为弹性云服务器申请和绑定弹性IP。
- 为弹性云服务器的虚拟IP绑定EIP,详情请参见为虚拟IP地址绑定弹性IP或弹性云服务器。
- 打开待配置SNAT弹性云服务器详情页面,通过remote login登录服务器。
- 执行如下命令,输入root密码,切换至root。
- 执行如下命令,检测弹性云服务器是否可以正常连接Internet。
执行如下命令前,关闭SNAT服务器上相应的IPtables 规则,开放安全组规则。
ping www.google.com
回显如下所示,表示弹性云服务器可以正常连接Internet。[root@localhost ~]# ping www.google.com PING www.google.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)内所有弹性云服务器内访外配置。实例如图1所示。
iptables -t nat -A POSTROUTING -o eth0 -s subnet -j SNAT --to nat-instance-ip
如需实现重启后规则不丢失,则需把规则写在/etc/rc.local文件中。
- 执行以下命令进入/etc/rc.local文件。
- 执行13配置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配置,是否放通了对应流量。