如果虚拟机实例连接的子网配置了 IPv6 范围,则您可以在虚拟机实例上配置 IPv6 地址。
如需详细了解 IPv6,请参阅 IPv6 子网范围。
规格
同时具有 IPv4 和 IPv6 配置的虚拟机是双栈。系统会为双栈虚拟机上的接口分配一个
/96
范围的 IPv6 地址;范围 (/128
) 中的第一个 IPv6 地址在接口上配置。IPv6 地址是接口上配置的任何 IPv4 地址的补充。您无法将虚拟机配置为仅具有 IPv6 地址。虚拟机上的任何接口都可以配置 IPv6 地址。如需详细了解如何配置多个网络接口,请参阅多个网络接口概览。
如需在虚拟机接口上配置 IPv6 地址,则该接口必须连接到双栈子网。
子网的 IPv6 访问类型配置决定了该子网是具有内部还是外部 IPv6 范围。连接的虚拟机会从子网继承 IPv6 访问类型。
使用 IPv6 地址访问虚拟机
隐式 IPv6 拒绝入站防火墙规则通过禁止传入实例 IPv6 地址的连接来保护实例。如需使用虚拟机 IPv6 地址访问虚拟机,您必须具有允许传入访问的更高优先级规则。
如需详细了解防火墙规则,请参阅 VPC 防火墙概览和分层防火墙政策概览。
如需查看 VPC 防火墙规则示例,请参阅为常见用例配置防火墙规则。
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 值。如需了解详情,请参阅最大传输单元概览。
创建双栈虚拟机
如需创建双堆栈虚拟机,请将虚拟机连接到双栈子网。
如果您使用共享 VPC,并且想要创建连接到共享子网的双栈虚拟机,请参阅共享 VPC 文档中的创建实例。
控制台
转到创建实例页面。
输入实例的名称。
选择一个区域,其中包含配置了 IPv6 范围的子网。
选择一个可用区。
展开高级选项部分。
展开网络,然后执行以下操作:
在网络接口部分中,点击网络接口以进行修改。
对于网络和子网,选择要使用的网络和子网。
选择已配置 IPv6 范围的子网。子网的 IPv6 访问权限类型决定了虚拟机是接收内部 IPv6 地址还是外部 IPv6 地址。
对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)。
对于主要内部 IP,选择以下选项之一:
- 临时,可分配新的临时 IPv4 地址
- 列表中的预留 IPv4 地址
- 静态,可分配新的静态 IPv4 地址
对于外部 IPv4 地址,选择以下选项之一:
- 临时,可分配新的临时 IPv4 地址
- 无,不分配外部 IPv4 地址
- 列表中的预留 IPv4 地址
- 创建新的 IP 地址,以分配新的静态 IPv4 地址。
如需完成网络接口的修改,请点击完成。
继续虚拟机创建过程。
点击创建。
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
- 选择一个映像。请记下映像或映像系列的名称以及包含该映像的项目的名称。
使用
instances.insert
方法从映像系列或操作系统映像的特定版本创建虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
替换以下内容:
PROJECT_ID
:要在其中创建虚拟机的项目的 IDZONE
:要在其中创建虚拟机的可用区
请求正文示例:
{ "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 映像系列中最新版本的操作系统映像创建虚拟机。
更改虚拟机的堆栈类型
您可以更改现有虚拟机的堆栈类型。堆栈类型可设置为以下任一项:
- 仅 IPv4(单栈)
- IPv4 和 IPv6(双栈)
如果要将堆栈类型更改为双栈,则必须将虚拟机连接到双栈子网。如果您需要更改虚拟机连接的子网,请停止虚拟机并更改子网。更新子网后,您可以更改虚拟机的 IP 堆栈类型。
控制台
- 转到虚拟机实例页面。
- 点击要为其分配 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
:实例的名称。ZONE
:部署实例的可用区。STACK_TYPE
:虚拟机的堆栈类型:IPV4_ONLY
或IPV4_IPV6
。
REST
向 instances.updateNetworkInterface
方法发出 PATCH
请求,以更新虚拟机的堆栈类型。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONEinstances/INSTANCE_NAME/updateNetworkInterface
替换以下内容:
PROJECT_ID
:包含实例的项目的 ID。ZONE
:部署实例的可用区。INSTANCE_NAME
:实例的名称。
请求正文示例:
{ "stackType": "STACK_TYPE", }
将 STACK_TYPE
替换为虚拟机的堆栈类型:IPV4_ONLY
或 IPV4_IPV6
。
创建使用 IPv6 地址的实例模板
您可以创建可用于创建双栈虚拟机的区域或全局实例模板。如需了解详情,请参阅创建实例模板。
您必须使用 Google Cloud CLI 或 REST 来创建创建双栈虚拟机的实例模板。
gcloud
如需创建区域或全局实例模板,请使用 gcloud compute instance-templates create
命令。如果您要创建区域实例模板,则必须使用 --instance-template-region
标志来指定实例模板的区域。
以下示例将创建一个全局实例模板:
gcloud compute instance-templates create TEMPLATE_NAME \ --subnet=SUBNET \ --stack-type=IPV4_IPV6
替换以下内容:
TEMPLATE_NAME
:模板的名称。SUBNET
:具有 IPv6 子网范围的子网。
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": "IPV4_IPV6", }, ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "initializeParams": { "sourceImage": "IMAGE_URI" } } ] } }
替换以下内容:
INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:虚拟机的机器类型。例如n1-standard-1
。SUBNET
:具有 IPv6 子网范围的子网。REGION
:子网的区域。IMAGE_URI
:您要使用的映像的 URI。例如,如果您指定
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
如需详细了解请求参数,请参阅 instanceTemplates.insert
方法。