最近,我开始研究aws的网络知识,先根据关键字逐一记录要点。本文后续会慢慢逐渐补充内容,一方面是自我学习提升,另一方面也希望能给初学者以启发。


CIDR

CIDR是一个按位的、基于前缀的,用于解释IP地址的标准,通过在IP地址后面加上一个/,然后跟上一个数字表示IP地址段范围。

当创建 VPC 时,必须为这个 VPC 指定 IPv4 CIDR 块。VPC允许的CIDR大小介于 /16 网络掩码 (65,536 个 IP 地址) 和 /28 网络掩码 (16 个 IP 地址) 之间。

例子:

*/24允许2(32-24)=28=256个的IP

192.168.100.0/32->1个IP

0.0.0.0/0->所有IP

私有IP地址/公有IP地址

只能在私有网络中通信和访问的IP是私有IP,由RFC1918指定的私有IPv4地址范围为:

10.0.0.0 – 10.255.255.255 (10/8 前缀) ,对应大型网络,包含更多的子网和IP地址的大型网络
172.16.0.0 – 172.31.255.255 (172.16/12 前缀),是AWS默认CIDR块。
192.168.0.0 – 192.168.255.255 (192.168/16 前缀) 一般小型网络使用的地址范围。

在以上这些范围之外的IP地址,就是公有IP地址,用于访问internet。

VPC

  • VPC是 AWS 账户的虚拟网络,它在逻辑上与 AWS 中的其他虚拟网络隔离。
  • 所有新帐户都有一个默认VPC:172.31.0.0/16
  • 如果未指定子网,则会将新实例启动到默认VPC中;默认VPC具有internet连接,并且所有实例都具有公共IP(以便我们可以使用该实例执行类似于yum update…)
  • 一个区域中可以有多个VPC(每个区域最多5个,但这是一个软限制,可以申请提高配额)
  • 每个VPC的最大CIDR为5。对于每个CIDR:最小大小为/28:16个IP地址;最大大小为/16:65536个IP地址


VPC子网划分的例子

首先我们先了解默认VPC配置 CIDR=172.31.0.0/16 划分了三个子网

172.31.0.0/20
172.31.32.0/20
172.31.16.0/20

通过上面信息,我们可以推算得出172.31.0.0/16整个子网段的信息:

aws-VPC网络基础知识总结_ip地址

aws-VPC网络基础知识总结_ip地址_02

简单三层网络设计

VPC CIDR = 172.16.0.0/20

aws-VPC网络基础知识总结_子网_03

根据AWS 子网划分规定得出每个子网的 可用IP=512 – 5 = 507得出每个子网可以创建507台机器

aws-VPC网络基础知识总结_路由表_04

web服务有两个子网段做高可用app服务有两个子网段做高可用 MySQL服务有两个子网段做高可用;预留两个子网段为后期业务扩张进行使用

子网

* 每个子网都必须完全位于一个可用区之内,不能跨越多个可用区。(1:1关系)
* 每个在子网中启动的实例,都会被分配一个基于您定义的子网CIDR块范围内私有IP。
* 创建子网时,需要指定子网的 CIDR 块,它是 VPC CIDR 块的子集。
* 每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址无法供您使用,是AWS用于联网目的保留的。

例如,如果CIDR块为10.0.0.0/24,则保留的IP为:

10.0.0.0:网络地址
10.0.0.1:AWS为VPC路由器保留,用于网关
10.0.0.2:由AWS保留,用于映射到AWS提供的DNS
10.0.0.3:由AWS保留,以备将来使用
10.0.0.255:网络广播地址。AWS不支持VPC中的广播

如果您需要EC2实例的xx个IP,在执行CIDR块时,请记住-5(四舍五入)例如,如果您需要29个IP,请选择/26(64个IP)而不是/27(32个IP)

公有子网、私有子网

* 公有子网是指在子网的关联路由表中有一条内容为将0.0.0.0/0的流量发送到internet网关的路由,这条路由的意思是将子网中的 Internet 范围的流量发送到互联网网关。
* 公有子网实例要访问internet,需要确保您的子网中的实例具有全局唯一 IP 地址 (公有 IPv4 地址、弹性 IP 地址或 IPv6 地址)。


