Развёртывание

Установка и настройка Qeli

Полное руководство: от сборки сервера до сценариев использования. Все команды и конфиги — рабочие, для Linux-сервера с публичным IP.

Что понадобится

  • Сервер на Linuxлюбой VPS с публичным IP, 1–2 ядра, ~512 МБ RAM
  • root-доступнужны сетевые права: TUN, NAT, привязка к порту
  • Rustдля сборки из исходников — либо готовый бинарь / .deb
  • Клиентпод вашу платформу: Linux, Windows, macOS или Android
Шаг 1

Сборка и установка

Соберите единый бинарь сервера-и-клиента из исходников и положите его в /usr/bin. Один и тот же бинарь работает и как сервер, и как клиент, и как утилита управления.

терминал сервера
$ git clone https://github.com/litvinovtd/qeli.git
$ cd qeli && cargo build --release
$ sudo install -Dm755 target/release/qeli /usr/bin/qeli
$ sudo install -Dm644 config/server.conf /etc/qeli/server.conf
Шаг 2

Конфигурация сервера

Откройте /etc/qeli/server.conf — единый текстовый формат (flat-INI). Минимальный профиль reality-tls на 443 с выходом в интернет:

/etc/qeli/server.conf
[auth]
require_client_key_proof = false

[profile:main]
bind.address   = 0.0.0.0
bind.port      = 443
bind.transport = tcp
obf.mode       = reality-tls
tun.address    = 10.0.0.1
tun.netmask    = 255.255.255.0
pool.cidr      = 10.0.0.0/24
routing.nat.enabled = true   # выпуск клиентов в интернет
dns.enabled    = true          # резолвер в туннеле

Глобальные секции — [auth], [web], [logging]; каждый интерфейс — это [profile:имя]. Можно поднять несколько профилей сразу (TCP и UDP на разных портах). Комментарии — только на отдельной строке.

Транспортный режим задаётся одной строкой obf.mode: reality-tls (основной), fake-tls, obfs (нужен obf.obfs_key) или plain. Для UDP-профиля включите obf.quic.enabled = true и bind.transport = udp.

Шаг 3

Запуск как служба

Через systemd (рекомендуется): служба qeli работает под отдельным пользователем с минимальными правами (только сетевые capabilities), сама перезапускается при сбое.

терминал сервера
$ sudo systemctl enable --now qeli
$ journalctl -u qeli -f        # смотреть логи

# либо вручную для проверки (foreground):
$ sudo qeli server --config /etc/qeli/server.conf

Пример вывода при старте — одна служба поднимает несколько режимов сразу:

сервер — Qeli
$ qeli server --config /etc/qeli/server.conf
[info] qeli 0.7.1 · запуск 5 профилей
[info] Profile 'reality' tcp/443    reality-tls · основной
[ ok ]   REALITY real-TLS termination enabled
[info] Profile 'tls'     tcp/8443   fake-tls · запасной
[info] Profile 'obfs'    tcp/8444   obfs + WebSocket
[info] Profile 'plain'   tcp/8445   raw · доверенные сети
[info] Profile 'udp'     udp/4443   QUIC-masking
[ ok ] web admin → https://0.0.0.0:8080

При старте сервер печатает поднятые профили и адрес веб-панели. HUP (или systemctl reload qeli) перечитывает конфиг без разрыва сессий.

Шаг 4

Ключ сервера и пиннинг

Покажите публичный ключ каждого профиля — клиенты «пиннят» его, чтобы исключить подключение к подменному серверу (анти-MITM):

терминал сервера
$ qeli show-identity --config /etc/qeli/server.conf
main  a3f5…d290   # → в поле key у клиента

Скопируйте ключ в поле key клиента. Чтобы отклонять непиненных клиентов и скрыть ключ от сканеров — поставьте require_client_key_proof = true. Сменить ключ: qeli rotate-identity <профиль> (после этого клиенты обновляют key).

Шаг 5

Заведение пользователей

Команда add-client хэширует пароль (Argon2id) и дописывает пользователя в файл. С флагами --link --host она сразу печатает ссылку qeli:// — её можно показать QR-кодом и импортировать в приложение одним нажатием.

терминал сервера
$ qeli add-client alice --link --host vpn.example.com:443
password: x7Qp…m2K   # сгенерирован, печатается один раз
qeli://alice:x7Qp…m2K@vpn.example.com:443?proto=tcp&mode=reality-tls&key=a3f5…d290

# с ограничениями:
$ qeli add-client bob --password 's3cret' --profiles main --max-sessions 2

Пароль можно задать (--password) или сгенерировать автоматически — он печатается один раз и не восстанавливается (хранится только хеш). Ограничения: --profiles (доступ к профилям), --static-ip (фиксированный IP в туннеле), --max-sessions.

