-
Notifications
You must be signed in to change notification settings - Fork 33
Configuration
Предусмотрена возможность добавить в конфигурационные файлы XKeen необходимые порты проксирования или исключения из проксирования, а также IP-адреса и подсети, проксирование которых не требуется. Файлы находятся в директории /opt/etc/xkeen/
-
port_proxying.lst- порты проксирования, например 80 и 443 -
port_exclude.lst- порты, которые необходимо исключить из проксирования, например, 3389. -
ip_exclude.lst- IP-адреса и подсети, которые необходимо исключить из проксирования, например, 77.88.8.8
Каждый порт и IP указываются в этих файлах с новой строки. Пустые строки и строки, начинающиеся со знака комментария # игнорируются. Порты проксирования и порты исключенные из проксирования не могут применяться вместе, используйте или то, или другое. Если по ошибке будут заполнены оба списка, то приоритет имеют порты проксирования, а список исключенных портов игнорируется. При чистой установке XKeen создаются шаблоны вышеуказанных файлов с примерами их заполнения.
В среде entware Keenetic довольно низкий предел файловых дескрипторов (fd) выделяемых на один процесс - 1024. Превышение этого значения приводит к отказу прокси-клиенту создавать новые коннекты. На процессорах arm64 суммарно на все процессы отведено около 50000 fd, а на mips процессорах около 12000 fd (цифры могут отличаться для разных моделей роутеров). Оригинал XKeen выделяет для процесса xray 1 миллион! дескрипторов и если xray попытается их занять, роутер может просто зависнуть. Форк XKeen версии 1.1.3.6+, в зависимости от процессора, устанавливает лимит 40000 fd для arm64 и 10000 fd для остальных процессоров, а при достижении 90% от этой цифры, перезапускает прокси-клиент. В параметрах arm64_fd и other_fd стартового скрипта XKeen, при необходимости, можно откорректировать лимиты, установив другие значения. Контроль fd может быть полезен для высоконагруженных роутеров с большим количеством клиентов. Для типичного self-use применения XKeen, данный функционал использовать необязательно, поэтому по умолчанию контроль открытых файловых дескрипторов прокси-клиентом отключен (включить/отключить можно командой xkeen -fd). Возможностью контролировать открытые файловые дескрипторы следует пользоваться в крайних ситуациях, когда ничего уже не помогает, так как при этом прокси-клиент будет постоянно перезапускаться для сброса дескрипторов. Рекомендуется вместо этого найти и устранить причину. Это может быть устройство или приложение, открывающее множество подключений.
В базовый конфиг XKeen добавлены два публичных GitHub-прокси, через которые возможна загрузка всех компонентов XKeen в случае недоступности GitHub. Если же и они окажутся недоступны, можете установить Self-Hosted прокси на своём сервере и указать его в параметре gh_proxy конфигурационного файла xkeen.json Файл xkeen.json можно создать заранее перед установкой XKeen, в этом случае прокси будет использоваться при установке.
{
"xkeen": {
"gh_proxy": "https://user_gh_proxy.com"
}
}При нестабильном соединении один транзиентный сбой может прервать установку или обновление компонентов. В конфигурационном файле xkeen.json можно настроить автоматические повторные попытки загрузки:
{
"xkeen": {
"retries_download": 3,
"retry_delay_download": 5
}
}-
retries_download— общее число попыток загрузки одного файла. По умолчанию1(без повторов). Применяется к загрузке XKeen, Xray, Mihomo, Yq, GeoSite/GeoIP/GeoIPSET, а также к получению списка релизов через GitHub API/jsDelivr. -
retry_delay_download— пауза в секундах между попытками. По умолчанию2.
Повторы работают совместно со встроенной цепочкой зеркал (gh_proxy, gh-proxy.com, ghfast.top): на каждой попытке скрипт автоматически перебирает все доступные префиксы.
Штатная балансировка Xray выбирает ноду по задержке (leastPing). Флаг xkeen -sb добавляет выбор по фактической скорости: по расписанию замеряет каждую ноду балансировщика и переставляет выбор на самую быструю, если она обгоняет текущую больше чем на гистерезис. Механизм внешний — он не переписывает конфигурацию Xray и не перезапускает его, а управляет балансировщиком через gRPC api (OverrideBalancerTarget).
Фича необязательная и по умолчанию выключена. Включается командой xkeen -sb on (при первом включении предложит автоматически добавить блок api и probe-inbound в конфигурацию Xray) или правкой xkeen.json. Включать нужно на запущенном Xray: у остановленного ядра api молчит независимо от того, настроен он или нет, поэтому на остановленном XKeen команда только попросит выполнить xkeen -start, а не предложит добавить api и probe второй раз. Повторный xkeen -sb on на уже включённой балансировке заново её не включает: сообщает состояние и предлагает прогнать замер вне расписания. Доступность api при этом всё равно проверяется, так что потерянное правило api команда по-прежнему восстанавливает. xkeen -sb off на выключенной — просто сообщает, что она выключена.
{
"xkeen": {
"xray": {
"speed_balancer": {
"enabled": true,
"log": true,
"interval": 15,
"hysteresis": 25,
"balancer": "balancer",
"max_time": 8,
"test_url": "https://speed.cloudflare.com/__down?bytes=50000000"
}
}
}
}-
enabled— включена ли балансировка. По умолчаниюfalse; без флага XKeen работает как раньше. -
log— вести ли лог замеров и переключений (speed_balancer.log). По умолчаниюtrue. Поставьтеfalse, если лог не нужен: запись прекратится, аxkeen -sb statusперестанет показывать блок «Последние события». Лог и без того усечён до последних 200 строк. -
interval— период замера в минутах. По умолчанию15. -
hysteresis— на сколько процентов кандидат должен обгонять текущую ноду, чтобы переключиться. По умолчанию25. Защищает от дёрганья на случайных колебаниях скорости. -
balancer— тег балансировщика из файла роутинга (по умолчанию05_routing.json). По умолчаниюbalancer. -
max_time— таймаут одного замера в секундах. По умолчанию8. -
test_url— URL для замера скорости. По умолчанию endpoint Cloudflare; размер запрашивается 50 МБ, так как на больший объём Cloudflare отвечает ошибкой. -
routing_file— имя файла роутинга в каталоге конфигов Xray. По умолчанию05_routing.json; задавайте, только если у вас нестандартная раскладка файлов. -
outbounds_file— имя файла с outbound'ами в каталоге конфигов Xray. По умолчанию04_outbounds.json.
Замер идёт через отдельный probe-канал и боевой трафик не затрагивает. xkeen -sb status показывает состояние, текущую ноду и последние события, xkeen -sb off выключает балансировку и снимает override.
Стратегия балансировщика. Пока override выставлен, стратегия из 05_routing.json в выборе не участвует — её перекрывает модуль. Но она снова становится главной в двух случаях: сразу после перезапуска Xray (override живёт только в рантайме и рестарт не переживает) и когда очередной замер решил не переключаться — в этом случае модуль ничего не выставляет. Поэтому стратегия обязана сама давать один определённый узел, то есть leastPing.
С random и roundRobin модуль работать не будет: у них выбранного узла нет, xray api bi возвращает список всех живых, модуль принимает за текущий первый из списка и показывает его в xkeen -sb status, хотя трафик в это время расходится по всему пулу. При решении «оставить» так и останется.
Блок observatory не отключайте: leastPing без него неработоспособен, а fallbackTag перестаёт срабатывать, поскольку опирается на результаты наблюдения.
Ограничение. Модуль рассчитан на балансировщик с пулом взаимозаменяемых узлов (стандартный sub--пул) и оперирует ровно одним балансировщиком, заданным тегом balancer. Схема с несколькими балансировщиками одновременно — в частности каскадная отказоустойчивость из третьей части — не поддерживается: там у балансировщика одна ветка (ранжировать нечего), а принудительный выбор мешал бы failover. С дефолтным тегом на такой конфигурации модуль ничего не делает. Если вы вручную перегенерируете роутинг (например меняя список outbound'ов), выполните xkeen -sb on повторно, чтобы вернуть правило api.
Обычная установка XKeen и необходимых компонентов выполняется в OnLine режиме и жёстко привязана к GitHub, а в случае его недоступности будет невозможна. Поэтому в форк дополнительно к способу установки через Self-Hosted-прокси добавлен режим OffLine-установки по команде xkeen -io
Для OffLine-установки необходимо заранее любым способом скачать установочный архив XKeen версии 1.1.3.9+, ядро проксирования xray и(или) mihomo + парсер yaml-файлов yq подходящей архитектуры. Если планируте использовать xray и геофайлы в роутинге, то загрузите и их. Следующим шагом поместите в папку /opt/sbin/ архив XKeen (не распаковывая) и предварительно извлечённые из архива и при необходимости переименованные в xray mihomo и yq бинарники, затем выполните OffLine-установку командами в ssh-консоли entware Keenetic:
cd /opt/sbin
tar -xvzf xkeen.tar.gz && rm xkeen.tar.gz
xkeen -io
Копирование файлов конфигурации xray, mihomo и необходимых геофайлов в директории /opt/etc/xray/configs, /opt/etc/mihomo, /opt/etc/xray/dat выполните вручную, после чего можете запустить проксирование командой xkeen -start
При OffLine-установке XKeen не проверяет соответствие архитектуры процессора и бинарников, поэтому выбирайте совместимые бинарники внимательно. Если затрудняетесь в выборе, запустите xkeen -io без xray и mihomo в папке /opt/sbin/ и XKeen сообщит, какая архитектура требуется для вашего роутера.
При недоступности GitHub, обновление геофайлов по планировщику работать не будет, выполняйте его вручную.
Если недоступен не только GitHub, но и репозиторий Entware, то перед OffLine установкой XKeen требуется вручную установить недостающие пакеты из следующего списка:
curl, tar, lscpu, jq, libc, libssp, librt, libpthread, iptables, ca-bundle, coreutils-uname, coreutils-nohup, ipset
либо прописать в файл /opt/etc/opkg.conf рабочее зеркало репозитория
В роутинге, используя параметр source, вы можете определить разные правила маршрутизации для разных устройств, а пользовательские политики дают возможность задать для них разные порты проксирования, например, для торрент-клиента можно сделать политику с 80,443 портами проксирования, для телефонов политику с портами 80,443,596:599,1400,3478,5222, а для игровых устройств с более широким набором портов. Для работы с пользовательскими политиками, они должны быть определены в конфигурационном файле /opt/etc/xkeen/xkeen.json, а также созданы в интерфейсе роутера с теми же именами. Пользовательские политики подключаются только если в интерфейсе роутера создана дефолтная политика xkeen, иначе пользовательские политики игнорируются и проксирование запускается для всех клиентов роутера. В пользовательских политиках, в отличие от политики xkeen, не проверяется наличие обязательных портов проксирования 80,443, и вы можете формировать произвольный их список. Описание конфигурационного файла xkeen.json
В XKeen 2.0.1 добавлена возможность использовать ещё один вариант пользовательской политики - xkeen_full, она работает на всех портах, не зависит от IPSET исключений и от правил маршрутизации основной политики xkeen. Предусмотрена для проксирования устройств через отдельный force-proxy inbound, используемый так же для 61-метки DSCP
Актуальный пример настройки проксирования DNS представлен в статье DNS-over-VLESS Часть 2
Ниже оставлен предыдущий способ, имеющий некоторые особенности, и он может быть рекомендован только для изучения:
Проксирование DNS с помощью XKeen активируется командой xkeen -dns и имеет следующую особенность. Корректная работа устройств вне политик XKeen возможна только когда:
- Эти устройства находятся не в "Политике по умолчанию", а в кастомной политике с произвольным именем
- В роутере не игнорируется DNS провайдера, либо добавлен любой внешний не шифрованный DNS (даже при использовании AdGuardHome и отключении прошивочного резолвера командой opkg dns-override)
- В роутере удалён компонент "Фильтрация контента и блокировка рекламы при помощи облачных сервисов" (на актуальных прошивках Кинетика этот компонент зависит от "Мастера первоначальной настройки" и его тоже нужно удалить)
XKeen создаёт и использует 4 сета IPv4 и 4 сета IPv6 IPSET.
-
user_exclude,user_exclude6- наполняются пользовательскими исключениями IP из файлаip_exclude.lst -
geo_exclude,geo_exclude6- наполняются подсетями России из загружаемых файловru_exclude_ipv4.lstиru_exclude_ipv6.lst -
geo_override,geo_override6- наполняется из пользовательского файлаru_exclude_override.lstIP-адресами и подсетями, которые нужно исключить из предыдущего пункта -
ext_exclude,ext_exclude6- наполняются любым сторонним приложением на ваш выбор, например, AdGuard Home или dnsmasq (см. документацию к этим приложениям). Данная возможность позволяет добавлять в исключения проксирования не IP, а доменные имена.
Все сеты, кроме geo_override и geo_override6, исключаются из цепей маршрутизации XKeen и идут напрямую через провайдера. Это позволяет избежать обрывов коннекта, которые иногда происходят в результате обработки трафика прокси-клиентом.
Файлы ru_exclude_ipv4.lst и ru_exclude_ipv6.lst первоначально загружаются из интернета в процессе установки XKeen либо вручную командой xkeen -gips. В дальнейшем обновление этих файлов выполняется одновременно с геофайлами по планировщику либо запуском xkeen -ug
PBR нужен, если сам Xray/Mihomo должен выходить в интернет через выбранную политику Keenetic или конкретный WAN. Если этого не требуется, этот раздел можно пропустить.
Маршрутизацию задаёт mark / routing-mark в конфиге Xray/Mihomo.
Команда xkeen -pbr on только включает strict-проверку этой настройки перед запуском.
xkeen -pbr codes
xkeen -pbr on
xkeen -pbr off
xkeen -pbr status-
xkeen -pbr codes— показать коды политик Keenetic дляmark/routing-mark. -
xkeen -pbr on— включить strict-проверку. -
xkeen -pbr off— выключить strict-проверку, но не удалять и не отключать уже прописанныйmark/routing-mark. -
xkeen -pbr status— показать статус проверки.
В выводе xkeen -pbr codes используйте число справа от =.
Перед запуском XKeen проверяет конфиг.
Если у исходящих подключений Xray/Mihomo найден корректный mark / routing-mark реальной политики Keenetic, запуск продолжается.
Если mark / routing-mark отсутствует, неверный или конфиг нельзя нормально проверить, XKeen блокирует запуск и просит исправить конфиг.
При xkeen -pbr off XKeen просто не выполняет эту strict-проверку.
Если mark / routing-mark уже указан в конфиге Xray/Mihomo, он продолжит применяться самим ядром/системой.
{
"tag": "proxy",
"protocol": "vless",
"streamSettings": {
"sockopt": {
"mark": 123456
}
}
}-
123456замените на код изxkeen -pbr codes. -
markзадаётся для реальных outbounds, которые устанавливают внешние подключения. - Служебные outbounds
blackholeиloopbackpolicy mark не требуют. -
255для PBR не используйте.
Глобально:
routing-mark: 123456Либо у нужного proxy / proxy-provider, если это поддерживает ваша схема конфигурации.
- Значение берётся из
xkeen -pbr codes. -
255для PBR не используйте.
Этот режим нужен, чтобы программы из Entware выходили в интернет через Xray/Mihomo. Если не требуется маршрутизации самого Xray/Mihomo через выбранный WAN, достаточно этого раздела.
Включение:
xkeen -pr onДля обычного Entware proxy используется служебная метка 255.
Она нужна, чтобы исходящие подключения самого Xray/Mihomo не были повторно перехвачены OUTPUT-правилами.
mark 255 не является policy mark Keenetic.
Для Xray укажите mark: 255 в streamSettings.sockopt у реальных outbounds, включая direct.
Служебные outbounds blackhole и loopback можно не трогать.
"streamSettings": {
"sockopt": {
"mark": 255
}
}Для Mihomo используйте:
routing-mark: 255Если одновременно нужно направить сам Xray/Mihomo через конкретную политику Keenetic, вместо 255 используйте код из xkeen -pbr codes и включите strict-проверку xkeen -pbr on.
xkeen -pr и xkeen -pbr совместимы и могут использоваться вместе.
Навигация
- Главная
- FAQ - Часто задаваемые вопросы и ответы
- Отличия форка XKeen от оригинала
- Таблица совместимости роутеров
- Режимы работы XKeen
- Порядок установки
- Описание установочного скрипта
- Конфигурационный файл xkeen.json
- Описание настроек некоторых возможностей
- DNS-over-VLESS
- Маршрутизация по DSCP-меткам
- Известные проблемы