1. 简介
Google Cloud 中的 IP 地址选项
IP 地址有助于识别网络和网络中的主机。IP 地址类型包括 IPv4 和 IPv6。这些地址应具有唯一性,以便网络上的流量能够识别数据包交换的来源和目标。IP 地址并非 Google Cloud 独有,在云环境和本地环境中都存在。
Virtual Private Cloud (VPC)
VPC 是传统数据中心的逻辑表示形式。除了默认 VPC 和自动模式 VPC 之外,Google Cloud 还允许您创建自定义 VPC。借助这些自定义 VPC,您可以完全管理 VPC 配置。
负载均衡器
借助负载平衡器,您可以跨应用的多个实例分配流量。Google Cloud 提供了多种负载平衡器类型,如负载均衡文档中所列。在本实验中,我们将创建一个全球外部应用负载平衡器来访问我们的简单网站。
Cloud NAT
这样,您的私有子网便可与互联网通信。其工作原理是将您的内部 IP 地址转换为公共 IP 地址,以连接到外部主机。然后,NAT 网关会对来自外部来源的返回流量进行反向转换,以使用专用寻址将流量返回给客户端。连接以出站方式发起。
虚拟机
这些是运行操作系统的虚拟系统。这些组件可以根据用户要求进行配置,包括内存、存储空间、网络和操作系统组件。
构建内容
在此 Codelab 中,您将创建两个自定义 VPC,并启用和配置 IPv4 和 IPv6 地址类型(内部和外部)。您还将在具有专用 IP 地址的虚拟机上构建一个简单的 nginx 服务器,使用外部应用负载平衡器公开该服务器,并使用 IPv4 和 IPv6 地址连接到该服务器:
- 创建两个自定义 VPC 并添加一些防火墙规则
- 创建单栈 IPv4 子网和双栈 IPv4_IPv6 子网
- 为子网中的专用资源创建 NAT 网关,以便获取更新
- 使用 MIG 创建专用虚拟机 Apache 服务器
- 通过具有静态 IPv4 和 IPv6 地址的应用负载平衡器公开专用虚拟机服务器
- 创建外部 IPv4、IPv6 客户端
- 从客户端连接到 IPv4 和 IPv6 应用负载平衡器地址

学习内容
- 如何创建自定义 VPC
- 如何在子网上启用 IPv6
- 如何设置防火墙规则
- 如何创建 NAT 网关
- 如何创建托管式实例组
- 如何创建 IPv4、IPv6 客户端
- 如何创建静态 IP 地址
- 如何创建应用负载平衡器
此 Codelab 重点介绍 IP 地址,还会专门使用虚拟机和负载平衡器。
所需条件
- 用于连接到 Google Cloud 控制台的网络浏览器
- 能够创建 VPC 和防火墙规则
- 能够使用 SSH
- Google Cloud 账号
2. 准备工作
实验设置
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。



- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中是唯一的,并且是不可变的(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用
PROJECT_ID标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。 - 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除项目。Google Cloud 新用户符合参与 300 美元免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。
3. 配置自定义 VPC
为什么要使用自定义 VPC?
在本实验中,我们将添加一些防火墙规则,包括针对 IPv6 流量的规则,最好将这些规则与默认网络分开。此外,我们还将在子网上启用 IPv6。其中一项要求是,必须在自定义模式网络中启用此功能。不支持在自动模式网络中自动创建子网。
设置具有内部 IPv6 的自定义 VPC
- 在“网络”下,选择“VPC 网络”
- 从顶部选择创建 VPC 网络

- 在“创建 VPC 网络”部分中,添加以下内容:
- 为网络输入名称 ipv4-ipv6-network
- 在 VPC 网络 ULA 内部 IPv6 范围部分,选择已启用
- 在分配 ULA 内部 IPv6 范围部分中,选择自动
- 为子网创建模式选择自定义。
- 在新子网部分,为子网指定以下配置参数:
配置 | 值 |
名称 | ipv4 |
区域 | europe-west1 |
IP 栈类型 | IPv4(单栈) |
IPv4 范围 | 192.168.10.0/24 |
创建次要 IPv4 范围 | 选择 |
子网范围名称 1 | ipv4-sec |
次要 IPv4 范围 1 | 10.0.10.0/24 |
- 选择完成
- 我们将添加另一个子网并启用 IPv6。如需添加其他子网,请选择“添加子网”。在新子网部分,为子网指定以下配置参数:
- 在子网的名称字段中,输入 ipv6net
- 在区域部分,选择 us-central1
- 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
- 输入 IPv4 范围,使用 192.168.20.0/24
- 在 IPv6 访问权限类型字段中,选择内部
- 选择完成
- 在防火墙规则部分中,选择以下内容
- 在“IPv4 防火墙规则”标签页上,选择所有可用选项:allow-custom(用于内部通信)、allow-icmp、allow-rdp、allow-ssh。
- 在“IPv6 防火墙规则”标签页上,选择所有可用选项:allow-ipv6-custom(用于内部通信)、allow-ipv6-icmp、allow-ipv6-rdp、allow-ipv6-ssh。
这些选项会自动为新子网创建匹配规则。
设置具有外部 IPv6 的自定义 VPC
- 在“网络”下,选择“VPC 网络”
- 从顶部选择创建 VPC 网络

- 在“创建 VPC 网络”部分中,添加以下内容:
- 输入网络的名称,即 external-ipv6-network
- 在 VPC 网络 ULA 内部 IPv6 范围部分,选择已启用
- 在分配 ULA 内部 IPv6 范围部分中,选择自动
- 为子网创建模式选择自定义。
- 在新子网部分,为子网指定以下配置参数:
- 在子网的名称中,输入 ipv6-external
- 对于区域,选择 us-east1
- 对于 IP 栈类型,请选择 IPv4 和 IPv6(双栈)
- 输入 IPv4 范围,使用 192.168.200.0/24
- 对于 IPv6 访问权限类型,选择外部
- 选择完成
- 在防火墙规则部分中,选择以下内容
- 在“IPv4 防火墙规则”标签页上,选择所有可用选项:allow-custom(用于内部通信)、allow-icmp、allow-rdp、allow-ssh。
- 在“IPv6 防火墙规则”标签页上,选择所有可用选项:allow-ipv6-custom(用于内部通信)、allow-ipv6-icmp、allow-ipv6-rdp、allow-ipv6-ssh。在本实验中,我们将使用此选项在新子网中自动创建匹配规则。
验证防火墙规则
防火墙规则控制功能可让您拒绝流向服务的流量。
如需验证规则是否存在,请执行以下操作:
- 前往 VPC 网络
- 在左侧面板中,选择“防火墙”

- 查看显示区域,确保您看到为新创建的网络设置的防火墙规则。向右滚动,找到“网络”列,然后向下滚动。您应该会在防火墙规则的网络列中看到您创建的网络名称。在本例中,为 ipv4-ipv6-network 和 external-ipv6-network。该名称在项目中必须是唯一的。
- 接下来,我们将创建一个新的防火墙规则以允许健康检查
- 如果 Cloud Run 尚未打开,请选择顶部栏中的激活 Cloud Shell (
) 以打开 Cloud Run。Cloud Shell 会话随即会打开,并显示命令行提示。确保您位于正确的项目中,然后粘贴以下代码。
gcloud compute firewall-rules create ipv4-ipv6-hc \ --direction=INGRESS \ --network=ipv4-ipv6-network \ --action=ALLOW \ --rules=tcp:80,tcp:8080,tcp:443 \ --source-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22 \ --target-tags=ipv6-server
- 完成后,验证您是否看到附加到 ipv4-ipv6-network 的防火墙规则 ipv6-ipv4-hc 的条目
4. 配置 NAT 网关
- 前往网络服务
- 选择 Cloud NAT,然后选择开始使用

- 网关名称使用 ipv4-ipv6-nat
- 网络选择 ipv4-ipv6-network
- 在“区域”部分,选择 us-central1
- Cloud Router 选择“创建新路由器”
- 在“创建路由器”页面上,配置以下内容:
- 名称 ipv4-ipv6-nat-router
- 将所有其他设置保留为默认值,然后选择创建
- 返回创建 Cloud NAT 网关 页面,将其他选项保留原样,然后选择创建
5. 在私有 VPC 中配置实例
创建实例模板私有 VPC
- 打开 Cloud Shell。
- 如果您有多个项目,请验证您是否位于正确的项目中
- 复制并粘贴以下内容
gcloud compute instance-templates create ipv6-internal-server \ --region=us-central1 \ --network-interface=subnet=ipv6net,no-address,stack-type=IPV4_IPV6 \ --machine-type=n1-standard-1 \ --metadata=^,@^startup-script=\#\!/bin/bash$'\n'\#\ package\ updates\ \ \ \ \ \ $'\n'apt\ update\ -y$'\n'apt\ install\ nginx\ -y$'\n'systemctl\ start\ nginx$'\n'systemctl\ enable\ nginx$'\n'systemctl\ status\ nginx\ \|\ grep\ Active$'\n'chown\ -R\ \$USER:\$USER\ /var/www$'\n'cd\ /var/www/html/$'\n'echo\ \'\<\!DOCTYPE\ html\>\'\ \>\ /var/www/html/index.html$'\n'echo\ \'\<html\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<head\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<title\>Awesome\ web\ app\</title\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<meta\ charset=\"UTF-8\"\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\</head\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<body\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<h1\>IPv6\ server\</h1\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\<h3\>You\ are\ successful\</h3\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\</body\>\'\ \>\>\ /var/www/html/index.html$'\n'echo\ \'\</html\>\'\ \>\>\ /var/www/html/index.html$'\n' --tags=ipv6-server,http-server,https-server \ --create-disk=auto-delete=yes,boot=yes,device-name=ipv6-internal-server,image=projects/debian-cloud/global/images/debian-11-bullseye-v20230306,mode=rw,size=20,type=pd-balanced
- 前往 Compute Engine
- 选择实例模板
- 在实例模板窗口中,确保您看到刚刚创建的模板

- 点击模板名称,然后向下滚动以查看配置。
- 在网络接口下,确保您看到堆栈类型为 IPv4 和 IPv6

在私有 VPC 中创建实例组
- 前往 Compute Engine
- 选择展开实例组
- 选择健康检查

- 选择创建健康检查
- 在创建健康检查页面上,使用以下内容:
- 名称使用 ipv6-server-hc
- 协议 TCP 端口 80
- 滚动到“运行状况判断标准”部分
- 检查间隔 10,超时时间 5
- 运行状况良好判断阈值 2,运行状况不佳判断阈值 4

- 滚动到末尾,然后选择创建
- 前往 Compute Engine
- 选择实例组
- 选择创建实例组
- 选择新建托管式实例组(有状态)
- 名称使用 ipv6-server-igp
- 对于实例模板,请使用 ipv6-internal-server
- 对于实例数,请使用 2
- 对于位置,请使用单个地区,并确保区域为 us-central1
- 在自动修复下,向下滚动:
- 健康检查使用 ipv6-server-hc
- 对于初始延迟时间,输入 120
- 将所有其他设置保留为默认值,然后选择创建
创建实例组需要几分钟才能完成
验证实例组和虚拟机
实例组创建完成后,我们来验证一下
- 前往 Compute Engine,然后选择实例组
- 选择您刚刚创建的实例组的名称 ipv6-server-igp
- 确保您看到以下内容:
- 实例(按状态划分)2 个实例(如果尚未显示健康状况良好,请稍等片刻,以便运行所有健康检查)
- 实例(按健康状况划分)健康状况为 100%
接下来,我们直接跳到此实例组中的虚拟机,并进行一些测试
- 选择虚拟机实例,您应该会看到两个名称以 ipv6-server-igp 开头的虚拟机
- 在内部 IP 列中,您应该会看到 IPV4 和 IPV6 地址。记下每个服务器的这两个地址。
- 选择第一个虚拟机旁边的“SSH”。这样即可直接打开与服务器的 SSH 会话。
- 在 SSH 窗口中,输入
curl localhost。您应该会收到来自虚拟机上运行的 Web 服务器的响应,其中显示了如下所示的 HTML:

- 接下来,输入
ip addr以显示地址信息。验证 exxx 接口是否具有与您在第 6 步中记录的此虚拟机的 IPv4 和 IPv6 地址相同的地址 - 从该虚拟机对第二个虚拟机的 IPv4 地址执行
ping -c 4 XXXX,然后使用第二个虚拟机的 IPv6 地址执行相同的操作。

- <可选> 您可以通过 SSH 连接到第二个虚拟机并进行相同的测试。尝试 ping 虚拟机 1 的 IPv4 和 IPv6 地址。
在专用 VPC 中创建仅限 IPv4 的独立实例
- 前往 Compute Engine
- 选择虚拟机实例,然后选择创建实例
- 按如下方式填写配置页面:
- 名称使用 ipv4-only
- 在“区域”部分,选择 europe-west1
- 向下滚动,展开“高级选项”,然后展开“网络”。现在,请使用以下内容:在网络接口
下
- 选择“默认”旁边的下拉箭头,即可查看修改界面选项

- 对于网络更改为 ipv4-ipv6-network
- 子网 ipv4
- 外部 IPv4 地址选择无
- 选择完成
- 滚动到末尾,然后选择创建
- 创建虚拟机需要几分钟时间。此虚拟机位于仅限 IPv4 的子网中,未分配外部 IP 地址。如需验证,请前往“虚拟机实例”页面,找到名为 ipv4-only 的虚拟机


- 选择 SSH 以通过 SSH 连接到名为 ipv4-only 的虚拟机
- 对之前创建的任何以 ipv6-server-igp 开头的虚拟机的专用 IPv4 地址执行
ping -c 4 X.X.X.X。您可以成功 ping 这些虚拟机的内部 IPv4 地址。
6. 在专用 VPC 中创建具有 IPv4 和 IPv6 地址的应用负载平衡器
创建两个静态外部 IP
- 前往 VPC 网络
- 选择 IP 地址,然后选择预留外部静态地址
- 对于 IPv4 地址,请使用以下命令:
- 名称 ipv4-lb-ip
- IP 版本 IPv4
- 类型 Global
- 滚动到末尾,然后选择预留
- 对于 IPv6 地址,请重复执行第 2 步,并使用以下命令:
- 名称 ipv6-lb-ip
- IP 版本 IPv6
- 类型 Global
- 滚动到末尾,然后选择预留
记录这些 IP 地址。您将需要它们来测试最后一部分中的连接。
创建外部应用 LB
- 前往网络服务
- 选择创建负载平衡器
- 在负载平衡器的类型下,选择应用负载平衡器 (HTTP/HTTPS),然后点击下一步
- 在公共或内部下,选择公共(外部),然后点击下一步
- 在全球或单区域部署下,选择最适合全球性工作负载,然后点击下一步。
- 在负载平衡器世代下,选择全球外部应用负载平衡器,然后点击下一步。
- 选择配置
- 在顶部的创建全球外部应用负载平衡器下,使用名称 ipv4-ipv6-lb-demo
- 接下来,选择“前端配置”,然后使用以下内容:
- 名称 ipv4-fe-lb
- 协议 HTTP
- IP 版本 IPv4
- IP 地址:选择 ipv4-lb-ip 以分配我们创建的静态外部 IPv4 IP
- 端口 80
- 选择“完成”
- 在前端下,我们来配置 IPv6 附件,选择添加前端 IP 和端口:

- 名称 ipv6-fe-lb
- 协议 HTTP
- IP 版本 IPv6
- IP 地址:选择 ipv6-lb-ip 以分配我们创建的静态外部 IPv6 IP
- 端口 80
- 选择“完成”
- 在右侧窗格中选择后端配置,然后在后端服务和后端存储分区下选择创建后端服务,并使用以下内容:
- 名称 server-backend
- 后端类型:实例组
- 协议 HTTP
- 实例组 ipv6-server-igp
- 端口号 80、8080
- 取消选中“启用 Cloud CDN”

- 健康检查选择 ipv6-server-hc
- 滚动到末尾,然后选择“创建”
- 然后选择“确定”图标

- 滚动到页面底部,然后选择“创建”。完成后,您应该会看到以下内容

- 点击新负载平衡器的名称,然后在前端下记下 IPv4 和 IPv6 地址。您需要在最后一次测试中使用这些信息。
7. 创建具有外部和内部 IPv4 及 IPv6 地址的单个实例
创建具有外部 IPv4 和 IPv6 地址的独立实例
- 前往 Compute Engine
- 选择虚拟机实例,然后选择创建实例
- 按如下方式填写配置页面:
- 名称使用 external-ipv4-ipv6
- 选择 us-east1 区域
- 向下滚动,展开“高级选项”,然后展开“网络”。现在,请使用以下内容:
- 在“网络接口”下,选择网络 external-ipv6-network
- 子网 ipv6-external
- IP 栈类型 IPv4 和 IPv6(双栈)
- 外部 IPv4 地址选择临时
- 选择完成
- 滚动到末尾,然后选择创建
- 创建虚拟机需要几分钟时间。此虚拟机位于具有外部 IPv6 地址访问权限的 IPv4_IPv6 子网中。如需验证,请前往“虚拟机实例”页面,找到名为 external-ipv4-ipv6 的虚拟机

- 选择 SSH 选项,以通过 SSH 连接到 external-ipv4-ipv6 虚拟机
- 输入
ip addr以检查分配给虚拟机的 IPv4 和 IPv6 地址 - 前往 ipv4-ipv6-lb-demo 的 IPv4 地址
- 在 external-ipv4-ipv6 虚拟机 SSH 会话中,输入
curl X.X.X.X,其中 X.X.X.X 是 ipv4-ipv6-lb-demo 负载平衡器的 IPv4 地址。您应该会看到在 ipv4-ipv6-network 中的服务器上运行的网站的 HTML - 在 external-ipv4-ipv6 虚拟机 SSH 会话类型
curl [X:X:X:X]:80中,其中 X:X:X:X 是 ipv4-ipv6-lb-demo 负载平衡器的 IPv6 地址。它应类似于curl [2600:1901:X:XXXX::]:80您应该会看到在 ipv4-ipv6-network 中的服务器上运行的网站的 HTML

8. 清理
如需清理项目,您可以运行以下命令。
gcloud compute instances delete external-ipv4-ipv6 --zone=us-east1-b --quiet gcloud compute instances delete ipv4-only --zone=europe-west1-b --quiet gcloud compute forwarding-rules delete ipv4-fe-lb --global --quiet gcloud compute forwarding-rules delete ipv6-fe-lb --global --quiet gcloud compute target-http-proxies delete ipv4-ipv6-lb-demo-target-proxy --quiet gcloud compute target-http-proxies delete ipv4-ipv6-lb-demo-target-proxy-2 --quiet gcloud compute url-maps delete ipv4-ipv6-lb-demo --quiet gcloud compute backend-services delete server-backend --global --quiet gcloud compute addresses delete ipv4-lb-ip --global --quiet gcloud compute addresses delete ipv6-lp-ip --global --quiet gcloud compute instance-groups managed delete ipv6-server-igp --zone us-central1-a --quiet gcloud compute instance-templates delete "ipv6-internal-server" --quiet gcloud compute health-checks delete ipv6-server-hc --quiet gcloud compute routers nats delete ipv4-ipv6-nat --router=ipv4-ipv6-nat-router --region=us-central1 --quiet gcloud compute routers delete ipv4-ipv6-nat-router --region=us-central1 --quiet gcloud compute firewall-rules delete external-ipv6-network-allow-ipv6-custom external-ipv6-network-allow-ipv6-ssh external-ipv6-network-allow-rdp external-ipv6-network-allow-ipv6-rdp external-ipv6-network-allow-ssh external-ipv6-network-allow-ipv6-icmp external-ipv6-network-allow-custom external-ipv6-network-allow-icmp --quiet gcloud compute firewall-rules delete ipv4-ipv6-hc ipv4-ipv6-network-allow-custom ipv4-ipv6-network-allow-ipv6-icmp ipv4-ipv6-network-allow-icmp ipv4-ipv6-network-allow-ssh ipv4-ipv6-network-allow-rdp ipv4-ipv6-network-allow-ipv6-ssh ipv4-ipv6-network-allow-ipv6-rdp ipv4-ipv6-network-allow-ipv6-custom --quiet gcloud compute networks subnets delete ipv4 --region=europe-west1 --quiet gcloud compute networks subnets delete ipv6net --region=us-central1 --quiet gcloud compute networks subnets delete ipv6-external --region=us-east1 --quiet gcloud compute networks delete external-ipv6-network --quiet gcloud compute networks delete ipv4-ipv6-network --quiet
9. 恭喜
恭喜!您已成功探索了 IPv4 和 IPv6 网络选项!
参考文档
上次更新手册的时间:2023 年 3 月
上次测试实验的时间:2023 年 3 月