Triển khai VPN trên máy chủ Headless
FreeGuard CLI chạy native trên các máy chủ Linux headless mà không cần môi trường desktop. Dù bạn đang bảo mật một instance đám mây, bảo vệ phòng lab tại nhà, hay định tuyến lưu lượng container qua VPN, hướng dẫn này bao gồm cài đặt, xác thực, cấu hình dịch vụ và giám sát cho các triển khai máy chủ production.
Tại sao chạy VPN trên máy chủ?
Máy chủ xử lý lưu lượng nhạy cảm: kết nối cơ sở dữ liệu, gọi API, truyền bản sao lưu và giao tiếp giữa các dịch vụ. Chạy VPN trên chính máy chủ đảm bảo tất cả lưu lượng đi ra được mã hóa mà không cần cấu hình từng ứng dụng riêng lẻ.
Các trường hợp sử dụng phổ biến:
- Instance đám mây truy cập API bị giới hạn theo địa lý
- CI/CD runner cần danh tính mạng nhất quán
- Dịch vụ tự lưu trữ được hưởng lợi từ việc ẩn IP
- Máy chủ phát triển được sử dụng bởi các nhóm phân tán
Cài đặt
Ubuntu / Debian
curl -fsSL https://cli.freeguard.com/install.sh | bash
Hoặc cài đặt từ kho 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
Hoặc sử dụng kho 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
Người dùng Alpine có thể cần cài đặt libc6-compat trước:
apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash
Xác minh cài đặt
freeguard --version
Xác thực Headless
Trên máy chủ không có trình duyệt, bạn không thể sử dụng luồng đăng nhập OAuth mặc định. FreeGuard CLI cung cấp xác thực dựa trên email cho môi trường headless.
Đăng nhập bằng Email
freeguard login --method email
CLI yêu cầu bạn nhập email tài khoản. Mã xác minh được gửi đến địa chỉ đó. Nhập mã trong terminal để hoàn tất xác thực.
$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.
Đăng nhập bằng Token
Cho các triển khai tự động, sử dụng token dịch vụ:
freeguard login --method token --token YOUR_SERVICE_TOKEN
Tạo token dịch vụ từ bảng điều khiển tài khoản của bạn. Token có thể được giới hạn cho các máy chủ cụ thể và có thời hạn hết hạn có thể cấu hình.
Xác minh xác thực
freeguard status --json | jq '.authenticated'
Chạy như dịch vụ systemd
Cho các triển khai production, chạy FreeGuard CLI như dịch vụ systemd để khởi động khi boot và khởi động lại khi gặp lỗi.
Tạo file dịch vụ
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
Kích hoạt và khởi động
sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard
Kiểm tra trạng thái dịch vụ
sudo systemctl status freeguard
Xem log
sudo journalctl -u freeguard -f
Script với --json và --no-color
Script production nên phân tích đầu ra có cấu trúc thay vì văn bản con người có thể đọc.
Đầu ra JSON
Mọi lệnh đều hỗ trợ --json:
# Connection status
freeguard status --json
Đầu ra:
{
"connected": true,
"server": "us-east-1",
"server_name": "New York",
"protocol": "hysteria2",
"uptime": 86400,
"bytes_sent": 1048576,
"bytes_received": 5242880
}
Chế độ không màu
Loại bỏ mã màu ANSI cho file log sạch:
freeguard status --no-color >> /var/log/freeguard-status.log
Ví dụ script
Script kiểm tra sức khỏe tự kết nối lại khi gặp lỗi:
#!/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
Thêm vào cron để kiểm tra định kỳ:
# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh
Giám sát và kiểm tra sức khỏe
Kiểm tra sức khỏe cơ bản
freeguard status --json | jq -r '.connected'
Trả về true hoặc false. Đơn giản đủ cho bất kỳ hệ thống giám sát nào.
Tích hợp với công cụ giám sát
Xuất trạng thái sang Prometheus, Datadog hoặc bất kỳ hệ thống giám sát nào có thể thực thi lệnh 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
Cảnh báo
Kết hợp kiểm tra sức khỏe với hệ thống cảnh báo. Ví dụ với webhook đơn giản:
#!/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
Cân nhắc về bảo mật
- Chạy với quyền root: Tunnel VPN yêu cầu quyền root để sửa đổi tuyến mạng. Dịch vụ systemd chạy với quyền root theo mặc định.
- Lưu trữ token: Token dịch vụ được lưu trong
~/.config/freeguard/. Đảm bảo quyền file phù hợp (chmod 600). - Quy tắc tường lửa: Nếu bạn sử dụng UFW hoặc iptables, đảm bảo giao diện tunnel VPN được cho phép.
- Kill switch: Bật kill switch để chặn tất cả lưu lượng nếu VPN bị ngắt kết nối:
freeguard config set kill-switch true.
Bước tiếp theo
- FreeGuard CLI — tham chiếu lệnh đầy đủ
- Hướng dẫn quy trình làm việc cho nhà phát triển — tích hợp VPN vào công cụ phát triển của bạn
- Bảng giá — triển khai máy chủ hoạt động với bất kỳ gói nào
Cập nhật lần cuối: tháng 3 năm 2026