因工作需要, 尝试分析主流公有云外网IP是否具有较好的隔离性,以下记录下分析结果。

主流厂商方案调研

aws

aws的实例可获得一个动态的public ip(重启后会变)以及不变的elastic ip,这两种ip官方文档上明确给出是属于1:1 NAT,在vm内部仍只能看到私有网地址,使vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

aws的私有网(即EC2-VPC)做了较多的限制,在FAQ中明确给出不支持组播及广播,在网络上也看到有其他基于第三方软件规避此问题的方案。

aws的网络实现经由了EC2-Classic到EC2-VPC的转变,目前主推EC2-VPC,提供虚拟子网功能。

相关资料:

  • https://aws.amazon.com/articles/1346
  • https://aws.amazon.com/vpc/faqs/?nc1=h_ls
  • https://www.ravellosystems.com/blog/advanced-enterprise-networking-in-aws-ec2/
  • https://www.lisenet.com/2014/create-and-attach-a-second-elastic-network-interface-with-eip-to-ec2-vpc-instance/

microsoft azure

azure具有两种创建虚拟机模式,注册了试用账号,并结合文档,总结外网在不同模式下实现如下:

  1. Azure Resource Manager(v2版本,以资源方式管理一组vm): 默认动态外网ip,可配置成静态外网ip(需关机重开机) ;此种模式下无法动态或静态ip,在内部只能看到一个内网ip的接口。
  2. Azure Service Management(v1版本,称为classic deployment,以服务方式管理一组vm):默认无外网ip,需通过service的vip对外呈现,需要手工打开vip端口,并关联后端vm dip端口;可设置实例级别的外网ip,称为ilpip,vip本身在vm内部无网卡,ilpip也同样无网卡。

也即无论是v1/v2版本的部署模式,无论是共享的vip还是独立的public ip或ilpip,在vm内部均不可见,类似于floating ip技术,即vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

而对于私有网,二层做了大量的限制,比如收方向收不到不是到自己地址的报文(含L2/L3过滤),对ARP及DHCP进行了速率限制且做了spoofing处理,组网、广播、udp组播明确表明不支持(详见下附资料)。

相关资料:

  • https://azure.microsoft.com/en-us/documentation/articles/virtual-network-ip-addresses-overview-arm/
  • https://azure.microsoft.com/en-in/documentation/articles/virtual-networks-faq/
  • https://blogs.msdn.microsoft.com/igorpag/2014/09/28/my-personal-azure-faq-on-azure-networking-slas-bandwidth-latency-performance-slb-dns-dmz-vnet-ipv6-and-much-more/
  • https://blogs.msdn.microsoft.com/mast/2016/02/04/azure-networking-public-ip-addresses-in-classic-vs-arm/

google cloud engine

从GCE的官方文档来看,其实例的external public ip基于NAT实现,即vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

其子网仅支持IPv4单播,不支持IPv4组播及广播,而其资料上提到子网内ARP通过代理予以回复,综合来看,二层组播及广播显然不支持,且在其网络中,也不会存在未知单播的情况。

GCE的网络实现与AWS类似,经由了legacy network到subnet network的变化。

相关资料:

  • https://cloud.google.com/compute/docs/networking

aliyun

根据资料及试用结果,aliyun classical network中云主机具有两个接口,外网接口(/22)直接暴露给用户,通过tcpdump可以监听到来自于其他节点及网关的ARP请求,说明未做了隔离,而VPC网络则进行了改进,云主机只有一个接口,外网采用1:1 NAT实现,在vm内部仍只能看到私有网地址,使vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性

aliyun同样经过了classic network到VPC网络的改进。

相关资料:

  • http://docs-aliyun-com-cn-b.oss-cn-hangzhou.aliyuncs.com/vpc/pdf/vpc_faq.pdf
  • http://blog.chinaunix.net/uid-28212952-id-5153991.html

ucloud

根据上次在为上海客户基于ucloud临时搭建的操作经历,以及Ucloud所公开的设计细节,其EIP同样采用1:1 NAT实现,在vm内部仍只能看到私有网地址,使vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

相关资料:

  • http://www.infoq.com/cn/articles/UCloud-Sixshot-1

tencent cloud

根据在腾讯云主机的实际验证,linux云主机内部仅有一个接口,具有一个/18子网的内网地址(10.X.X.X),且根据其资料所示,腾读云方外网IP同样采用1:1实现,使vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

腾讯云EIP 15年底发布,之前与aliyun一样,仍是实例级的额外接口配置公网IP,相当于经过了优化。

相关资料:

  • http://bbs.qcloud.com/thread-12431-1-1.html
  • https://www.qcloud.com/doc/product/215/4958

qingcloud

青云经历了网络1.0到网络2.0的演进,2.0支持实例直接绑公网IP,不依赖于路由器做端口转发了,网络2.0支持EIP,根据验证及资料,外网IP同样采用1:1实现,使vm只能访问内网及外网,不能向同外网子网的机器注入广播报文,具有较好的隔离安全性。

相关资料:

  • https://docs.qingcloud.com/

云服务商外网IP实现汇总

总体上前述所有公有云厂商均最终采用了EIP这样的分离方案,具有较好的隔离安全性。


Comments

comments powered by Disqus