github jameszeroX/XKeen 2.1

7 hours ago

downloads

  • Добавлена поддержка токенов доступа к RCI для совместимости с KeeneticOS 5.2
  • Добавлена возможность автоматической установки XKeen
  • Расширен функционал маршрутизации по DSCP-меткам — добавлена метка 61 - принудительное проксирование через отдельный transparent inbound/listener - @MichaelDavislol, @zxc-rv
  • Добавлена политика xkeen_full, повторяющая функционал и использующая настройки DSCP 61 для устройств в политике роутера
  • Реализована возможность проксирования через выбранного провайдера - @MichaelDavislol
  • Перед началом установки XKeen выполняется базовая проверка исправности Entware
  • Добавлена возможность автообновления пользовательских геофайлов (настройка)
  • Исправлена установка/обновление геофайлов и GeoIPSET (известные проблемы)
  • Скрыт выбор установки Mihomo Prerelease-Alpha (известные проблемы)
  • Сокращено окно отсутствия правил netfilter при пересборке файрвола NDM (renew DHCP) - трафик больше не уходит в обход прокси на 1–1.5 секунды; хук дополнительно защищён от гонок при частых renew: сгенерированный файл хука пишется атомарно (не бывает пустым/обрезанным), deny-MAC ipset не затирается пустым набором при сбое RCI, respawn mihomo из хука использует PID-lock (не залипает после OOM) #98, #116 - @dmiales
  • Сгенерированные блобы правил netfilter теперь кэшируются между запусками хука - это дополнительно сокращает окно, в котором трафик идёт мимо прокси после пересборки файрвола NDM #102 - @dmiales
  • Параллельные запуски netfilter.d-хука теперь сериализуются через lock-файл, что устраняет гонку при одновременной пересборке нескольких таблиц iptables; тот же лок распространён на clean_firewall (не сносит цепочки посреди iptables-restore на renew), а emergency_clear берёт общий proxy-mutex, чтобы не сорвать правила посреди обычного start/stop/restart #101, #117 - @dmiales
  • Применение правил iptables в netfilter-хуке теперь логирует и повторяет неудачный iptables-restore вместо игнорирования ошибки #99 - @dmiales
  • Для mihomo теперь автоматически выставляется GOMEMLIMIT (половина RAM устройства, предусмотрена настройка через xkeen.json), что предотвращает рост потребления памяти и убийство процесса OOM-killer'ом на слабых роутерах #100, #114 - @dmiales
  • Функция curl_with_timeout теперь возвращает код возврата curl, а не awk из форматирования прогресс-бара - сетевые сбои при загрузке больше не маскируются под успех #104 - @MrRefactoring
  • Добавлена опциональная балансировка по фактической скорости серверов (xkeen -sb) - вместо штатного выбора Xray по задержке (leastPing) #105 - @MrRefactoring
  • Распаковка обновления теперь атомарна (временный каталог + подмена), добавлена проверка целостности архива mihomo (gzip -t с откатом) и минимального размера загруженного ядра — прерванное обновление больше не оставляет XKeen в полуустановленном состоянии #112 - @dmiales
  • Хук netfilter.d пропускает пересборку маршрутов/правил при коротких DHCP renew, если WAN IP не изменился, а цепочки целы — меньше лишней работы на каждый renew #115 - @dmiales
  • Рантайм XKeen (локи, state, кэш правил, -toff) перенесён из world-writable /tmp с предсказуемыми именами в /tmp/.xkeen (root:root, 0700); убран eval при загрузке кэша правил, PID пишется в cold_start-лок сразу при создании #118 - @dmiales
  • Релизы XKeen и ядра xray/mihomo сверяются по sha256 с апстримом напрямую, а при недоступности, через зеркало с сообщением об этом; режим .xkeen.verify_downloads (по умолчанию warn, не ломает offline-сценарии); починка определения размера у зеркала через Content-Range; отдельный workspace на каждый вызов вместо общего /tmp/xkeen, чтобы параллельные -ug/-um не пересекались #119 - @dmiales
  • Установка (install.sh/install_xkeen) идёт через staging + .old-подмену — обрыв не оставляет полуустановку; xkeen.json и каталог конфига получают права 600/700 (там RCI-токен), дожимаются идемпотентно на -uk; перезапись crontab теперь матчит только полные команды xkeen -ug|-ux|-uk и пишет через tmp+mv — чужие строки в crontab больше не затираются #120 - @dmiales
  • Занятый proxy-mutex у stop/restart теперь либо ретраится, либо явно возвращает ошибку «занято» вместо молчаливого кода 0; proxy_start считает успех только после удачного применения netfilter-хука #121 - @dmiales
  • Добавлен опциональный kill-switch (.xkeen.killswitch, xkeen -killswitch on|off|status) — при аварии ядра дропает только помеченный политикой трафик вместо прямой утечки в обход прокси; дефолт off, xkeen -stop снимает блокировку полностью. Добавлен кэш последнего успешного policy mark на случай сбоя RCI (вместо отката к «прокси для всех»). На реальном железе матчинг DROP-правила переведён с connmark на packet-mark (fwmark) — connmark не срабатывал после сноса save-mark цепочки #122 - @dmiales
  • Точечное восстановление сета geo_exclude, если он опустел после OOM при живом .lst-файле (включая fast-path «WAN не менялся»); wait_for_ready теперь принимает от RCI и объект, и массив, не гоняя полный таймаут на пустом наборе #123 - @dmiales
  • Для user_exclude теперь добавляется симметричное правило по src, а не только по dst — обратный трафик (например, ответы OpenVPN по UDP) больше не попадает в TProxy #129
  • Добавлена метка nfqws_mark (по умолчанию 0x40000000, поддерживается формат mark/mask) для совместимости проксирования Entware с пакетом nfqws2 — трафик с этой меткой обходит проксирование через отдельное bypass-правило iptables в пользовательских политиках d2902d7, dbfa06e
  • После восстановления правил netfilter-хук сбрасывает UDP-записи conntrack для TProxy-потоков по $table_mark — уменьшена вероятность односторонних обрывов игровых/голосовых UDP-соединений при DHCP renew, когда поток, ушедший в окно без правил, подхватывался сетевым ускорителем (PPE) и не возвращался в TProxy #248

