6.5. 使用基于证书的身份验证手动配置 IPsec 主机到站点 VPN


主机到站点的 VPN 在单独的远程计算机和专用网络之间建立一个安全、加密的连接,允许它们在不安全的公共网络(如互联网)无缝链接。这适用于需要从其计算机访问公司内部网络上资源的远程员工,就好像在办公室中实际一样。

为进行身份验证,使用由证书颁发机构(CA)管理的数字证书,可提供高度安全、可扩展的解决方案。每个连接主机和网关都提供由可信 CA 签名的证书。这个方法提供强大的、可靠的身份验证,并简化了用户管理。可以在 CA 中集中授予或撤销访问权限,Libreswan 通过针对证书撤销列表(CRL)检查每个证书来强制实施这个访问权限,如果证书出现在列表中,则拒绝访问。

6.5.1. 手动设置 IPsec 网关

您必须正确配置 Libreswan IPsec 网关来启用安全远程访问。Libreswan 从网络安全服务(NSS)数据库读取服务器证书、私钥和 CA 证书。

以下示例允许经过身份验证的用户访问内部 192.0.2.0/24 子网,并将 IP 地址从虚拟 IP 池动态地分配给每个客户端。为保持安全性,网关会验证客户端证书是否由同一可信 CA 发布,并自动使用证书撤销列表(CRL)来确保拒绝任何撤销证书的访问。

先决条件

  • 公共密钥加密标准(PKCSautomationhub)文件 ~/file.p12 在带有以下内容的网关中存在:

    • 服务器的私钥
    • 服务器证书
    • CA 证书
    • 如果需要,则中间证书

    有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。

  • 服务器证书包含以下字段:

    • 扩展的密钥使用(EKU)设置为 TLS Web 服务器身份验证
    • 通用名称(CN)或主题备用名称(SAN)被设置为网关的完全限定域名(FQDN)。
    • X509v3 CRL 发行版点包含证书撤销列表(CRL)的 URL。
  • VPN 客户端流量的返回路由在内部网络上配置,指向 VPN 网关。

流程

  1. 如果 Libreswan 尚未安装:

    1. 安装 libreswan 软件包:

      # dnf install libreswan
      Copy to Clipboard Toggle word wrap
    2. 初始化网络安全服务(NSS)数据库:

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

    3. 启用并启动 ipsec 服务:

      # systemctl enable --now ipsec
      Copy to Clipboard Toggle word wrap
    4. 在防火墙中打开 IPsec 端口和协议:

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. 将 PKCSautomationhub 文件导入到 NSS 数据库中:

    # ipsec import ~/file.p12
    Enter password for PKCS12 file: <password>
    pk12util: PKCS12 IMPORT SUCCESSFUL
    correcting trust bits for Example-CA
    Copy to Clipboard Toggle word wrap
  3. 显示服务器和 CA 证书的 nicknames:

    # certutil -L -d /var/lib/ipsec/nss/
    Certificate Nickname     Trust Attributes
                             SSL,S/MIME,JAR/XPI
    
    vpn-gateway              u,u,u
    Example-CA               CT,,
    ...
    Copy to Clipboard Toggle word wrap

    您需要配置文件此信息。

  4. /etc/ipsec.d/ 目录中为连接创建一个 .conf 文件。例如,使用以下设置创建 /etc/ipsec.d/host-to-site.conf 文件:

    1. 添加 config setup 部分以启用 CRL 检查:

      config setup
          crl-strict=yes
          crlcheckinterval=1h
      Copy to Clipboard Toggle word wrap

      示例中指定的设置包括:

      crl-strict=yes
      启用 CRL 检查。如果 NSS 数据库中没有 CRL,则身份验证客户端将被拒绝。
      crlcheckinterval=1h
      在指定周期后,从服务器证书中指定的 URL 重新获取 CRL。
    2. 为网关添加部分:

      conn <connection_name>
          # General setup and authentication type
          auto=start
          ikev2=insist
          authby=rsasig
      
          # VPN gateway settings
          left=%defaultroute
          leftid=%fromcert
          leftcert="<server_certificate_nickname>"
          leftrsasigkey=%cert
          leftsendcert=always
          leftsubnet=192.0.2.0/24
          rekey=no
          mobike=yes
          narrowing=yes
      
          # Client-related settings
          right=%any
          rightid=%fromcert
          rightrsasigkey=%cert
          rightaddresspool=198.51.100.129-198.51.100.254
          rightmodecfgclient=yes
          modecfgclient=yes
          modecfgdns=192.0.2.5
          modecfgdomains="example.com"
      
          # Dead Peer Detection
          dpddelay=30
          dpdtimeout=120
          dpdaction=clear
      Copy to Clipboard Toggle word wrap

      示例中指定的设置包括:

      ikev2=insist
      将现代 IKEv2 协议定义为唯一允许的协议,而不回退到 IKEv1。
      left=%defaultroute
      ipsec 服务启动时,动态设置默认路由接口的 IP 地址。或者,您可以将 left 参数设置为 IP 地址或主机的 FQDN。
      leftid=%fromcertrightid=%fromcert
      将 Libreswan 配置为从证书的可分辨名称(DN)字段检索身份。
      leftcert="<server_certificate_nickname>"
      设置 NSS 数据库中使用的服务器证书的别名。
      leftrsasigkey=%cert and rightrsasigkey=%cert
      将 Libreswan 配置为使用嵌入在证书中的 RSA 公钥。
      leftsendcert=always
      指示网关始终发送证书,以便客户端可以针对 CA 证书进行验证。
      leftsubnet=<subnets>
      指定连接到客户端可以通过隧道访问的网关的子网。
      mobike=yes
      使客户端能够在网络间无缝查找。
      rightaddresspool=<ip_range>
      指定网关可以从哪个范围分配 IP 地址到客户端。
      modecfgclient=yes
      启用客户端接收 modecfgdns 参数中设置的 DNS 服务器 IP,以及 modecfgdomains 中设置的 DNS 搜索域。

    有关示例中使用的所有参数的详情,请查看系统中的 ipsec.conf (5) 手册页。

  5. 启用数据包转发:

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
    Copy to Clipboard Toggle word wrap
  6. 重启 ipsec 服务:

    # systemctl restart ipsec
    Copy to Clipboard Toggle word wrap

    如果您在配置文件中使用 auto=start,则连接会自动激活。使用其他方法时,需要执行额外的步骤来激活连接。详情请查看系统中的 ipsec.conf (5) 手册页。

