Практика · Qeli 0.8.1

Готовые сценарии

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

Карта решений

Начните с нужного результата

ЗадачаСхемаКлючевой параметр
Весь трафик через публичный IP VPSСерверный NAT + full-tunnel клиентаrouting.nat.enabled + gateway
Открыть только NAS, камеры и сервисы домаТочный push-маршрут без default routeroute + gateway = false
Один сервер, разные режимы и портыНезависимые [profile:*]bind.port + уникальные TUN/pool
Основной TCP и запасной UDP-каналДва профиля и две ссылкиprofiles + ручной выбор
Разделить группы ресурсов по IPЛокальные include/exclude или файлroute_file / exclude
Переживать сон и смену Wi‑Fi/LTEРеконнект + автоматический MTUreconnect + mtu = 0
Связать две площадкиSite-to-site без NATclient_subnet + forward
Сначала определите направление трафика. route сообщает клиенту, куда идти через Qeli; allowed_networks ограничивает, куда пользователь вправе идти; client_subnet регистрирует сеть, находящуюся за клиентом. Эти параметры не взаимозаменяемы.
Сценарий 1

VPS как full-tunnel VPN

Сервер выпускает трафик из пула Qeli через свой WAN, а клиент устанавливает default route в туннель. DNS-прокси сервера не даёт резолвингу остаться на физической сети.

/etc/qeli/server.conf · [profile:main]
routing.nat.enabled = true
routing.forward_private = true
dns.enabled = true
dns.listen = 10.9.0.1
dns.upstream = 1.1.1.1
client.conf · [qeli]
gateway = true
kill_switch = true
dns = tunnel
mtu = 0
NAT требует Linux и iptables на сервере. Если WAN определился неверно, задайте routing.nat.interface = ens3. На Android kill switch требует системных Always-on VPN и «Блокировать без VPN»; на iOS его роль выполняет VPN On Demand.
Сценарий 2

Только доступ к домашней сети

Клиент не меняет default route и получает только маршрут домашней LAN. Qeli-сервер пересылает пакеты без подмены адресов, а домашний роутер направляет ответы в VPN-пул через LAN-адрес Qeli-сервера. Так сохраняются реальные адреса клиентов и работает обычная двусторонняя маршрутизация.

/etc/qeli/server.conf · [profile:home]
routing.nat.enabled = false
routing.forward_private = true
route = 192.168.50.0/24 gateway=10.9.0.1 metric=100
/etc/qeli/users.conf + client.conf
[user:home]
allowed_networks = 192.168.50.0/24

[qeli]
gateway = false
домашний роутер · обратный маршрут
# pool=10.9.0.0/24; Qeli-LAN=192.168.50.2
sudo ip route replace 10.9.0.0/24 via 192.168.50.2
Обратный маршрут обязателен. Закрепите за Qeli-сервером LAN-адрес 192.168.50.2 и на основном домашнем роутере создайте маршрут: сеть назначения 10.9.0.0/24 (pool.cidr), следующий узел 192.168.50.2. Команда выше показывает Linux-вариант; сохраните маршрут штатным способом вашей ОС или роутера.
NAT — только запасной компромисс. Если домашний роутер не позволяет добавить статический маршрут, можно включить routing.nat.enabled = true и указать LAN-интерфейс. При этом устройства LAN перестанут видеть реальные VPN-адреса клиентов, что ухудшает журналирование и правила доступа.
Сценарий 3

Сервер с несколькими профилями и портами

Каждый профиль — отдельный listener со своим транспортом, портом, TUN и пулом. Пользователи глобальны, но поле profiles может разрешить им только нужные точки входа.

/etc/qeli/server.conf · structural example
[profile:reality-tls]
bind.port = 443
bind.transport = tcp
tun.name = vpn0
tun.address = 10.9.0.1
pool.cidr = 10.9.0.0/24
obf.mode = reality-tls

[profile:udp-quic]
bind.port = 8449
bind.transport = udp
tun.name = vpn7
tun.address = 10.9.7.1
pool.cidr = 10.9.7.0/24
obf.mode = fake-tls
obf.quic.enabled = true
Это только каркас. Для reality-tls обязательны target, совпадающий SNI, собственный short_id и остальные параметры маскировки. Возьмите полный server-multiprofile.conf, удалите ненужные профили и откройте каждый TCP/UDP-порт отдельно в firewall.
Сценарий 4

