为实例和实例模板配置 IPv6


如果 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 OS 的 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 地址的实例。

创建双栈实例

如需创建双栈实例,请将计算实例连接到双栈子网

如果您使用共享 VPC,并且想要创建连接到共享子网的双栈实例,请参阅共享 VPC 文档中的创建实例

控制台

  1. 转到创建实例页面。

    转到“创建实例”

  2. 输入实例的名称

  3. 选择一个区域,其中包含配置了 IPv6 范围的子网。

  4. 选择一个可用区

  5. 展开高级选项部分。

  6. 展开网络,然后执行以下操作:

    1. 网络接口部分中,点击网络接口以展开并修改它。

    2. 对于网络子网,选择要使用的网络和子网。

      选择已配置 IPv6 范围的子网。子网的 IPv6 访问权限类型决定了实例是接收内部 IPv6 地址还是外部 IPv6 地址。

    3. 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)

    4. 主要内部 IPv4 地址字段中,选择以下选项之一:

      • 临时,可分配新的临时 IPv4 内部地址
      • * 列表中的预留 IPv4 地址
      • * 静态,可分配新的静态 IPv4 地址
    5. 对于 IPv6 地址,具体取决于网络接口使用的子网的访问类型:

    6. 主要内部 IPv6 地址字段中,选择以下选项之一:

      • 自动分配,可分配新的临时内部 IPv6 地址
      • 列表中的预留静态内部 IPv6 地址
      • 预留静态内部 IPv6 地址,可预留并分配新的静态内部 IPv6 地址
    7. 对于外部 IPv6 地址,选择以下选项之一:

      • 自动分配,可分配新的临时外部 IPv6 地址
      • 列表中的预留静态外部 IPv6 地址
      • 预留静态外部 IPv6 地址,可预留并分配新的静态外部 IPv6 地址
    8. 对于外部 IPv4 地址,选择以下选项之一:

      • 临时,可分配新的临时 IPv4 地址
      • ,不分配外部 IPv4 地址
      • 列表中的预留 IPv4 地址
      • 创建新的 IP 地址,以分配新的静态 IPv4 地址。
    9. 如需完成网络接口的修改,请点击完成

  7. 继续进行实例创建过程。

  8. 点击创建

gcloud

使用 gcloud compute instances create 命令来创建实例。

gcloud compute instances create INSTANCE_NAME \
    --subnet=SUBNET_NAME \
    --zone=ZONE \
    --stack-type=IPV4_IPV6

替换以下内容:

  • INSTANCE_NAME:实例的名称。
  • SUBNET_NAME:要将实例连接到的子网。子网必须具有 IPv6 子网范围。
  • ZONE:要在其中部署实例的区域。

REST

  1. 选择一个映像。请记下映像或映像系列的名称以及包含该映像的项目的名称。
  2. 使用 instances.insert 方法通过映像系列或特定版本的操作系统映像创建实例:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    

    替换以下内容:

    • PROJECT_ID:要在其中创建实例的项目的 ID
    • ZONE:要在其中创建实例的可用区

    请求正文示例:

    {
     "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
     "name": "INSTANCE_NAME",
     "networkInterfaces": [
       {
         "subnetwork": "regions/REGION/subnetworks/SUBNET",
         "stackType": "IPV4_IPV6"
       }
     ],
     "disks": [
       {
         "initializeParams": {
           "sourceImage": "IMAGE_URI"
         },
         "boot": true
       }
     ],
    }
    

    替换以下内容:

    • MACHINE_TYPE_ZONE:包含新实例将使用的机器类型的可用区
    • MACHINE_TYPE:新实例的预定义自定义机器类型。例如 n1-standard-1
    • INSTANCE_NAME:新实例的名称。
    • SUBNET:已配置 IPv6 的子网。
    • REGION:子网的区域。
    • IMAGE_URI:您要使用的映像的 URI。

      例如,如果您指定 "sourceImage": "projects/debian-cloud/global/images/family/debian-10",则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建计算实例。

创建仅限 IPv6 的实例

如需创建仅限 IPv6 的实例,请按照本部分中的步骤操作。

对于具有单个网络接口的 Compute Engine 实例,该实例可以具有内部或外部 IPv6 地址,具体取决于其接口连接到的子网的 IPv6 访问权限类型。您必须创建一个包含 IPv6 地址范围的子网的自定义模式 VPC 网络。

您必须先创建以下内容,然后才能创建同时使用内部和外部 IPv6 地址的多 NIC 虚拟机实例:

  • 启用了 IPv6 ULA 的自定义模式 VPC 网络、具有 IPv6 地址范围的子网,以及将访问类型设置为 internal
  • 第二个自定义模式 VPC 网络、第二个 IPv6 地址范围子网,以及设置为 external 的访问类型。

创建实例时,您需要配置两个网络接口,一个连接到具有内部 IPv6 地址范围的子网,另一个连接到具有外部地址范围的子网。

如果您使用共享 VPC,并且想要创建连接到共享子网的仅 IPv6 实例,请参阅共享 VPC 文档中的创建实例

