我目前正在尝试使用 Terraform 在 AWS 中建立 VPC,并且我在子网之间划分 CIDR 范围,如下所示:
resource "aws_vpc" "dev_vpc" {
cidr_block = "10.0.0.0/24"
tags = {
Name = "Dev environment VPC"
}
}
resource "aws_subnet" "private_subnet_operational_db_dev_1" {
vpc_id = aws_vpc.dev_vpc.id
cidr_block = "10.0.0.0/30"
availability_zone = "eu-west-1a"
tags = {
Name = "Public Subnet Operational db dev 1"
}
}
我计算出我的 VPC 的 CIDR 范围是从
10.0.0.0
到 10.0.0.255
。
考虑到子网的范围是从
10.0.0.0
到10.0.0.3
,为什么无效呢?
AWS 中 VPC 允许的最小 CIDR 块大小是
/28
网络掩码,相当于 16 个 IP 地址。
将子网中可用的 IP 地址数量增加到至少 16 个,即使用 28 或更低的网络掩码。
仅供参考,AWS 还会在每个子网内自动保留 5 个 IP 地址。
根据文档:
每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址不可供您使用,并且无法将它们分配给资源,例如 EC2 实例。
因此,即使允许更高的网络掩码,CIDR 块为 10.0.0.0/30 的子网也只能提供 AWS 自己保留的至少 4/5 个 IP 地址。