场景概述
公司计划在阿里云云上部署一套微服务应用,在规划资源布局时,云服务资源排布是必经之路。因此,作为运维要为企业成本考虑之一,即是砍掉云服务器公网EIP地址,实现分布式内网互通,统一网关出口的策略。

示意图,仅供参考
[root@data ~]# vim /etc/sysctl.conf
或者
# 开启转发
[root@data ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 刷新生效
[root@data ~]# sysctl -p修改net.ipv4.ip_forward = 1 //确保值为1,如若没有这一条,手动加保存

二、设置阿里云VPC路由规则
此步骤在阿里云VPC管理界面操作,地址如下:https://vpc.console.aliyun.com/vpc/cn-qingdao/route-tables,单机路由实例即可进入下图界面,其中目标网段一定要填0.0.0.0/0,ECS实例选择具有公网IP的那个实例

三、配置Iptables 的NAT转发规则
#执行生效
[root@data ~]# iptables -t nat -I POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 172.16.107.49
#永久生效,保存配置文件
[root@data ~]# service iptables save
注解:iptables -t nat -I POSTROUTING -s 【VPC的IP段】 -j SNAT --to-source 【有公网IP的ECS内网IP】查看iptables配置文件,就会发现多了一条nat表的snat转发规则
[root@data ~]# cat /etc/sysconfig/iptables
重启iptables服务
[root@data ~]# systemctl restart iptables.service至此,无公网IP的阿里云ECS服务器可以访问外网了。
[root@data ~]# iptables -t nat -I PREROUTING -p tcp --dport 443 -j DNAT --to 172.16.16.16
[root@data ~]# iptables -t nat -I POSTROUTING -p tcp --dport 443 -j MASQUERADE
#永久生效,保存配置文件
[root@data ~]# service iptables save
注解
iptables -t nat -I PREROUTING -p tcp --dport 【有公网IP的ECS端口号】 -j DNAT --to 【目标内网ECS的内网IP】
iptables -t nat -I POSTROUTING -p tcp --dport 【有公网IP的ECS端口号】 -j MASQUERADE此示例中,是把有公网IP的ECS 443端口映射到了172.16.16.16这个内网实例的443端口
如果需要前后端口映射不同端口,配置如下vim /etc/sysconfig/iptables内的目标IP后面直接加特定的端口号就行
[root@data ~]# vim /etc/sysconfig/iptables
修改无公网IP服务器的内网地址后加端口号,重启即可
查看iptables配置文件,就会发现多了一条nat表的dnat转发规则
[root@data ~]# cat /etc/sysconfig/iptables
重启iptables服务
[root@data ~]# systemctl restart iptables.service
验证如果不生效,请检查是否是同一VPC内,iptables规则是否有冲突。如果ECS内安装了docker,docker自带的nat转发规则会有影响,需要合理的网段规划和路由规划。service iptables status #检查是否安装了iptables
yum install -y iptables #安装iptables
yum update iptables #升级iptables
yum install iptables-services #安装iptables-services
systemctl disable iptables #禁止iptables服务
systemctl stop iptables #暂停服务
systemctl enable iptables #解除禁止iptables
systemctl start iptables #开启服提示:如遇链接失效,请在评论区留言反馈