Развёртывание 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.
Следующие шаги
- FreeGuard CLI — полная справка по командам
- Руководство по рабочему процессу разработчика — интегрируйте VPN в инструменты разработки
- Тарифы — серверные развёртывания работают с любым тарифным планом
Последнее обновление: март 2026