VPN 服务器的规划注意事项
在创建客户机到站点 VPN 服务器之前,请查看以下注意事项。
缩放注意事项
对于独立 VPN,聚集带宽为 600 Mbps,对于高可用性 VPN 服务器,聚集带宽为 1200 Mbps。 最大活动客户机数为 2000。 如果需要更多带宽,或者有更多客户机需要与 VPN 服务器连接,那么可以在同一 VPC 中创建多个 VPN 服务器,也可以在不同区域的不同 VPC 中创建多个 VPN 服务器。
现有 VPC 配置注意事项
决定是否需要从客户机访问服务端点和 IaaS 端点。 这些端点通过 IBM Cloud 专用网络安全地连接到 IBM Cloud 服务。 如果需要访问这些端点,那么在供应 VPN 服务器时必须指定 DNS 服务器地址 161.26.0.10
和 161.26.0.11
。 请参阅 服务端点 和 IaaS 端点 以获取详细信息。
您还必须决定是否需要从客户机解析专用 DNS 名称。IBM Cloud DNS Services 向 VPC 用户提供专用 DNS。 如果需要访问这些端点,那么在供应 VPN 服务器时必须指定 DNS 服务器地址 161.26.0.7
和 161.26.0.8
。 有关详细信息,请参阅 关于 DNS Services。
当您指定此 DNS 服务器时,还必须在供应 VPN 服务器 (具有目标 161.26.0.0/16
和 translate
操作) 后创建 VPN 路由。
VPN 服务器供应注意事项
在供应 VPN 服务器时,请考虑以下事项。
客户端 IPv4 地址池
创建 VPN 服务器时,系统会提示您输入客户机 IPv4 地址池 (CIDR 范围)。 从该地址池为客户端分配其会话的 IP 地址。 请记住,客户机 IP 池属性不得与 VPC 地址前缀重叠。 如果客户机 IP 池与现有地址前缀重叠,那么 VPN 服务将验证客户机 IP 地址。
复审以下需求:
- 将从可配置 IP 池为每个活动 VPN 客户端分配一个 IP 地址。 您必须仔细选择 IP CIDR 范围,以确保它与 VPC 前缀和个人设备本地 CIDR 不重叠。
- 根据用例,客户机 IP 池不能与客户的本地设备 IP 地址重叠。 客户机 IP 池也不能与目标网络重叠; 例如,如果 VPN 服务器用于访问 IBM Cloud 经典网络,那么客户机 IP 不能与 IBM Cloud 经典网络重叠。
- 必须确保块大小至少为
/22
(1024
个可用 IP 地址)。 建议使用 CIDR 块,该块包含启用最大并发连接数所需的 IP 地址数的两倍。
子网: 高可用性与独立方式
创建 VPN 服务器时,可以指定高可用性或独立方式。
- 如果选择高可用性方式,那么必须跨不同专区中的两个子网部署 VPN 服务器。 将此方式用于生产部署。 最适合用于客户端 VPN 访问至关重要的多区域部署和解决方案。
- 如果选择独立方式,那么将 VPN 服务器部署在单个子网和区域中。 对于不需要多专区弹性的试验性非生产部署,请使用此方式。
VPN 服务器认证
必须在供应期间指定 VPN 服务器证书。 您可以使用 IBM Cloud Secrets Manager创建证书,也可以使用您自己的某个证书。
如果使用 CLI 或 API,那么必须指定证书的 CRN。 要获取证书 CRN,请参阅 定位证书 CRN。
如果 VPN 服务器仅使用用户标识和密码认证,那么只需指定 VPN 服务器证书 (包括公用/专用密钥和 CA 证书)。 VPN 服务从证书实例获取公用密钥和专用密钥,并将其存储在 VPN 服务器中。 此 CA 证书也会复制到客户机概要文件中,以便客户机可以使用 CA 证书来验证 VPN 服务器。
如果启用了证书认证,那么必须指定客户机 CA 证书。 不需要公用密钥和专用密钥。 VPN 服务从 Secrets Manager获取客户机 CA 证书。 反过来,客户机在与 VPN 服务器连接时提供其公用密钥,而 VPN 服务器使用 CA 证书来验证公用密钥。
如果客户机和 VPN 服务器证书由同一 CA 签署,那么管理员可以在供应 VPN 服务器时使用同一证书实例。
有关更多信息,请参阅 设置客户机到服务器认证。
VPN 客户机认证
作为 VPN 服务器管理员,您必须至少选择一种认证方法,并在 VPN 服务器供应期间对其进行配置。 您可以选择客户机证书和/或使用用户标识和验证码添加的安全性,也可以同时选择这两种类型的客户机认证。
多个 VPN 客户机可以共享一个客户机证书。
如果计划使用客户机证书,那么用户必须编辑服务器管理员提供的客户机概要文件,并包含客户机证书 (也称为公用密钥) 和专用密钥。 请注意,如果仅使用“用户标识和验证码”客户机认证,那么不需要修改客户机概要文件。
当专用证书用于客户机认证时,管理员不需要修改客户机概要文件。 相反,管理员可以使用合并的专用证书和所有证书的密钥来下载客户机概要文件,或者选择专用证书并使用合并的专用证书和所选证书的密钥来下载客户机概要文件。 有关更多信息,请参阅 设置客户端 VPN 环境和连接 VPN 服务器。
VPN 用户不会直接使用其密码来连接到 VPN 服务器。 他们通过浏览器从 IBM Access Manager (IAM) 获取验证码,如果启用了 MFA,那么 MFA 实施始终通过浏览器完成。 用户必须正确配置 MFA,以确保可以在浏览器上执行 MFA 实施。 用户获取验证码后,在 OpenVPN 客户机上输入验证码并启动连接。
VPN 服务器从 VPN 客户端接收用户名和密码,并使用 IAM 策略进行 IAM 调用以验证密码和许可权。
- 密码是一次性密码。 用户 MUST 重新生成用于重新连接的验证码,即使重新连接是由 VPN 服务器启动的。
- 不支持 SoftLayer MFA,因为未通过浏览器执行 SoftLayer MFA 实施。
如果使用用户标识/验证码认证,那么维护活动将强制用户通过访存并重新输入代码来重新认证。 仅在输入新代码后才会恢复连接。 这适用于使用独立方式或 HA 方式。
客户机证书撤销列表
(可选) 您可以导入证书撤销列表 (CRL),这是认证中心 (CA) 已撤销的证书的时间戳记列表。 证书撤销列表 (CRL) 中的证书可能未到期,但发出该证书的认证中心不再信任该证书。 VPN 客户端使用此列表来验证数字证书。
导入 CRL 后,VPN 客户端将使用此列表来验证数字证书。 CRL 作为字符串 (而不是文件) 保存在系统中。 如果将来需要下载 CRL,那么会将其重命名为 <vpn_server_name>.pem.
有关更多信息,请参阅 设置客户机到服务器认证。
传输协议
传输层监视从一个设备上的进程到另一个设备上的进程的数据传递。 传输层协议充当应用程序层协议与网络提供的服务之间的联络人。 客户机 VPN for VPC 支持以下协议:
建议使用 UDP 以实现最佳性能 ;TCP 以实现可靠性。
-
用户数据报协议 (User Datagram Protocol,UDP)
用户数据报协议 (UDP) 是一种简单的轻量级协议,开销最小。 如果一个进程想要发送一条小消息而不关心可靠性,它可以使用 UDP。 使用 UDP 发送消息所花费的时间比使用 TCP 要短得多。 它执行很少的错误检查,并且除了提供进程到进程通信而不是主机到主机通信之外,不会为 IP 服务添加任何优点。
-
传输控制协议 (Transmission Control Protocol, TCP)
传输控制协议 (TCP) 是一种可靠但复杂的传输层协议。 TCP 向 IP 服务添加面向连接的功能和可靠性。
TCP 是一种流交付服务,可保证将从一个主机发送到另一个主机的数据流交付,而不会重复或丢失数据。 由于分组传输不可靠,因此使用了一种被称为具有重传的肯定应答的技术来保证分组传输的可靠性。 此基本技术要求接收方在接收数据时使用应答消息进行响应。
发送方保留其发送的每个包的记录,并在发送下一个包之前等待应答。 发送方还会在发送包时保留计时器,并在计时器到期时重新发送包。 如果包丢失或损坏,那么需要此计时器。
完全隧道方式与拆分隧道方式
设置 VPN 连接时,将在因特网上创建到 VPN 服务器的加密隧道。 除了现有 LAN 接口外,VPN 连接还显示为计算机的虚拟网络接口。 现在,通过将专用流量发送到 VPN 隧道内的 VPC,并通过另一个接口 (VPN 隧道外) 发送公共流量 (因特网流量),可以同时使用这两个接口。 在 VPN 接口与其他接口之间拆分流量时,拆分隧道 据说正在使用中。 当未使用分割隧道时,所有流量都使用 VPN 接口,从而导致将因特网流量发送到 VPN 隧道 (即 全隧道) 中。
其他注意事项:
- 如果客户机在没有 VPN 隧道的情况下访问因特网时存在安全问题,请使用全隧道 (缺省) 方式。 全隧道通常是符合法规标准所必需的; 但是,这种方法可能成本高昂,也会增加 VPN 服务器的负载。
- 在分割隧道方式下,路由由 VPN 服务器推送到 VPN 客户端。 这样,OpenVPN 客户机就知道应该将哪些流量发送到 VPN 隧道中。 添加路由时应小心,避免路由循环。 例如,如果 VPN 服务器的公共 IP 地址为
3.3.3.3
,那么您无法添加路由3.3.3.0/24
,因为此路由将向3.3.3.3
发送不应通过 VPN 隧道的流量。 理想情况下,应仅将专用子网配置为路由目标,例如 VPC 子网,CSE 子网,内部部署专用子网等。 - VPN 路由将推送到 VPN 客户端。 如果 VPN 客户端已具有具有相同目标的路由,那么路由“推送”将失败,并且流量无法到达 VPN 服务器。 您必须解决路由冲突,然后重新连接 VPN 客户端。 常见问题是如果在分割隧道方式 VPN 服务器上添加目标为
0.0.0.0/0
的 VPN 路由,并且需要将此路由推送到 VPN 客户端。 通常,VPN 客户端已具有目标为0.0.0.0/0
的路由; 因此,此 VPN 路由将与您的 VPN 客户端路由冲突。 要避免冲突,请使用全隧道方式 VPN 服务器,或者除去主机上的路由0.0.0.0/0
。
无论选择哪种隧道方式,都必须使用 API /vpn_servers/{id}/routes
来定义 VPN 服务器如何转发来自 VPN 客户端的流量。 例如,如果您希望来自客户机的因特网流量通过 VPN 隧道,那么必须使用 VPN 服务路由 API 来配置 0.0.0.0/0
路由。
受支持的 VPN 客户端软件
您必须为用户提供 VPN 客户端软件。 将验证以下客户机软件版本以供使用:
- 对于 macOS Catalina 和更高版本: OpenVPN Connect v3,OpenVPN Connect v2和 Tunnelblick 3.8.4
- Windows 8 和更高版本: OpenVPN Connect v3,OpenVPN Connect v2
- RHEL 7.x 和更高版本: OpenVPN Connect v3,OpenVPN Connect v2和 OpenVPN 命令行客户机 (V 2.4.4 和更高版本)
- Ubuntu 18.04 和更高版本: OpenVPN Connect v3,OpenVPN Connect v2和 OpenVPN 命令行客户机 (V 2.4.10 和更高版本)
VPN 客户端用户可以选择其他 OpenVPN-2.4-compatible 客户端软件。 但是,未列出的软件无法保证工作。
IBM Power Virtual Servers: 自动部署工作空间
提供了客户机到站点的 VPN 自动化项目,该项目提供了 Terraform 模块以创建客户机到站点的 VPN 服务器,从而允许用户安全地从站内或远程设备连接到 Power Virtual Server 工作空间。 此自动化项目的 Github 存储库位于 IBM / power-vpn-server Github 存储库。 此项目 自述文件 创建 VPN 服务器并将其连接到新的或现有的 Power 虚拟服务器工作空间,从而提供对 IBM Cloud Power 基础架构的安全访问。
使用 Terraform 设置 VPN 服务器
要使用 Terraform 设置 VPN 服务器,请按照以下步骤操作:
-
创建一个 IBM Cloud Secrets Manager 实例,并试用计划。
-
在本地生成服务器证书/密钥和客户端证书/密钥并导入 Secrets Manager 实例,或使用 Secrets Manager 服务中的私人证书功能生成证书/密钥。
resource "ibm_resource_instance" "sec_mgr" { name = "vpc-secmgr" service = "secrets-manager" plan = var.service_plan location = var.region_name resource_group_id = data.ibm_resource_group.group.id timeouts { create = "30m" update = "30m" delete = "30m" } } resource "ibm_sm_secret_group" "sm_secret_group" { instance_id = ibm_resource_instance.sec_mgr[0].guid region = var.region_name name = "vpc-sec-group" description = "default secret group" } output "import_cert_server_crn" { value = ibm_sm_imported_certificate.sm_imported_certificate_server.crn } output "import_cert_client_crn" { value = ibm_sm_imported_certificate.sm_imported_certificate_client.crn }
-
创建一个具有一个子网的 VPC。
resource "ibm_is_vpc" "vpc" { name = "vpc-vpnserver" } resource "ibm_is_subnet" "subnet" { name = "mysubnet-tf" vpc = ibm_is_vpc.vpc.id zone = var.zone_name total_ipv4_address_count = 256 }
-
创建具有入站和出站规则的安全组以允许所有流量。
resource "ibm_is_security_group" "sg_all" { name = "vpc-sg-all" vpc = ibm_is_vpc.vpc.id } resource "ibm_is_security_group_rule" "sg_rule1" { group = ibm_is_security_group.sg_all.id direction = "inbound" remote = "0.0.0.0/0" } resource "ibm_is_security_group_rule" "sg_rule2" { group = ibm_is_security_group.sg_all.id direction = "outbound" remote = "0.0.0.0/0" }
-
在 Secrets Manager 实例的子网、安全组和服务器/客户端证书内创建 VPN 服务器。
resource "ibm_is_vpn_server" "example" { certificate_crn = ibm_sm_imported_certificate.sm_imported_certificate_server.crn client_authentication { method = "certificate" client_ca_crn = ibm_sm_imported_certificate.sm_imported_certificate_client.crn } client_ip_pool = "192.167.0.0/16" enable_split_tunneling = true name = "terry-vpn-server" port = 443 protocol = "tcp" subnets = [ibm_is_subnet.subnet.id] security_groups = [ibm_is_security_group.sg_all.id] } resource "ibm_is_vpn_server_route" "cse1" { vpn_server = ibm_is_vpn_server.example.id destination = "166.8.0.0/14" name = "vpn-server-route-cse1" } resource "ibm_is_vpn_server_route" "cse2" { vpn_server = ibm_is_vpn_server.example.id destination = "161.26.0.0/16" name = "vpn-server-route-cse2" }
-
下载 VPN 客户端配置文件,并在客户端配置文件中配置客户端证书和密钥。
data "ibm_is_vpn_server_client_configuration" "my_vpn_client_conf" { vpn_server = ibm_is_vpn_server.example.id } resource "local_file" "my_vpn_client_conf" { content = "${data.ibm_is_vpn_server_client_configuration.my_vpn_client_conf.vpn_server_client_configuration}\ncert ${path.cwd}/import_certs/client_cert.pem\nkey ${path.cwd}/import_certs/client_key.pem" filename = "my_vpn_server.ovpn" }
然后,用户可以将 VPN 客户机概要文件与 OpenVPN 客户机配合使用,以将其客户机系统连接到创建的 VPN 服务器。
有关更多信息,请参阅 IBM Terraform Registry。