Детализация доработок, предложенных @kittylabassistant:

Установка, бэкапы, самообновление

  • Убран предсказуемый путь mirror-кэша и возможность future-dated TTL-обхода #131
  • Локализованы переменные install_xkeen_rename() через local #134
  • В шаблоне config.yaml Mihomo выключен find-process-mode #135
  • Добавлено подтверждение перед восстановлением из бэкапа (-kbr/-xbr/-mbr) #178
  • Quote-aware разбор комментариев JSON в install.sh get_user_proxy() #194
  • $mtmp_dir очищается на всех ветках ошибок install_mihomo() #195
  • install.sh проверяет SHA-256 архива для --stable/--legacy #196
  • Симметричный бэкап/откат xkeen-бинарника в install_xkeen() #197
  • xargs заменён на sed-тримминг для rci_token/gh_proxy #198
  • Устранена TOCTOU-гонка при реклейме протухшего lock-файла #199
  • mihomo_installed больше не зависит от здоровья yq -V #200
  • Удаляется мусорная _xkeen при частичном сбое restore_backup_xkeen #211
  • afe-replace конфигов Mihomo/Xray при восстановлении из бэкапа #212
  • Staging+verify до перезаписи install_dir/yq, -uy проверяет код возврата #227

netfilter.d-хук, автозапуск, cron

  • Явный PATH в сгенерированном netfilter-хуке proxy.sh #136
  • Удалён подтверждённо мёртвый код (SC2329/SC2034) #137
  • Убрана недостижимая ветка в update_cron_geofile_task() #138
  • Убран неиспользуемый valid_input=true в choice_geodata() #139
  • Атомарная запись в delete_cron_geofile() — больше не усекает crontab #173
  • Атомарная замена S05xkeen в register_xkeen_initd() #174
  • Атомарная запись opkg status_file, awk-based delete_register_* #175
  • Атомарная запись S05xkeen и списков портов через target.tmp.$$ #176
  • Атомарная запись S05crond в register_cron_initd() #177
  • Убран восьмеричный разбор в форматировании часа/минуты cron #184
  • Сужен regex детекции geofile-cron задачи в общем crontab root #202
  • Сентинел opkg_updated перенесён из /tmp в защищённый rundir #204
  • Недействительный rci_token больше не блокирует stop/status в S05xkeen #208
  • Убраны дублирующиеся вызовы uname -r в S05xkeen #233
    Батчевый ipset restore для deny-MAC вместо построчного add #234

