在无图形界面服务器上部署 VPN
FreeGuard CLI 可在无图形界面的 Linux 服务器上原生运行,无需桌面环境。无论您是在保护云实例、守护家庭实验室,还是通过 VPN 路由容器流量,本指南涵盖了生产服务器部署所需的安装、认证、服务配置和监控。
在无图形界面服务器上部署 VPN
FreeGuard CLI 可在无图形界面的 Linux 服务器上原生运行,无需桌面环境。无论您是在保护云实例、守护家庭实验室,还是通过 VPN 路由容器流量,本指南涵盖了生产服务器部署所需的安装、认证、服务配置和监控。
为什么要在服务器上运行 VPN?
服务器处理敏感流量:数据库连接、API 调用、备份传输和服务间通信。在服务器本身运行 VPN 可确保所有出站流量加密,无需逐个配置应用程序。
常见使用场景:
- 访问地域限制 API 的云实例
- 需要一致网络身份的 CI/CD 运行器
- 受益于 IP 隐藏的自托管服务
- 分布式团队使用的开发服务器
安装
Ubuntu / Debian
curl -fsSL https://cli.freeguard.com/install.sh | bash
或从 APT 仓库安装:
curl -fsSL https://cli.freeguard.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/freeguard.gpg
echo "deb [signed-by=/usr/share/keyrings/freeguard.gpg] https://apt.freeguard.com stable main" | sudo tee /etc/apt/sources.list.d/freeguard.list
sudo apt update
sudo apt install freeguard-cli
CentOS / RHEL / Fedora
curl -fsSL https://cli.freeguard.com/install.sh | bash
或使用 RPM 仓库:
sudo rpm --import https://cli.freeguard.com/gpg.key
sudo tee /etc/yum.repos.d/freeguard.repo <<EOF
[freeguard]
name=FreeGuard CLI
baseurl=https://rpm.freeguard.com/stable
gpgcheck=1
gpgkey=https://cli.freeguard.com/gpg.key
EOF
sudo yum install freeguard-cli
Alpine Linux
curl -fsSL https://cli.freeguard.com/install.sh | bash
Alpine 用户可能需要先安装 libc6-compat:
apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash
验证安装
freeguard --version
无图形界面认证
在没有浏览器的服务器上,无法使用默认的 OAuth 登录流程。FreeGuard CLI 为无图形界面环境提供基于邮箱的认证方式。
邮箱登录
freeguard login --method email
CLI 会提示您输入账户邮箱。验证码会发送到该地址。在终端中输入验证码以完成认证。
$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.
Token 登录
对于自动化部署,使用服务 Token:
freeguard login --method token --token YOUR_SERVICE_TOKEN
从账户控制面板生成服务 Token。Token 可限定特定服务器,并可配置过期时间。
验证认证状态
freeguard status --json | jq '.authenticated'
作为 systemd 服务运行
对于生产部署,将 FreeGuard CLI 作为 systemd 服务运行,使其在开机时启动并在故障时自动重启。
创建服务文件
sudo tee /etc/systemd/system/freeguard.service <<EOF
[Unit]
Description=FreeGuard VPN
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/freeguard connect --server us-east --no-color
ExecStop=/usr/local/bin/freeguard disconnect
Restart=on-failure
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
EOF
启用并启动
sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard
检查服务状态
sudo systemctl status freeguard
查看日志
sudo journalctl -u freeguard -f
使用 --json 和 --no-color 编写脚本
生产脚本应解析结构化输出,而非人类可读的文本。
JSON 输出
每个命令都支持 --json:
# Connection status
freeguard status --json
输出:
{
"connected": true,
"server": "us-east-1",
"server_name": "New York",
"protocol": "hysteria2",
"uptime": 86400,
"bytes_sent": 1048576,
"bytes_received": 5242880
}
无颜色模式
去除 ANSI 颜色代码以获得干净的日志文件:
freeguard status --no-color >> /var/log/freeguard-status.log
脚本示例
故障时自动重连的健康检查脚本:
#!/bin/bash
STATUS=$(freeguard status --json 2>/dev/null)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
echo "$(date): VPN disconnected, reconnecting..." >> /var/log/freeguard-health.log
freeguard connect --server us-east --json >> /var/log/freeguard-health.log 2>&1
fi
添加到 cron 进行定期检查:
# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh
监控和健康检查
基本健康检查
freeguard status --json | jq -r '.connected'
返回 true 或 false。对任何监控系统都足够简单。
与监控工具集成
将状态导出到 Prometheus、Datadog 或任何可执行 shell 命令的监控系统:
#!/bin/bash
# prometheus-exporter.sh
STATUS=$(freeguard status --json)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
UPTIME=$(echo "$STATUS" | jq -r '.uptime')
if [ "$CONNECTED" = "true" ]; then
echo "freeguard_connected 1"
echo "freeguard_uptime_seconds $UPTIME"
else
echo "freeguard_connected 0"
echo "freeguard_uptime_seconds 0"
fi
告警
将健康检查与告警系统结合。使用简单 webhook 的示例:
#!/bin/bash
CONNECTED=$(freeguard status --json | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
curl -X POST https://hooks.example.com/alert \
-H "Content-Type: application/json" \
-d '{"text": "FreeGuard VPN disconnected on '"$(hostname)"'"}'
fi
安全注意事项
- 以 root 运行:VPN 隧道需要 root 权限来修改网络路由。systemd 服务默认以 root 运行。
- Token 存储:服务 Token 存储在
~/.config/freeguard/。请确保适当的文件权限(chmod 600)。 - 防火墙规则:如果使用 UFW 或 iptables,请确保 VPN 隧道接口被允许。
- Kill switch:启用 kill switch 以在 VPN 断开时阻止所有流量:
freeguard config set kill-switch true。
后续步骤
- FreeGuard CLI — 完整命令参考
- 开发者工作流指南 — 将 VPN 集成到您的开发工具中
- 定价 — 服务器部署适用于任何方案
最后更新:2026 年 3 月