DTeam 团队日志

Doer、Delivery、Dream

阿里云VPC环境内网服务器如何访问外网

冯宇 Posted at — Aug 16, 2018 阅读

首先必须吐槽一下阿里云的VPC环境,叫虚拟路由器却不提供互联网访问的功能,非得用户DIY(也可能是希望用户买它的弹性ip)。

但是很多情况下我们在云上的环境就跟本地内网环境差不多——对外有一台路由器,内部所有的服务器都在内网环境中,通过端口映射将服务暴露给外网用户。那么VPC能否模拟这个场景呢?

或者是仅仅想让内网服务器可以访问到外网?答案是可以的。

环境准备

PS: 阿里云的固定带宽模式计费其实相当的贵,经过我的计算,10M固定带宽一个月产生的费用如果换成流量计费的话基本和每天20GB流量的价格持平。绝大多数服务器的日均流量恐怕达不到这个水平。所以大多数场景下我建议选择流量计费方式,会省很多钱。

操作方式

其实就是配置软路由了,如果用NAT的话是现成的。如果用ECS做软路由的话需要自己动手,比如我这里的场景:

image.png

配置如下:

目前代理服务器有外网ip,所以可以访问外网,windows服务器没有外网Ip,直接访问外网不通。

配置软路由器

这套网络环境最主要的解决方案就是实现一台软路由器,可以访问外网,因此有外网ip的代理服务器就充当了这个角色。

Linux配置软路由比较简单:

  1. 修改/etc/sysctl.conf文件,添加配置net.ipv4.ip_forward=1
  2. 使用sysctl -p命令重新加载配置生效
  3. cat /proc/sys/net/ipv4/ip_forward检查下配置是不是1
  4. 启用iptables的SNAT链: iptables -t nat -R POSTROUTING 1 -s 172.19.0.0/16 -j MASQUERADE(iptables规则重启会清空,参考各个不同的Linux操作系统如何持久化这个规则。其中-s参数指定了source网段,根据VPC的网段配置决定,如果不加这个参数则对所有source均可路由,这显然对内网服务是隐患)

如果用windows server充当软路由的角色,可以参考这个配置: https://blog.csdn.net/delisphi/article/details/43529065。如果用阿里云NAT服务充当这个角色的话,参考阿里云的文档: https://help.aliyun.com/document_detail/49108.html

配置VPC的路由规则

打开VPC的控制台,找到添加路由表,添加一条0.0.0.0/0(即默认路由)的规则:

image.png

在我的场景下,将默认路由指向有外网访问权限的代理服务器上即可。如果用NAT方案,下一条类型选成NAT即可。这时候打开原本不能访问外网的windows服务器看看,是不是能ping通了?

1534404315429.remmina-2018-8-16-9:51:17.373010.png

在外网环境访问内网就简单多了,Linux下同样可以用iptables来实现这个需求,不过更简单的是使用rinetd这个简单的服务,参考阿里云的文档: https://help.aliyun.com/knowledge_detail/42525.html