GeoIP / geodata

  • choice_geodata() отклоняет конфликтующий multi-select geo-меню #181
  • Симлинк zkeen(ip) больше не создаётся при неудачной загрузке #188
  • Проверка SHA-256 геофайлов и geoipset перед установкой #189
  • load_geoipset() сериализован mkdir-локом против гонки на tmp-наборе #190
  • Исправлен якорный паттерн в _validate_geoipset_v6 #191
  • GNU-only \s заменён на [[:space:]] в grep -E #192
  • Синхронизирована санитизация входа в load_geoipset и load_ipset #218
  • xkeen -ug теперь обновляет пользовательские geodata и без стандартных баз #221

CLI, RCI-токен, вывод

  • GET к GitHub API за digest'ом релиза больше не дублируется #179
  • choice_xray_core/choice_mihomo_core возвращают 1 при отказе смены ядра #180
  • Закрыт CPU-spin busy-loop без TTY в 4 read-меню #182
  • Проверка владельца PID перед снятием cold_start guard #183
  • -start/-stop/-restart/-status возвращают реальный код завершения #185
  • Исправлена опечатка регрессии в resolve_dscp_force_proxy (name_policy_full → policy_mark_full) #186
  • Больше не теряется следующий флаг после -ap/-dp/-ape/-dpe #205
  • Обработка 401 и таймаут в top-level проверке RCI-токена #206
  • Сообщение об отсутствующем RCI-токене перенаправлено в stderr #207
  • Добавлен -r к read -p в preinstall_warn #209
  • Путь tmp_status_file в fixed_register_packages() сделан явным #210
  • Убран предсказуемый путь sb_rule_tmp из общего /opt/tmp #213
  • Восстанавливается chmod 600 на xkeen.json в sb_write_setting() #214
  • Гейт минимальной версии Xray-core перед проверкой api балансировки #215
  • local IFS в tests_ports_client, чтобы не текла в диспетчер #219
  • clear больше не вызывается без проверки TTY #220
  • Убраны двойные пустые строки в сообщении об ошибке версии XKeen #222
  • Усечение xkeen-detached.log при self-detach #223
  • Показывается help при запуске xkeen без аргументов #224
  • Единый netstat и корректный разбор [addr]:port в tests_ports_client #225
  • Добавлена проверка наличия xray перед сменой ядра в choice_xray_core() #232

Балансировщик и производительность

  • proxy.sh и schedule-хук не перезаписываются, если содержимое не изменилось #193
  • Убран повторный echo|tr|sed разбор портов в add_multiport_rules #228
  • Пропускается лишний chmod в _xkeen_secure_rundir на верифицированной ветке #229
  • Кэшируется разбор xkeen.json на один инвокейшн #230
  • Убрана недостижимая ветка и no-op sed в choice_add_proxy_cores #231
  • Кэшируется разбор config.yaml Mihomo в горячем пути DSCP force-proxy #235
  • remove_ports_from_list переведён на однопроходный awk вместо цикла #236
  • Кэшируется разбор xkeen.json в S05xkeen за один запуск процесса #237
  • opkg self-heal пропускается на -sbt и help/meta-командах #238

Don't miss a new XKeen release

NewReleases is sending notifications on new releases.