控制台

  1. 转到创建实例页面。

    转到“创建实例”

  2. 输入实例的名称

  3. 选择一个区域,其中包含配置了 IPv6 范围的子网。

  4. 可选操作:更改此实例的可用区。如果您选择任意,Google 会根据机器类型和可用性为您自动选择可用区。

  5. 展开高级选项部分。

  6. 展开网络,然后执行以下操作:

    1. 网络接口部分中,点击网络接口名称以修改网络接口的设置。

    2. 对于网络子网,选择要使用的网络和子网。

    选择已配置 IPv6 范围的子网。子网的 IPv6 访问权限类型决定了实例是接收内部 IPv6 地址还是外部 IPv6 地址。

    1. 对于 IP 栈类型,请选择 IPv6(单栈)

    2. 主要内部 IPv6 地址字段中,选择以下选项之一:

      • 自动分配 (/96),可分配新的临时 IPv6 地址
      • 列表中的预留 IPv6 地址
      • 预留静态内部 IPv6 地址,以分配新的静态 IPv6 地址
    3. 可选:如需添加外部 IPv6 地址,请选择添加网络接口

      1. 对于网络子网,请选择您为外部 IPv6 地址配置的网络和子网。
      2. 对于外部 IPv6 地址,选择以下选项之一:

        • 自动分配,可分配新的临时 IPv6 地址
        • 列表中的预留 IPv6 地址
        • 预留静态外部 IPv6 地址,以分配新的静态 IPv6 地址。
    4. 如需完成网络接口的修改,请点击完成

  7. 继续进行实例创建过程。

  8. 点击创建

gcloud

使用 gcloud compute instances create 命令创建实例。如需同时分配内部和外部 IPv6 地址,您必须创建至少具有两个网络接口的实例。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --machine-type=MACHINE_TYPE \
    --create-disk=boot=yes,image='projects/IMAGE_PROJECT/global/images/IMAGE',size=SIZE \
    --network-interface=network=NETWORK_INTERNAL_NAME,subnet=SUBNET_INTERNAL_NAME,stack-type=IPV6_ONLY \
    --network-interface=network=NETWORK_EXTERNAL_NAME,subnet=SUBNET_EXTERNAL_NAME,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM

替换以下内容:

  • INSTANCE_NAME:实例的名称
  • ZONE:实例创建所在的可用区,例如 europe-west1-b。实例的区域是根据地区推断出来的。
  • MACHINE_TYPE(可选):用于实例的机器类型。
  • IMAGE_PROJECT:可选:包含映像的映像项目
  • IMAGE:可选:指定以下其中一项:
    • 操作系统映像的特定版本,例如 debian-12-bookworm-v202410095
    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践
  • SIZE:可选:新磁盘的大小。 值必须为整数。默认的测量单位为 GiB。
  • NETWORK_EXTERNAL_NAMENETWORK_INTERNAL_NAME:为内部 IP 地址或外部 IP 地址配置的网络的名称
  • SUBNET_EXTERNAL_NAMESUBNET_INTERNAL_NAME:配置为与实例搭配使用内部 IP 地址或外部 IP 地址的子网的名称。

REST

  1. 选择一个映像。请记下映像或映像系列的名称以及包含该映像的项目的名称。
  2. 使用 instances.insert 方法通过映像系列或特定版本的操作系统映像创建实例:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    

    替换以下内容:

    • PROJECT_ID:要在其中创建实例的项目的 ID
    • ZONE:要在其中创建实例的可用区

    请求正文示例:

    {
     "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
     "name": "INSTANCE_NAME",
     "disks": [
       {
         "initializeParams": {
           "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot": true
       }
     ],
     "networkInterfaces": [
       {
         "subnetwork": "regions/REGION/subnetworks/SUBNET_INTERNAL",
         "stackType": "IPV6_ONLY"
       },
       {
         "subnetwork": "regions/REGION/subnetworks/SUBNET_EXTERNAL",
         "stackType": "IPV6_ONLY"
       }
     ]
    }
    

    替换以下内容:

    • MACHINE_TYPE_ZONE:包含新实例将使用的机器类型的可用区
    • MACHINE_TYPE:新实例的预定义自定义机器类型。例如 c3-standard-4
    • INSTANCE_NAME:新实例的名称。
    • IMAGE_PROJECT:可选:包含映像的映像项目
    • IMAGE:可选:指定以下其中一项
      • 操作系统映像的特定版本,例如 debian-12-bookworm-v20241009
      • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践
    • REGION:子网的区域。
    • SUBNET_INTERNAL:已配置内部 IPv6 地址的子网。
    • SUBNET_EXTERNAL:已配置外部 IPv6 地址的子网。

更改实例的堆栈类型

您可以更改现有 Compute Engine 实例的堆栈类型。堆栈类型可设置为以下任一项:

  • 仅 IPv4(单栈)
  • IPv4 和 IPv6(双栈)

如果要将堆栈类型更改为双栈,则必须将实例连接到双栈子网。如果您需要更改实例连接的子网,请停止实例并更改子网。更新子网后,您可以更改实例的 IP 栈类型。

您无法更改仅 IPv6 实例的栈类型(预览版)。

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击要为其分配 IPv6 地址的实例的名称。

  3. 在实例详细信息页面中,完成以下步骤:

    1. 点击修改
    2. 网络接口中,展开您要修改的接口。
    3. 选择 IP 堆栈类型仅 IPv4(单栈)IPv4 和 IPv6(双栈)
    4. 点击完成
  4. 点击保存

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_ONLYIPV4_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_ONLYIPV4_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 方法