reality-tls как основной, udp-quic как резервный

Разрешите одному пользователю оба серверных профиля и выпустите две ссылки. Сохраните их на клиенте как «Основной» и «Резервный»: TCP/reality-tls обычно предсказуемее, UDP/QUIC может быть быстрее на хорошем UDP-пути.

users.conf + share links
[user:alice]
profiles = reality-tls, udp-quic

sudo qeli share-link alice --host vpn.example.com:443 --profile reality-tls
sudo qeli share-link alice --host vpn.example.com:8449 --profile udp-quic
Roaming не переключает профиль или transport автоматически. Он переносит действующую сессию того же профиля между физическими путями. Для перехода с reality-tls на udp-quic по-прежнему отключите текущий профиль и выберите резервный вручную; TCP 443 и UDP 8449 требуют отдельных правил firewall.
Сценарий 5

Раздельная маршрутизация российских и зарубежных ресурсов

Qeli принимает IP/CIDR, а не домены и названия стран. Поэтому географическое разделение строится на поддерживаемом вами списке сетей и остаётся приблизительным: CDN, anycast и адреса сервисов меняются.

variant A · selected networks through Qeli
[qeli]
gateway = false
route_file = C:\Qeli\foreign-cidrs.txt
foreign-cidrs.txt · documentation-only addresses
# one IPv4 address or CIDR per line
203.0.113.0/24
198.51.100.7
variant B · full tunnel, selected networks direct
[qeli]
gateway = true
exclude = 203.0.113.0/24, 198.51.100.7/32
route_file применяется только Windows/macOS и добавляет split-маршруты. В Linux CLI и мобильных клиентах используйте include/exclude или server push с повторяемым route. Примерные сети выше зарезервированы для документации — подставьте проверенный актуальный список.
Сценарий 6

Мобильная сеть и нестабильный Wi‑Fi

Оставьте бесконечный реконнект и автоматический MTU. Для UDP активный MTU probe подбирает путь безопаснее ручного значения; жёстко фиксировать socket buffers без измерений не стоит.

client.conf · [qeli]
reconnect = true
reconnect_retries = -1
reconnect_base_delay = 1
reconnect_max_delay = 60
timeout = 30
mtu = 0
mtu_probe = true
В 0.8.1 оставьте roaming=auto. При смене Wi‑Fi/LTE Qeli сначала пытается перенести текущую сессию и сохраняет TUN, маршруты и lease; если платформа, сервер или transport не поддерживают полный контракт, выполняется безопасный reconnect. required используйте только для полностью обновлённого парка.
Дополнительный сценарий

Site-to-site: две локальные сети

Два Linux-клиента работают как маршрутизаторы площадок. Сервер регистрирует каждую LAN за соответствующим пользователем и разрешает пересылку между клиентами без NAT.

server.conf + users.conf
[profile:sites]
routing.client_to_client = true
routing.forward_private = true
routing.nat.enabled = false

[user:branch-a]
client_subnet = 192.168.50.0/24
route = 192.168.60.0/24 gateway=10.9.0.1

[user:branch-b]
client_subnet = 192.168.60.0/24
route = 192.168.50.0/24 gateway=10.9.0.1
both Linux gateways · [qeli]
gateway = false
forward = true
Локальным роутерам нужны обратные маршруты. На площадке A направьте 192.168.60.0/24 через Qeli-клиент A, на площадке B — 192.168.50.0/24 через клиент B. Подсети площадок и VPN-пулы не должны пересекаться.
Следующий уровень

Ещё полезные готовые схемы

Для команды или семьи разделите доступ через profiles, allowed_networks, max_sessions и группы. Не создавайте один общий пароль для всех устройств: отдельные пользователи упрощают отзыв доступа и аудит.

Перед запуском

Универсальная проверка сценария

проверка конфигурации
sudo qeli check-config --config /etc/qeli/server.conf
qeli check-config --client --config /etc/qeli/client.conf
sudo systemctl restart qeli
sudo journalctl -u qeli -n 100 --no-pager
Проверьте путь с обеих сторон: нужный TCP/UDP-порт открыт, TUN и pool уникальны, push-маршрут появился на клиенте, ACL не режет назначение, обратный маршрут существует, а DNS и внешний IP соответствуют выбранной схеме.
Первоисточники

Конфиги и документация v0.8.1