阿里云ECS实现内网服务器访问外网

前言

由于业务需要,需要多台云服务器,但是公有云的带宽价格不菲,所以不可能给所有的云服务器都配上公网IP,一方面是成本的问题,另一方面也是公网安全的问题。

所以通过其它的方式使用无公网的云服务器来来实现对外资源的访问。

一、操作步骤

至少需要有一台具有公网IP的云服务器!

1、开启ECS的路由转发功能

在有公网的ECS上操作

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p

注:开启了路由转发功能,可能会影响到某些部署的应用,例:Grafana会访问报错。

2、配置IPTABLES的NAT转发规则

使用的是内网的ip段,我的ip段是192.168.20.0段,根据实际情况进行更改。

# iptables -t nat -I POSTROUTING -s 192.168.20.52/32 -j SNAT --to-source 192.168.20.50

# 根据需要进行放通,192.168.20.52/32表示只匹配这一个ip,也可以写整个网段,192.168.20.50表示出去的那台公网服务器的内网ip。

3、查看规则

# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere            !loopback/8           ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.20.52                anywhere             to:192.168.20.50


# 根据需要是否要保存iptables的规则

4、配置阿里云控制台

打开专有网络---路由表---实例名称---添加路由条目

5、测试

# ping www.jd.com
PING jd-abroad.cdn20.com (222.132.143.108) 56(84) bytes of data.
64 bytes from 222.132.143.108 (222.132.143.108): icmp_seq=1 ttl=48 time=32.0 ms
64 bytes from 222.132.143.108 (222.132.143.108): icmp_seq=2 ttl=48 time=32.0 ms
64 bytes from 222.132.143.108 (222.132.143.108): icmp_seq=3 ttl=48 time=32.0 ms

# ping通表示内网ECS实现对外资源访问了。

参考文章:三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则-阿里云开发者社区 (aliyun.com)

欢迎关注我的CSDN个人博客知乎

posted @ 2023-11-10 15:53  hmiking  阅读(659)  评论(3编辑  收藏  举报