wei/个人文档/openvpn.md
2026-06-04 13:57:41 +08:00

7.6 KiB
Raw Permalink Blame History

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"