公有子网的EC2实例访问网络的前提条件

  • 创建 Internet 网关并将其附加到 VPC。
  • 将路由添加到您子网的路由表,该路由表将 Internet 范围的流量定向到互联网网关。
  • 确保您的子网中的实例具有全局唯一 IP 地址 (公有 IPv4 地址、弹性 IP 地址或 IPv6 地址)。
  • 确保您的网络访问控制列表和安全组规则允许相关流量在您的实例中流入和流出。

* 私有子网是通过NAT实例或者NAT网关访问internet。
* NAT网关或NAT实例需要配置到公有子网中。
* 需要配置私有子网的路由表,添加0.0.0.0/0 将所有其他流量路由至您的NAT网关或实例。

路由表

  • 路由表中包含一组被称为路由的规则
  • 用于决定来自您的子网或网关的网络流量的流向何处。
  • 主路由表以及自定义路由表,与子网进行关联。
  • 在路由选择时,会使用路由表中与流量匹配的最具体的路由条目来路由流量,这也是最长前缀匹配原则

Internet 网关(IGW)

* Internet 网关(IGW)是一种横向扩展、冗余且高度可用的 VPC 组件,我们可以使用Internet 网关(IGW)将VPC接入internet。
* Internet 网关(IGW)为已经分配了公有 IPv4 或IPv6地址的实例 执行网络地址转换 (NAT),它不会对您的网络流量造成可用性风险或带宽限制。
* 在路由选择时,会使用路由表中与流量匹配的最具体的路由条目来路由流量,这也是最长前缀匹配原则。
* 每个 VPC 只能关联一个。它并没有限制互联网连接的带宽。(带宽的唯一限制是 Amazon EC2 实例的大小,它适用于所有流量——VPC 内部和 Internet 外部。)
* 一个VPC网络只能连接到一个互联网网关,反之亦然(如“1对1关系”)
* 在您的账户中拥有 Internet 网关并不需要缴纳额外的费用。

NAT网关、NAT实例

SNAT (Source NAT)

由企业内网主机(ipA)发往一个互联网主机地址(ipC)的场景,端口不被替换。

DNAT (Destination NAT)

互联网主机(ipC)想访问处于企业内网服务器A(ipA)的场景。

网关收到请求报文并将请求报文内的目标地址和端口更换为局域网内的地址和端口,局域网内的站点收到请求报文后将响应报文发送给网关,网关再将响应报文中的源地址替换为外网地址,将报文发送回外网用户。

PNAT(Port NAT)

互联网主机(ipC)想访问处于企业内网服务器A(ipA)的场景 + 端口转换

以http服务为例,外网用户要访问内网的http服务请求的端口是80,而内网的httpd服务工作在非标准的端口8080上,此时用来作为DNAT转换的网关只将ip做了转换没有将端口进行转换就将报文发给了内网的web服务器,而内网服务器的80端口没有http服务,此时内网的http服务器就需要将发送给本机80端口的数据报文重新重定向至本机的8080端口,这就叫做PNAT也叫端口重定向或者端口映射

NAT实例

  • NAT实例是需要部署在公有子网的一台实例。
  • 使用NAT实例访问internet需要在私有子网的路由表中添加0.0.0.0/0 将所有其他流量路由至您的NAT实例。
  • NAT实例不是高可用的,在出现故障时需要您自行处理故障转移。
  • 它的带宽也是受限的,具体的带宽取决于选择的实例类型的带宽,但是价格可能会便宜一点。

NAT网关

  • NAT网关的带宽可以自动扩展,费用包括NAT网关的每小时使用费率以及数据处理费率。
  • NAT网关在每个可用区是高度可用的,就是说在每个可用区中的 NAT 网关都采用冗余方案,当底层硬件出现问题,AWS会管理迁移。但是如果这个可用区出问题了,那么NAT网关就无法在提供服务了。
  • 可以通过在每个可用区中创建一个 NAT 网关可确保您的架构不依赖于可用区。每个可用区都需要一个,因为它们只在一个可用区中运行。
  • NAT网关需要绑定一个弹性IP地址,是通过使用这个弹性 IP 地址作为源 IP 地址,将流量发送到 Internet 网关。在子网实例通过NAT网关访问外部服务时,在外部服务看到的请求的来源会是NAT网关的弹性IP地址。
  • 它可以突增至 10 Gbps(NAT 实例受限于与 EC2 实例类型关联的带宽)。从5 Gbps开始,当前扩展到45 Gbps。自动缩放。
  • 不需要跨AZ故障切换,因为如果AZ发生故障,则不需要NAT

