**文章首发于INFOQ
一般来说有连接EC2,我们直接使用SSH或者RDP请求对应的公网IP和相关端口,在大多数服务器都是如此。然而这在亚马逊云的早些时候是被叫做一种no-vpc的模式,尽管现在的EC2已经不再适用这种模式。
VPC
现在使用技术叫做VPC,全程叫做Virtual Private Cloud,其实是做了一些网络隔离。一个VPC相当于一个虚拟的局域网,在这个局域网中可以划分出一些子网,有些子网可以访问互联网,有些子网只能访问VPC内的网络,在子网中,机器可以通过内部高速网络进行传输。对于EC2的很多实例类型之前传输数据,使用iperf3测试最高可达10Gbps。
关于经常提到的公有子网和私有子网的区别,则是公有子网中的实例可以直接访问互联网,私有子网中的实例不能直接访问互联网,或者使用NAT Gateway来辅助上网,而NAT Gateway是要部署在在公有子网中的。
所以当直接用SSH访问一台EC2的条件是,这个EC2拥有公网IP,还处在公有子网中。
以下是经常会遇到两个错误配置操作:
- 实例有公有IP地址,私有子网的路由表指向NAT Gateway,这个时候ssh 会显示time out。这个时候把NAT Gateway改成Internet Gateway就可以把私有子网转换公有子网。
- 实例没有公有IP地址,子网路由表指向Internet Gateway。这个时候也是无法连接的。
安全组
大多数EC2实例内部的防火墙是关闭的,取而代之的是安全组,安全组可以添加允许规则,源可以是CIDR,安全组或者前缀列表,是绑定在弹性网卡(ENI)上的,一个机器可以绑定多个ENI,但是只能有一个主ENI,主ENI不能删除,辅助ENI可以分离,可以不同子网上,这样可以达到多个子网都能访问EC2实例的目的。
安全组可以理解为一种状态防火墙,只要能出去的流量也一样能进来,比如我们没有在安全组规则中添加被访问网站的IP地址,但是网页仍可以被渲染出来。需要提到的是,安全组默认是拒绝所有规则,我们只能添加允许的白名单,如果你绑定安全组的话,那么自然也是拒绝全部的规则。
网络控制列表
不得不和安全组一起来谈的就是网络控制列表(NACL),如果说安全组是实例级别的,那么网络控制列表就是子网级别的,相当于流量先经过NACL,然后才经过安全组。NACL的入站和出站默认放开了所有,同时支持允许和拒绝规则,并且按照规则ID来处理优先级,而这里的NACL是无状态的,需要入站和出站同时配置规则。一般来讲,没有特殊要求不建议更改。
路由表
路由表决定了VPC内网络数据包的走向,一般来说VPC会有一张默认的路由表,在默认情况下所有子网都会继承这个路由表,当然最佳的办法是给每个子网新建一个路由表并且替换掉默认的VPC路由表。
子网中EC2需要上网的条件如下:
公有子网:0.0.0.0/0指向互联网网关(IGW)
私有子网:0.0.0.0/0指向NAT网关
和NACL一样,路由表也有优先级一说,更加细致的路由条目会有更高的优先级,一般来说,我们让VPC的CIDR指向本地回环,0.0.0.0/0指向互联网。
以上就是EC2相关的网络配置,如果不确定端口是否联通,可以先用telnet host port的方式来测试端口的连通性。希望对你有帮助。
参考文档: