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)来确保对于任何撤销的证书,访问被拒绝。

先决条件

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

    • 服务器的私钥
    • 服务器证书
    • CA 证书
    • 中间证书(如果需要的话)

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

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

    • 扩展的密钥用法(EKU)被设置为 TLS Web Server Authentication
    • 通用名称(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. 将 PKCS #12 文件导入到 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
    
    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=%certrightrsasigkey=%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 软件包。
  • PKCS #12 文件 ~/file.p12 在客户端上存在,并包含以下内容:

    • 用户的私钥
    • 用户证书
    • CA 证书
    • 中间证书(如果需要的话)

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

  • 证书中的扩展密钥用法(EKU)被设置为 TLS Web Client Authentication

流程

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

    # ipsec initnss
    Copy to Clipboard Toggle word wrap

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

  2. 将 PKCS #12 文件导入到 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 based VPN
  7. Identity 选项卡上,按如下所示填写字段:

    Expand
    表 6.1. Identity 选项卡设置
    字段名称相应的 ipsec.conf 参数

    Name

    <networkmanager_profile_name>

    N/A

    Gateway

    <ip_address_or_fqdn_of_the_gateway>

    right

    Type

    IKEv2 (certificate)

    authby

    Group name

    %fromcert

    leftid

    Certificate name

    <user_certificate_nickname>

    leftcert

    Remote ID

    %fromcert

    rightid

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

    Expand
    表 6.2. Connectivity 选项卡设置
    字段名称相应的 ipsec.conf 参数

    Remote Network

    192.0.2.0/24

    rightsubnet

    Narrowing

    Selected

    narrowing

    Enable MOBIKE

    yes

    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