在传统的网络结构中,每个子网都有一个网关,子网内的主机通过这个网关进行上网,网关进行地址转换,修改IP报文的源地址等,具体的原理有兴趣的百度一下就知道了。 在传统机房内几乎都是有路由器的,而路由器也自带网关的功能,基本用不到自建NAT,但是在如今横行的公有云中,却是有着很大的需求,例如阿里云,阿里云内网中没有公网IP的电脑如何通过有公网IP的电脑进行上网,这就需要NAT网关。其他公有云也类似,这里以阿里云进行举例

在阿里云的传统网络中,是不支持自建NAT网关,配置SNAT的。只有在专有网络VPC中,才可以。而其实在专有网络中,内网的主机的网络设置,比如网关也是无法修改的,路由表也没法添加修改。根本没办法将内网主机的网关设为专有网络内带有公网IP的主机。 只能通过专有网络中的虚拟路由器,在路由器中添加路由,通过将所有目标请求都指定下一跳到有公网IP的ecs上,这样才可以将内网中的ecs请求都发到有公网ip的ecs上。 实现步骤如下: ## 进入阿里云控制台,专有网络,路由器,创建路由表: centos7 <wbr>利用firewalld自建NAT网关 目标网段设为所有:0.0.0.0/0 下一跳指定ecs实例为专有网络内有公网IP的ecs实例。 ## 在指定的带有公网IP的实例上操作,启动NAT网关的SNAT源地址转换功能。 ## 开启firewalld防火墙,默认是关闭的。 $ systemctl enable firewalld $ systemctl start firewalld ## 网卡默认是在public的zones内,也是默认zones。永久添加源地址转换功能 $ firewall-cmd --add-masquerade --permanent $ firewall-cmd --reload ## 添加网卡的ip转发功能,添加如下配置 $ vim /etc/sysctl.conf ---------------------------------------------------------------------------------------------------------- net.ipv4.ip_forward=1 ---------------------------------------------------------------------------------------------------------- ## 重载网络配置生效 $ sysctl -p OK,到此,自建NAT网关成功,实现了内网主机通过这台机进行上网,而反向的DNAT端口转发也是可以通过firewalld的端口转发功能来实现。 这样就不需要买阿里云的收费NAT网关了。 另:如果不是公有云主机,而是本机机房的话,那就更简单了: ##直接类似的开启可以访问网络的主机的firewalld防火墙源地址转化功能,和网卡的ip_forward转发功能。 ## 内网电脑只需修改网关,指定网关为配置了snat功能的电脑,则可以通过改电脑访问网络。 $ vim /etc/sysconfig/network-scripts/ifcfg-exxxxx ---------------------------------------------------------------------------------------------------------- GATEWAY="192.168.9.2" DNS1="xxx.xxx.xxx.xxx" (跟网关服务器的dns相同) ---------------------------------------------------------------------------------------------------------- ## 重启网络配置,生效 $ systemctl restart network OK,到此,自建NAT网关就顺利完成。

阿里云通过vpn映射到内网

//开启端口转发

iptables -t nat -A POSTROUTING -j MASQUERADE

//将172.17.63.105的82端口转发到192.168.200.116的80端口

iptables -t nat -A PREROUTING --dst 172.17.63.105 -p tcp --dport 82 -j DNAT --to-destination 192.168.200.116:80