Deploy VPN di Server Headless
FreeGuard CLI berjalan secara native di server Linux headless tanpa memerlukan lingkungan desktop. Baik Anda mengamankan instance cloud, melindungi home lab, atau merutekan lalu lintas container melalui VPN, panduan ini mencakup instalasi, autentikasi, konfigurasi layanan, dan pemantauan untuk deployment server produksi.

Deploy VPN di Server Headless

FreeGuard CLI berjalan secara native di server Linux headless tanpa memerlukan lingkungan desktop. Baik Anda mengamankan instance cloud, melindungi home lab, atau merutekan lalu lintas container melalui VPN, panduan ini mencakup instalasi, autentikasi, konfigurasi layanan, dan pemantauan untuk deployment server produksi.

Mengapa Menjalankan VPN di Server?

Server menangani lalu lintas sensitif: koneksi database, panggilan API, transfer backup, dan komunikasi antar layanan. Menjalankan VPN di server itu sendiri memastikan semua lalu lintas keluar terenkripsi tanpa mengonfigurasi aplikasi individual.

Kasus penggunaan umum:

  • Instance cloud yang mengakses API dengan pembatasan geografis
  • CI/CD runner yang membutuhkan identitas jaringan konsisten
  • Layanan self-hosted yang mendapat manfaat dari penyamaran IP
  • Server pengembangan yang digunakan oleh tim terdistribusi

Instalasi

Ubuntu / Debian

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

Atau instal dari repositori 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

Atau gunakan repositori 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

Pengguna Alpine mungkin perlu menginstal libc6-compat terlebih dahulu:

apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash

Verifikasi Instalasi

freeguard --version

Autentikasi Headless

Di server tanpa browser, Anda tidak dapat menggunakan alur login OAuth default. FreeGuard CLI menyediakan autentikasi berbasis email untuk lingkungan headless.

Login Email

freeguard login --method email

CLI meminta Anda memasukkan email akun. Kode verifikasi dikirim ke alamat tersebut. Masukkan kode di terminal untuk menyelesaikan autentikasi.

$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.

Login Berbasis Token

Untuk deployment otomatis, gunakan token layanan:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Buat token layanan dari dashboard akun Anda. Token dapat dibatasi untuk server tertentu dan memiliki masa kedaluwarsa yang dapat dikonfigurasi.

Verifikasi Autentikasi

freeguard status --json | jq '.authenticated'

Menjalankan sebagai Layanan systemd

Untuk deployment produksi, jalankan FreeGuard CLI sebagai layanan systemd agar dimulai saat boot dan restart saat gagal.

Buat File Layanan

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

Aktifkan dan Mulai

sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard

Periksa Status Layanan

sudo systemctl status freeguard

Lihat Log

sudo journalctl -u freeguard -f

Scripting dengan --json dan --no-color

Skrip produksi harus mem-parse output terstruktur alih-alih teks yang dapat dibaca manusia.

Output JSON

Setiap perintah mendukung --json:

# Connection status
freeguard status --json

Output:

{
  "connected": true,
  "server": "us-east-1",
  "server_name": "New York",
  "protocol": "hysteria2",
  "uptime": 86400,
  "bytes_sent": 1048576,
  "bytes_received": 5242880
}

Mode Tanpa Warna

Hapus kode warna ANSI untuk file log yang bersih:

freeguard status --no-color >> /var/log/freeguard-status.log

Contoh Scripting

Skrip health-check yang menyambung ulang saat gagal:

#!/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

Tambahkan ke cron untuk pemeriksaan rutin:

# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh

Pemantauan dan Health Check

Health Check Dasar

freeguard status --json | jq -r '.connected'

Mengembalikan true atau false. Cukup sederhana untuk sistem pemantauan apa pun.

Integrasi dengan Alat Pemantauan

Ekspor status ke Prometheus, Datadog, atau sistem pemantauan apa pun yang dapat menjalankan perintah 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

Alerting

Gabungkan health check dengan sistem alerting Anda. Contoh dengan webhook sederhana:

#!/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

Pertimbangan Keamanan

  • Jalankan sebagai root: Tunnel VPN memerlukan hak akses root untuk memodifikasi rute jaringan. Layanan systemd berjalan sebagai root secara default.
  • Penyimpanan token: Token layanan disimpan di ~/.config/freeguard/. Pastikan izin file yang sesuai (chmod 600).
  • Aturan firewall: Jika Anda menggunakan UFW atau iptables, pastikan antarmuka tunnel VPN diizinkan.
  • Kill switch: Aktifkan kill switch untuk memblokir semua lalu lintas jika VPN terputus: freeguard config set kill-switch true.

Langkah Selanjutnya

Terakhir diperbarui: Maret 2026