如果 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 方法。