配置点到站点 VPN 客户端:证书身份验证 - Linux

本文可帮助你在 Linux 客户端中使用 VPN 网关点到站点 (P2S) 和证书身份验证连接到 Azure 虚拟网络 (VNet)。 本文提供了多组步骤,具体步骤取决于为 P2S 配置选择的隧道类型、操作系统和用于连接的 VPN 客户端。

开始之前

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

身份验证 隧道类型 生成配置文件 配置 VPN 客户端
Azure 证书 IKEv2、SSTP Windows 本机 VPN 客户端
Azure 证书 OpenVPN Windows - OpenVPN 客户端
- Azure VPN 客户端
Azure 证书 IKEv2、OpenVPN macOS-iOS macOS-iOS
Azure 证书 IKEv2、OpenVPN Linux Linux
Microsoft Entra ID OpenVPN (SSL) Windows Windows
RADIUS - 证书 - 文章 文章
RADIUS - 密码 - 文章 文章
RADIUS - 其他方法 - 文章 文章

重要

从 2018 年 7 月 1 日开始,Azure VPN 网关将不再支持 TLS 1.0 和 1.1。 VPN 网关将仅支持 TLS 1.2。 仅点到站点连接会受到影响;站点到站点连接不受影响。 如果要在 Windows 10 及更高版本客户端上将 TLS 用于点到站点 VPN,则无需执行任何操作。 如果在 Windows 7 和 Windows 8 客户端上使用 TLS 建立点到站点连接,请参阅 VPN 网关常见问题解答,了解更新说明。

生成证书

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

有关使用证书的信息,请参阅点到站点:生成证书

生成 VPN 客户端配置文件

VPN 客户端的所有必需配置设置都包含在 VPN 客户端 zip 配置文件中。 生成的 VPN 客户端配置文件特定于虚拟网络的 P2S VPN 网关配置。 如果生成文件后 P2S VPN 配置有任何更改,例如 VPN 协议类型或身份验证类型出现更改,则需要生成新的 VPN 客户端配置文件,并将新配置应用到所有要连接的 VPN 客户端。 有关 P2S 配置的详细信息,请参阅关于点到站点 VPN

使用 Azure 门户生成配置文件:

  1. 在 Azure 门户中,转到要连接到的虚拟网络的虚拟网络网关。

  2. 在虚拟网络网关页上,选择“点到站点配置”以打开“点到站点配置”页。

  3. 在“点到站点配置”页的顶部,选择“下载 VPN 客户端”。 这不会下载 VPN 客户端软件,它将生成用来配置 VPN 客户端的配置包。 需要几分钟才能生成客户端配置包。 在此期间,在包生成前,可能不会显示任何指示。

    点到站点配置页的屏幕截图。

  4. 生成配置包后,浏览器会指出有一个客户端 zip 配置文件可用。 其名称与网关名称相同。 解压缩该文件,查看文件夹。

接下来请配置 VPN 客户端。 从以下说明中进行选择:

IKEv2 - strongSwan 步骤

安装 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

安装证书

使用 Azure 证书身份验证类型时,需要客户端证书进行身份验证。 必须在每台客户端计算机上安装客户端证书。 导出的客户端证书必须使用私钥导出,并且必须包含证书路径中的所有证书。 在继续下一部分之前,请确保客户端计算机已安装相应的客户端证书。

有关客户端证书的信息,请参阅生成证书 - Linux

查看 VPN 客户端配置文件

转到下载的 VPN 客户端配置文件。 可以在 Generic 文件夹中找到配置所需的所有信息。 Azure 不提供此配置的 mobileconfig 文件。

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

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

Generic 文件夹包含以下文件:

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

查看文件后,请继续执行要操作的步骤:

strongSwan 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”开头、以“.chinacloudapp.cn”结尾的名称。

    屏幕截图显示复制数据。

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

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

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

  8. 打开连接。

    屏幕截图显示复制。

strongSwan 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
    

OpenVPN 步骤

本部分将帮助你为使用 OpenVPN 隧道类型的证书身份验证配置 Linux 客户端。 若要连接到 Azure,请下载 OpenVPN 客户端并配置连接配置文件。

注意

尚不支持 OpenVPN 客户端版本 2.6。

  1. 打开新的终端会话。 可以同时按“Ctrl + Alt + T”打开新会话。

  2. 输入以下命令以安装所需的组件:

    sudo apt-get install openvpn
    sudo apt-get -y install network-manager-openvpn
    sudo service network-manager restart
    
  3. 接下来,转到 VPN 客户端配置文件文件夹并解压缩以查看这些文件。

  4. 导出创建的 P2S 客户端证书,并将其上传到网关上的 P2S 配置。 有关步骤,请参阅 VPN 网关点到站点

  5. 从 .pfx 中提取私钥和 base64 指纹。 有多种方法可实现此操作。 其中一种方法是在计算机上使用 OpenSSL。

    openssl pkcs12 -in "filename.pfx" -nodes -out "profileinfo.txt"
    

    profileinfo.txt 文件将包含 CA 和客户端证书的私钥与指纹。 请务必使用客户端证书的指纹。

  6. 在文本编辑器中打开 profileinfo.txt。 若要获取客户端(子)证书的指纹,请选择并复制子证书的“-----BEGIN CERTIFICATE-----”与“-----END CERTIFICATE-----”之间的文本(包括这两行)。 查看 subject=/ 行可以识别子证书。

  7. 打开 vpnconfig.ovpn 文件并找到下面所示的节。 替换“cert”与“/cert”之间的所有内容。

    # P2S client certificate
    # please fill this field with a PEM formatted cert
    <cert>
    $CLIENTCERTIFICATE
    </cert>
    
  8. 在文本编辑器中打开 profileinfo.txt。 若要获取私钥,请选择并复制“-----BEGIN PRIVATE KEY-----”与“-----END PRIVATE KEY-----”之间的文本(包括这两行)。

  9. 在文本编辑器中打开 vpnconfig.ovpn 文件,并找到此节。 粘贴私钥,替换“key”与“/key”之间的所有内容。

    # P2S client root certificate private key
    # please fill this field with a PEM formatted key
    <key>
    $PRIVATEKEY
    </key>
    
  10. 请勿更改任何其他字段。 使用客户端输入中的已填充的配置连接到 VPN。

    • 若要使用命令行进行连接,请键入以下命令:

      sudo openvpn --config <name and path of your VPN profile file>&
      
    • 若要使用命令行断开连接,请键入以下命令:

      sudo pkill openvpn
      
    • 要使用 GUI 进行连接,请转到系统设置。

  11. 选择 + 添加新的 VPN 连接。

  12. 在“添加 VPN”下,选择“从文件导入…”。

  13. 浏览到配置文件,然后双击或选择“打开”。

  14. 选择“添加 VPN”窗口上的“添加”。

    屏幕截图显示了“添加 VPN”页上的“从文件导入”。

  15. 可以通过在“网络设置”页面上或在系统托盘中的网络图标下打开 VPN 进行连接

后续步骤

有关其他步骤,请返回到你之前处理的原始点到站点文章。