ARM模式下,Azure将公网IP地址作为一个资源(对象)独立出来,通过将其绑定到不同的资源(虚拟机,负载均衡器,应用程序网关等等)上来使用。
那么对于一个虚拟机来说,如果在创建的时候没有为其指定公网IP地址,外部是无法访问其内部的任何服务的(配合负载均衡器使用除外,这个后续再描述),原因是外部没有一个公网地址作为入口或者IP报文的目的端来进行报文发送。反过来,对于没有为网络接口绑定公网IP地址的虚拟机来说,在其内部访问公网的时候,是否能够进行通信呢?
我们通过下面的实验来测试一下:
准备环境:为了便于抓包测试,我们在中国东部创建了一台公网IP地址为139.219.188.238的ARM虚拟机并搭建了DNS Server,用来作为服务器端,在中国北部一个虚拟网络下创建了多台没有公网IP地址的ARM虚拟机作为客户端,同时在这个中国北部的虚拟网络下又创建了一台公网IP为42.159.119.65的虚拟机作为跳板机(原因是没有公网IP地址的虚拟机无法从外部直接RDP,所以需要通过跳板机来内网登陆)。
我们在中国北部的这些没有公网IP的虚拟机内进行DNS解析,并将解析使用的DNS服务器指向中国东部的服务器(139.219.188.238),同时在中国东部的服务器内进行抓包:
在中国东部的虚拟机(139.219.188.238)中的抓包结果: