阿里云VPC网络内网实例通过SNAT连接外网
场景:
1、有多个ECS实例,其中A实例有公网IP,可以上外网
其它实例没有公网IP,不能上外网
2、所有实例在一个交换机,也就是一个网络(172.16.0.0/16)
实例 | 内网IP | 外网IP |
---|---|---|
A | 172.16.117.22 | 120.27.240.92 |
B | 172.16.117.23 | 无 |
目的:
实现实例B可以通过实例A上外网
以下所有操作都是在实例A操作;最后添加路由条目是在阿里云控制台。(需要上网的实例,不用做任何操作)
修改内核参数,开启转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
查看是否生效,如果值是1,表示已开启转发
cat /proc/sys/net/ipv4/ip_forward
配置iptables
iptables -t nat -I POSTROUTING -s 172.16.117.0/24 -j SNAT --to-source 172.16.117.22
查看是否添加成功
iptables -L -n -t nat
在阿里云后台的vpc添加路由
点击专有网络VPC---->路由表---->选择所属专有网络(172.16.0.0/16)所在路由实例,点击管理---->添加路由条目---->目标网端:0.0.0.0/0 ---->下一跳:ESC实例,资源组:全部,ESC实例:选实例A的实例ID---->确定
测试
在实例B直接测试,到此已可以直接连接外网
重启后依旧生效
1、保存规则
sudo chmod a+w -R /opt
sudo iptables-save > /opt/iptables.rules
2、重启后手动导入规则
sudo iptables-restore < /opt/iptables.rules