跳转至

23. 虚拟私人网络(VPN)

本章节指导在 RHEL 9(主机名 LinuxDC)上使用 SecureCRT 配置 VPN 服务,配合 SecureFX 传输配置文件和证书。内容涵盖 OpenVPN 服务器/客户端配置和 Libreswan IPsec 站点到站点 VPN 设置,以测试 VPN 连接为例,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 LinuxDC 环境中测试,确保实验一致性。


23.1 前提条件

  • RHEL 9 已安装(参考第 1 章),主机名设置为 LinuxDC
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 9 章)。
  • 使用 SecureFX 传输文件(SFTP 协议)。
  • 具有 root 或 sudo 权限。
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 2 和第 5 章)。
  • 防火墙和 SELinux 启用(参考第 12 章)。
  • 网络连接正常,时间同步配置完成(参考第 4 章)。
  • 两台节点(示例:服务器 192.168.1.100,客户端/对端 192.168.1.101)。

💡 提示:VPN 配置需公网 IP 或端口转发以实现远程访问。在 RHEL 10 中,VPN 工具如 OpenVPN 支持更多内置量子安全加密算法,提升未来证明安全性。


23.2 OpenVPN 配置

23.2.1 OpenVPN 服务器配置

  • 安装 OpenVPN 和 Easy-RSA:

    dnf install -y openvpn easy-rsa  # 安装 OpenVPN 和证书工具
    

  • 初始化 Easy-RSA:

    mkdir -p /etc/openvpn/easy-rsa
    cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
    cd /etc/openvpn/easy-rsa
    ./easyrsa init-pki  # 初始化 PKI
    ./easyrsa build-ca nopass  # 创建 CA(无密码)
    ./easyrsa gen-req server nopass  # 生成服务器请求
    ./easyrsa sign-req server server  # 签署服务器证书
    ./easyrsa gen-dh  # 生成 Diffie-Hellman 参数
    openvpn --genkey secret ta.key  # 生成 TLS 密钥
    

  • 配置服务器:

    vim /etc/openvpn/server.conf
    # 示例内容:
    port 1194
    proto udp
    dev tun
    ca /etc/openvpn/easy-rsa/pki/ca.crt
    cert /etc/openvpn/easy-rsa/pki/issued/server.crt
    key /etc/openvpn/easy-rsa/pki/private/server.key
    dh /etc/openvpn/easy-rsa/pki/dh.pem
    tls-auth /etc/openvpn/easy-rsa/ta.key 0
    server 10.8.0.0 255.255.255.0
    push "route 192.168.1.0 255.255.255.0"
    keepalive 10 120
    persist-key
    persist-tun
    user nobody
    group nobody
    comp-lzo
    status /var/log/openvpn-status.log
    log-append /var/log/openvpn.log
    verb 3
    

  • 启用 IP 转发:

    vim /etc/sysctl.d/99-vpn.conf
    # 添加:
    net.ipv4.ip_forward = 1
    sysctl --system
    

  • 防火墙配置:

    firewall-cmd --permanent --add-service=openvpn
    firewall-cmd --permanent --add-masquerade
    firewall-cmd --reload
    

  • 启动服务器:

    systemctl enable --now openvpn-server@server  # 启用并启动服务器
    

🧠 知识点:OpenVPN 使用 TUN/TAP 设备,支持 UDP/TCP。日志:/var/log/openvpn.log

检查点systemctl status openvpn-server@server 显示 active,ss -tuln | grep 1194 显示监听。

23.2.2 OpenVPN 客户端配置

  • 生成客户端证书(服务器上):

    cd /etc/openvpn/easy-rsa
    ./easyrsa gen-req client nopass
    ./easyrsa sign-req client client
    

  • 传输文件到客户端(使用 SecureFX):

  • ca.crt, client.crt, client.key, ta.key

  • 客户端配置文件(客户端上):

    vim /etc/openvpn/client.conf
    # 示例内容:
    client
    dev tun
    proto udp
    remote 192.168.1.100 1194
    ca ca.crt
    cert client.crt
    key client.key
    tls-auth ta.key 1
    persist-key
    persist-tun
    comp-lzo
    verb 3
    

  • 启动客户端:

    systemctl enable --now openvpn-client@client
    

