XKeen это набор скриптов для роутеров Keenetic с прокси клиентом xray-core, с помощью которого можно оптимизировать производительность интернет-подключения и обеспечить его безопасность. Подробнее о проекте — XKeen на форуме Keenetic
FAQ по XKeen предназначен для тех, у кого возникли дополнительные вопросы после внимательного прочтения инструкции, а также охватывает ситуации, которые напрямую к XKeen не относятся, но возникают в процессе его использования.
Q: Настроил xkeen/xray, всё работало, ничего не трогал, настроек не менял. Внезапно сайты через прокси перестали открываться. Что можно предпринять?
A: При внезапных проблемах с xray, рекомендуется в первую очередь сменить параметр SNI на сервере, а в роутере прописать шифрованные DNS (DoH или DoT). Отключать DNS провайдера при этом не нужно.
Q: Почему у меня при использовании xkeen/xray и замерах скорости в приложениях или на сайтах (показатели сильно различаются/низкая скорость/скорость, как через провайдера/процессор загружен на 100%/…)?
Важно!
Для достоверного результата замера скорости необходимо соблюдать два условия:
— не ограничивать порты проксирования 80 и 443;
— не использовать выборочный роутинг и направить весь трафик на vps.
A: Всё дело в невысокой производительности процессора роутера и в особенностях работы xray с потоком xtls-rprx-vision. Когда xray видит, что через него проходит https-трафик (т.е. шифрованный), он его повторно не шифрует (чтобы не создавать два слоя шифрования) и наоборот, когда через xray проходит http-трафик (т.е. не шифрованный), включается механизм шифрования, которое выполняется силами процессора устройства и чем он мощней, тем больший объем информации сможет зашифровать xray, а от этого напрямую зависит то, столько трафика он через себя пропустит в единицу времени, т.е. скорость интернета. Различные сайты и приложения для тестирования скорости используют разные методики, где-то замеряется шифрованный трафик, где-то не шифрованный, могут использоваться произвольные, не включенные в роутинг, домены, а популярный speedtest, например, для замеров задействует нестандартный 8080-порт и если не учесть все эти нюансы, результаты тестов не будут корректными.
Некоторые пользователи пытаются тестировать скорость торрент-клиентами, это плохая практика, как, собственно, и использование xray для файлообмена в целом. Bittorrent-протокол это не https-трафик и высоких скоростей вы не получите из-за ограничений процессора. Так же не стоит сравнивать результаты замеров при использовании xray в роутере с xray-клиентами на компьютерах и смартфонах. Процессоры компьютера или смартфона во много раз мощней роутера и для них шифрование трафика не является существенной нагрузкой.
Советы:
Для повышения скорости интернета и времени отклика через прокси рекомендуется выполнить оптимизацию сетевого стека сервера, включив режим BBR
Обязательно используйте поток xtls-rprx-vision, иначе трафик будет шифроваться всегда и это отрицательно скажется на скорости интернета через xray.
На скорость интернета так же влияет способ подключения к xray на роутере. Это могут быть socks5, Redirect, TProxy и их комбинация. В силу особенностей реализации встроенного в Keenetic прокси-клиента, самым медленным является socks5, а самым быстрым Redirect (но он не поддерживает UDP-протокол). TProxy полностью поддерживает TCP и UDP, но чуть более ресурсоёмкий, а Mixed режим, это золотая середина для не топовых роутеров, TCP в нём работает в режиме Redirect, а UDP в режиме TProxy. Рекомендуемыми режимами работы XKeen являются TProxy и Mixed. Узнать текущий режим работы можно в журнале Кинетика в момент запуска XKeen.
Q: Почему у меня на роутере (KN-3810/KN-3610/KN-1912/…) после установки xkeen скорость интернета упала до 30-40 Мбит/c даже напрямую через провайдера и процессор роутера загружен на 100%?
A: С данными моделями Keenetic всё гораздо хуже. В ряде бюджетных моделей роутеров установлен процессор EcoNet (EN****), имеющий очень низкую производительность при использовании xray (узнать какой процессор установлен в той или иной модели можно в технических характеристиках на официальном сайте Keenetic). Хray в роутере пропускает через себя абсолютно весь запрашиваемый клиентом трафик и согласно роутингу часть трафика отправляет напрямую, а часть через прокси. Слабый процессор не справляется с анализом и транзитом трафика через xray, исправить это, к сожалению, нельзя. Для данных моделей роутеров, чтобы хоть как-то снизить нагрузку, настоятельно рекомендуется ограничивать порты проксирования 80 и 443 (подробности в инструкции), не подключать чрезмерное количество geosite и geoip баз, а также не использовать компонент прошивки «Классификация трафика», он очень требователен к ресурсам.
Q: Почему при использовании xkeen меня периодически выбрасывает из (ssh-сессии/удаленного рабочего стола/корпоративного VPN/онлайн-звонков/игр/видеоконференций/…)?
A: Xray не предназначен для потокового трафика и для постоянного поддержания коннекта, это не VPN, а прокси со своими особенностями. Весь трафик проходит через его ядро в Кинетике и сопоставляется с роутингом. Если найдено правило маршрутизации, трафик направляется в прокси, если не найдено, то трафик выходит из xray и направляется через провайдера, но через ядро xray трафик проходит весь и всегда, а у xray есть особенность, обрывать сессию, которую он сочтёт устаревшей. Глобально это поведение вы не поменяете, но можно попробовать пустить критичный трафик напрямую, мимо прокси. Для этого убедитесь, что в настройках политики доступа в интернет XKeen не включена «Многопутевая передача» и добавьте IP-адрес назначения c 32 маской в исключения проксирования (параметр ipv4_exclude файла /opt/etc/init.d/S24xray), а также ограничте порты проксирования XKeen (команда xkeen -ap 80,443). Если это не помогает, пробуйте другие режимы и протоколы xray.
Q: Добавил телефон в политику XKeen, всё работает, но не могу подключить к xray-серверу с помощью приложения на телефоне. Что можно сделать?
A: Вы пытаетесь подключиться к прокси, будучи уже подключенными к прокси. Без дополнительных настроек это не работает. Исключите сервер из проксирования, добавив его IP-адрес с 32 маской в параметр ipv4_exclude файла /opt/etc/init.d/S24xray
Q: Почему сайт (ChatGPT/whoer/dell/intel/…) (определяет мой провайдерский IP/страну/не даёт зайти/…), хотя ресурс добавлен в роутинг?
A: Некоторые ресурсы используют протокол QUIC (реже технологию WebRTC), через которые возможна утечка IP-адреса. Согласно официальной документации xray проксирование QUIC не рекомендуется (цитата: «Фактически, QUIC сам по себе не подходит для проксирования, поскольку QUIC имеет встроенные функции TCP, и когда он передается по протоколу VLESS как UDP-трафик, базовый протокол — TCP, что эквивалентно двум уровням TCP»), поэтому эффективным решением является его отключение, например, как написано в статье Отключение WebRTC и QIUC в браузере. При этом нужно помнить, что WebRTC используется многими программами для голосового общения и вебконференций, если вы планируете использовать такие программы, WebRTC лучше не отключать. Есть ещё один способ отключить QUIC для клиентов xray, это заблокировать 443 порт UDP (способ работает для TProxy и Mixed режимов XKeen), добавив следующий блок первым правилом роутинга:
1 2 3 4 5 6 |
{ "network": "udp", "port": "443", "outboundTag": "block", "type": "field" }, |
Протокол QUIC так же можно заблокировать для всех устройств на уровне локальной сети в межсетевом экране Keenetic:
В некоторых случаях, интернет-ресурсы (например сайт intel.com) дополнительно определяют локаль браузера и если браузер имеет русский интерфейс, то доступ к ресурсу блокируется со стороны сайта. Прокси тут не поможет, необходимо переключить интерфейс браузера на иностранный язык, либо подменить локаль выборочно для данного сайта с помощью дополнения Locale Switcher (есть варианты для Firefox и Chrome).
Так же рекомендуется отключить IPv6 на сервере установив стратегию UseIPv4 для direct направления в исходящих:
Q: Как заблокировать рекламу на Youtube?
A: Роутингом xray, так же, как и DNS-фильтрацией, вы не заблокируете рекламу на ютубе, так как эта реклама вшита в видеопоток и отдаётся с тех же доменов, что и основное видео. С такой рекламой могут справятся только приложения в которых это предусмотрено (SmartTube, YouTube ReVanced, AdGuard для Windows,…), дополнения к браузерам аналогичного назначения, либо покупка Premium на ютубе. Так же есть вероятность, что при регулярном просмотре ютуба, на устройствах по геолокации находящихся в России, гугл отметит ваш аккаунт, как российский независимо от IP и отключит рекламу.
Q: После (сбоя питания/перезагрузки/ни с того ни с сего/…) пропал доступ к ssh на роутере. Почему и как исправить?
A: Перед установкой entware проверьте, чтобы не был установлен и если это не так, то обязательно удалите компонент прошивки Кинетика «Сервер SSH». У entware свой сервер ssh и они иногда конфликтуют. Если ssh всё-таки перестал работать, удалите файл /opt/var/run/dropbear.pid, убедитесь, что в конфиге /opt/etc/config/dropbear.conf есть только одна строчка PORT=22 или PORT=222 и перезагрузите роутер.
Чтобы избежать сбоев ssh отредактируйте третью строку файла /opt/etc/init.d/S51dropbear следующим образом:
1 |
PIDFILE="/var/run/dropbear.pid" |
Q: Запустил xkeen, но ping и tracert к ресурсам из роутинга почему-то (идут напрямую через провайдера/не проходят).
A: Пинги и трасировка через прокси не ходят. Прокси работает на верхнем Прикладном уровне модели OSI, а пинги на третьем Сетевом уровне.
Q: Прописал в роутинг домены themoviedb.org и tmdb.org, но они всё равно не открываются. Почему и, как получить к ним доступ?
A: Этот ресурс блокирует российских пользователей на уровне GeoDNS. Решением является подбор правильного независимого DNS-сервера. На момент написания этой статьи таким сервером является, например, dns.sb. Можете прописать его DoH или DoT адреса в роутере, удалив остальные DNS-серверы и ресурсы tmdb станут открываться. Другой вариант решения, если у вас установлен AdGuardHome, то можете направить выборочно ресурсы tmdb на dns.sb или на другой подходящий DNS, а для остальных ресурсов пользоваться привычными DNS-серверами. Пример на скриншоте:
https://dns.google/dns-query
https://one.one.one.one/dns-query
[/tmdb.org/themoviedb.org/b-cdn.net/]https://ee-tll.doh.sb/dns-query
Данную задачу можно решить и без AgGuardHome, создав в веб-интерфейсе Keenetic такую запись для каждого из трёх доменов:
11
Q: По совету «бывалых» указал в настройках панели 3x-ui IP-адрес 127.0.0.1, теперь никак не могу на нее зайти. Скажите, пожалуйста, что можно сделать?
A: Создайте в PuTTY ssh-подключение к серверу по публичному IP-адресу, дополнительно пробросив нужный порт к панели. Для этого выберите в левой колонке пункт SSH/Tunnels, впишите порт панели в Source port (например, 65345), а в Destination укажите локахост с этим портом (localhost:65345) и нажмите «Add» (1 скриншот). Подключитесь к серверу нажав кнопку Open и залогиньтесь по ssh. Не закрывая PuTTY зайдите браузером по адресу localhost, указав нужный порт и путь к панели (2 скриншот).
Q: При перезагрузке роутера XKeen (не запускается/начинает работать для всего устройства, а не только для своей политики). Почему и как исправить?
A: В некоторых случаях entware со всеми установленными пакетами стартует раньше, чем прошивка завершает инициализацию. В этот момент ещё недоступно Интернет-подключение и не созданы «Политики доступа в интернет», поэтому XKeen запускается для всего устройства или не запускается вовсе. Есть два варианта исправления, первый — отсрочить запуск XKeen на несколько секунд выполнив команду xkeen -d 20 (число измеряется в секундах и подбирается экспериментально), второй, более надёжный вариант — перезапустить XKeen после старта роутера. Чтобы не делать это вручную из ssh-консоли, можете поместить по пути /opt/etc/init.d/ скрипт S99xkeenrestart и сделать его исполняемым командой chmod +x /opt/etc/init.d/S99xkeenrestart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh # Сайт для проверки доступности интернета HOST="ya.ru" # Бесконечный цикл для проверки доступности интернета while true; do # Пингуем сайт ping -c 1 "$HOST" > /dev/null 2>&1 # Проверяем результат ping и если ОК перезапускаем xkeen через 15 секунд if [ $? -eq 0 ]; then sleep 15 xkeen -restart break else echo "Сайт $HOST не доступен, пытаюсь снова..." fi sleep 5 done |
Q: Установил на роутер AdGuard Home. Все клиенты из политики XKeen в его журнале имеют IP-адрес роутера, а не свои локальные IP-адреса. Можно ли сделать, чтобы запросы отображались от клиентов?
A: Это можно исправить перехватом DNS-трафика в таблицах iptables Кинетика. Для начала проверьте, чтобы в файле inbounds был включен параметр routeOnly:
1 2 3 4 5 |
"sniffing": { "enabled": true, "routeOnly": true, "destOverride": ["http","tls"] }, |
Поместите скрипт aghfix.sh v.1 в папку /opt/etc/ndm/netfilter.d/ и сделайте его исполняемым командой chmod +x /opt/etc/ndm/netfilter.d/aghfix.sh После чего перезагрузите роутер. Примечание: Данный скрипт работает только с политикой XKeen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/sh if ! iptables -t nat -C _NDM_HOTSPOT_DNSREDIR -p udp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1; then iptables -t nat -I _NDM_HOTSPOT_DNSREDIR -p udp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1 fi if ! iptables -t nat -C _NDM_HOTSPOT_DNSREDIR -p tcp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m tcp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1; then iptables -t nat -I _NDM_HOTSPOT_DNSREDIR -p tcp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m tcp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1 fi if ! ip6tables -t nat -C _NDM_HOTSPOT_DNSREDIR -p udp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1; then ip6tables -t nat -I _NDM_HOTSPOT_DNSREDIR -p udp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1 fi if ! ip6tables -t nat -C _NDM_HOTSPOT_DNSREDIR -p tcp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m tcp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1; then ip6tables -t nat -I _NDM_HOTSPOT_DNSREDIR -p tcp -m mark --mark 0xffffaaa -m pkttype --pkt-type unicast -m tcp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1 fi |
Второй вариант скрипта aghfix.sh v.2 работает с любой политикой доступа в интернет и имеет следующий листинг. Инструкция по использованию аналогична скрипту v.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/bin/sh get_interface_list(){ /opt/sbin/ip a | grep -E ': br[0-9]:' | cut -d':' -f2 | cut -d' ' -f2 } for brX in $(get_interface_list) do get_router_ip4() { /opt/sbin/ip a show dev "${brX}" | grep 'inet ' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f1 } get_router_ip6() { /opt/sbin/ip a show dev "${brX}" | grep 'inet6 ' | grep 'scope link' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f1 } local_ip4=$(get_router_ip4) if ! iptables -t nat -C PREROUTING -i ${brX} -p udp --dport 53 -j DNAT --to-destination ${local_ip4} >/dev/null 2>&1; then iptables -t nat -I PREROUTING -i ${brX} -p udp --dport 53 -j DNAT --to-destination ${local_ip4} >/dev/null 2>&1 fi if ! iptables -t nat -C PREROUTING -i ${brX} -p tcp --dport 53 -j DNAT --to-destination ${local_ip4} >/dev/null 2>&1; then iptables -t nat -I PREROUTING -i ${brX} -p tcp --dport 53 -j DNAT --to-destination ${local_ip4} >/dev/null 2>&1 fi local_ip6=$(get_router_ip6) if [ -n "${local_ip6}" ]; then if ! ip6tables -t nat -C PREROUTING -i ${brX} -p udp --dport 53 -j DNAT --to-destination ${local_ip6} >/dev/null 2>&1; then ip6tables -t nat -I PREROUTING -i ${brX} -p udp --dport 53 -j DNAT --to-destination ${local_ip6} >/dev/null 2>&1 fi if ! ip6tables -t nat -C PREROUTING -i ${brX} -p tcp --dport 53 -j DNAT --to-destination ${local_ip6} >/dev/null 2>&1; then ip6tables -t nat -I PREROUTING -i ${brX} -p tcp --dport 53 -j DNAT --to-destination ${local_ip6} >/dev/null 2>&1 fi fi done |
Q: Можно ли используя маршрутизацию xray направлять трафик на встроенный (Wireguard/OpenConnect) Канетика?
A: Да. На любой встроенный интерфейс Кинетика используемый для доступа в интернет можно направить роутинг xray следующим способом.
В ssh-консоли роутера выполните команду ip a, чтобы определить наименование интересующего интерфейса. Например, для wireguard это будут интерфейсы nwg, а для OpenConnect nocli с цифрой по порядку:
В файл outbounds.json добавьте подключение по протоколу freedom с тегом newtag, перенаправляющее на требуемый интерфейс:
1 2 3 4 5 6 7 8 9 |
{ "protocol": "freedom", "tag": "newtag", "streamSettings": { "sockopt": { "interface": "nwg0" } } }, |
В файл routing.json добавьте необходимые правила для тега newtag:
1 2 3 4 5 6 7 |
{ "domain": [ "myip2.ru" ], "outboundTag": "newtag", "type": "field" }, |
Перезапустите xkeen/xray
—
To be continued…