简介:搭建NAT网关就是为了实现在相同VPC内,没有公网IP的ECS借助有公网的ECS访问外网,或者是外网通过端口映射访问到内网服务器。

SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网,但是外网无法访问到内网IP;

DNAT:实现外网通过端口映射访问到内网服务器,但是不能实现内网ECS访问到外网。

一、搭建SNAT(在有公网EIP的服务器上操作)

[root@master-03 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@master-03 ~]# vim /etc/sysctl.conf
[root@master-03 ~]# sysctl -p
vm.swappiness = 0
kernel.sysrq = 1
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_forward = 1

配置iptables做SNAT(在有公网EIP的服务器上操作)

[root@master-03 ~]# iptables -t nat -I POSTROUTING -s 172.16.0.0/12 -j SNAT --to-source 172.19.19.26

配置VPC,添加0.0.0.0/0地址段(在有云服务器VPC操作控制台上操作)

各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图1)

验证,ping域名即可(在无公网EIP的服务器上操作)

各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图2)

至此,搭建SNAT实现没有公网EIP的阿里云ECS(适用于各大云商云服务器产品)实例借助有公网的ECS云服务器访问外网,但是外网无法访问到内网IP(此配置本地无法访问到内网的);如若想访问到云服务器内网,需借助DNAT来实现,配置如下。

二、搭建DNAT环境

首先,在有公网EIP的服务器上操作

[root@master-03 ~]# iptables -t nat -I PREROUTING -p tcp --dport 22 -j DNA

命令分解: iptables -t nat -I PREROUTING -p tcp --dport 外网IP的ECS端口 -j DNAT --to 只有内网IP的ECS的IP:端口
各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图3)

如若前后端口映射不一致,需在/etc/sysconfig/iptables文件nat表的dnat转发规则(目标IP)后面,直接加特定的端口号即可

云服务器无公网EIP访问外网,搭建(NAT网关)教程(图4)

再配置VPC,添加0.0.0.0/32地址段(在有云服务器VPC操作控制台上操作)

各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图3)

验证,用xssh终端软件,公网IP+22连接(注意,有公网EIP主机我这里默认是66端口),22作为无公网IP的转发端口使用;

各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图5)三、各大云商自带NAT网关产品

各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图6)
各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图7)
各大云服务器无外网EIP访问外网(NAT网关)搭建教程(图8)

创建相关条目规则即可,云商都有相应帮助手册不过多赘述。

四、iptables防火墙常用命令

iptables规则重启会清空,如若永久生效,还需要保存在iptables配置文件中

[root@master-03 ~]# service iptables save           #保存配置

# 如果没有安装iptables
[root@master-03 ~]# service iptables status           #检查是否安装了iptables 
[root@master-03 ~]# yum install -y iptables           #安装iptables 
[root@master-03 ~]# yum update iptables           #升级iptables 
[root@master-03 ~]# yum install iptables-services           #安装iptables-services 
[root@master-03 ~]# systemctl enable iptables.service           #设置防火墙开机启动

NAT网关学习篇总结:

适用于不同场景,主要注意iptables规则冲突;如果云服务器内安装了docker,docker自带的nat转发规则会有影响,需要合理的网段规划和路由规划。
外网端口占用过大,加上需要部署如:Rancher这种容器集群平台的,推荐搭建使用云商产品型-NAT网关,以绑定弹性公网IP的方式实现,这样就不需要占用云服务器实例上的公网端口;如果说小微型企业,小型VPC企业主等可以考虑以降低上云成本最佳;