ติดตั้ง 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
ขั้นตอนถัดไป
- FreeGuard CLI — คู่มือคำสั่งฉบับสมบูรณ์
- คู่มือเวิร์กโฟลว์นักพัฒนา — ผสานรวม VPN เข้ากับเครื่องมือพัฒนาของคุณ
- ราคา — การ deploy เซิร์ฟเวอร์ใช้งานได้กับทุกแผน
อัปเดตล่าสุด: มีนาคม 2026