Шаг 6

Подключение клиента

Приложение (телефон / десктоп): импортируйте ссылку qeli:// или отсканируйте QR — сервер, режим и закреплённый ключ подтянутся сами.

CLI-клиент (Linux): заполните client.conf и запустите:

/etc/qeli/client.conf
[qeli]
server = vpn.example.com:443
proto  = tcp
mode   = reality-tls
user   = alice
pass   = ••••••••
key    = a3f5…d290   # ключ из show-identity
терминал клиента
$ sudo qeli client --config /etc/qeli/client.conf

Поля proto, mode и (для obfs) obfs_key должны совпадать с профилем сервера. Маршруты, DNS и MTU сервер выдаёт сам при подключении — их в клиенте указывать не нужно.

Сценарии

Выход в интернет через сервер

Весь трафик устройства идёт через сервер и выходит в интернет с его IP — классический VPN: приватность в публичных сетях, единый внешний адрес, ничего не «утекает» мимо. Это поведение по умолчанию для полного туннеля.

/etc/qeli/server.conf · [profile:main]
routing.nat.enabled = true   # MASQUERADE клиентов в интернет
dns.enabled         = true   # резолвер в туннеле
# клиент по умолчанию заворачивает весь трафик — доп. настроек не нужно
Сценарии

Доступ к сети за сервером

Дотянуться из любой точки до локальной сети за сервером — NAS, камеры, принтеры, внутренние сервисы. Сервер раздаёт маршрут к подсети повторяемым ключом route, и клиент применяет его к туннелю автоматически.

/etc/qeli/server.conf · [profile:main]
routing.forward_private = true        # форвардинг в приватные сети
route = 192.168.1.0/24 gateway=10.0.0.1   # подсеть за сервером

Маршрут можно выдать и индивидуально — тем же ключом route в секции [user:имя] (переопределяет глобальные). Так, например, подрядчик получит доступ только к одной подсети.

Сценарии

Объединение сетей (site-to-site)

Соедините целые сети нескольких площадок так, чтобы их узлы видели друг друга — связать офисы, филиалы, домашнюю и рабочую сеть. На каждой площадке ставится шлюз с qeli client и фиксированным IP в туннеле; сервер раздаёт маршруты к подсетям площадок, и трафик ходит между сетями через туннель на уровне L3.

Так умеет только настоящий VPN. Прокси (VLESS, V2Ray, Shadowsocks) гоняет трафик отдельных приложений и не маршрутизирует целые подсети — объединить сети им нельзя в принципе. Qeli работает с TUN на уровне маршрутизации (L3), поэтому связывает сети как один сетевой контур.
/etc/qeli/server.conf · [profile:main]
routing.forward_private = true
route = 10.20.0.0/24 gateway=10.0.0.1   # сеть площадки A
route = 10.30.0.0/24 gateway=10.0.0.1   # сеть площадки B
шлюз площадки — клиент с фиксированным IP
$ qeli add-client gw-a --static-ip 10.0.0.10
# /etc/qeli/client.conf на шлюзе площадки A:
[qeli]
route_local = true   # завернуть локальную подсеть в туннель

На хостах-шлюзах включается IP-форвардинг (net.ipv4.ip_forward=1). Сервер выступает «хабом», маршрутизируя трафик между подсетями площадок. Адресацию площадок держите непересекающейся.

Сценарии

Раздельный туннель (split-tunnel)

В туннель идёт только то, что нужно — например, рабочие подсети, — а остальной трафик клиента идёт напрямую. Достаточно раздать конкретные маршруты и не включать полный выход в интернет.

/etc/qeli/server.conf · [profile:main]
routing.nat.enabled = false              # без полного выхода в интернет
route = 10.50.0.0/16 gateway=10.0.0.1     # только рабочие подсети
Управление

Команды управления

Работают на лету через управляющий сокет, без перезапуска сервера:

qeli list-clientsкто сейчас подключён
qeli kick <user>отключить пользователя
qeli disable-user <user>заблокировать (отключить + запретить реконнект)
qeli enable-user <user>снова разрешить вход
qeli set-bandwidth <user> <mbps>лимит скорости (0 = без лимита)
qeli show-routes <user>маршруты пользователя
qeli rotate-identity <profile>сменить ключ сервера у профиля
Веб-панель

Управление через браузер

Включите секцию [web] — и получите панель: пользователи, профили, генерация ссылок и QR прямо из браузера, с защитой входа (Argon2id + same-origin CSRF). По умолчанию слушает только localhost — наружу выставляйте через свой reverse-proxy с TLS.

/etc/qeli/server.conf
[web]
enabled  = true
bind     = 127.0.0.1
port     = 8080
username = admin
password_hash = $argon2id$…

← Вернуться к обзору продукта