如何确定公有和私有子网以及 VPC 的 CIDR 块?

sdg*_*sdh 3 cidr vpc amazon-web-services amazon-vpc terraform

我想在 AWS 中创建一个具有私有子网和公共子网的 VPC。我正在使用 Terraform。

这是我到目前为止所拥有的:

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16" # <---

  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "Main"
  }
}

resource "aws_subnet" "public" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.0.0/20" # <---

  tags = {
    Name = "Public"
  }
}

resource "aws_subnet" "private" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.16.0/20" # <---

  tags = {
    Name = "Private"
  }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不知道如何选择合适的 CIDR 块(3 个来决定)。

如何确定要使用哪些 CIDR 块?


一个有效的组合可能是:

  • 专有网络: 10.16.0.0/16
  • 民众: 10.16.0.0/24
  • 私人的: 10.16.128.0/24

P B*_*rke 8

首先,您所做的没有任何问题,每个 /20 子网都有 /16 VPC 中可用 IP 的一半(每个 4096 减去 5 个 AWS 保留 IP)。

就你如何决定而言,这是一个经典的网络设计问题,已经存在了几十年。在 Internet 上搜索“IP 地址范围设计最佳实践”将搜索到几篇可能有帮助的文章。

专门针对 AWS 云,有几点说明:

  • /16 和 /20 是相当大的子网,除非您真的希望使用那么多 IP,否则我很想将它们变小;如有必要,您可以稍后将第二个 CIDR 添加到 VPC:链接
  • 当涉及到多个 VPC 环境时,如果您想对等 VPC,以便它们可以相互路由流量,那么它们就不能有重叠的 CIDR;所以这是不使 VPC CIDR 大于它们需要的大小的另一个原因,这样您就不会因为 VPC 具有大量未使用的 CIDR 而耗尽 IP。
  • 如果您拥有本地资源和 AWS 资源属于同一网络的一部分的混合云环境,则无重叠 IP 地址点也适用。
  • 我的一个小技巧是将 10.0.0.0/8 用于生产 VPC,172.16.0.0/12 用于测试,192.168.0.0/16 用于开发。这有助于我记住我正在处理的环境。