首先必须吐槽一下阿里云的VPC环境,叫虚拟路由器却不提供互联网访问的功能,非得用户DIY(也可能是希望用户买它的弹性ip)。
但是很多情况下我们在云上的环境就跟本地内网环境差不多——对外有一台路由器,内部所有的服务器都在内网环境中,通过端口映射将服务暴露给外网用户。那么VPC能否模拟这个场景呢?
或者是仅仅想让内网服务器可以访问到外网?答案是可以的。
PS: 阿里云的固定带宽模式计费其实相当的贵,经过我的计算,10M固定带宽一个月产生的费用如果换成流量计费的话基本和每天20GB流量的价格持平。绝大多数服务器的日均流量恐怕达不到这个水平。所以大多数场景下我建议选择流量计费方式,会省很多钱。
其实就是配置软路由了,如果用NAT的话是现成的。如果用ECS做软路由的话需要自己动手,比如我这里的场景:
配置如下:
目前代理服务器有外网ip,所以可以访问外网,windows服务器没有外网Ip,直接访问外网不通。
这套网络环境最主要的解决方案就是实现一台软路由器,可以访问外网,因此有外网ip的代理服务器就充当了这个角色。
Linux配置软路由比较简单:
/etc/sysctl.conf
文件,添加配置net.ipv4.ip_forward=1
sysctl -p
命令重新加载配置生效cat /proc/sys/net/ipv4/ip_forward
检查下配置是不是1
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的控制台,找到添加路由表,添加一条0.0.0.0/0
(即默认路由)的规则:
在我的场景下,将默认路由指向有外网访问权限的代理服务器上即可。如果用NAT方案,下一条类型选成NAT即可。这时候打开原本不能访问外网的windows服务器看看,是不是能ping通了?
在外网环境访问内网就简单多了,Linux下同样可以用iptables来实现这个需求,不过更简单的是使用rinetd这个简单的服务,参考阿里云的文档: https://help.aliyun.com/knowledge_detail/42525.html
觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :
付费文章