Skip to content

24. 虚拟私人网络(VPN)

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

24.1 前提条件

  • RHEL 8.10 已安装(参考第 1 章),主机名设置为 ZSLinux.
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
  • 使用 SecureFX 传输文件(SFTP 协议).
  • 具有 root 或 sudo 权限.
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
  • 防火墙和 SELinux 启用(参考第 13 章).
  • 网络连接正常,时间同步配置完成(参考第 3 章).
  • 两台节点(示例:ZSLinux 为 VPN 服务器,客户端 IP 为 192.168.1.200;IPsec 站点为 192.168.1.0/24 和 192.168.2.0/24).

24.2 VPN 配置

24.2.1 配置 OpenVPN 服务器

  • 安装 OpenVPN:
    bash
    dnf install -y openvpn easy-rsa  # 安装 OpenVPN 和 Easy-RSA 工具
  • 配置证书颁发机构(CA):
    bash
    mkdir -p /etc/openvpn/easy-rsa  # 创建 Easy-RSA 目录
    cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/  # 复制 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-req client nopass  # 生成客户端证书请求
    ./easyrsa sign-req client client  # 签署客户端证书
  • 配置 OpenVPN 服务器:
    bash
    vim /etc/openvpn/server/server.conf  # 创建 OpenVPN 服务器配置文件
    # 添加:
    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
    server 10.8.0.0 255.255.255.0
    push "redirect-gateway def1"
    push "dhcp-option DNS 8.8.8.8"
    keepalive 10 120
    cipher AES-256-CBC
    persist-key
    persist-tun
  • 配置防火墙和 SELinux:
    bash
    firewall-cmd --permanent --add-port=1194/udp  # 允许 OpenVPN 端口
    firewall-cmd --permanent --add-service=openvpn  # 允许 OpenVPN 服务
    firewall-cmd --reload  # 应用防火墙规则
    setsebool -P httpd_can_network_connect 1  # 允许网络连接
  • 启动 OpenVPN:
    bash
    systemctl enable --now openvpn-server@server  # 启用并启动 OpenVPN 服务器

24.2.2 配置 OpenVPN 客户端

  • 创建客户端配置文件:
    bash
    vim /etc/openvpn/client/client.ovpn  # 创建客户端配置文件(传输到客户端)
    # 添加:
    client
    dev tun
    proto udp
    remote 192.168.1.100 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert client.crt
    key client.key
    cipher AES-256-CBC
  • 传输证书和配置文件(使用 SecureFX):
    bash
    # 在 ZSLinux 上:
    cp /etc/openvpn/easy-rsa/pki/ca.crt /tmp/
    cp /etc/openvpn/easy-rsa/pki/issued/client.crt /tmp/
    cp /etc/openvpn/easy-rsa/pki/private/client.key /tmp/
    cp /etc/openvpn/client/client.ovpn /tmp/
    # 使用 SecureFX 将 /tmp/ 下的 ca.crt, client.crt, client.key, client.ovpn 传输到客户端
  • 客户端连接(示例,客户端运行):
    bash
    openvpn --config client.ovpn  # 在客户端运行 OpenVPN 连接

24.2.3 配置 Libreswan IPsec

  • 安装 Libreswan:
    bash
    dnf install -y libreswan  # 安装 Libreswan IPsec 工具
  • 配置站点到站点 VPN(示例:站点 A 192.168.1.0/24,站点 B 192.168.2.0/24):
    bash
    vim /etc/ipsec.d/site-to-site.conf  # 创建 IPsec 配置文件
    # 添加(站点 A 配置):
    conn site-to-site
        left=192.168.1.100
        leftsubnet=192.168.1.0/24
        right=192.168.2.100
        rightsubnet=192.168.2.0/24
        authby=secret
        auto=start
        ike=aes256-sha1;modp2048
        phase2alg=aes256-sha1
    vim /etc/ipsec.d/site-to-site.secrets  # 创建共享密钥文件
    # 添加:
    192.168.1.100 192.168.2.100: PSK "securekey123"
  • 配置防火墙:
    bash
    firewall-cmd --permanent --add-service=ipsec  # 允许 IPsec 端口(500, 4500/UDP)
    firewall-cmd --reload  # 应用防火墙规则
  • 启动 IPsec:
    bash
    systemctl enable --now ipsec  # 启用并启动 Libreswan 服务

24.3 验证

  • 验证 OpenVPN:
    bash
    systemctl status openvpn-server@server  # 检查 OpenVPN 服务器状态
    ip addr show tun0  # 检查 VPN 隧道接口
    ping 10.8.0.1  # 测试 VPN 服务器 IP
  • 验证 OpenVPN 客户端:
    bash
    # 在客户端:
    ip addr show tun0  # 检查客户端隧道接口
    ping 10.8.0.1  # 测试连接到 VPN 服务器
  • 验证 IPsec:
    bash
    ipsec status  # 检查 IPsec 隧道状态
    ping 192.168.2.100  # 从站点 A 测试站点 B
  • 测试 SSH 连接:
    bash
    ssh -p 2222 testuser@ZSLinux  # 测试 SSH 连接(参考第 6 章)
  • 常见问题:
    • OpenVPN 连接失败:检查日志(journalctl -u openvpn-server@server)或证书路径(/etc/openvpn/easy-rsa/pki)。
    • IPsec 隧道未建立:验证密钥(/etc/ipsec.d/site-to-site.secrets)或防火墙(firewall-cmd --list-services)。
    • 客户端无法连接:确认客户端配置文件(client.ovpn)或防火墙规则。

24.4 实践任务

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

24.5 自测问题

  • 问题:如何启动 OpenVPN 服务器?
    • 答案systemctl enable --now openvpn-server@server
  • 问题:如何生成 OpenVPN 证书?
    • 答案:使用 Easy-RSA:./easyrsa init-pki, build-ca, gen-req, sign-req.
  • 问题:如何检查 IPsec 隧道状态?
    • 答案ipsec status

Released under the MIT License.