Appearance
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)或防火墙规则。
- OpenVPN 连接失败:检查日志(
24.4 实践任务
- 使用 SecureCRT 登录
ZSLinux,安装 OpenVPN 并配置服务器。 - 使用 SecureFX 传输 OpenVPN 客户端证书和配置文件,测试客户端连接。
- 配置 Libreswan IPsec 站点到站点 VPN,连接 192.168.1.0/24 和 192.168.2.0/24。
- 验证 OpenVPN 和 IPsec 连接状态。
24.5 自测问题
- 问题:如何启动 OpenVPN 服务器?
- 答案:
systemctl enable --now openvpn-server@server
- 答案:
- 问题:如何生成 OpenVPN 证书?
- 答案:使用 Easy-RSA:
./easyrsa init-pki,build-ca,gen-req,sign-req.
- 答案:使用 Easy-RSA:
- 问题:如何检查 IPsec 隧道状态?
- 答案:
ipsec status
- 答案:
