为 P2S 证书身份验证 IKEv2 连接配置 strongSwan VPN - Linux

本文可帮助你在使用 strongSwan 的 Ubuntu Linux 客户端中通过 VPN 网关点到站点 (P2S) VPN 和证书身份验证连接到 Azure 虚拟网络 (VNet)。

开始之前

在开始之前,请验证文章是否正确。 下表显示了 Azure VPN 网关 P2S VPN 客户端可用的配置文章。 步骤因身份验证类型、隧道类型和客户端 OS 而有所不同。

身份验证 隧道类型 客户端 OS VPN 客户端
证书
IKEv2、SSTP Windows 本机 VPN 客户端
IKEv2 macOS 本机 VPN 客户端
IKEv2 Linux strongSwan
OpenVPN Windows Azure VPN 客户端
OpenVPN 客户端
OpenVPN macOS OpenVPN 客户端
OpenVPN Linux Azure VPN 客户端
OpenVPN 客户端
Microsoft Entra ID
OpenVPN Windows Azure VPN 客户端

先决条件

本文假定你已执行以下先决条件:

连接要求

若要通过 IKEv2 隧道类型使用 strongSwan 客户端和证书身份验证连接到 Azure,每个连接客户端都需要以下项:

  • 必须将每个客户端配置为使用 strongSwan。
  • 客户端必须在本地安装正确的证书。

Workflow

本文的工作流如下:

  1. 安装 strongSwan。
  2. 查看生成的 VPN 客户端配置文件包中包含的 VPN 客户端配置文件。
  3. 找到必要的客户端证书。
  4. 配置 strongSwan。
  5. 连接到 Azure。

关于证书

对于证书身份验证,必须在每台客户端计算机上安装客户端证书。 要使用的客户端证书必须使用私钥导出,并且必须包含证书路径中的所有证书。 此外,对于某些配置,还需要安装根证书信息。

有关适用于 Linux 的证书的详细信息,请参阅以下文章:

安装 strongSwan

指定命令时使用了以下配置:

  • 计算机:Ubuntu Server 18.04
  • 依赖项:strongSwan

使用以下命令安装所需的 strongSwan 配置:

sudo apt-get update
sudo apt-get upgrade
sudo apt install strongswan
sudo apt install strongswan-pki
sudo apt install libstrongswan-extra-plugins
sudo apt install libtss2-tcti-tabrmd0

查看 VPN 客户端配置文件

生成 VPN 客户端配置文件配置包时,VPN 客户端的所有必需配置设置都包含在 VPN 客户端 zip 配置文件中。 每个虚拟网络的 P2S VPN 网关配置都有自己的 VPN 客户端配置文件。 如果生成文件后 P2S VPN 配置有任何更改,例如 VPN 协议类型或身份验证类型出现更改,则需要生成新的 VPN 客户端配置文件,并将新配置应用到所有要连接的 VPN 客户端。

找到并解压缩生成的 VPN 客户端配置文件配置包,然后下载。 可以在 Generic 文件夹中找到配置所需的所有信息。 Azure 不提供此配置的 mobileconfig 文件。

如果未看到 Generic 文件夹,请检查以下各项,然后再次生成 zip 文件。

  • 检查配置的隧道类型。 可能 IKEv2 未选作隧道类型。
  • 在 VPN 网关上,验证该 SKU 不是“基本”类别。 VPN 网关基本 SKU 不支持 IKEv2。 然后,选择 IKEv2 并再次生成 zip 文件以检索 Generic 文件夹。

Generic 文件夹包含以下文件:

  • VpnSettings.xml:包含服务器地址和隧道类型等重要设置。
  • VpnServerRoot.cer:包含在 P2S 连接设置过程中验证 Azure VPN 网关所需的根证书。

配置 VPN 客户端

查看 VPN 客户端配置文件后,请继续执行要使用的步骤:

GUI 步骤

