Розгортання VPN на серверах без графічного інтерфейсу
FreeGuard CLI працює нативно на серверах Linux без графічного інтерфейсу, не вимагаючи середовища робочого столу. Незалежно від того, чи захищаєте ви хмарний екземпляр, домашню лабораторію або маршрутизуєте трафік контейнерів через VPN, цей посібник охоплює встановлення, автентифікацію, налаштування сервісу та моніторинг для продакшн-серверів.

Розгортання VPN на серверах без графічного інтерфейсу

FreeGuard CLI працює нативно на серверах Linux без графічного інтерфейсу, не вимагаючи середовища робочого столу. Незалежно від того, чи захищаєте ви хмарний екземпляр, домашню лабораторію або маршрутизуєте трафік контейнерів через VPN, цей посібник охоплює встановлення, автентифікацію, налаштування сервісу та моніторинг для продакшн-серверів.

Навіщо запускати VPN на сервері?

Сервери обробляють чутливий трафік: підключення до баз даних, виклики API, передачу резервних копій та міжсервісну комунікацію. Запуск VPN на самому сервері гарантує шифрування всього вихідного трафіку без налаштування окремих додатків.

Типові сценарії використання:

  • Хмарні екземпляри, що звертаються до API з географічними обмеженнями
  • CI/CD-раннери, яким потрібна стабільна мережева ідентичність
  • Самостійно розміщені сервіси, що використовують маскування IP
  • Сервери розробки, які використовуються розподіленими командами

Встановлення

Ubuntu / Debian

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

Або встановлення з 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

Або використовуйте 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

Користувачам Alpine може знадобитися спочатку встановити libc6-compat:

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

Перевірка встановлення

freeguard --version

Автентифікація без графічного інтерфейсу

На серверах без браузера не можна використовувати стандартний OAuth-вхід. FreeGuard CLI надає автентифікацію через електронну пошту для серверів без графічного інтерфейсу.

Вхід через електронну пошту

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.

Вхід за токеном

Для автоматизованих розгортань використовуйте сервісний токен:

freeguard login --method token --token YOUR_SERVICE_TOKEN

Створіть сервісні токени в панелі керування обліковим записом. Токени можна обмежити конкретними серверами та налаштувати термін дії.

Перевірка автентифікації

freeguard status --json | jq '.authenticated'

Запуск як сервіс systemd

Для продакшн-розгортань запускайте FreeGuard CLI як сервіс systemd, щоб він стартував при завантаженні та перезапускався при збої.

Створення файлу сервісу

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

Перегляд журналів

sudo journalctl -u freeguard -f

Скриптинг з --json та --no-color

Продакшн-скрипти повинні парсити структурований вивід, а не текст, призначений для читання людиною.

Вивід 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 для чистих лог-файлів:

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

Моніторинг та перевірки здоров’я

Базова перевірка здоров’я

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

Сповіщення

Комбінуйте перевірку здоров’я з системою сповіщень. Приклад з простим 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 за замовчуванням.
  • Зберігання токенів: Сервісні токени зберігаються в ~/.config/freeguard/. Переконайтеся в коректних правах доступу до файлів (chmod 600).
  • Правила файрволу: При використанні UFW або iptables переконайтеся, що інтерфейс VPN-тунелю дозволений.
  • Kill switch: Увімкніть kill switch для блокування всього трафіку при відключенні VPN: freeguard config set kill-switch true.

Наступні кроки

Останнє оновлення: березень 2026