计算实例网络掩码
本页面简要介绍了 Compute Engine 实例的网络掩码配置。
在物理网络中,机器通常配置有与所连接子网相同的网络掩码,这使它们能够广播地址解析协议 (ARP) 请求。因此,机器可以发现同一子网内其他机器的 MAC 地址,并使用目标 MAC 地址直接与这些机器通信。
在 Google Cloud中,不支持广播流量。默认情况下,计算实例网络掩码的配置如下:
- Linux:实例配置了
/32网络掩码。因此,即使对于同一子网内的流量,实例也只会与网关的 MAC 地址通信,而不会与目标实例的 MAC 地址通信。使用/32网络掩码会隐藏远程实例的 MAC 地址,从而阻止第 2 层发现并为某些应用带来问题。 - Windows:实例配置的网络掩码与子网的网络掩码一致。实例可以与连接到主要 IPv4 地址范围的其他实例的 MAC 地址进行通信,但在向连接到次要范围的实例发送流量时,只能与网关的 MAC 地址进行通信。
在配置更大的实例网络掩码之前,请考虑以下事项:
配置更大的实例网络掩码是一种高级配置,大多数使用情形都不需要。除非您的操作系统或应用需要实例之间的通信才能像在物理网络上直接通信一样运行,否则我们建议您保留默认配置。
如果您需要更大的实例网络掩码,建议您为连接到子网的所有实例配置更大的实例网络掩码。使用此配置可避免维护自定义映像。
配置选项
下表总结了计算实例网络掩码的配置选项。您可以更改默认配置,方法是为子网中的所有实例配置更大的网络掩码,或者创建自定义映像并使用该映像创建具有更大网络掩码的各个实例。
| 项 | 无子网或实例级配置 Linux 的默认行为 |
使用 --resolve-subnet-mask 进行子网级配置 |
使用 MULTI_IP_SUBNET 的实例级配置
Windows 的默认行为 |
|---|---|---|---|
| 由 DHCP 配置的实例接口网络掩码 | /32 |
与子网的主要 IPv4 地址范围的网络掩码相匹配 | 与子网的主要 IPv4 地址范围的网络掩码相匹配 |
实例会收到以下 IP 地址的 ARP 回复:
|
|||
| 实例收到 ARP 回复,其中来源和目标 IPv4 地址与 ARP 请求数据包中的相同 | |||
| 实例会收到来自以下地址的 ARP 回复:主要内部 IPv4 地址目的地和别名 IP 地址目的地(来自子网的主要 IPv4 地址范围) | 两种设置(ARP_PRIMARY_RANGE 和 ARP_ALL_RANGES) |
||
| 实例会收到来自内部直通式网络负载平衡器或内部协议转发所用目标内部转发规则 IPv4 地址的 ARP 回复 | 两种设置(ARP_PRIMARY_RANGE 和 ARP_ALL_RANGES) |
||
| 实例会收到来自子网的某个次要 IPv4 地址范围内的目标别名 IP 地址的 ARP 回复 | 需要 ARP_ALL_RANGES
如需了解详情,请参阅子网配置 |
子网配置
您可以使用解析子网掩码 (--resolve-subnet-mask) 设置(将其设置为仅限主要范围 [ARP_PRIMARY_RANGE] 或所有范围 [ARP_ALL_RANGES])创建子网,以针对所有关联的计算实例配置更大的实例网络掩码。使用解析子网掩码设置创建的子网具有以下行为:
DHCP 会为连接到子网的实例配置与子网相同的网络掩码(而不是
/32)。Google Cloud 会根据以下规则拦截并响应 ARP 请求:
- 如果 ARP 请求数据包的来源和目标 IPv4 地址相同,则不会生成 ARP 响应。
- 如果 ARP 请求数据包的目标 IPv4 地址与实例的网络接口的主要内部 IPv4 地址相匹配,并且解析子网掩码设置为
ARP_PRIMARY_RANGE或ARP_ALL_RANGES,则会生成 ARP 响应。 如果 ARP 请求数据包的目标 IPv4 地址与实例网络接口的别名 IP 范围中的内部 IPv4 地址相匹配:
如果别名 IPv4 地址范围来自子网的主要内部 IPv4 地址范围,并且解析子网掩码设置为
ARP_PRIMARY_RANGE或ARP_ALL_RANGES,则会生成 ARP 响应。如果别名 IPv4 地址范围来自子网的某个次要内部 IPv4 地址范围,并且解析子网掩码设置为
ARP_ALL_RANGES,则会生成 ARP 响应。
如果 ARP 请求数据包的目标 IPv4 地址与内部转发规则 IPv4 地址(用于内部直通式网络负载平衡器或内部协议转发)匹配,并且解析子网掩码设置为
ARP_PRIMARY_RANGE或ARP_ALL_RANGES,则会生成 ARP 响应。即使后端实例的网络接口使用其他子网,转发规则所用子网的“解析子网掩码”设置也至关重要。
限制
为子网中的所有实例配置更大的实例网络掩码存在以下限制:
- 您只能在创建子网时配置解析子网掩码设置。您无法更新子网以稍后对其进行配置。
- 子网必须是常规的仅限 IPv4 的子网:
- 支持虚拟机 (VM) 实例和裸金属实例。
- 实例 NIC 必须位于常规 VPC 网络中。不支持使用任何其他网络配置文件(例如 RDMA VPC 网络)的 VPC 网络中的 NIC。
- VPC 网络中的 ARP 行为与物理网络中的行为不同。
- 此配置添加了对 ARP 的支持,但 Google Cloud 不支持任何其他第 2 层协议。
如需了解详情,请参阅为子网配置更大的实例网络掩码。
单实例配置
如果您使用具有 MULTI_IP_SUBNET 功能的自定义映像配置具有较大子网掩码的单个计算实例,则适用以下情况:
- DHCP 会使用子网的网络掩码(而非
/32)来配置连接到子网的实例。 - Google Cloud 拦截并响应来自主要 IPv4 地址范围的 ARP 请求。
限制
为单个计算实例配置更大的实例网络掩码存在以下限制:
- 您必须维护自定义映像才能配置
MULTI_IP_SUBNET选项。 - 支持虚拟机实例和裸金属实例。
- 实例 NIC 必须是 vNIC 或 Dynamic Network Interface。不支持 RDMA 类型网卡。
- ARP 行为与物理网络上的行为不同。
- 此配置添加了对 ARP 的支持,但 Google Cloud 不支持任何其他第 2 层协议。
如需了解详情,请参阅为单个实例配置更大的网络掩码。
ARP 在 VPC 网络中的运作方式
如果您通过解析子网掩码或 MULTI_IP_SUBNET 设置配置具有较大网络掩码的计算实例,则实例可以发送和接收 ARP 消息。不过, Google Cloud中的 ARP 行为与物理网络中的行为在以下方面有所不同:
- 当实例发送 ARP 请求时, Google Cloud 会拦截该请求。即使实例接口配置的网络掩码与子网的网络掩码相匹配,ARP 请求也不会发送到其他实例。
- Google Cloud 即使没有实例使用 ARP 请求中的 IP 地址,也会发送包含 MAC 地址的 ARP 回复。