本部分介绍如何使用 strongSwan GUI 完成配置。 以下说明是在 Ubuntu 18.0.4 上创建的。 Ubuntu 16.0.10 不支持 strongSwan GUI。 如果想要使用 Ubuntu 16.0.10,则必须使用命令行。 以下示例可能与你看到的画面不同,具体取决于所用的 Linux 和 strongSwan 版本。

  1. 打开终端并运行示例中的命令,安装 strongSwan 及其网络管理器。

    sudo apt install network-manager-strongswan
    
  2. 选择“设置”,然后选择“网络”。 选择 + 按钮创建新连接。

    屏幕截图显示“网络连接”页。

  3. 从菜单中选择“IPsec/IKEv2 (strongSwan)”,然后双击。

    屏幕截图显示“添加 VPN”页。

  4. 在“添加 VPN”页上,添加 VPN 连接的名称。

    屏幕截图显示“选择连接类型”。

  5. 打开下载的 VPN 客户端配置文件包含的 Generic 文件夹中的 VpnSettings.xml 文件。 查找名为 VpnServer 的标记,并复制该名称,开头为“azuregateway”,结尾为“.chinacloudapi.cn”。

    屏幕截图显示复制数据。

  6. 在“网关”部分中,将此名称粘贴到新 VPN 连接的“地址”字段中 。 接下来,选择“证书”字段末尾的文件夹图标,浏览到 Generic 文件夹,并选择 VpnServerRoot 文件。

  7. 在连接的“客户端”部分,为“身份验证”选择“证书/私钥”。 对于“证书”和“私钥”,请选择前面创建的证书和私钥。 在“选项”中,选择“请求内部 IP 地址”。 然后选择“添加”。

    屏幕截图显示请求内部 IP 地址。

  8. 打开连接。

    屏幕截图显示复制。

CLI 步骤

本部分介绍如何使用 strongSwan CLI 完成配置。

  1. 从 VPN 客户端配置文件的 Generic 文件夹中,将 VpnServerRoot.cer 复制或移动到 /etc/ipsec.d/cacerts。

  2. 将生成的文件分别复制或移动到 /etc/ipsec.d/certs 和 /etc/ipsec.d/private/。 这些文件是客户端证书和私钥,它们需要位于相应的目录中。 使用以下命令:

    sudo cp ${USERNAME}Cert.pem /etc/ipsec.d/certs/
    sudo cp ${USERNAME}Key.pem /etc/ipsec.d/private/
    sudo chmod -R go-rwx /etc/ipsec.d/private /etc/ipsec.d/certs
    
  3. 运行以下命令,记下主机名。 下一步骤中将使用此值。

    hostnamectl --static
    
  4. 打开 VpnSettings.xml 文件并复制 <VpnServer> 值。 下一步骤中将使用此值。

  5. 调整以下示例中的值,然后将该示例添加到 /etc/ipsec.conf 配置。

    conn azure
          keyexchange=ikev2
          type=tunnel
          leftfirewall=yes
          left=%any
          # Replace ${USERNAME}Cert.pem with the key filename inside /etc/ipsec.d/certs  directory. 
          leftcert=${USERNAME}Cert.pem
          leftauth=pubkey
          leftid=%client # use the hostname of your machine with % character prepended. Example: %client
          right= #Azure VPN gateway address. Example: azuregateway-xxx-xxx.vpn.chinacloudapi.cn
          rightid=% #Azure VPN gateway FQDN with % character prepended. Example: %azuregateway-xxx-xxx.vpn.chinacloudapi.cn
          rightsubnet=0.0.0.0/0
          leftsourceip=%config
          auto=add
          esp=aes256gcm16
    
  6. 将机密值添加到 /etc/ipsec.secrets。

    PEM 文件的名称必须与前面用作客户端密钥文件的内容匹配。

    : RSA ${USERNAME}Key.pem  # Replace ${USERNAME}Key.pem with the key filename inside /etc/ipsec.d/private directory. 
    
  7. 运行以下命令:

    sudo ipsec restart
    sudo ipsec up azure
    

后续步骤

有关更多步骤,请返回 P2S Azure 门户,查看相关文章。