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.

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

Cập nhật lần cuối: tháng 3 năm 2026