# Список изменений панели. Формат строгий: заголовок версии `## X.Y.Z`, # ниже строки-пункты. Пункты пишем для человека, а не для git: что изменилось # в поведении и зачем. Самая новая версия — сверху, ровно как в releases.txt. # Панель показывает этот текст рядом с выбором версии, поэтому каждая # опубликованная версия обязана иметь здесь свой раздел. ## 1.6.33 - Панель больше не выполняет команды, пришедшие с чужой страницы. Раньше из локальной сети она пускала без пароля, а признака «кто прислал запрос» не было вовсе — любой открытый в браузере сайт мог вслепую добавить свой VPN-сервер, назначить его всей сети и применить конфигурацию. Читающие запросы не затронуты, curl и парк работают как прежде. - Заголовку Host снаружи больше не верят. Он ставится самим клиентом, и запрос с подставленным `Host: 192.168.1.1` на доступный извне порт объявлял себя локальным и проходил мимо пароля и Basic Auth. Теперь решает фактический адрес источника. - Подбор пароля придерживается: после восьми неверных попыток с одного адреса каждая следующая ждёт пару секунд, а при наплыве параллельных запросов отклоняется сразу, не проверяя пароль. Верный пароль пускает всегда — запереть вход снаружи нельзя. Минимальная длина пароля поднята с 4 до 8 символов. - Смена пароля панели и Basic Auth теперь требует текущий пароль. Раньше его не спрашивали, и одной чужой вкладки хватало, чтобы запереть панель своим паролем. - Идентификаторы списков, серверов и групп проверяются на входе. Раньше id брался из запроса как есть и подставлялся в путь к файлу на диске и в обработчики кнопок — это давало и запись файла мимо своего каталога, и выполнение чужого кода в открытой панели. - Адреса и подсети в списках проверяются на входе. Раньше строка из списка уходила в системные команды маршрутизации как есть, и перевод строки внутри значения превращался во вторую команду. Битое значение теперь называется в тексте ошибки, а не режется молча. - Сервер устройства проверяется на существование, а при удалении сервера ссылки на него убираются. Раньше выключенное устройство могло сохранить ссылку на удалённый сервер и после включения ломало применение конфигурации целиком. ## 1.6.32 - В общей политике выбор «DNS через свой сервер» больше не выглядит сброшенным: сохранённое значение отображается как выбранное. ## 1.6.31 - Выбор резолвера переехал из «Настроек» на вкладку «Устройства»: он стал частью общей политики и переопределяется на каждом устройстве отдельно — ровно как режим и сервер. Варианты те же: через свой VPN-сервер, мимо VPN напрямую или всегда через выбранный сервер. Тип DNS (DoH/DoT/UDP) и адрес резолвера остались общими для роутера, в «Настройках». - Прежний глобальный выбор при обновлении переезжает в общую политику — настройка не теряется. ## 1.6.30 - Проверка egress перестала зависеть от Cloudflare. Раньше панель спрашивала внешний IP только у api.ipify.org, который стоит за Cloudflare; сервер без маршрута до этой сети — как московский Server9 — горел красным, хотя туннель через него работал. Теперь панель по очереди опрашивает три независимых адреса и верит первому ответившему, а на карточке сервера при полном отказе видно, какой именно адрес не отозвался. Общее время проверки не выросло: вся цепочка укладывается в прежние десять секунд. ## 1.6.29 - Подсказки в панели переехали с системного title на свои. Раньше на телефоне их было не увидеть вовсе — тапом системная подсказка не вызывается, — а на компьютере она выползала через секунду с лишним. Теперь при наведении подсказка появляется сразу, на телефоне по обычным плашкам (память, состояние, «авто-переключён») достаточно тапа, а по кнопкам — долгое нажатие. Короткий тап по кнопке остаётся нажатием: подсказка не мешает. ## 1.6.28 - Настройки разложены на три колонки. Слева всё про саму панель: статус, версия и журнал. Остальные настройки поделены между двумя правыми колонками — маршрутизация и DNS в одной, доступ и удалённое управление в другой. Раньше страница была одной длинной колонкой справа от статуса, и до нижних карточек приходилось долго крутить. ## 1.6.27 - Резолвер настраивается целиком: транспорт — DoH, DoT или обычный UDP без шифрования, адрес — из списка популярных или свой. Раньше и то, и другое было прибито гвоздями к 8.8.8.8 по DoH. - Отбой QUIC у выборочных устройств стал настройкой (по умолчанию включён, как и было). Он есть с 1.5.x и лечит зависший YouTube на Android: аппаратный NAT Keenetic проскакивает QUIC мимо маршрутизации, и приложение ждёт вместо отката на TCP. Теперь его видно и можно выключить. - Журнал применений: панель запоминает последние сорок Apply — что сделала, с какими предупреждениями и кто её попросил (человек, авто-переключение сервера, автообновление списков). Раньше это жило один HTTP-ответ и терялось при перезагрузке страницы. - Подробный журнал движка по требованию: sing-box переводится с warn на info и пишет в файл, который видно прямо из панели. По умолчанию выключен — на слабом MIPS это заметная запись на флеш. Логи панели и движка ротируются, чтобы не забить раздел. ## 1.6.26 - У выбора версии появился список изменений: панель показывает, что именно приедет с выбранной версией и что потеряешь при откате. - Панель замечает, что страница в браузере старее самой панели, и предлагает перезагрузить её. Раньше после обновления из другой вкладки или с другого устройства страница молча оставалась старой — без новых карточек настроек. - В режиме парка панель предупреждает, если версия открытой панели не совпадает с версией роутера, которым сейчас управляешь: интерфейс всегда берётся с той панели, где открыта страница. ## 1.6.25 - Маршрут DoH-резолвера стал настройкой: «через сервер устройства» (по умолчанию), «мимо VPN напрямую» или конкретный сервер. - Резолвер отвязан от первого сервера списка. Раньше DNS всех устройств висел на v1, и падение v1 убивало браузер на устройстве, которое ходит через другой сервер, — при зелёном VPN в панели. ## 1.6.24 - Шторка переключения роутера прячется корректно, шапка лежит слоем над ней. - Ответы прежнего роутера больше не дорисовываются поверх нового после переключения. ## 1.6.23 - Шторка загрузки при переключении роутера и перезагрузка активной вкладки. ## 1.6.22 - Сброс залипших сессий стал настройкой, а не безусловным действием. ## 1.6.21 - Сброс залипших conntrack-сессий VPN-устройств после восстановления правил: приложение переподключается само, без передёргивания Wi-Fi. - Честный журнал восстановлений: раздельные строки «цепочки были целы» и «восстановлено из снимка», счётчик реальных восстановлений. ## 1.6.20 - Промежуточная версия ветки восстановления правил. ## 1.6.19 - Не теряется последний netapply-хук. - Кэш клиентов Keenetic больше не усекается.