Справочник · Qeli 0.8.1

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

Что хранится в server.conf, users.conf и client.conf, какие параметры приходят через push, а какие остаются локальными.

Основа

Три файла, одна flat-INI модель

/etc/qeli/server.conf хранит глобальные секции и профили транспорта. /etc/qeli/users.conf — пользователей и группы. client.conf на устройстве содержит подключение и локальное поведение клиента. Комментарий допустим только на отдельной строке.

проверка без запуска TUN и слушателей
$ sudo qeli check-config --config /etc/qeli/server.conf
$ sudo qeli check-config --client --config /etc/qeli/client.conf
Версия имеет значение. Перед копированием примера проверьте, что он относится к 0.8.1. Неизвестные или устаревшие ключи отклоняются строгой проверкой либо не участвуют в работе.
Откуда берётся настройка

Что несут ссылка, push и клиентский файл

Ссылка отвечает за подключение и рукопожатие. Серверный push меняет сетевые параметры без перевыпуска ссылки. Настройки поведения устройства остаются только на клиенте.

ИсточникЧто несётКак обновляется
qeli://Адрес, порт, учётка, режим, pinning/REALITY, параметры рукопожатия и опционально MTU/имяНужно заново выдать ссылку, если эти данные изменились
Server pushIP клиента и сервера, префикс пула, MTU, DNS, keepalive и маршрутыПри следующем подключении; ссылка остаётся прежней
client.confgateway, route_local, kill_switch, include/exclude, dns, persist_tunИзменяется на устройстве или в Client manager
users.confprofiles, max_sessions, allowed_networks, route, client_subnet, quotasБольшинство полей применяется reload без разрыва сессий
Маршрутов и DNS в qeli:// нет. Они либо приходят от сервера после AUTH, либо задаются локально. Поэтому изменение push-маршрута не требует перевыпускать QR.
server.conf

Ключи профиля сервера

Каждый [profile:имя] имеет собственные порт, транспорт, TUN и пул. Одна служба может поднять несколько профилей одновременно.

КлючДефолтНазначение
bind.address0.0.0.0Адрес слушателя профиля
bind.port443TCP/UDP-порт; не должен конфликтовать с другим профилем
bind.transporttcpНесущий транспорт: tcp или udp
tun.address10.9.0.1IP сервера внутри туннеля и типовой next-hop
tun.namevpn0Имя TUN; должно быть уникальным между профилями
tun.mtu1400MTU профиля, пушится клиентам
tun.queues00 = число ядер, 1 = однопоточная помпа, N = заданное число очередей
pool.cidr10.9.0.0/24Единый источник префикса TUN и пула адресов
pool.reservation.<user>Закрепляет IP пула за пользователем
obf.modefake-tlsРежим провода: plain, fake-tls, obfs или reality-tls
routeПовторяемый маршрут, который сервер пушит клиентам профиля
routing.nat.enabledfalseNAT с подменой исходного адреса для выхода клиентов через сервер
routing.nat.interfaceeth0Egress-интерфейс NAT; при дефолте сервер пытается определить его автоматически
routing.forward_privatetrueРазрешает форвардинг к приватным сетям за сервером
routing.client_to_clientfalseРазрешает трафик между VPN-клиентами профиля
dns.enabledfalseЗапускает встроенный DNS-прокси
dns.push_serversЯвно задаёт DNS, который получат клиенты
perf.connection.max_clients128Общий предел активных сессий профиля
TAP/L2 · уточнено в 0.8.1

Встроенный DHCP: когда он нужен и что гарантирует

DHCP включается отдельно на профиле только для TAP/L2-сценариев. В обычном L3 TUN адрес выдаётся внутри AUTH, поэтому dhcp.enabled=false остаётся правильным дефолтом.

КлючДефолтНазначение
dhcp.enabledfalseЗапускает DHCPv4 на фактическом TUN/TAP-интерфейсе профиля
dhcp.listenпустоЛогический адрес и порт; пустое значение использует tun.address:67. Явный 0.0.0.0 отклоняется
dhcp.pool_start / pool_endОпциональный диапазон внутри пригодной части pool.cidr; иначе выбирается автоматически
dhcp.lease_time_secs86400Срок аренды в секундах
dhcp.domain_namevpnДомен, передаваемый клиентам

В 0.8.1 уточнён lifecycle lease: сервер различает SELECTING/INIT-REBOOT/RENEWING/REBINDING REQUEST, отвечает NAK только когда это разрешено состоянием и authoritative server identity, освобождает адрес по RELEASE, временно исключает DECLINE и очищает истёкшие lease. Relay и broadcast обрабатываются по правилам DHCP.