网络ACL、安全组

一言以蔽之,NACL是黑名单,安全组是白名单。

网络ACL

* 网络ACL,是在子网级别定义的无状态的防火墙,用来控制子网进出的流量,也就是说子网内的实例,进出子网的流量都需要经过网络ACL,都可以通过它来进行访问控制。
* 网络 ACL 是无状态的,无状态的意思是对于允许出站请求的返回的流量,也必须在规则中明确允许,反之亦然。
* 网络ACL支持添加允许和拒绝的规则。当你需要拒绝某个特定IP地址的流量时,可以非常快速的使用网络ACL添加相应的拒绝规则。
* 默认情况下,NACL允许所有出站和入站内容
* 每个子网一个NACL,新子网被分配默认NACL
* 网络ACL可以与N个子网关联,但1个子网只能与1个NACL关联
* 新创建的NACL将default否认any
* NACL是在子网级别阻止特定IP的一种很好的方法

NACL规则

规则有一个数字(1-32766),数字越小,优先级越高
○ 例如,如果定义#100 ALLOW和#200 DENY,则将允许IP,因为100具有更高的优先级(#100<#200)
○ 100,200是规则数字,或者你可以说它是“重量”,只要你能记住它
○ 最后一条规则是星号(*),在没有规则匹配的情况下拒绝请求
○ AWS建议增量 为100 的规则

安全组

* 安全组充当实例的虚拟防火墙以控制入站和出站流量。它运行在实例级别,而非子网级别。
* 安全组只能添加允许规则,无法添加拒绝规则,这一点要注意。
* 安全组是有状态的,如果您从实例发出一个出站的请求,则无论入站安全组规则如何,都将允许该请求的响应流量流入。
* 在配置安全组的规则时,您可以在规则中引用同一区域的其他安全组,也可以引用对等连接中的安全组或者跨账户的安全组,这个特性让我们配置和管理安全组规则非常的方便和灵活。

VPC流日志、堡垒机

* VPC流日志,利用 VPC 流日志您可以捕获有关传入和传出您的 VPC 中网络接口的 IP 流量的信息。
* 可以将VPC流日志数据发布到 Amazon CloudWatch Logs 或 Amazon S3。
* 可以为VPC、子网或网络接口创建流日志。
* 当流量没有按照预期走向时,比如流量被拒绝了,可以捕获拒绝的日志,查看失败的节点和原因等等。

  • 堡垒机是配置在公有子网的一台EC2实例。当需要SSH私有子网的实例时,可以通过先SSH堡垒机,在通过堡垒机登陆私有子网的实例,一般堡垒机还需要有安全审计的功能。
  • AWS是没有堡垒机托管服务的,您需要自己配置和管理堡垒机,并自行负责堡垒机的故障迁移和安全性等工作。
  • 可以使用SSM的会话管理服务登陆并管理实例,而不是通过SSH的方式。这种方式需要在实例上安装SSM代理。

IPv6

  • 创建一个IPv6的CIDR块与该VPC关联,然后将互联网网关附加到您的VPC,互联网网关是支持IPv6的。
  • 在公有子网中启动一台EC2实例并分配一个IPv6的地址,并在对应路由表中添加一个路由表条目,内容为将去往::/0的流量发送到互联网网关,将任何去往IPv6的流量发送到互联网网关。
  • 对于私有子网中的实例,经由 IPv6 到 Internet 的出站通信,需要在公有子网中创建一个名为“仅出口互联网网关”,它只适用于IPv6的流量。同样,需要在对应私有子网路由表中添加一条规则,将去往::/0的IPv6流量发送到 “仅出口互联网网关”。