Как настроить YouTube на роутере Netcraze без туннеля

Полушуточная инструкция с серьёзным результатом: один раз настроил роутер, и смарт-ТВ, приставки и телефоны перестали буксовать на видео, ничего не ставя на сами устройства.
Коротко: что получится
- YouTube (и часть других «притормаживаемых» сервисов) открывается напрямую, без туннелей и прокси.
- Работает на уровне роутера, поэтому подходит для смарт-ТВ, приставок и консолей, на которые софт не поставишь.
- Обход включается только для выбранных устройств (через политику доступа), остальная сеть не затрагивается.
- Список доменов обновляется сам, раз в неделю.
- Настройка занимает около часа, если Entware уже стоит.
Мой стенд: Netcraze (Keenetic) Hopper 4G+ (KN-3811), процессор aarch64, KeeneticOS 5.x, Entware на USB-накопителе. Интернет у меня шёл по Wi-Fi от внешнего источника, на проводном подключении всё настраивается так же.
Результат на практике: в онлайн-тесте доступности 105 сервисов без обхода у меня открывалось 57, с обходом 73. YouTube заработал и в браузере, и на ТВ. Цифры плавают на ±10 между прогонами и зависят от провайдера, так что считайте их ориентиром, а не гарантией.
Как это работает
Инструмент называется nfqws (из проекта zapret). Он не прячет трафик в туннель, а слегка «портит» первые пакеты соединения так, чтобы система фильтрации (DPI) провайдера не опознала, куда вы идёте, а сервер YouTube понял всё правильно.
Схема простая:
Устройство → Роутер (nfqws правит первые пакеты) → Провайдер (DPI «не видит» запрещённого) → YouTube
Применяются три приёма:
| Приём | Что делает |
|---|---|
| Split | Режет первый пакет с именем сайта (TLS ClientHello) на части, DPI не может собрать имя целиком |
| Fake-пакеты | Перед настоящим пакетом отправляет «обманку» с безобидным именем (например, www.google.com), которую сервер отбросит, а DPI примет за чистую монету |
| QUIC fake | То же для UDP/443 (YouTube часто ходит по QUIC) |
Технически nfqws получает пакеты через механизм NFQUEUE, который встроен в ядро роутера. Поэтому нужны два дополнительных компонента KeeneticOS (о них ниже).
Почему DPI это до сих пор пропускает
Это общепринятое техническое объяснение, а не официальные данные оборудования:
- DPI работает в потоке, а не как сервер. Оборудование фильтрации обрабатывает огромные объёмы трафика и вынуждено экономить: оно не пересобирает полностью каждое TCP-соединение так, как это делает настоящий сервер.
- Оно не знает, что примет сервер. Фейковый пакет специально делается так, чтобы настоящий сервер его отбросил (неверная контрольная сумма, особые TCP-опции, нужное значение TTL). DPI же отличить «мусор» от «настоящего» по одному пакету сложнее и дороже.
- Первый пакет решает всё. Имя сайта в HTTPS передаётся в самом начале соединения. Если DPI не разобрал его в этот момент, дальше трафик чаще всего идёт беспрепятственно.
Отсюда и честные оговорки:
- Это гонка вооружений. Провайдеры и регулятор обновляют оборудование, поэтому стратегия, работающая сегодня, завтра может перестать. Параметры периодически приходится подбирать заново.
- Результат зависит от провайдера. У одного работает «из коробки», у другого нужна другая стратегия.
- Метод не помогает при блокировке по IP-адресу. Если провайдер режет адреса целиком, искажать пакеты бесполезно: они просто не доходят. Пример:
web.telegram.orgпосле настройки по-прежнему отвечалERR_CONNECTION_TIMED_OUT, что характерно именно для IP-блокировки. Для такого нужен туннель (туннель/прокси), и это уже другая статья.
Про актуальность проекта. Использованный здесь пакет
nfqws-keeneticпо заявлению его авторов больше не получает обновлений, новые возможности появляются в его преемникеnfqws2-keenetic. Статья описывает версию 2.11.4, которую я проверил на практике. При установке преемника команды и имена переменных конфигурации могут отличаться, сверяйтесь с README проекта.
Что понадобится
- Роутер Netcraze/Keenetic с KeeneticOS 4.x или 5.x.
- Установленный и работающий Entware (пакетный менеджер OPKG). У меня он уже был установлен и работал, отдельно его настраивать не пришлось.
- SSH-клиент. Подключение к Entware: порт
222, пользовательroot, пароль по умолчаниюkeenetic. - Все команды ниже выполняются в среде Entware, а не в CLI самого роутера.
Сколько места занимает
Сам nfqws крошечный. Замеры на моём роутере:
| Что | Размер |
|---|---|
Бинарник /opt/usr/bin/nfqws |
125 444 байта (около 122 КБ) |
Папка /opt/etc/nfqws (конфиг, списки, служебные файлы) |
64 КБ |
Итоговый список user.list (1428 доменов) |
около 19 КБ |
Вся папка /opt на накопителе |
87,6 МБ (включает и другие установленные пакеты, не только nfqws) |
| Накопитель целиком | 7,0 ГБ, свободно 6,6 ГБ |
Итого nfqws вместе с конфигами занимает меньше мегабайта. Основной объём на накопителе приходится на саму среду Entware и другие пакеты.
Проверить у себя можно так:
du -sh /opt
du -sh /opt/etc/nfqws
ls -l /opt/usr/bin/nfqws
df -h /opt
Можно ли поставить во встроенную память
По документации проекта, Entware можно установить как на встроенную память роутера, так и на USB-накопитель. Нюансы:
- Поддержка встроенной памяти зависит от модели и прошивки. Сверяйтесь с инструкцией Keenetic для вашего устройства. У меня Entware стоит на USB, во встроенную память я его не ставил, поэтому этот вариант лично не проверял.
- Для самого nfqws места нужно немного: меньше мегабайта, как видно из замеров выше. Если Entware у вас уже во встроенной памяти, nfqws туда поместится.
- Нагрузка на флеш-память от nfqws минимальна: записи редкие (обновление списка раз в неделю, служебные файлы). Но если включить подробное логирование, записей станет больше.
- USB-накопитель практичнее: его можно заменить, если износится, и проще делать резервные копии. Поэтому я использую именно его.
Пошаговая установка
Шаг 1. Подготовка роутера (веб-панель)
Entware у меня уже был установлен и работал, поэтому я только добавил несколько компонентов KeeneticOS. Если Entware ещё не стоит, сначала установите его по инструкции Keenetic.
- Система → Параметры системы → Изменить набор компонентов. Включите:
- «Модули ядра подсистемы Netfilter»
- «Пакет расширения Xtables-addons для Netfilter»
После установки роутер перезагрузится.
- В разделе «Интернет-фильтры» отключите сторонние фильтры (NextDNS, SkyDNS, Яндекс DNS и подобные), иначе они могут мешать.
Шаг 2. Резервная копия
Сохраните конфигурацию роутера (Система → Параметры системы, файл startup-config) и список пакетов Entware:
mkdir -p /opt/backup
tar -czf /opt/backup/etc-backup.tar.gz /opt/etc
opkg list-installed > /opt/backup/opkg-packages.txt
Скопируйте архив на компьютер: потеряете пять минут, зато спокойный сон гарантирован.
Шаг 3. Определите архитектуру
opkg print-architecture
Нужная строка вида aarch64-3.10, mipsel-3.4 и так далее. Адрес репозитория зависит от архитектуры:
| Архитектура | Адрес репозитория |
|---|---|
| aarch64 | https://nfqws.github.io/nfqws-keenetic/aarch64 |
| mipsel | https://nfqws.github.io/nfqws-keenetic/mipsel |
| mips | https://nfqws.github.io/nfqws-keenetic/mips |
У моего Hopper 4G+ оказалась aarch64, хотя я сначала ожидал MIPS. Проверяйте свой роутер командой, а не полагайтесь на название модели.
Шаг 4. Установка
opkg update
opkg install ca-certificates wget-ssl
mkdir -p /opt/etc/opkg
echo "src/gz nfqws-keenetic https://nfqws.github.io/nfqws-keenetic/aarch64" > /opt/etc/opkg/nfqws-keenetic.conf
opkg update
opkg install nfqws-keenetic
В четвёртой строке aarch64 замените на вашу архитектуру. Установщик сам определит интерфейс провайдера и запустит службу. Правила, которые она создаёт, пока ничего не обрабатывают: следующий шаг обязателен.
Шаг 5. Политика доступа (самое важное)
По умолчанию обход применяется только к устройствам из политики с именем nfqws. Без неё не заработает ничего.
- Приоритеты подключений → Политики доступа в интернет → Добавить политику, имя ровно
nfqws. - Обязательно отметьте в политике подключение к интернету (кабель, Wi-Fi-клиент, модем) и поставьте его первым.
- Перенесите в политику нужные устройства: ТВ, приставку, свой ПК для проверки.
Грабли, на которые наступил я: политику создал и устройства добавил, а канал в ней отметить забыл. Итог: у устройств из политики пропал интернет полностью. Если «всё сломалось» после этого шага, первым делом проверьте галочку на подключении.
Остальная сеть остаётся нетронутой. Если нужно наоборот («обход для всех, кроме нескольких устройств»), в конфиге есть параметр POLICY_EXCLUDE=1.
Шаг 6. Проверка
ps | grep nfqws | grep -v grep
iptables -t mangle -S | grep 200
В первой команде должен быть процесс nfqws, во второй правила с --queue-num 200. Затем откройте YouTube на устройстве из политики.
Шаг 7. Выбор режима
В конфиге /opt/etc/nfqws/nfqws.conf строка NFQWS_EXTRA_ARGS задаёт режим:
| Режим | Значение | Что делает |
|---|---|---|
list |
$MODE_LIST |
Только домены из user.list. Рекомендуемый для повседневной работы |
auto |
$MODE_AUTO |
Список плюс автоматическое обнаружение блокировок (по умолчанию) |
all |
$MODE_ALL |
Весь трафик, кроме exclude.list. Больше нагрузка, выше риск побочных эффектов |
Чтобы переключаться одной командой:
cat > /opt/bin/nfqws-mode << 'EOF'
#!/bin/sh
CONF="/opt/etc/nfqws/nfqws.conf"
case "$1" in
list) VAL='$MODE_LIST' ;;
all) VAL='$MODE_ALL' ;;
auto) VAL='$MODE_AUTO' ;;
*) echo "Использование: nfqws-mode list|all|auto"; exit 1 ;;
esac
sed -i "s|^NFQWS_EXTRA_ARGS=.*|NFQWS_EXTRA_ARGS="$VAL"|" "$CONF"
/opt/etc/init.d/S51nfqws restart
echo "Режим: $1"
EOF
chmod +x /opt/bin/nfqws-mode
Использование: nfqws-mode list, nfqws-mode auto, nfqws-mode all. Управление службой: /opt/etc/init.d/S51nfqws start|stop|restart|status.
Я оставил режим list: когда список из репозитория загружен, автоопределение блокировок избыточно.
Шаг 8. Автообновление списков
В комплекте уже есть список из нескольких сотен доменов. Чтобы он не устаревал, я подтягиваю актуальные списки из открытого репозитория itdoginfo/allow-domains (общий список Russia/inside-raw.lst и отдельный Services/youtube.lst) и объединяю с собственными доменами.
Три файла и их роли:
| Файл | Роль |
|---|---|
custom.list |
Ваши домены. Редактируйте этот файл, а не user.list |
remove.list |
Домены, которые всегда вычищаются из итогового списка (необязательно) |
user.list |
Итоговый список, который читает nfqws. Собирается скриптом, ручные правки в нём пропадают при обновлении |
Установка зависимостей и скрипт:
opkg install cron curl
touch /opt/etc/nfqws/remove.list
cat > /opt/etc/nfqws/update_lists.sh << 'EOF'
#!/bin/sh
export PATH=/opt/bin:/opt/sbin:/usr/bin:/usr/sbin:/bin:/sbin
DIR="/opt/etc/nfqws"
CUSTOM="$DIR/custom.list" # ваши домены, редактируйте ЭТОТ файл
REMOVE="$DIR/remove.list" # домены, которые всегда вычищаются из итога
TMP="/tmp/remote.list"
# >>> СЮДА ПРОПИСЫВАЮТСЯ АДРЕСА СПИСКОВ (по одному на строку) <<<
URLS="
https://raw.githubusercontent.com/itdoginfo/allow-domains/main/Russia/inside-raw.lst
https://raw.githubusercontent.com/itdoginfo/allow-domains/main/Services/youtube.lst
"
# Первый запуск: сохраняем текущий user.list как ваш личный
if [ ! -f "$CUSTOM" ]; then
cp "$DIR/user.list" "$CUSTOM"
printf '%sn' youtube.com googlevideo.com ytimg.com ggpht.com youtu.be >> "$CUSTOM"
fi
: > "$TMP"
for U in $URLS; do
if ! curl -fsSL --max-time 60 "$U" >> "$TMP"; then
logger -t nfqws-update "Ошибка загрузки $U, список не изменён"
rm -f "$TMP"
exit 1
fi
echo >> "$TMP"
done
# Объединяем, оставляем только строки, похожие на домены, убираем дубли
cat "$TMP" "$CUSTOM" | tr -d 'r'
| grep -E '^[A-Za-z0-9._-]+.[A-Za-z]{2,}$' | sort -u > "$DIR/user.list.new"
# Вычищаем домены из remove.list
if [ -s "$REMOVE" ]; then
grep -vxFf "$REMOVE" "$DIR/user.list.new" > "$DIR/user.list.tmp"
mv "$DIR/user.list.tmp" "$DIR/user.list.new"
fi
# Защита: не подменяем рабочий список, если результат подозрительно мал
if [ "$(wc -l < "$DIR/user.list.new")" -lt 100 ]; then
logger -t nfqws-update "Итоговый список слишком мал, отмена"
rm -f "$DIR/user.list.new" "$TMP"
exit 1
fi
mv "$DIR/user.list.new" "$DIR/user.list"
rm -f "$TMP"
/opt/etc/init.d/S51nfqws restart
logger -t nfqws-update "Списки обновлены"
EOF
chmod +x /opt/etc/nfqws/update_lists.sh
Ручной запуск и проверка:
/opt/etc/nfqws/update_lists.sh
wc -l /opt/etc/nfqws/user.list
У меня после запуска в итоговом списке оказалось 1428 доменов.
Расписание: раз в неделю, суббота, 05:00 (по часам роутера):
mkdir -p /opt/var/spool/cron/crontabs
echo "0 5 * * 6 /opt/etc/nfqws/update_lists.sh" >> /opt/var/spool/cron/crontabs/root
/opt/etc/init.d/S10cron restart
Адрес репозитория со списками прописывается в блоке URLS в начале скрипта. Перед использованием любого стороннего списка проверьте, что он отдаёт чистый текст: curl -s АДРЕС | head.
Ловушка: в сборке роутера может не оказаться команды
logread, поэтому «увидеть в журнале» обновление не получится. Надёжный способ проверки:ls -l /opt/etc/nfqws/user.list, время изменения файла должно совпасть с запуском по расписанию. У меня это сработало в первую же субботу в 05:00. Часовой пояс роутера может отличаться от вашего, сверьте командойdate.
Шаг 9. Автозапуск после перезагрузки
Ничего настраивать не нужно: Entware сам запускает скрипты из /opt/etc/init.d/ (там лежит S51nfqws), а скрипт /opt/etc/ndm/netfilter.d/100-nfqws.sh пересоздаёт правила, когда KeeneticOS перестраивает firewall.
Но проверить стоит. Перезагрузите роутер (reboot), подождите пару минут и выполните:
ps | grep -E "nfqws|crond" | grep -v grep
iptables -t mangle -S | grep 200
Должны быть процессы nfqws и crond (один crond, если их два, задания будут срабатывать дважды) и правила --queue-num 200.
Заодно проверьте, что обновление работает в «голом» окружении, как это делает cron:
env -i /bin/sh /opt/etc/nfqws/update_lists.sh
ps | grep nfqws | grep -v grep
Если номер процесса nfqws изменился, скрипт отработал и службу перезапустил.
Как измерить результат честно
- Остановите обход:
/opt/etc/init.d/S51nfqws stop. - Запустите онлайн-тест доступности сервисов на устройстве из политики, запишите число.
- Включите обратно:
/opt/etc/init.d/S51nfqws start, повторите тест.
Разница и есть польза метода на вашем канале. Делайте по 2-3 прогона в каждом режиме: результаты между прогонами «плавают» на ±10 сайтов, потому что тест ограничен по времени, а пограничные сайты то успевают ответить, то нет. Ширина канала тут ни при чём, проверка передаёт килобайты. Сайты, которые недоступны во всех прогонах, надёжно «не лечатся» обходом. Верить стоит открытию в браузере, а не счётчику теста.
У меня: 57 сервисов без обхода, 73 с обходом (из 105).
Подводные камни
| Симптом | Причина | Что делать |
|---|---|---|
| После создания политики у устройств нет интернета | В политике не отмечено подключение | Отметьте канал в политике и поставьте первым |
| Ничего не изменилось после установки | Устройство не добавлено в политику nfqws или политики нет |
Создайте политику, перенесите устройства, перезапустите службу |
Интерфейс провайдера определился как apcli0 |
Интернет идёт по Wi-Fi-клиенту, это нормально | Менять не нужно. При нескольких каналах впишите интерфейсы через пробел в ISP_INTERFACE |
Сайт не открывается (ERR_CONNECTION_TIMED_OUT) |
Блокировка по IP, а не по имени | nfqws не поможет, нужен туннель |
logread: not found |
В сборке нет этой команды | Проверяйте время файла user.list |
| Задания cron выполняются дважды | Запущено два экземпляра crond |
Оставьте один скрипт запуска cron |
| Список перестал обновляться | Недоступен адрес репозитория | Скрипт оставит старый список, проверьте адрес через curl -s АДРЕС | head |
Режим all включайте последним и только при необходимости: он нагружает процессор и может ломать часть сервисов (банки, игры).
Откат
Установка полностью обратима:
/opt/etc/init.d/S51nfqws stop
opkg remove --autoremove nfqws-keenetic
Остановка убирает правила iptables, а удаление пакета снимает службу. Задание в cron удалите из /opt/var/spool/cron/crontabs/root. Настройки роутера вернёт сохранённый на шаге 2 файл startup-config.
Вопросы и ответы
Подойдёт ли для смарт-ТВ и консолей?
Да, это главный плюс метода. Обход работает на роутере, на самом устройстве ничего ставить не нужно. Достаточно добавить его в политику nfqws.
Сильно ли греется и нагружается роутер?
На ARM-процессорах нагрузка небольшая в режиме list. Режим all создаёт заметно большую нагрузку.
Будет ли работать завтра?
Это гонка вооружений: пока работает, но гарантий нет. Полезно периодически обновлять пакет (opkg update && opkg upgrade nfqws-keenetic) и следить за проектом.
Это туннель?
Нет. Трафик идёт напрямую, без туннеля, смена IP-адреса не происходит. Поэтому метод не обходит блокировки по IP и гео-ограничения, зато не режет скорость и не требует собственного сервера.
Итог
| Что | Результат |
|---|---|
| Время настройки | около часа при готовом Entware |
| Что получил | YouTube на любых устройствах в сети без туннель и без софта на устройствах |
| Занимает места | меньше 1 МБ (бинарник 122 КБ, конфиги и списки 64 КБ) |
| Обслуживание | список обновляется сам раз в неделю |
| Главное ограничение | не помогает при блокировке по IP-адресам |
| Главный риск | DPI обновляются, стратегию придётся иногда подбирать заново |
Для клиентов, которым важно, чтобы YouTube на телевизоре просто работал, это быстрый и рабочий метод. Для всего остального, что заблокировано по IP, нужен туннель.
Ссылки
- Проект nfqws-keenetic: https://github.com/nfqws/nfqws-keenetic
- Преемник nfqws2-keenetic (ищите в разделе проектов авторов nfqws на GitHub)
- Утилита nfqws и проект zapret: https://github.com/bol-van/zapret
- Списки доменов: https://github.com/itdoginfo/allow-domains
