在 AWS 中确定或计算 VPC 的 Cidr 的标准公式 [关闭]

Posted

技术标签:

【中文标题】在 AWS 中确定或计算 VPC 的 Cidr 的标准公式 [关闭]【英文标题】:Standard formula to determine or calculate Cidr for VPC in AWS [closed] 【发布时间】:2020-11-15 12:59:50 【问题描述】:

我正在学习 AWS CloudFormation。现在,我正在尝试为 VPC 和子网创建模板。我现在正在创建一个 VPC。

这是我的模板:

AWSTemplateFormatVersion: '2010-09-09'
Description: "Template for Networks and IAM Roles"
Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: '10.0.0.0/16'
      EnableDnsHostnames: True
      EnableDnsSupport: True

我在这里不明白的是 CidrBlock。现在,我将其指定为 10.0.0.0/16。老实说,它是如何工作的。将其设置为 10.0.0.0/16 是否总是有效?那是做什么用的?该 IP 地址范围是如何工作的?它有什么帮助?如何确定为其设置哪个值?有计算公式吗?如何?我在控制台中看到了一个现有的 VPC。 IP地址不同。

另外,我如何计算以将其拆分以分配给子网?

我正在寻求对以下模板的理解,尤其是用于子网的 Cidr。

AWSTemplateFormatVersion: '2010-09-09'
Description: "Template for Networks and IAM Roles"
Parameters:
  VpcCidr:
    Default: '10.0.0.0/16'
    Type: String
    AllowedPattern: '(\d1,3)\.(\d1,3)\.(\d1,3)\.(\d1,3)/(\d1,2)'
Resources:
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsHostnames: True
      EnableDnsSupport: True
  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Select [ 0, !Cidr [ !Ref VpcCidr, 12, 8 ] ]
      MapPublicIpOnLaunch: True
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref "AWS::Region"
  PublicSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref Vpc
      CidrBlock: !Select [ 1, !Cidr [ !Ref VpcCidr, 12, 8 ] ]
      MapPublicIpOnLaunch: True
      AvailabilityZone: !Select
        - 0
        - Fn::GetAZs: !Ref "AWS::Region"

【问题讨论】:

【参考方案1】:

子问题太多了,无法在此处单独回答每个问题。相反,我可以写这个。

VPC 的 CIDR 选自三个common ranges:

10.0.0.0 - 10.255.255.255(10/8 前缀)

172.16.0.0 - 172.31.255.255(172.16/12 前缀)

192.168.0.0 - 192.168.255.255(192.168/16 前缀)

使用这些范围是因为它们在互联网上不可路由

10.0.0.0/16 - 是用于 VPC 的最常用的 CIDR。这为您提供了 65535 个私有 IP 地址,可在您的 VPC 中使用。

您通常将其划分为大小为/24 的子网,每个子网有 255 个私有地址。例如:

10.0.1.0/24 10.0.2.0/24 10.0.3.0/24 10.0.4.0/24

如果您将上述模式用于 VPC 和子网,则无需进行任何计算或记住任何形式。当然,如果你想拥有更具体的子网,或者不同大小的子网,你必须学习如何计算子网。为此,互联网上有许多资源和工具。例如:

http://www.subnet-calculator.com/cidr.php https://mxtoolbox.com/SubnetCalculator.aspx IPv4, CIDR, and VPC Subnets Made Simple!

更新

模板使用内部函数Fn::Cidr。

构造:

 !Cidr [ !Ref VpcCidr, 12, 8 ]

将创建一个包含 12 个 CIDR 范围的列表,大小为 /24 (32-8)。每个子网将有 255 个地址。 Select 用于从列表中选择单个 CIDR:

!Select [ 0, !Cidr [ !Ref VpcCidr, 12, 8 ] ] # 10.0.0.0/24 
!Select [ 1, !Cidr [ !Ref VpcCidr, 12, 8 ] ] # 10.0.1.0/24
!Select [ 2, !Cidr [ !Ref VpcCidr, 12, 8 ] ] # 10.0.2.0/24
!Select [ 11, !Cidr [ !Ref VpcCidr, 12, 8 ] ] # 10.0.11.0/24

【讨论】:

您好,感谢您的回答。能否请您解释一下我刚刚添加的模板? @WaiYanHein 嗨。没问题。答案已更新。【参考方案2】:

问题 1:

10.0.0.0/16 表示您正在创建一个 VPC,该 VPC 在您的 VPC 内部具有 65,536 个可用的私有 IP,这样您就可以拥有 IP 为 10.0.0.4、10.0.0.5 ... 的 EC2 实例。

Note: AWS 保留了 5 个 IP

10.0.0.0:网络地址。

10.0.0.1:AWS 为 VPC 路由器保留。

10.0.0.2:由 AWS 保留。 DNS 服务器的 IP 地址是 VPC 网络范围的基础加 2。对于具有多个 CIDR 块的 VPC,DNS 服务器的 IP 地址位于主 CIDR 中。我们还为 VPC 中的所有 CIDR 块保留每个子网范围的基数加上两个。有关详细信息,请参阅 Amazon DNS 服务器。

10.0.0.3:由 AWS 保留以供将来使用。

10.0.0.255:网络广播地址。我们不支持在 VPC 中广播,因此我们保留此地址

计算可以用网站来计算和可视化,比如https://mxtoolbox.com/subnetcalculator.aspx(我随便捡的,我不是这个作者)

请阅读here了解更多详情

【讨论】:

您好,感谢您的回答。能否请您解释一下我刚刚添加的模板?

以上是关于在 AWS 中确定或计算 VPC 的 Cidr 的标准公式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

VPC Peering 具有特定路由的配置

aws vpc 知识总结(助理级)

AWS攻略——Peering连接VPC

使用Ansible在AWS中创建VPC

具有相同 CIDR 块的多个 VPC 和子网

如何在 AWS 中确定子网 IPv4 CIDR 地址?