# Список изменений панели. Формат строгий: заголовок версии `## X.Y.Z`, # ниже строки-пункты. Пункты пишем для человека, а не для git: что изменилось # в поведении и зачем. Самая новая версия — сверху, ровно как в releases.txt. # Панель показывает этот текст рядом с выбором версии, поэтому каждая # опубликованная версия обязана иметь здесь свой раздел. ## 1.6.57 - Аварийная SINGPANEL_KILL отделена от штатного набора цепочек. В 1.6.54–1.6.56 диагностика ожидала её всегда и красила здоровую систему в «нет цепочки / не подключено правило» именно тогда, когда kill switch правильно не активен. Теперь обычный снимок и самопроверка не считают аварийное правило обязательным; полный Apply и аварийный обход по-прежнему умеют гарантированно его удалить. ## 1.6.56 - Закрыта вторая половина гонки аварийных режимов. Один процесс netfilter.d может схлопнуть несколько событий и раньше нёс старое значение стратегии через все повторы: даже общий lock не мешал ему поставить strict вторым кругом после завершившегося fail-open. Теперь непосредственно перед каждой установкой SINGPANEL_KILL, уже под lock, процесс перечитывает актуальную стратегию с диска. Устаревший hook сам снимает цепочку вместо её возврата. ## 1.6.55 - Исправлена гонка смены аварийной стратегии с отдельным процессом netfilter.d. Hook, запущенный до выбора fail-open, мог дождаться освобождения таблиц и вернуть kill switch уже после ответа «сохранено»: настройка показывала прямой интернет, а устройства оставались заблокированы. Теперь установка и снятие аварийных правил используют тот же межпроцессный lock, что и обычный Apply. - Успешное штатное применение явно снимает SINGPANEL_KILL. Раньше эта цепочка не относится ни к одному обычному шагу netApply и могла пережить возврат sing-box, хотя сам движок и туннель уже были здоровы. ## 1.6.54 - Появился полный backup настроек: серверы, устройства, политики, обычные и бинарные SRS-списки скачиваются одним JSON-файлом. Восстановление проверяет ссылки и адреса, создаёт локальную страховочную копию, сразу применяет конфигурацию и автоматически возвращает прежнее состояние, если sing-box её не принял. Пароль панели, fleet-токен и аварийный туннель не переносятся между роутерами, чтобы backup одного Keenetic не отрезал доступ к другому. - Аварийное поведение сторожа теперь выбирается явно: сохранить интернет напрямую (fail-open) либо включить настоящий kill switch. В строгом режиме отдельная верхняя цепочка блокирует только VPN-устройства, оставляя им локальную сеть; приложения получают мгновенный отказ вместо долгого таймаута. Перестройка firewall Keenetic восстанавливает блокировку, а оживший движок автоматически возвращает штатные правила. - Статус аварии различает «трафик временно идёт напрямую» и «интернет VPN-устройств заблокирован». Смена стратегии действует сразу даже во время уже начавшейся аварии. ## 1.6.53 - Исправлен неверный диагноз версий 1.6.48–1.6.52. TPROXY у «Родителей» ломал не MediaTek и не аппаратный ускоритель NAT: встроенная HTTPS-служба Keenetic занимала TCP/443. После переноса HTTPS на 8443 тот же TPROXY на том же железе заработал. Авто-режим теперь проверяет фактический порт через NDM RCI и не гадает по архитектуре процессора. - В карточке «Перехват трафика» появился текущий HTTPS-порт Keenetic и кнопка переноса. Изменение выполняется штатной командой NDM, сохраняется в конфигурации роутера и сразу перестраивает сетевые правила; если других неприменённых изменений нет, sing-box не перезапускается. Панель предупреждает, что прямой HTTPS, KeenDNS и SSTP после переноса используют новый порт. - Новый установщик при первом развёртывании автоматически переносит HTTPS Keenetic с 443 на 8443, чтобы TPROXY работал сразу. Уже изменённый порт не трогается; для осознанного режима через TUN есть `KEEP_KEENETIC_SSL_PORT=1`, другой целевой порт задаётся через `KEENETIC_SSL_PORT`. - Диагностика и подсказки больше не обвиняют аппаратный NAT. Принудительный TPROXY при занятом 443 получает точное предупреждение и ведёт к переносу порта. KeenDNS-ссылка в панели учитывает нестандартный HTTPS-порт. - Полезные исправления 1.6.48 сохранены: ранний приоритет правила доставки, маска метки и стандартная цепочка DIVERT корректны и совпадают со схемой XKeen; ошибочной была только аппаратная эвристика и выводы вокруг неё. ## 1.6.52 - Предупреждение о принудительно включённом перехвате на съедающем железе больше не советует «Применить конфигурацию»: пересборка поставит тот же перехват заново. Подсказка ведёт туда, где это лечится, — в режим «авто». ## 1.6.51 - Причина, по которой перехвата нет, больше не двоится в отчёте: было «перехват выключен намеренно: перехват выключен в настройках». ## 1.6.50 - Перехват трафика стал настройкой: «авто» (как было — панель решает по железу), «всегда включать» и «никогда не включать». Автоматика узнаёт только проверенную вживую связку «MediaTek + аппаратный ускоритель NAT», и на чужом железе может ошибиться в любую сторону — теперь решение можно взять на себя. - Самопроверка называет причину, по которой перехвата нет, словами: «выключен в настройках» и «съедается ускорителем» лечатся по-разному. При принудительно включённом перехвате на железе, которое его съедает, отчёт предупреждает отдельно: правила стоят и с виду целы, а страницы висят на рукопожатии. ## 1.6.49 - Исправление к 1.6.48: перехват выключается только там, где это проверено вживую. Признаком служил один модуль аппаратного ускорителя, а он заряжен и на «Доме», где перехват годами носит реальный трафик, — и 1.6.48 погасила рабочий механизм. Теперь условие сужено до связки «ускоритель + MediaTek»: ровно та пара, на которой пакеты данных до движка не доходят. ## 1.6.48 - Выборочный и полный режимы больше не ломаются молча на роутерах с аппаратным ускорителем NAT. Ускоритель уносит установленное соединение в железо, и пакеты перестают доходить до движка: рукопожатие проходит, а первый же пакет данных теряется — снаружи это «сайт висит и отваливается» при полностью исправных цепочках, маршрутах и сервере. Теперь на таких роутерах перехват не включается вовсе, трафик идёт прежним путём через туннель. Счётчики трафика при этом остаются: график не зависит от способа доставки. - Правило доставки перехваченного трафика переехало на приоритет 40 — раньше правил устройств. На старом приоритете 90 включённая настройка «панель важнее политик Keenetic» ставила устройства на 50, и перехваченный пакет уезжал в туннель вместо движка. Правило со старым приоритетом вычищается при первом же «Применить». - Правило «не трогать помеченное политикой Keenetic» получило маску. Без неё оно выбрасывало из перехвата собственные пакеты панели: метка перехвата восстанавливается из conntrack на установленном соединении, и совпадение считалось чужой политикой. - Появилась цепочка SINGPANEL_DIVERT — стандартная для TPROXY развязка: пакеты уже установленных соединений уходят в движок сразу, не проходя цепочку заново и не завися от того, попал ли адрес в набор. - Новый шаг диагностики «Перехват: приоритеты и маски». Он смотрит на то, чего не видел ни один другой шаг: порядок правила доставки относительно правил устройств, маску чужих меток, наличие развязки и локального маршрута. Обе поломки выше выглядели снаружи одинаково — «цепочки на месте, сервер жив, сайты не открываются», и найти их можно было только руками. ## 1.6.47 - Шаг диагностики «Цепочки и точки подключения» больше не красит в красное штатное состояние. Когда в VPN не направлено ни одно устройство, панель сама снимает перехват трафика — а проверка ждала его безусловно и объявляла поломкой то, что сделала сама. У «Родителей» с единственным выключенным компьютером это давало красный шаг на исправном роутере. - Остальные цепочки при этом проверяются как раньше: их пропажа остаётся поломкой, и снятый перехват при живом устройстве в VPN — тоже. ## 1.6.46 - Смена сервера или типа VPN больше не сбрасывает кэш набора сетей. Подпись входа хранила имя выбранного сервера, хотя набор от него не зависит вовсе, — и самая частая правка каждый раз платила полный пересчёт 27 тысяч подсетей (на «Работе» это 1.8 секунды из «Применить»). Обещание 1.6.44 наконец выполняется буквально. - Тест сторожит обе стороны кэша: подпись обязана не замечать смену сервера и обязана замечать всё, от чего набор действительно зависит. ## 1.6.45 - Проверка «таблицу маршрутов не снесли?» больше не выкачивает всю таблицу целиком. Панель спрашивает у ядра один конкретный маршрут — ответ тот же, а 27 тысяч строк на каждое применение и на каждое срабатывание хука больше не гоняются. ## 1.6.44 - Набор сетей выборочного режима пересчитывается только когда изменились сами списки, устройства или адреса от резолвера — а не на каждое применение. Раньше 27 тысяч подсетей разбирались и сортировались заново даже при смене одного сервера, и ту же цену платил каждый вызов от хука Keenetic, а их сотни в сутки. - Проверяется именно содержимое списков, а не отметка об обновлении: правка списка вручную обязана доходить до маршрутов, иначе панель уверенно писала бы «применено», пока трафик идёт мимо туннеля. Готовый набор сохраняется в /tmp, поэтому отдельный процесс хука тоже не платит за пересчёт. ## 1.6.43 - «Применить» перестало разбирать одни и те же списки по многу раз. Списки общие для устройств, а разбирались заново для каждого: на роутере с шестью устройствами и списком в 27 тысяч подсетей это сотни тысяч лишних разборов адреса — и секунды ожидания там, где не менялось вообще ничего. Теперь разбор списка живёт один проход и переиспользуется — и при сборке конфига, и при пересчёте маршрутов. ## 1.6.42 - «Применить конфигурацию» показывает время каждого шага. Кнопка на слабом роутере думает десятки секунд, и без этих чисел непонятно, зависла панель или работает — а любое ускорение остаётся вкусовщиной. - Смена сервера или типа VPN больше не ждёт полной проверки конфига. `sing-box check` разбирает мегабайт JSON и стоит на роутере около восьми секунд, а проверять там нечего: конфиг байт в байт совпадает с живым, который движок уже принял, и отличается только выбором человека. Единственный осмысленный вопрос — существует ли выбранная цель среди вариантов переключателя — панель задаёт сама и мгновенно. - Набор сетей выборочного режима не перезаливается в ipset, когда он не менялся. Это десятки тысяч сетей и около двух секунд на каждое применение, включая каждое срабатывание хука Keenetic. Подписи мало: набор мог быть снесён перестройкой firewall, поэтому панель ещё и проверяет, что первая сеть действительно внутри. ## 1.6.41 - Аварийный туннель к хабу больше не путает себя с чужим autossh. В Entware есть свой шаблон автозапуска с тем же именем, и пока запуск проверял «есть ли вообще процесс autossh», любой посторонний отменял подъём нашего туннеля, а остановка гасила чужой. Теперь свои процессы опознаются по ключу в командной строке, которая читается из /proc: вывод ps busybox обрезает по ширине терминала, и ключ в него не помещался — добивание осиротевших форвардов поэтому не срабатывало никогда. - Обновление панели больше не рвёт аварийный туннель ради переписанного текста скрипта. Перезапуск делается только когда меняются сами форварды; в остальных случаях файл на диске обновляется молча. Туннель — единственный вход на удалённый роутер, и разрывать его без нужды значит регулярно рисковать доступом там, где никто не подойдёт. - В диагностику добавлен шаг «Аварийный удалённый доступ». Он различает «туннель не запущен» и «туннель запущен, но хаб не принимает подключение» — во втором состоянии роутер недоступен снаружи, а панель раньше считала доступ поднятым. Именно так один из роутеров и оказался без аварийного входа незаметно. - Пустые счётчики трафика больше не жёлтые, когда в сети нет ни одного направленного в VPN устройства: трафику неоткуда взяться, и предупреждение здесь — шум, который учит не читать отчёт. Если устройство в сети, а счётчики молчат, шаг по-прежнему предупреждает и называет адрес. ## 1.6.40 - Диагностика считает правила маршрутизации по тому же списку устройств, по которому панель их ставит. При включённой настройке «все устройства сети» правила получают и клиенты из списка Keenetic, а проверка их не видела — на таком роутере могли пропасть десятки правил, а отчёт написал бы «на месте все 1 правило». - В отчёте теперь видно, сколько правил приходится на добавленные устройства, а сколько на клиентов сети по общей политике: иначе большое число рядом с тремя устройствами в панели выглядит ошибкой. - Пропавшее правило у клиента сети — это «подожди», а не «сломано»: такой клиент мог просто уйти из дома, и панель догонит состав сама. У добавленного устройства правило пропасть не может — там по-прежнему красное. ## 1.6.39 - Отчёт диагностики согласует числа с существительными: было «все 1 правил на месте». Для страницы, которая целиком состоит из текста, это разница между разбором поломки и машинным выводом, который перестают читать. ## 1.6.38 - Появилась «Диагностика» — кнопка на вкладке «Статус», которая проходит по живой системе шаг за шагом: движок, туннель и таблицы маршрутов, правила устройств, цепочки и счётчики, DNS, резолвер, переключатели, доступность серверов, IPv6, списки, память и флеш. Каждый шаг говорит своими словами, что не так и что с этим делать. - Главная проверка отвечает на вопрос, на который панель раньше ответить не могла: «настройки правда применены?». Версия в шапке — это версия панели, а трафик ходит по конфигурации движка, и после обновления они расходятся молча. Теперь панель сравнивает живую конфигурацию с той, которую собрала бы прямо сейчас, и прямо говорит, что нужно нажать «Применить». - Диагностика ищет и чужой софт, который делит с панелью тот же трафик: zapret, WARP, посторонние туннели с маршрутом по умолчанию, чужую разметку пакетов. Свои правила и родные цепочки Keenetic конфликтом не считаются. - Отчёт можно скопировать одной кнопкой: адреса серверов, ключи, идентификаторы и MAC в нём заменены на заглушки, а адреса домашней сети остаются — иначе отчёт нечитаем. - Проверки различают «сломано» и «подожди»: расхождение конфигурации из-за того, что устройство ушло из сети, и пустые счётчики сразу после применения правил показываются жёлтым, а не красным. ## 1.6.37 - Смена сервера и типа VPN вручную больше не перезапускает движок. Раньше без перезапуска умела переключаться только автоматика — увод с упавшего сервера, — а любая правка руками перекладывала правила в конфигурации, и движок приходилось перезапускать целиком. Перезапуск обрывает все соединения на роутере: падали звонки и загрузки у тех, кого правка вообще не касалась. Получалось перевёрнуто — реже рвалось то, что происходит само, чем то, что делает человек. Теперь выбор сервера, тип VPN («выкл», «полный», «выборочный»), переход на «Авто» и маршрут резолвера — это поворот переключателя внутри работающего движка. Уже открытые соединения при этом доживают на прежнем сервере, новые идут через выбранный. - Перетаскивание карточки устройства мышью больше не приводит к перезапуску движка: порядок устройств в панели в конфигурацию не попадает. - Содержимое списков объявляется в конфигурации один раз, а правила ссылаются на него по имени. Раньше список копировался в каждую группу устройств — на тяжёлых списках это мегабайты конфигурации и лишняя память на слабом роутере. - Переход в точечный режим и обратно по-прежнему перезапускает движок: там меняется сам набор доменов, которым панель подменяет адреса, а это правила, а не переключатель. - Удаление сервера больше не оставляет за собой ссылку на «Авто», когда серверов остаётся меньше двух. Такая ссылка ломала проверку конфигурации, то есть «Применить» перестало бы работать целиком — не только для этого устройства. - Панель трогает только те переключатели, которые действительно разошлись с выбранным. Найдено живой проверкой: на слабом роутере девятнадцать записей подряд однажды не уложились в таймаут, панель посчитала канал управления мёртвым и перезапустила движок — ради правки, которая перезапуска не требовала. - Движок, поднятый не панелью (загрузка роутера или сторож), тоже получает актуальные переключатели: раньше он мог остаться на сервере из файла конфигурации, пока панель показывала другой. ## 1.6.36 - Падение сервера больше не рвёт интернет всему дому. Раньше авто-переключение уводило устройства с упавшего сервера так: переписывало конфигурацию и перезапускало движок целиком. Перезапуск обрывает все соединения на роутере — включая те устройства, чей сервер был совершенно жив: падали звонки, слетали загрузки, приложения переспрашивали пароль. Теперь между устройством и сервером стоит переключатель внутри движка, и увод с упавшего сервера — это его поворот, без перезапуска и без паузы. Уже открытые соединения при этом не рвутся. - Появился сервер «Авто — самый быстрый». Движок сам раз в три минуты замеряет все серверы и держит устройство на быстром живом, переключаясь мгновенно и сам. Выбирается там же, где обычный сервер: и у отдельного устройства, и в общей политике. Пункт появляется, когда серверов больше одного. - Проверка серверов по-прежнему стучится в каждый сервер напрямую, мимо переключателя: иначе упавший сервер вечно числился бы живым за счёт соседа, на которого переключатель уже повернули. - Резолвер имён ходит тем же путём, что и трафик устройства. Это не новая настройка, а страховка: при уводе на запасной сервер DNS не должен остаться в мёртвом туннеле — иначе VPN в панели зелёный, а браузер молчит. ## 1.6.35 - Закрыта утечка мимо VPN в выборочном режиме. Браузер спрашивает у DNS не только обычный адрес сайта, но и запись HTTPS — а в ней сайт сам кладёт подсказку со своим настоящим адресом. Панель подменяла обычный адрес и заворачивала трафик в туннель, а подсказку пропускала как есть: браузер брал адрес оттуда и шёл напрямую, мимо VPN, пока панель показывала «применено». Теперь на такие запросы для доменов из списков панель отвечает «записи нет» — браузер сразу спрашивает обычный адрес и попадает в туннель. Ответ узкий, ровно по доменам списков: у остальных сайтов шифрование имени и HTTP/3 работают как прежде. - Браузер больше не поднимает собственный DoH за спиной у панели. Firefox проверяет специальный домен-канарейку, Chrome и iOS спрашивают у резолвера, есть ли у него шифрованный адрес; оба ответа теперь отрицательные — но только для устройств выборочного режима, где панель и так режет чужой DoH по адресам. В полном режиме DNS устройства и так уходит внутрь туннеля, ломать его незачем. - У списка появился тип: «в VPN», «мимо VPN» и «резать». Прежние списки остаются маршрутными, менять ничего не нужно. «Мимо VPN» вытаскивает домен из туннеля, даже если он попал в маршрутный список — для банков, госуслуг и всего, что не любит чужую страну в адресе. «Резать» не пускает домен никуда: DNS отвечает «нет такого домена», а сети из списка обрываются на маршруте. Оба типа действуют на роутер целиком, поэтому у устройств поштучно не выбираются и в наборе «все списки» не участвуют. Домен, попавший и туда и туда, режется: запрет важнее исключения. - Снифферы перечислены явно вместо дефолтного десятка. Разбор bittorrent, ssh, rdp и прочего запускался на каждом новом соединении, а правил по этим протоколам у панели нет. ## 1.6.34 - Появился сторож движка. Раньше sing-box перезапускался только по кнопке «Применить конфигурацию»: если он умирал ночью, DNS VPN-устройств оставался завёрнутым в мёртвый туннель и интернет пропадал целиком — до тех пор, пока кто-нибудь не заметит. Теперь панель раз в двадцать секунд проверяет, что движок жив и туннель поднят, и поднимает его сама. Если пять раз подряд не удалось — снимает свои правила и пускает трафик напрямую, мимо VPN, чтобы дом остался с интернетом; обход снимается сам, как только движок поднялся. Обе части — отдельные тумблеры в «Настройках», по умолчанию включены. Состояние «сейчас без VPN» видно в панели красным, а не только в логе. - Удаление устройства во время применения конфигурации больше не портит конфигурацию. Снимок состояния делался поверхностно, а удаление переписывало тот же массив: в конфиг попадал продублированный адрес одного устройства и терялся другой. - Проверка серверов больше не путает соседей. Порт проверки считался по месту сервера в списке, а в работающем движке он зафиксирован на момент последнего применения. Удалил сервер из середины и не нажал «Применить» — проверялся один сервер, а результат записывался другому: живой объявлялся упавшим, и авто-переключение уводило с него устройства. Сервер, добавленный после применения, теперь честно пишет, что его надо применить, вместо чужого адреса. - Авто-переключение больше не теряется при сохранении устройства из давно открытой вкладки: раньше переименование возвращало устройство на упавший сервер и навсегда стирало «как было». Осознанный выбор сервера в списке переключение снимает, как и раньше. - Удаление упавшего сервера снимает авто-переключение. Раньше оно оставалось включённым навсегда, и выйти из этого состояния через панель было нельзя. - Автообновление списков больше не может затереть соседний список. Если во время загрузки другой список удалили, результат попадал в чужой слот вместе с чужим именем, а удалённый список воскресал. - Пре-резолв доменов больше не откатывает настройки, изменённые во время его работы: он длится минутами и применял правила по снимку, снятому в начале. - Клик по настройке устройства, удалённого из другой вкладки, больше не проваливается молча. ## 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 больше не усекается.