如果 Compute Engine 实例所连接的子网已配置 IPv6 范围,则您可以在该实例上配置 IPv6 地址。
如需详细了解 IPv6,请参阅 IPv6 子网范围。
规格
同时具有 IPv4 和 IPv6 配置的计算实例是·双栈实例。 IPv6 地址是在网络接口上配置的 IPv4 地址之外的附加地址。
系统会为双栈或 IPv6 专用实例上的接口分配一个
/96
范围的 IPv6 地址;范围 (/128
) 中的第一个 IPv6 地址在接口上配置。实例上的任何接口都可以配置 IPv6 地址。如需详细了解如何配置多个网络接口,请参阅多个网络接口。
虚拟机网络接口的堆栈类型决定了它可以连接到的子网的类型:
- IPv4 专用接口可以连接到双栈子网和仅 IPv4 的子网。
- 双栈接口可以连接到双栈子网。
- IPv6 专用接口可以连接到双栈子网和 IPv6 专用子网。
如需在网络接口上配置 IPv6 地址,该接口必须连接到双栈或 IPv6 专用子网。
子网的 IPv6 访问类型配置决定了该子网是具有内部还是外部 IPv6 范围。连接的实例将继承子网的 IPv6 访问类型。
只有 Ubuntu 和 Debian 操作系统映像支持仅限 IPv6 的实例。
使用 IPv6 地址访问实例
隐式 IPv6 拒绝入站防火墙规则通过禁止传入实例 IPv6 地址的连接来保护实例。如需使用 IPv6 地址访问虚拟机,您必须具有允许传入访问的更高优先级规则。
如需详细了解防火墙规则,请参阅 VPC 防火墙规则和分层防火墙政策。
如需查看 VPC 防火墙规则示例,请参阅为常见用例配置防火墙规则。
IPv6 地址分配
下表介绍了如何为计算实例分配 IPv6 地址。
使用 DHCPv6 为计算实例分配 IPv6 地址。元数据服务器响应实例的 DHCPv6 请求,并从分配的
/96
范围内发送第一个 IPv6 地址 (/128
)。元数据服务器使用路由通告将默认路由发布到实例。然后,实例可以将此默认路由用于所有 IPv6 流量。
您可以通过连接到实例并查询元数据服务器中的
gateway-ipv6
条目,来查找实例网络接口的默认路由。curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/gateway-ipv6 -H "Metadata-Flavor: Google"
如需详细了解元数据服务器,请参阅查看和查询实例元数据。
计算实例配置了链路本地 IP 地址,这些地址是从
fe80::/10
范围分配的,但仅用于邻域发现。实例网络接口上的 MTU 配置适用于 IPv4 和 IPv6 数据包,但并非所有情况都支持所有 MTU 值。如需了解详情,请参阅最大传输单元。
创建使用 IPv6 地址的实例
您可以创建同时使用 IPv4 和 IPv6 地址(双栈)的实例,也可以创建仅使用 IPv6 地址的实例。
如需了解如何创建使用 IPv6 地址的 Compute Engine 实例,请参阅以下任务:
更改实例的堆栈类型
您可以更改现有 Compute Engine 实例的堆栈类型。堆栈类型可设置为以下任一项:
- 仅 IPv4(单栈)
- IPv4 和 IPv6(双栈)
如果要将堆栈类型更改为双栈,则必须将实例连接到双栈子网。如果您需要更改实例连接到的子网,请停止实例并更改子网。更新子网后,您可以更改实例的 IP 堆栈类型。
您无法更改 IPv6 专用实例的堆栈类型。
控制台
转到虚拟机实例页面。
点击要为其分配 IPv6 地址的实例的名称。
在实例详细信息页面中,完成以下步骤:
- 点击修改。
- 在网络接口中,展开您要修改的接口。
- 选择 IP 堆栈类型:仅 IPv4(单栈)或 IPv4 和 IPv6(双栈)。
- 点击完成。
点击保存。
gcloud
使用 gcloud compute instances network-interfaces update
命令更新实例的堆栈类型
gcloud compute instances network-interfaces update INSTANCE_NAME \ --stack-type=STACK_TYPE \ --zone=ZONE
替换以下内容:
INSTANCE_NAME
:实例的名称。STACK_TYPE
:实例的堆栈类型:IPV4_ONLY
或IPV4_IPV6
。ZONE
:部署实例的可用区。
REST
向 instances.updateNetworkInterface
方法发出 PATCH
请求,以更新实例的堆栈类型。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/updateNetworkInterface
替换以下内容:
PROJECT_ID
:包含实例的项目的 ID。ZONE
:部署实例的可用区。INSTANCE_NAME
:实例的名称。
请求正文示例:
{ "stackType": "STACK_TYPE", }
将 STACK_TYPE
替换为实例的堆栈类型:IPV4_ONLY
或 IPV4_IPV6
。
创建使用 IPv6 地址的实例模板
您可以创建区域级或全球实例模板,以用于创建双栈或 IPv6 专用实例。如需了解详情,请参阅创建实例模板。
您必须使用 Google Cloud CLI 或 REST 来创建实例模板,该模板可创建使用 IPv6 地址的实例。
gcloud
如需创建区域级或全球实例模板,请使用 gcloud compute instance-templates create
命令。如果您要创建区域实例模板,则必须使用 --instance-template-region
标志来指定实例模板的区域。
以下示例会创建一个全球级实例模板:
gcloud compute instance-templates create TEMPLATE_NAME \ --subnet=SUBNET \ --stack-type=STACK_TYPE
替换以下内容:
TEMPLATE_NAME
:模板的名称。SUBNET
:具有 IPv6 子网范围的子网。STACK_TYPE
:堆栈类型,对于双栈实例,为 IPV4_IPV6;对于具有外部 IPv6 地址的实例,为 IPV6_ONLY。
REST
如需创建区域实例模板,请使用 regionInstanceTemplates.insert
方法;如需创建全球实例模板,请使用 instanceTemplates.insert
方法。
以下示例会创建一个全球级实例模板:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
将 PROJECT_ID
替换为项目 ID。
请求正文示例:
{ "name": "INSTANCE_TEMPLATE_NAME" "properties": { "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "subnetwork": "regions/REGION/subnetworks/SUBNET", "stackType": "STACK_TYPE", }, ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "initializeParams": { "sourceImage": "IMAGE_URI" } } ] } }
替换以下内容:
INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:实例的机器类型,例如c3-standard-4
。SUBNET
:具有 IPv6 子网范围的子网。REGION
:子网的区域。IMAGE_URI
:您要使用的映像的 URI。例如,如果您指定
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
,则 Compute Engine 会通过 Debian 12 映像系列中最新版本的操作系统映像创建实例。
如需详细了解请求参数,请参阅 instanceTemplates.insert
方法。