阿里云、华为云、腾讯云 …… 等云服务商上都有 ECS 服务器,高额的弹性IP和带宽费用使我们不可能为每一台服务器都购买和配置一个弹性IP。
一般我们为其中一台 ECS 服务器绑定弹性IP,但是我们更多时候还希望其他同一个私网的 ECS 机器也能访问互联网,比如和第三方API交互等。
本例以华为云为例,其他云服务商逻辑相同。
1、拥有同一组私网网络的一组云服务器 ECS,这一组服务器引用了同一个私网vpc,我们需要给这个vpc添加一个路由。
2、需要借助有弹性公网IP的服务器做路由转发工作,所以要将这一台服务的 “源/目的检查” 选项关闭。
3、ssh 登录拥有弹性公网IP的服务器,通过命令开启 ip 转发并配置 iptables 规则。
图中的内外网IP均为随便写的IP,如与第三方服务IP相同,纯属巧合。
执行以下命令配置 iptables 的 SNAT 规则:
【或者】如果你服务器有多个网口(单个也可以指定,多个则建议指定),你需要明确指定出口的网口名称,如下例通过 -o 参数明确 eth0 网卡:
【或者】动态获取 eth0 网卡的IP地址,这样 eth0 的IP 地址就算变动也不受影响
其中 192.168.0.0/24 是VPC的网段,192.168.0.138 是VPC内绑定外网EIP的的内网IP。
其中 添加的规则放在现有规则的最前面, 放在现有规则的最后,是都可以的。
配置完成后,到其他同一个 vpc 私网的服务器上验证一下网络就正常了。
下面这一行是一个同时匹配源地址和目标地址范围的示例(其中 tun0 为某虚拟专网拨号后的网卡名称):
附-删除规则:
查看所有 iptables snat 清单并列出每条规则的序号,序号可以在删除规则时指定序号删除
删除指定的规则命令
注意:进行删除操作的时候,建议从序号大的开始删除,因为每删除一个后,所有的需求都会依序重新排列,比如你把 1 删除后,原来的 2 就变成 1 了。