6

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

 3 years ago
source link: https://blog.dteam.top/posts/2018-08/%E9%98%BF%E9%87%8C%E4%BA%91vpc%E7%8E%AF%E5%A2%83%E5%86%85%E7%BD%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%E5%A4%96%E7%BD%91.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

冯宇 Posted at — Aug 16, 2018 阅读 303

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

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

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

  • 阿里云ECS服务器若干(>=2)或ECS+NAT组合
  • VPC网络(通常情况下都是一个VPC实例,下面挂一堆ECS服务器)
  • 至少一个公网ip(买ECS的时候保证其中一台买了公网ip,或弹性ip给NAT)

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

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

image.png

配置如下:

  • 代理服务器一台, Ubuntu 操作系统,有外网ip,未来期望通过这台服务器暴露内网服务(如果是NAT的话也是等效的,不过NAT会稍微贵一些)
  • 内网windows服务器一台,带宽0(即只有内网ip)
  • 两台服务器在一个VPC实例上连接,可以互相ping通

目前代理服务器有外网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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK