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

7
我希望在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"
  }
}

我的问题是我不知道如何选择适当的CIDR块(有3个要决定)。

我该如何确定使用哪些CIDR块?


一个可行的组合可能是:

  • VPC:10.16.0.0/16
  • 公共:10.16.0.0/24
  • 私有:10.16.128.0/24
1个回答

11

首先,你所做的没有问题,每个/20子网拥有/16虚拟私有云中可用IP地址的一半(每个子网4096减去5个AWS保留IP)。

至于如何决定,这是一个经典的网络设计问题,已经存在了数十年。在互联网上搜索“IP地址范围设计最佳实践”将会找到几篇有用的文章。

特别是针对AWS云,以下是一些指导建议:

  • /16和/20是相当大的子网,除非你确实需要使用那么多IP地址,否则我建议将它们缩小;如果必要,稍后可以向VPC添加第二个CIDR:链接
  • 在涉及到多个VPC环境时,如果想要将VPC进行对等连接以便它们可以相互路由,则它们不能具有重叠的CIDR;因此,不要使VPC CIDR比需要的大,以避免出现具有大型未使用CIDR的VPC而导致IP不足的情况。
  • 如果您拥有混合云环境,其中本地资源和AWS资源是同一网络的一部分,那么不重叠的IP地址也同样适用。
  • 我使用10.0.0.0/8表示生产VPC,172.16.0.0/12表示测试VPC,192.168.0.0/16表示开发VPC。这能帮助我记住我正在处理哪个环境。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接