Развёртывание 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