Устранение неполадок
Начните с симптома, который наблюдаете. Каждый раздел начинается с простых проверок; если они не помогают — переходите к расширенной диагностике.
Сервис не запускается
- Убедитесь, что файл конфигурации находится в стандартном месте для вашей платформы.
- Для OpenWRT/Debian это
/etc/keen-pbr/config.json - Для Keenetic/NetCraze это
/opt/etc/keen-pbr/config.json
- Для OpenWRT/Debian это
- Перезапустите сервис keen-pbr.
- Для OpenWRT/Debian выполните
service keen-pbr restart - Для Keenetic/NetCraze выполните
/opt/etc/init.d/S80keen-pbr restart
- Для OpenWRT/Debian выполните
- Если вы недавно редактировали файл конфигурации, проверьте его на отсутствующие запятые, сломанный JSON или неверные пути.
- Если вы используете полный пакет, убедитесь, что вы случайно не отключили сервис и не заменили конфигурацию примером только для headless.
Расширенные проверки
Используйте эти, если сервис всё ещё не запускается:
- Валидируйте JSON в файле конфигурации вашей платформы, например:
jq . /etc/keen-pbr/config.json - Убедитесь, что каталог для
daemon.pid_fileсуществует и доступен для записи. - Убедитесь, что
daemon.cache_dirсуществует и доступен для записи. - Если API включён, убедитесь, что настроенные адрес прослушивания и порт ещё не используются.
Сайты не идут через VPN
- Убедитесь, что сайт находится в правильном списке.
- Убедитесь, что правило маршрутизации для этого списка указывает на ваш VPN outbound.
- Убедитесь, что ваше VPN-соединение действительно работает.
- Убедитесь, что устройство пользователя использует DNS роутера.
- Откройте
http://<ip-роутера>:12121/и посмотрите на виджет проверки DNS. Там должно быть сказано “DNS-запрос из браузера достиг dnsmasq”. - Альтернативно, выполните эту команду с вашего ПК:
nslookup check.keen.pbr. Должен вернуться127.0.0.88.
- Откройте
- Запустите тест маршрутизации:
- Откройте
http://<ip-роутера>:12121/, прокрутите до самого низа и введитеgoogle.com(или ваш IP/домен) в виджет “Куда пойдёт этот трафик?”. - Альтернативно, выполните эту команду с роутера:
keen-pbr test-routing google.com
- Откройте
Если ожидаемый и фактический outbound различаются, правило или настройка DNS ещё не завершены.
Расширенные проверки
Если вам нужна более глубокая диагностика, проверьте здоровье маршрутизации:
keen-pbr statusИщите записи со "status": "missing" или "status": "mismatch".
Только если вы намеренно используете пользовательские низкоуровневые настройки маршрутизации, также проверьте, что fwmark.start, fwmark.mask и iproute.table_start не конфликтуют с существующими правилами:
ip rule list
ip route show table <номер_таблицы>DNS-правила не работают
- Убедитесь, что имя списка в
dns.rulesсоответствует имени списка вlists. - Убедитесь, что DNS-правило указывает на правильный тег DNS-сервера.
- Если DNS-сервер использует
detour, убедитесь, что этот outbound работает. - Перезапустите keen-pbr после редактирования раздела DNS.
Расширенные проверки
- Убедитесь, что
generate-resolver-configпроизводит корректный вывод:bashkeen-pbr generate-resolver-config dnsmasq-nftset - Убедитесь, что конфигурация dnsmasq включает соответствующую строку
conf-file=/conf-script=. - Перезапустите dnsmasq после изменения этой строки.
Веб-сайты не открываются: DNS_PROBE_FINISHED_NXDOMAIN / ERR_NAME_NOT_RESOLVED
- Убедитесь, что
dns.fallbackнастроен и указывает как минимум на один рабочий тег DNS-сервера. - Убедитесь, что сам fallback DNS-сервер достижим с роутера. Если этот DNS-сервер использует
detour, убедитесь, что выбранный outbound работает. - Убедитесь, что устройство пользователя использует DNS роутера.
- Перезапустите keen-pbr после изменения конфигурации DNS.
Пример:
{
"dns": {
"servers": [
{
"tag": "default_dns",
"address": "1.1.1.1"
}
],
"fallback": ["default_dns"]
}
}Без dns.fallback домены, которые не соответствуют ни одной записи dns.rules, могут не разрешиться.
Веб-сайты не открываются: DNS_PROBE_FINISHED_BAD_CONFIG
Это обычно означает, что dnsmasq не запущен или не смог применить свою конфигурацию.
- Проверьте логи роутера на ошибки
dnsmasq. - Убедитесь, что
dnsmasqзапущен. - Если вы недавно изменили настройки DNS, перезапустите
keen-pbrиdnsmasq.
Полезные команды:
# для OpenWRT:
logread | grep dnsmasq
# для Keenetic/NetCraze
ndmc -c "show log once" | grep dnsmasq
# для Debian
journalctl -u dnsmasqУдалённые списки не обновляются
- Выполните на роутере:
keen-pbr download - Если список всё ещё не обновляется, проверьте, достижим ли URL с роутера.
- Если вы используете автоматическое обновление, проверьте, что
lists_autoupdate.cronустановлен на нужное расписание.
Расширенные проверки
Если вам нужно принудительно выполнить полную перезагрузку:
kill -HUP $(cat /var/run/keen-pbr.pid)Также подтвердите, что daemon.cache_dir доступен для записи.
urltest всегда показывает деградирован
- Убедитесь, что тестовый
urlдостижим и возвращает хороший HTTP-ответ (напр.200 OKили204 No content). - Убедитесь, что дочерние outbounds работают.
- Дождитесь следующего цикла проверки или временно уменьшите
interval_msво время тестирования.
Расширенные проверки
GET /api/health/service на состояние circuit breaker. Если дочерний элемент находится в состоянии "open", дождитесь истечения circuit_breaker.timeout_ms.
Правила фильтра портов/адресов не сопоставляются
Если вы используете отрицание в полях src_addr / dest_addr, отрицание применяется сразу ко всем указанным в этом поле IP/подсетям. Смешивание записей с отрицанием и без отрицания в одном списке невозможно. Как альтернатива, вы можете создать два отдельных правила.
Это же применимо и к src_port / dest_port.
Если правила не сопоставляются как ожидается:
- Убедитесь, что
protoустановлен корректно (null(для любых протоколов),"tcp","udp"или"tcp/udp") - Проверьте, что имя списка в правиле точно совпадает (с учётом регистра) с ключом в
lists
Конфликты низкоуровневой маршрутизации (расширенные)
Если вы изменили настройки fwmark или iproute, или другой инструмент также управляет расширенной маршрутизацией на той же системе, пакеты могут быть неправильно направлены или отброшены.
Проверьте на конфликты:
ip rule list
nft list ruleset | grep markНастройте на неконфликтующий диапазон:
{
"fwmark": {
"start": "0x00020000",
"mask": "0x00FF0000"
}
}mask должна состоять ровно из двух смежных hex-нибблов. Используйте hex-строки, например "0x00FF0000" и "0x00020000".