ติดตั้ง VPN บนเซิร์ฟเวอร์ Headless
FreeGuard CLI ทำงานแบบ native บนเซิร์ฟเวอร์ Linux แบบ headless โดยไม่ต้องมีสภาพแวดล้อมเดสก์ท็อป ไม่ว่าคุณจะรักษาความปลอดภัยอินสแตนซ์คลาวด์ ปกป้องห้องแล็บที่บ้าน หรือกำหนดเส้นทางทราฟฟิกคอนเทนเนอร์ผ่าน VPN คู่มือนี้ครอบคลุมการติดตั้ง การยืนยันตัวตน การกำหนดค่าบริการ และการตรวจสอบสำหรับการ deploy เซิร์ฟเวอร์ production

ติดตั้ง VPN บนเซิร์ฟเวอร์ Headless

FreeGuard CLI ทำงานแบบ native บนเซิร์ฟเวอร์ Linux แบบ headless โดยไม่ต้องมีสภาพแวดล้อมเดสก์ท็อป ไม่ว่าคุณจะรักษาความปลอดภัยอินสแตนซ์คลาวด์ ปกป้องห้องแล็บที่บ้าน หรือกำหนดเส้นทางทราฟฟิกคอนเทนเนอร์ผ่าน VPN คู่มือนี้ครอบคลุมการติดตั้ง การยืนยันตัวตน การกำหนดค่าบริการ และการตรวจสอบสำหรับการ deploy เซิร์ฟเวอร์ production

ทำไมต้องเรียกใช้ VPN บนเซิร์ฟเวอร์?

เซิร์ฟเวอร์จัดการทราฟฟิกที่ละเอียดอ่อน: การเชื่อมต่อฐานข้อมูล การเรียก API การถ่ายโอนข้อมูลสำรอง และการสื่อสารระหว่างบริการ การเรียกใช้ VPN บนเซิร์ฟเวอร์เองจะรับประกันว่าทราฟฟิกขาออกทั้งหมดถูกเข้ารหัสโดยไม่ต้องกำหนดค่าแอปพลิเคชันแต่ละตัว

กรณีใช้งานทั่วไป:

  • อินสแตนซ์คลาวด์ ที่เข้าถึง API ที่จำกัดตามภูมิศาสตร์
  • CI/CD runner ที่ต้องการตัวตนเครือข่ายที่สม่ำเสมอ
  • บริการ self-hosted ที่ได้รับประโยชน์จากการซ่อน IP
  • เซิร์ฟเวอร์พัฒนา ที่ใช้โดยทีมแบบกระจาย

การติดตั้ง

Ubuntu / Debian

curl -fsSL https://cli.freeguard.com/install.sh | bash

หรือติดตั้งจาก APT repository:

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 repository:

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

การยืนยันตัวตนแบบ Headless

บนเซิร์ฟเวอร์ที่ไม่มีเบราว์เซอร์ คุณไม่สามารถใช้ OAuth login flow เริ่มต้นได้ FreeGuard CLI มีการยืนยันตัวตนผ่านอีเมลสำหรับสภาพแวดล้อม headless

เข้าสู่ระบบด้วยอีเมล

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

สำหรับการ deploy อัตโนมัติ ใช้ service token:

freeguard login --method token --token YOUR_SERVICE_TOKEN

สร้าง service token จากแดชบอร์ดบัญชีของคุณ Token สามารถจำกัดเฉพาะเซิร์ฟเวอร์ที่กำหนดและมีระยะเวลาหมดอายุที่ปรับแต่งได้

ตรวจสอบการยืนยันตัวตน

freeguard status --json | jq '.authenticated'

เรียกใช้เป็นบริการ systemd

สำหรับการ deploy production ให้เรียกใช้ FreeGuard CLI เป็นบริการ systemd เพื่อให้เริ่มต้นเมื่อ boot และรีสตาร์ทเมื่อล้มเหลว

สร้างไฟล์บริการ

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

ดู Log

sudo journalctl -u freeguard -f

การเขียนสคริปต์ด้วย --json และ --no-color

สคริปต์ production ควร parse ผลลัพธ์ที่มีโครงสร้างแทนข้อความที่มนุษย์อ่านได้

ผลลัพธ์ 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 สำหรับไฟล์ log ที่สะอาด:

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

การตรวจสอบและ Health Check

Health Check พื้นฐาน

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

การแจ้งเตือน

รวม health check กับระบบแจ้งเตือนของคุณ ตัวอย่างด้วย 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: Service token ถูกจัดเก็บใน ~/.config/freeguard/ ตรวจสอบให้แน่ใจว่ามีสิทธิ์ไฟล์ที่เหมาะสม (chmod 600)
  • กฎ firewall: หากคุณใช้ UFW หรือ iptables ให้แน่ใจว่าอินเทอร์เฟซอุโมงค์ VPN ได้รับอนุญาต
  • Kill switch: เปิดใช้งาน kill switch เพื่อบล็อกทราฟฟิกทั้งหมดหาก VPN ถูกตัดการเชื่อมต่อ: freeguard config set kill-switch true

ขั้นตอนถัดไป

อัปเดตล่าสุด: มีนาคม 2026