Wdrażanie VPN na serwerach headless
FreeGuard CLI działa natywnie na serwerach Linux headless bez wymagania środowiska graficznego. Niezależnie od tego, czy zabezpieczasz instancję chmurową, chronisz domowe laboratorium, czy kierujesz ruch kontenerów przez VPN, ten przewodnik obejmuje instalację, uwierzytelnianie, konfigurację usługi i monitoring dla wdrożeń produkcyjnych.

Wdrażanie VPN na serwerach headless

FreeGuard CLI działa natywnie na serwerach Linux headless bez wymagania środowiska graficznego. Niezależnie od tego, czy zabezpieczasz instancję chmurową, chronisz domowe laboratorium, czy kierujesz ruch kontenerów przez VPN, ten przewodnik obejmuje instalację, uwierzytelnianie, konfigurację usługi i monitoring dla wdrożeń produkcyjnych.

Dlaczego uruchamiać VPN na serwerze?

Serwery obsługują wrażliwy ruch: połączenia z bazami danych, wywołania API, transfery kopii zapasowych i komunikację między usługami. Uruchomienie VPN na samym serwerze zapewnia szyfrowanie całego ruchu wychodzącego bez konfigurowania poszczególnych aplikacji.

Typowe przypadki użycia:

  • Instancje chmurowe uzyskujące dostęp do API z ograniczeniami geograficznymi
  • Runnery CI/CD wymagające spójnej tożsamości sieciowej
  • Usługi self-hosted korzystające z maskowania IP
  • Serwery deweloperskie używane przez rozproszone zespoły

Instalacja

Ubuntu / Debian

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

Lub zainstaluj z repozytorium 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

Lub użyj repozytorium 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

Użytkownicy Alpine mogą najpierw potrzebować zainstalować libc6-compat:

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

Weryfikacja instalacji

freeguard --version

Uwierzytelnianie headless

Na serwerach bez przeglądarki nie możesz użyć domyślnego logowania OAuth. FreeGuard CLI zapewnia uwierzytelnianie e-mailowe dla środowisk headless.

Logowanie e-mailem

freeguard login --method email

CLI prosi o podanie adresu e-mail konta. Na ten adres zostaje wysłany kod weryfikacyjny. Wprowadź kod w terminalu, aby zakończyć uwierzytelnianie.

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

Logowanie tokenem

Dla zautomatyzowanych wdrożeń użyj tokenu usługi:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Generuj tokeny usługi z panelu konta. Tokeny mogą być ograniczone do konkretnych serwerów i mieć konfigurowalny czas wygaśnięcia.

Weryfikacja uwierzytelnienia

freeguard status --json | jq '.authenticated'

Uruchamianie jako usługa systemd

Dla wdrożeń produkcyjnych uruchamiaj FreeGuard CLI jako usługę systemd, aby startowała przy uruchomieniu i restartowała się przy awarii.

Tworzenie pliku usługi

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

Włączenie i uruchomienie

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

Sprawdzenie statusu usługi

sudo systemctl status freeguard

Przeglądanie logów

sudo journalctl -u freeguard -f

Skryptowanie z --json i --no-color

Skrypty produkcyjne powinny analizować strukturalny wynik zamiast tekstu czytelnego dla człowieka.

Wyjście JSON

Każde polecenie obsługuje --json:

# Connection status
freeguard status --json

Wyjście:

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

Tryb bez kolorów

Usuń kody kolorów ANSI dla czystych plików logów:

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

Przykład skryptu

Skrypt sprawdzania stanu zdrowia, który ponownie łączy się przy awarii:

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

Dodaj do crona dla regularnych sprawdzeń:

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

Monitoring i sprawdzanie stanu zdrowia

Podstawowe sprawdzenie stanu

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

Zwraca true lub false. Wystarczająco proste dla dowolnego systemu monitoringu.

Integracja z narzędziami monitoringu

Eksportuj status do Prometheus, Datadog lub dowolnego systemu monitoringu, który może wykonywać polecenia 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

Alerty

Połącz sprawdzanie stanu z systemem alertów. Przykład z prostym webhookiem:

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

Kwestie bezpieczeństwa

  • Uruchamianie jako root: Tunel VPN wymaga uprawnień root do modyfikowania tras sieciowych. Usługa systemd domyślnie działa jako root.
  • Przechowywanie tokenów: Tokeny usługi są przechowywane w ~/.config/freeguard/. Zapewnij odpowiednie uprawnienia plików (chmod 600).
  • Reguły firewalla: Jeśli używasz UFW lub iptables, upewnij się, że interfejs tunelu VPN jest dozwolony.
  • Kill switch: Włącz kill switch, aby zablokować cały ruch, jeśli VPN zostanie rozłączony: freeguard config set kill-switch true.

Następne kroki

Ostatnia aktualizacja: marzec 2026