Диагностика · Qeli 0.8.1

Ошибки и пошаговые проверки

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

Безопасный старт

Пять команд до изменения конфига

Они не создают TUN и не меняют маршруты, кроме обычного чтения состояния системы. Сохраните точную первую ошибку — последующие сообщения часто являются её следствием.

сервер · базовый снимок
$ qeli --version
$ sudo qeli check-config --config /etc/qeli/server.conf
$ sudo systemctl status qeli --no-pager
$ sudo journalctl -u qeli -n 200 --no-pager
$ sudo ss -lntup | grep qeli
Supervisor и worker. Служба может быть запущена, но рабочий процесс профиля — перезапускаться из-за ошибки конфигурации. Поэтому одного зелёного состояния systemd недостаточно: смотрите журнал.
Быстрый маршрут

Симптом → вероятная область

СимптомПроверьте сначалаСледующий шаг
Служба постоянно перезапускаетсяcheck-config, journal, TUN/bind collisionЗапуск сервера ↓
Клиент получает timeoutПорт, firewall, transport tcp/udp, публичный адресHandshake ↓
Соединение есть, AUTH отклонёнuser/pass, profiles, enabled, lockoutHandshake ↓
Туннель поднят, интернета нетgateway, NAT, ip_forward, firewallСеть ↓
Мелкие сайты работают, загрузки зависаютMTU, MSS clamp, PMTU black-holeСеть ↓
IP открывается, домен — нетdns.enabled, dns.push_servers, режим DNS клиентаСеть ↓
Панель отвечает 403allowed_ips или allowed_originsПанель ↓
Панель за proxy отвечает 404/уходит в кореньbase_path, trusted proxy, срез префиксаПанель ↓
Реконнект после сна слишком долгийВерсия клиента, смена сети, battery policyКлиенты ↓
Сервер

Служба не запускает рабочий профиль

Проверка 0.8.1 выявляет синтаксис, неизвестные ключи, пользователей, пересечения IPv4/IPv6-пулов, одинаковые TUN, bind-коллизии, недостижимый REALITY target и несовместимые roaming/recordizer-политики.

sudo qeli check-config --config /etc/qeli/server.confпроверить до restart
sudo journalctl -u qeli -b --no-pagerжурнал текущей загрузки
sudo ip tuntap showсуществующие TUN/TAP и конфликт имён
sudo ss -lntupкто уже занял порт
getent passwd qeliсуществует ли сервисный пользователь

После ручного редактирования восстановите владельца файлов: служба и панель должны читать и атомарно обновлять /etc/qeli. Для установки из .deb типовой владелец — qeli:qeli.

Подключение

От listener до AUTH

Разделите сбой по стадии: нет TCP/UDP-соединения, не совпал wire-режим, не прошёл pinning/REALITY или сервер отклонил пользователя.

СтадияЧто сверить
ConnectПубличный host:port, TCP/UDP, firewall и проброс порта
Wire modeproto, mode, obfs_key, QUIC toggle
REALITY / H-1key, reality_sid, sni, target reachability
AUTHuser, pass, enabled, profiles, expire_at, quota
Lockoutsudo qeli list-blocked / sudo qeli unblock <ip>
проверить закреплённую идентичность
$ sudo qeli show-identity --config /etc/qeli/server.conf
# key клиента должен совпасть с профилем, к которому он подключается
Не отключайте pinning ради проверки. Для reality-tls и H-1 настоящий key обязателен. Правильная диагностика — сравнить ключи и профиль, а не ослаблять AUTH.
Data plane

Маршруты, NAT, MTU и DNS

Если handshake завершён и TUN поднят, ищите проблему в таблице маршрутов, forwarding, NAT/firewall, MTU или резолвере.

сервер и Linux-клиент
$ sudo qeli show-routes <user>
$ ip route show
$ sudo sysctl net.ipv4.ip_forward
$ sudo iptables-save | grep -iE 'qeli-nat|MASQUERADE|TCPMSS'
$ ping -c 3 10.9.0.1
$ getent hosts example.com
НаблюдениеЧто означает
Нет маршрута к TUN-пулуКлиент не завершил настройку интерфейса или маршрут конфликтует
Пингуется tun.address, интернет — нетПроверьте gateway=true, NAT, ip_forward и FORWARD
Малые ответы проходят, большие зависаютТипичный PMTU black-hole: MSS clamp или MTU слишком велики
IP работает, DNS-имя — нетСверьте dns.push_servers, dns.listen и локальный режим dns
Push виден в логе, маршрута нетПроблема платформенного применения, прав или конфликта таблиц ОС

Подробная маршрутизация и push →

Администрирование

Панель: 403, 404 и отсутствие доступа

СимптомЧто исправить
VPN работает, :8080 не слушаетЗадайте password_hash через set-web-password; панель fail-closed даже на loopback
403 уже при открытии страницыВаш source IP не входит в allowed_ips
Страница открывается, сохранение даёт 403Добавьте браузерный host[:port] в allowed_origins
За proxy получаете 404 или редирект в /Согласуйте base_path и X-Forwarded-Prefix; не срезайте префикс при заданном base_path
Apply & Restart не работаетsudo qeli install-polkit
Не создаётся QR существующего пользователяПроверьте владельца users.conf и наличие /var/lib/qeli/panel-secret.key
Платформы

Особые случаи клиентов

ПлатформаТиповой случайДействие
Androidprotect() failedОтключите конфликтующий always-on VPN/блокировку соединений без VPN
AndroidДолгий возврат после снаИспользуйте клиент 0.8.1, оставьте roaming=auto и проверьте ограничения батареи производителя
Windows / macOSPush gateway/metric не применёнCIDR всё равно привязывается к TUN; смотрите поясняющую строку в логе
macOSПосле удаления остался DNS туннеляЗапустите штатное отключение/очистку клиента и проверьте системный DNS
Windows/macOS в одной LAN с серверомРеконнект-петля при full-tunnelЗадайте local равным LAN-IP клиента: несущий сокет пойдёт к серверу on-link без асимметричного /32 через шлюз
Углублённо

Debug-лог и QELI_TRACE

Debug включайте только на время воспроизведения. QELI_TRACE записывает форму пакетов и тайминг без payload и адресов; файл всё равно проверьте перед публикацией.

временный systemd drop-in
$ sudo systemctl edit qeli
# добавьте:
[Service]
Environment=RUST_LOG=debug
Environment=QELI_TRACE=/tmp/qeli-server.csv

$ sudo systemctl daemon-reload
$ sudo systemctl restart qeli
После диагностики удалите drop-in. Debug-журнал растёт быстрее обычного, а файл в /tmp не является постоянным хранилищем.
Первоисточники

Полный каталог сообщений и ошибок

В репозитории разобраны стадии соединения, точные строки журнала, UDP/REALITY-ошибки и дополнительные платформенные сценарии.