使用 VPC/VPN 网关对云资源进行安全的专用内部部署访问
本教程将产生费用。 使用“成本估算器”根据您的预计使用量生成成本估算。
IBM 提供了多种方法来使用 IBM Cloud 中的资源安全地扩展内部部署计算机网络。 这样,您就可以在需要时灵活调配云资源,并在不再需要时移除这些资源。 此外,您可以轻松、安全地将内部部署功能连接到 IBM Cloud 服务。
本教程提供了用于创建资源的自动化功能,这些资源演示内部部署服务器与云资源 (例如 IBM Cloud® Virtual Private Cloud 虚拟服务实例 (VSI) 和 IBM Cloud 数据服务) 之间的虚拟专用网 (VPN) 连接。 还配置了针对云资源的 DNS 解析。 流行的 strongSwan VPN 网关用于表示内部部署 VPN 网关。
目标
- 从本地数据中心访问虚拟私有云 (VPC) 环境
- 使用专用端点网关安全地访问云服务
- 使用内部部署 DNS 通过 VPN 访问云资源
下图显示了本教程创建的资源
{: caption="*
Terraform 配置将创建以下资源:
- 基础结构 (VPC,子网,具有规则的安全组,Network ACL 和 VSI)。
- Object Storage 和 Databases for PostgreSQL 专用端点网关到数据服务。
- strongSwan 开放式源代码 IPsec 网关软件以内部部署方式用于建立与云环境的 VPN 连接。
- 供应 VPC/VPN 网关以允许内部部署资源与云资源之间的专用连接。
- 本地 DNS 解析器连接到云 DNS 解析器位置,以允许 TLS 访问云资源,包括 通过 VPN 访问虚拟专用端点网关。
准备工作
本教程需要:
- IBM Cloud CLI,
- IBM Cloud Schematics 插件 (
schematics
),
- IBM Cloud Schematics 插件 (
jq
以查询 JSON 文件,git
以 (可选) 克隆源代码存储库,Terraform CLI
(可选) 在桌面上运行 Terraform,而不是 Schematics 服务。
您将在 教程入门 指南中找到有关为您的操作环境下载和安装这些工具的指示信息。
本教程中的本地数据中心将使用 VPC 中的 VSI 进行模拟。
连接 VPC 的首选机制是 Transit Gateway。 使用 VPC,VSI 和 VPN 模拟本地环境仅用于说明。
此外:
- 检查用户许可权。 确保您的用户帐户具有创建和管理 VPC 资源所需的足够许可权。 有关所需权限的列表,请参阅 授予 VPC 资源所需的权限。
- 您需要 SSH 密钥来连接到虚拟服务器。 如果您没有 SSH 密钥,请参阅创建密钥的指示信息。
使用 Schematics 来创建资源
- 登录到 IBM Cloud。
- 浏览至 创建 Schematics 工作空间,在 指定模板 部分下,验证:
- 存储库 URL 为
https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-site2site-vpn
- Terraform 版本为 terraform_v1.2
- 存储库 URL 为
- 在 工作空间详细信息下,
- 提供工作区名称:vpnsts。
- 选择
Resource Group
和Location
。 - 点击下一步。
- 验证详细信息,然后点击创建。
- 在 变量 部分下,通过单击溢出菜单并为每行选择 编辑 来提供必需值 (resource_group_name,ssh_key_name)。 变量 maintenance 的值必须设置为 true。
- 滚动到页面顶部并单击“应用计划”。 请检查日志以查看所创建服务的状态。
通过单击下面并选择具有匹配前缀的实例来浏览已创建的资源。 在上面的图中找到所有资源。
验证连接
Schematics 工作空间输出包含可用于验证 VPN 连接的变量。
-
获取工作空间列表,记录标识列,设置 shell 变量:
ibmcloud schematics workspace list
-
设置 WORKSPACE_ID 变量:
WORKSPACE_ID=YOUR_WORKSPACE_ID
-
获取云资源的环境变量:
ibmcloud schematics output --id $WORKSPACE_ID --output json | jq -r '.[0].output_values[].environment_variables.value'
-
输出结果如下 将这些结果复制/粘贴到 shell 中,以便在环境中设置这些结果:
IP_FIP_ONPREM=169.48.x.x IP_PRIVATE_ONPREM=10.0.0.4 IP_PRIVATE_CLOUD=10.1.1.4 IP_FIP_BASTION=52.118.x.x IP_PRIVATE_BASTION=10.1.0.4 IP_DNS_SERVER_0=10.1.0.5 IP_DNS_SERVER_1=10.1.1.6 IP_ENDPOINT_GATEWAY_POSTGRESQL=10.1.1.9 IP_ENDPOINT_GATEWAY_COS=10.1.1.5 HOSTNAME_POSTGRESQL=a43ddb63-dcb1-430a-a2e4-5d87a0dd12a6.6131b73286f34215871dfad7254b4f7d.private.databases.appdomain.cloud HOSTNAME_COS=s3.direct.us-south.cloud-object-storage.appdomain.cloud PORT_POSTGRESQL=32525
-
现在,您可以通过 SSH 登录到遵循不同路径的每个实例,包括通过 VPN 跳转。 该图显示了这些步骤所执行的通信路径。
如果 SSH 密钥不是 SSH 的缺省值,那么可以设置选项
-I PATH_TO_PRIVATE_KEY_FILE
或参阅 SSH 参考手册以获取更多帮助。

- 测试对本地 VSI 的访问权:
ssh root@$IP_FIP_ONPREM
- 测试对云堡垒的访问:
ssh root@$IP_FIP_BASTION
- 通过防御测试对云 VSI 的访问:
ssh -J root@$IP_FIP_BASTION root@$IP_PRIVATE_CLOUD
- 通过内部部署,VPN 隧道,堡垒测试对云 VSI 的访问:
ssh -J root@$IP_FIP_ONPREM,root@$IP_FIP_BASTION root@$IP_PRIVATE_CLOUD
- 通过堡垒,通过云 VSI,通过 VPN 隧道测试对内部部署 VSI 的访问:
ssh -J root@$IP_FIP_BASTION,root@$IP_PRIVATE_CLOUD root@$IP_PRIVATE_ONPREM
验证 DNS 解析
内部部署 DNS 解析已配置为使用 IBM Cloud VPC DNS 解析器位置。 这允许通过名称访问云服务并将其解析为专用端点网关的 IP 地址。
通过虚拟端点网关测试对 Postgresql 和对象存储器的 DNS 解析。 下面的图中显示了正在验证的两个路径:

-
访问本地 VSI。
ssh root@$IP_FIP_ONPREM
-
复制并粘贴先前捕获的三个 (3) 变量:
HOSTNAME_POSTGRESQL
,HOSTNAME_COS
和PORT_POSTGRESQL
。 -
运行
dig
命令以通过虚拟端点网关确认对数据库实例的解析。dig $HOSTNAME_POSTGRESQL
-
通过发出
telnet
命令来验证与数据库的连接。 它应该显示“已连接”。telnet $HOSTNAME_POSTGRESQL $PORT_POSTGRESQL
-
连接到数据库后,发出
Ctrl+C
以断开连接。 -
运行
dig
命令以通过虚拟端点网关确认对云对象存储器实例的解析。dig $HOSTNAME_COS
-
通过发出
telnet
命令来验证与云对象存储器实例的连接。 它应该显示“已连接”。telnet $HOSTNAME_COS 443
-
连接到云对象存储器实例后,发出
Ctrl+C
以断开连接。
如果存在问题,请参阅 GitHub 存储库中的 troubleshoot 部分。
(可选) 展开教程
想要补充或扩展本教程吗? 下面是一些构想:
- 在 GitHub 存储库 中,有一个可以部署的应用程序使用数据库和云对象存储器。 有关如何部署的指示信息,请参阅自述文件。
- 如果已部署应用程序,请为该应用程序 添加 DNS 区域。
- 在多个 Virtual Servers for VPC 上运行应用程序,并添加 负载均衡器 以分发入站微服务流量。
除去资源
- 浏览至 Schematics 工作空间,单击工作空间
- 单击操作...> 销毁资源
- 单击操作...> 删除工作区