DNS без скрытого fallback: при включённом встроенном DNS DHCP выдаёт адрес профиля. Иначе используются IPv4-адреса из dns.push_servers; пустой список означает отсутствие DNS-option, а не подстановку публичных резолверов.
Не публикуйте DHCP на WAN. Linux-сокет принимает broadcast на 0.0.0.0:67, но Qeli привязывает его через SO_BINDTODEVICE только к фактическому интерфейсу профиля. Небезопасный или malformed listen отклоняется при запуске.
users.conf

Пользователи, группы и ограничения

Собственные значения пользователя имеют приоритет над группой. Персональные route заменяют профильные маршруты для этого пользователя.

КлючДефолтНазначение
password_hashArgon2id-хеш для аутентификации
password_encЗашифрованная копия для повторной выдачи ссылки; ключ хранится в /var/lib/qeli
enabledtrueРазрешает или запрещает новые подключения
profilesвсеСписок доступных профилей
groupШаблон лимитов и ACL из [group:имя]
max_sessions0Предел одновременных устройств; 0 = из группы или без лимита
static_ipФиксированный адрес пользователя из pool.cidr
allowed_networksлюбыеWhitelist CIDR назначения; пусто = без ограничений
routeПерсональный push-маршрут клиенту
client_subnetВходящий маршрут к сети за этим клиентом, аналог iroute
bandwidth.limit_mbps0Ограничение скорости; 0 = без лимита или значение группы
data_limit_gb0Пожизненная download-квота; upload учитывается отдельно
expire_atUnix-время окончания действия учётной записи
client.conf

Ключи подключения и локального поведения

Поля подключения обычно приходят из импорта qeli://. Политики gateway, DNS, маршрутов и поведения устройства в ссылку не входят; явный MTU — документированное исключение.

КлючИсточникНазначение
server, user, passqeli://Адрес и учётные данные
proto, modeqeli://Транспорт и режим должны совпадать с профилем
key, reality_sid, sniqeli://Pinning и параметры REALITY/H-1
gatewayлокальноtrue включает full-tunnel; false оставляет split-tunnel
route_localлокальноТакже направляет приватные сети через туннель
include, excludeлокальноДополнительные CIDR через туннель или в обход него
route_fileWindows/macOSФайл CIDR, который локально дополняет include в split-tunnel
kill_switchлокальноБлокирует утечки full-tunnel, пока соединение не поднято
allow_ipv6_leakлокальноРазрешает IPv6 идти физическим путём, только когда согласованный full-tunnel не содержит IPv6; явное принятие утечки
apps, apps_modeпо платформеPer-app маршрутизация Windows, macOS и Android
allow_lanAndroidОставляет домашнюю LAN и локальный multicast вне VPN
dnsлокальноРежим управления резолвером: tunnel, off или синоним system
mtulink/push/локально0 принимает push/автоподбор; значение больше 0 переопределяет его
persist_tunлокальноСохраняет адаптер и маршруты между реконнектами
keepalive, tcp_nodelayлокальноПараметры TCP-сокета клиента
recv_buffer_sizeлокальноСтартовый размер UDP receive buffer; авто-рост ограничен sysctl
forwardлокальноSite-to-site форвардинг без NAT; применяется на Linux, Windows и macOS
gateway_nat, lan_subnetлокальноРежим клиентского шлюза для локальной сети
exit_nodeLinuxВыпускает трафик других клиентов через физический WAN этого узла
dev_attachLinux CLIПодключает готовый TUN, которым адресно и маршрутно управляет внешний контроллер
Применение

Когда достаточно reload

reload рассчитан на пользователей и часть runtime-настроек. Всё, что меняет слушатель, транспорт или устройство TUN, требует полного restart и краткого разрыва сессий.

ИзменениеДействиеЭффект
Пользователи, группы, ACL, лимитыsudo systemctl reload qeliБез разрыва активных сессий, если поле допускает runtime reload
web.allowed_ips, allowed_origins, public_hostreloadПеречитываются на лету
bind.*, web.bind/port/tls/base_pathsudo systemctl restart qeliМеняется сокет, нужен полный restart
tun.*, pool.cidr, obf.*restartПересоздаётся профиль и TUN
rotate-identityrestartКлиентам нужно обновить закреплённый key
Первоисточники

Где проверить полный список

Эта страница покрывает операторские ключи, которые используются чаще всего. Редкие transport, shaping, multipath, logging, hooks и platform-specific параметры перечислены в полном справочнике.