验证

  1. 配置客户端并连接到 VPN 网关
  2. 检查服务是否载入 CRL 并将条目添加到 NSS 数据库中:

    # ipsec listcrls
    
    List of CRLs:
    
    issuer: CN=Example-CA
    revoked certs: 1
    updates: this Tue Jul 15 10:22:36 2025
             next Sun Jan 11 10:22:36 2026
    
    List of CRL fetch requests:
    
    Jul 15 15:13:56 2025, trials: 1
           issuer:  'CN=Example-CA'
           distPts: 'https://ca.example.com/crl.pem'
    Copy to Clipboard Toggle word wrap

后续步骤:

要访问远程私有网络上的资源,用户必须首先配置 IPsec VPN 连接。GNOME Settings 应用程序提供了一个图形化的解决方案,来在 NetworkManager 中创建 IPsec VPN 连接配置文件并建立隧道。

先决条件

  • 您已配置了 IPsec VPN 网关
  • 已安装 NetworkManager-libreswan-gnome 软件包。
  • PKCSeffort 文件 ~/file.p12 存在于客户端上,其中包含以下内容:

    • 用户的私钥
    • 用户证书
    • CA 证书
    • 如果需要,则中间证书

    有关创建私钥和证书签名请求(CSR),以及从 CA 请求证书的详情,请查看您的 CA 文档。

  • 证书中的扩展密钥用法(EKU)被设置为 TLS Web 客户端身份验证

流程

  1. 初始化网络安全服务(NSS)数据库:

    # ipsec initnss
    Copy to Clipboard Toggle word wrap

    该命令在 /var/lib/ipsec/nss/ 目录中创建数据库。

  2. 将 PKCSautomationhub 文件导入到 NSS 数据库中:

    # ipsec import ~/file.p12
    Enter password for PKCS12 file: <password>
    pk12util: PKCS12 IMPORT SUCCESSFUL
    correcting trust bits for Example-CA
    Copy to Clipboard Toggle word wrap
  3. 显示用户和 CA 证书的别名:

    # certutil -L -d /var/lib/ipsec/nss/
    Certificate Nickname     Trust Attributes
                             SSL,S/MIME,JAR/XPI
    
    user                     u,u,u
    Example-CA               CT,,
    ...
    Copy to Clipboard Toggle word wrap

    在配置文件中,您需要此信息。

  4. Super 键,键入 Settings,然后按 Enter 键打开 GNOME Settings 应用程序。
  5. VPN 条目旁边的 + 按钮。
  6. 从列表中选择 基于 IPsec 的 VPN
  7. Identity 选项卡中,按如下所示填写字段:

    Expand
    表 6.1. 身份选项卡 设置
    字段名称valueCorresponding ipsec.conf parameter

    Name

    <networkmanager_profile_name>

    N/A

    网关

    <ip_address_or_fqdn_of_the_gateway>

    right

    Type

    IKEv2 (certificate)

    authby

    组名称

    %fromcert

    leftid

    证书名称

    <user_certificate_nickname>

    leftcert

    远程 ID

    %fromcert

    rightid

  8. 单击 Advanced
  9. Advanced properties 窗口中,填写 connections 选项卡的字段,如下所示:

    Expand
    表 6.2. 连接 选项卡设置
    字段名称valueCorresponding ipsec.conf parameter

    远程网络

    192.0.2.0/24

    rightsubnet

    缩小

    已选择

    缩小

    启用 MOBIKE

    MOBIKE

    delay

    30

    dpddelay

    Timeout(超时)

    120

    dpdtimeout

    操作

    清除

    dpdaction

  10. Apply 返回连接设置。
  11. Apply 保存连接。
  12. Settings 应用程序的 Network 选项卡中,切换 VPN 配置集旁的开关来激活连接。

验证

  • 建立与远程网络中主机的连接或 ping 它。

后续步骤

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat