Что делает админка
После установки strongSwan можно управлять туннелями вручную через файлы. Но когда офисов становится больше двух, удобнее иметь web-панель: добавлять Office 1/2/3, генерировать swanctl.conf, применять конфиг, смотреть статус, uptime, трафик и ошибки.
В этой статье описана обезличенная архитектура: без рабочего домена, адреса интерфейса, IP, паролей, ключей и исходного кода панели. Это не самостоятельный дистрибутив.
Архитектура панели
- Caddy — HTTPS, внешняя авторизация и проксирование на приложение.
- FastAPI — web-интерфейс, SQLite, CSRF, аудит и генерация конфигурации.
- strongSwan — IKEv2/IPsec-хаб, VICI socket и загрузка через
swanctl --load-all. - Каталог состояния — база, сертификаты, сгенерированные конфиги, журналы и резервные копии.
Пример структуры на VPS
/opt/example-vpn-panel/ # код проекта
/opt/example-vpn-state/ # runtime state, не хранить в git
db/panel.db
generated/swanctl.conf
certs/
private/
logs/
backups/
secrets.envМинимальные переменные окружения
DOMAIN=vpn.example.com
VPN_PUBLIC_IP=203.0.113.10
VPN_LEFTID=vpn.example.com
VPN_BIND_ADDRESS=%any
APP_ADMIN_USER=admin
APP_ADMIN_PASS=CHANGE_ME_PANEL_PASSWORD
BASIC_AUTH_USER=admin
BASIC_AUTH_PASS=CHANGE_ME_BASIC_AUTH_PASSWORD
COOKIE_SECURE=trueПодготовка Docker и каталога состояния
apt update
apt install -y docker.io docker-compose-v2
systemctl enable --now docker
install -d -m 700 /opt/example-vpn-state
install -d -m 700 /opt/example-vpn-state/db /opt/example-vpn-state/generated
install -d -m 700 /opt/example-vpn-state/certs /opt/example-vpn-state/private
install -d -m 700 /opt/example-vpn-state/logs /opt/example-vpn-state/backupsЗапуск при наличии проекта
compose.vps.yml и Caddy-конфигурация уже размещены в /opt/example-vpn-panel. Публичный подготовительный скрипт эти файлы не скачивает и не создаёт.cd /opt/example-vpn-panel/deploy
docker compose --env-file /opt/example-vpn-state/secrets.env -f compose.vps.yml up -d --build
docker compose --env-file /opt/example-vpn-state/secrets.env -f compose.vps.yml psЧто должно быть в интерфейсе
- General — состояние хаба, CPU/RAM/Disk, uptime, Docker, reload status.
- Site-to-site — Office 1/2/3, LAN, Remote ID, Remote addr, PSK, enabled/disabled.
- Road-warrior — пользователи удалённого доступа.
- Certificates / PKI — CA, server cert, срок действия, renew.
- Admin — смена пароля, backup SQLite, системные действия.
- Journal — audit, strongSwan logs, reload events.
Подготовительный скрипт
Скрипт создаёт каталоги и secrets.env, но не устанавливает саму панель. Перед запуском задайте собственные переменные окружения и отдельно предоставьте проверенный проект.
export DOMAIN="vpn.example.com"
export VPN_PUBLIC_IP="203.0.113.10"
export VPN_LEFTID="vpn.example.com"
export APP_ADMIN_PASS="$(openssl rand -hex 24)"
export BASIC_AUTH_PASS="$(openssl rand -hex 18)"
sudo -E bash install-mycottage-admin-example.shПроверка после развёртывания
curl -I https://panel.example.com/
cat /opt/example-vpn-state/logs/reload-status.txt
cd /opt/example-vpn-panel/deploy
docker compose --env-file /opt/example-vpn-state/secrets.env -f compose.vps.yml ps
docker compose --env-file /opt/example-vpn-state/secrets.env -f compose.vps.yml exec strongswan swanctl --list-conns
docker compose --env-file /opt/example-vpn-state/secrets.env -f compose.vps.yml exec strongswan swanctl --list-sasИсточники и границы примера
- Docker Compose — запуск и проверка сервисов;
- Caddy basic_auth — внешний слой авторизации;
- strongSwan VICI — интерфейс управления daemon;
- FastAPI Security — механизмы аутентификации приложения.