亚马逊云 EC2 的网络详解
一般来说有连接 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 的方式来测试端口的连通性。希望对你有帮助。
参考文档:
vpc:https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/what-is-amazon-vpc.html
安全组:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/security-group-rules.html
路由表:https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/VPC_Route_Tables.html
版权声明: 本文为 InfoQ 作者【孤虹】的原创文章。
原文链接:【http://xie.infoq.cn/article/386b4571e742942182fe86e11】。文章转载请联系作者。
评论