7.6 KiB
7.6 KiB
OpenVPN 完整部署流程与 Systemd 管理指南
本指南旨为从零开始部署 OpenVPN 客户端,并使用 Systemd 进行管理的完整流程。
一、准备工作与依赖安装
1.1 更新系统
sudo dnf update -y
1.2 安装编译依赖
安装所有编译 OpenVPN 可能需要的开发包:
sudo dnf install -y gcc make openssl-devel lzo-devel lz4-devel pam-devel systemd-devel libcap-ng-devel pkg-config
二、编译安装 OpenVPN 2.6.10
2.1 下载源码
cd /tmp
wget https://github.com/OpenVPN/openvpn/releases/download/v2.6.10/openvpn-2.6.10.tar.gz
tar -xf openvpn-2.6.10.tar.gz
cd openvpn-2.6.10
2.2 配置编译选项
# 标准配置(启用所有功能)
./configure --prefix=/usr
# 如果遇到 libcap-ng 问题,可禁用 DCO:
# ./configure --prefix=/usr --disable-dco
2.3 编译并安装
make
sudo make install
2.4 验证安装
openvpn --version
# 应显示:OpenVPN 2.6.10 x86_64-pc-linux-gnu
三、配置文件准备
3.1 创建配置目录
sudo mkdir -p /etc/openvpn/client
3.2 放置配置文件
将你的 OpenVPN 客户端配置文件重命名为 client.ovpn 并放置:
sudo cp /path/to/your/config.ovpn /etc/openvpn/client.ovpn
3.3 配置认证文件
创建认证文件(包含用户名和密码):
sudo bash -c "cat > /etc/openvpn/client/auth.txt << 'EOF'
qdvpn4
Qdtd@9683556
EOF"
# 设置严格的权限
sudo chmod 600 /etc/openvpn/client/auth.txt
sudo chown root:root /etc/openvpn/client/auth.txt
3.4 验证文件结构
tree /etc/openvpn
# 应该看到:
# /etc/openvpn/
# ├── client.ovpn
# └── client
# └── auth.txt
四、Systemd 服务配置
4.1 创建服务文件
使用经过验证的配置:
sudo tee /etc/systemd/system/openvpn-client.service > /dev/null << 'EOF'
[Unit]
Description=OpenVPN Client Connection
After=network.target
Wants=network-online.target
Documentation=man:openvpn(8)
[Service]
Type=simple
WorkingDirectory=/etc/openvpn
ExecStart=/usr/sbin/openvpn --config client.ovpn --auth-user-pass /etc/openvpn/client/auth.txt --log /var/log/openvpn-client.log
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
# 安全加固
PrivateTmp=true
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/etc/openvpn /var/log
ProtectHome=true
[Install]
WantedBy=multi-user.target
EOF
4.2 创建日志文件并设置权限
sudo touch /var/log/openvpn-client.log
sudo chmod 644 /var/log/openvpn-client.log
4.3 配置日志轮转
sudo tee /etc/logrotate.d/openvpn-client > /dev/null << 'EOF'
/var/log/openvpn-client.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
systemctl kill -s HUP openvpn-client 2>/dev/null || true
endscript
}
EOF
五、服务管理与测试
5.1 启动并启用服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动 OpenVPN 客户端服务
sudo systemctl start openvpn-client
# 设置开机自启
sudo systemctl enable openvpn-client
# 检查服务状态
sudo systemctl status openvpn-client
5.2 服务管理命令速查
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动服务 | sudo systemctl start openvpn-client |
启动 VPN 连接 |
| 停止服务 | sudo systemctl stop openvpn-client |
停止 VPN 连接 |
| 重启服务 | sudo systemctl restart openvpn-client |
重启 VPN 连接 |
| 查看状态 | sudo systemctl status openvpn-client |
查看运行状态 |
| 启用自启 | sudo systemctl enable openvpn-client |
设置开机自启 |
| 禁用自启 | sudo systemctl disable openvpn-client |
取消开机自启 |
| 查看日志 | sudo journalctl -u openvpn-client -f |
实时查看日志 |
| 查看文件日志 | sudo tail -f /var/log/openvpn-client.log |
查看原生日志 |
| 重新加载配置 | sudo systemctl reload openvpn-client |
重载配置文件 |
5.3 连接验证
# 检查虚拟网络接口
ip addr show tun0
# 检查 VPN 路由
ip route | grep tun0
# 测试 VPN 内网连通性
ping -c 4 192.168.1.5
# 测试 SSH 隧道(如配置了端口转发)
ssh -p 10005 admin@localhost
六、故障排查指南
6.1 服务启动失败
# 查看详细错误信息
sudo journalctl -u openvpn-client -xe
# 手动测试配置文件
cd /etc/openvpn
sudo openvpn --config client.ovpn --auth-user-pass client/auth.txt
6.2 常见问题解决
问题 1:权限错误
# 检查认证文件权限
ls -la /etc/openvpn/client/auth.txt
# 应为:-rw------- 1 root root
# 修复权限
sudo chmod 600 /etc/openvpn/client/auth.txt
问题 2:配置文件路径错误
# 验证所有必要文件存在
ls -la /etc/openvpn/client.ovpn
ls -la /etc/openvpn/client/auth.txt
问题 3:依赖库缺失
# 检查 openvpn 链接的库
ldd $(which openvpn)
# 重新安装依赖
sudo dnf reinstall openssl-devel lzo-devel lz4-devel
问题 4:日志文件问题
# 确保日志目录存在且有权限
sudo mkdir -p /var/log
sudo touch /var/log/openvpn-client.log
sudo chmod 644 /var/log/openvpn-client.log
6.3 快速诊断命令
# 综合检查
./vpn-check.sh
七、部署检查清单
- 系统已更新:
sudo dnf update -y - 所有依赖包已安装
- OpenVPN 2.6.10 编译安装成功
- 配置文件
/etc/openvpn/client.ovpn存在 - 认证文件
/etc/openvpn/client/auth.txt存在且权限为 600 - Systemd 服务文件已正确配置
- 日志文件可写:
/var/log/openvpn-client.log - 服务能正常启动:
systemctl status显示 active (running) - VPN 接口 tun0 已创建
- VPN 内网路由已添加
- 能 ping 通 VPN 内网地址
八、一键部署脚本
#!/bin/bash
# openvpn-quick-deploy.sh
set -e
echo "=== OpenVPN 客户端一键部署脚本 ==="
# 变量配置
VPN_USER="qdvpn4"
VPN_PASS="Qdtd@9683556"
OVPN_CONFIG_PATH="/path/to/your/config.ovpn"
# 1. 安装依赖
echo "步骤 1/6: 安装依赖包..."
sudo dnf install -y gcc make openssl-devel lzo-devel lz4-devel pam-devel systemd-devel libcap-ng-devel pkg-config
# 2. 编译安装 OpenVPN
echo "步骤 2/6: 编译安装 OpenVPN 2.6.10..."
cd /tmp
wget -q https://github.com/OpenVPN/openvpn/releases/download/v2.6.10/openvpn-2.6.10.tar.gz
tar -xf openvpn-2.6.10.tar.gz
cd openvpn-2.6.10
./configure --prefix=/usr
make -j$(nproc)
sudo make install
# 3. 准备配置文件
echo "步骤 3/6: 准备配置文件..."
sudo mkdir -p /etc/openvpn/client
sudo cp "$OVPN_CONFIG_PATH" /etc/openvpn/client.ovpn
# 4. 创建认证文件
echo "步骤 4/6: 创建认证文件..."
sudo bash -c "cat > /etc/openvpn/client/auth.txt << EOF
$VPN_USER
$VPN_PASS
EOF"
sudo chmod 600 /etc/openvpn/client/auth.txt
# 5. 配置 Systemd 服务
echo "步骤 5/6: 配置 Systemd 服务..."
sudo tee /etc/systemd/system/openvpn-client.service > /dev/null << EOF
[Unit]
Description=OpenVPN Client Connection
After=network.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/etc/openvpn
ExecStart=/usr/sbin/openvpn --config client.ovpn --auth-user-pass /etc/openvpn/client/auth.txt --log /var/log/openvpn-client.log
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
# 6. 启动服务
echo "步骤 6/6: 启动服务..."
sudo systemctl daemon-reload
sudo systemctl start openvpn-client
sudo systemctl enable openvpn-client
echo "=== 部署完成 ==="
echo "服务状态: sudo systemctl status openvpn-client"
echo "查看日志: sudo journalctl -u openvpn-client -f"