wg2outline
WireGuard поверх Outline — Docker-образ, который поднимает WireGuard VPN-сервер и маршрутизирует весь его трафик через Outline (Shadowsocks) туннель.
Как это работает
[WireGuard Peer] --UDP:51820--> [wg2outline: WireGuard + Outline CLI] --Shadowsocks--> [Outline Server] -- Internet
Outline CLI создаёт зашифрованный Shadowsocks-туннель, через который проходит весь трафик WireGuard-клиентов. Это позволяет обходить блокировки WireGuard'а — Outline трафик выглядит как обычный HTTPS.
Требования
- Docker + Docker Compose
- Сервер с публичным IP
- Ключ доступа Outline (строка вида
ss://...из Outline Manager) - WireGuard модуль ядра (или встроенная поддержка)
Быстрый старт
cp .env.sample .env
# Отредактируйте .env:
# OUTLINE_TRANSPORT — ключ доступа Outline
# SERVERURL — публичный IP вашего сервера
# PEERS — количество клиентских конфигов
docker compose up -d
Конфигурационные файлы WireGuard для клиентов появятся в ./wireguard-config/peer1/, peer2/ и т.д.
Переменные окружения
| Переменная | Описание |
|---|---|
OUTLINE_TRANSPORT |
Shadowsocks access URL от Outline сервера |
SERVERURL |
Публичный IP/DNS сервера |
PEERS |
Количество генерируемых клиентских конфигов (по умолч. 1) |
INTERNAL_SUBNET |
Подсеть WireGuard (по умолч. 10.13.13.0) |
Тестирование
./test-wg-client.sh ./wireguard-config/peer1/peer1.conf
Скрипт поднимает временный Alpine-контейнер, подключается к VPN и проверяет доступность внешних ресурсов через Outline.
Сборка
docker compose build
Или вручную:
docker build -t wg2outline .
Cтруктура проекта
├── Dockerfile # Мульти-стадийная сборка (outline-cli + linuxserver/wireguard)
├── docker-compose.yml # Docker Compose конфигурация
├── entrypoint.sh # Альтернативный entrypoint (без s6-overlay)
├── root/
│ ├── custom-cont-init.d/ # Инициализация (фикс DNS)
│ └── etc/s6-overlay/ # s6 сервисы (svc-outline, svc-wireguard)
├── wireguard-config/
│ └── templates/ # Шаблоны конфигов WireGuard
├── test-wg-client.sh # Интеграционный тест
└── .env.sample # Пример переменных окружения
CI/CD
При пуше в main или создании тега v* GitHub Actions автоматически собирает образ и публикует его на Docker Hub.