💡 提示:测试连接:ping 10.8.0.1(服务器 IP)。


23.3 Libreswan IPsec 配置

23.3.1 IPsec 站点到站点 VPN 配置

  • 安装 Libreswan:

    dnf install -y libreswan  # 安装 Libreswan IPsec 工具
    systemctl enable --now ipsec  # 启用并启动 IPsec 服务
    

  • 生成共享密钥(两端相同):

    openssl rand -hex 32 > /etc/ipsec.d/shared.key  # 生成密钥
    # 使用 SecureFX 传输到对端
    

  • 配置连接(服务器 /etc/ipsec.d/vpn.conf):

    vim /etc/ipsec.d/vpn.conf
    # 添加:
    conn site-to-site
        type=tunnel
        authby=secret
        left=192.168.1.100
        leftsubnet=192.168.1.0/24
        right=192.168.1.101
        rightsubnet=192.168.2.0/24
        auto=start
        ike=aes256-sha2_512
        phase2alg=aes256-sha2_512
        pfs=yes
    

  • 配置密钥(/etc/ipsec.d/vpn.secrets):

    vim /etc/ipsec.d/vpn.secrets
    # 添加:
    192.168.1.100 192.168.1.101 : PSK "<shared key from file>"
    

  • 对端类似配置,反转 left/right。

  • 防火墙配置:

    firewall-cmd --permanent --add-service=ipsec
    firewall-cmd --reload
    

  • 启动连接:

    ipsec auto --up site-to-site
    

🧠 知识点:Libreswan 使用 IKEv2 协议。验证:ipsec status 显示隧道 up。

检查点ping 192.168.2.1(对端 IP)通畅。

💡 提示:在 RHEL 10 中,Libreswan 支持更多 Post-Quantum 加密算法,提升抗量子攻击能力。


23.4 常见问题与排查

🔍 故障排查

  • 问题 1:OpenVPN 连接失败
    解决:检查证书(openssl verify -CAfile ca.crt client.crt)、日志(/var/log/openvpn.log)、防火墙(firewall-cmd --list-ports)。

  • 问题 2:IPsec 隧道未建立
    解决ipsec status,检查密钥匹配、IKE 日志(/var/log/pluto.log)。

  • 问题 3:客户端无互联网
    解决:确认 IP 转发(sysctl net.ipv4.ip_forward)、masquerade(firewall-cmd --list-all)。

  • 问题 4:SELinux 阻挡
    解决ausearch -m avcsetsebool -P vpn_can_network_connect 1(若需)。


23.5 实践任务

  1. 使用 SecureCRT 通过 SSH(端口 2222)登录 LinuxDC,安装 OpenVPN 并配置服务器。
  2. 使用 SecureFX 传输 OpenVPN 客户端证书和配置文件,测试客户端连接。
  3. 配置 Libreswan IPsec 站点到站点 VPN,连接 192.168.1.0/24 和 192.168.2.0/24。
  4. 验证 OpenVPN 和 IPsec 连接状态。

检查点:隧道 up,流量路由正常。


23.6 自测问题

  • 问题 1:如何启动 OpenVPN 服务器?
    答案systemctl enable --now openvpn-server@server

  • 问题 2:如何生成 OpenVPN 证书?
    答案:使用 Easy-RSA:./easyrsa init-pki, build-ca, gen-req, sign-req

  • 问题 3:如何检查 IPsec 隧道状态?
    答案ipsec status


🧾 总结
本章完整介绍了 RHEL 9 VPN 服务的配置,包括 OpenVPN 和 Libreswan 的设置。这些技能确保安全远程访问,为后续高可用与容器虚拟化提供网络隔离基础。