Исправляем торможение на роутере для ютуба

В моем тг канале больше способов ускорения ютуба!
-------------------------
Пару абзацев далее - можно пропустить, если у вас не Keenetic. Сейчас мы будем запускать OPKG на моем роутере. Вообще есть целый мануал от производителя как это делать. Я опишу очень кратко.

Для начало надо будет зайти в веб интерфейс и доставить все компненты OPKG.

UI роутера где доставляем компоненты родной прошивки
UI роутера где доставляем компоненты родной прошивки

Внутренней памяти, как водится обычно, в таких устройствах - кот наплакал, с трудом под прошивку. Не беда. Берем USB флешку, форматируем в EXT4. В корне делаем директорию install и кладем набор бинерей с оффсайта(точнее по ссылке на проект entware с официальной документации). В моем случае под платформу mipsel - https://bin.entware.net/mipselsf-k3.4/installer/EN_mipsel-installer.tar.gz Побродив по https://bin.entware.net/ можно найти аналогичный инсталлер для ARM или mips на bigendian, если у вас какой то хитрый keenetic. Далее, втыкаем флешку в роутер, если все хорошо, роутер сам развернет и удалит архив. А мы сможем подключиться по ssh на порт 222.

Кстати, если вы ошибетесь в платформе, лучше просто идите на ssh роутера на 22 порту и пробуйте в консоли exec sh .

Если не та платформа - будет четко видна ошибка. Я сразу не понял какой у меня проц, пришлось перебирать.

Если файл есть и не для той платформы - то exec format error. Если файла нет, то четко пишет что нету.
Если файл есть и не для той платформы - то exec format error. Если файла нет, то четко пишет что нету.

Пароль для входа по ssh на 22 такой же как веб интерфейсе. На 222 логин пароль - root/keenetic. После первого входа не забываем сделать passwd и поменять пароль. Если все удалось, то либо через ssh подключение на 222 порт, либо через exec sh мы наконец-то получаем почти полноценный линукс на зюкселе. Ура! И огромное спасибо производителю за эту фишку.

А вот мы и на роутере, в линуксе
А вот мы и на роутере, в линуксе

Ну а теперь часть общая для роутеров с OpenWrt или аналогичным линуксом. Все что нам осталось сделать, это поставить софтину, которая будет крутить-вертеть и хотеть обмануть TCP пакеты и завернуть весь трафик на эту софтину. Софта навалом такого. Для начала давайте сразу поставим что нам может потребоваться, в моем случае:

# opkg update # opkg install ipset curl gzip grep git-http

Если у вас мало места - можете ничего не ставить. Через scp можете закинуть бинарь с компьютера и всё. Примерно таким образом scp -P 222 ./tpws [email protected]:/opt/root/ .

Теперь я начал выбирать проект, что запустится. Мне довольно понравился вот этот. Просто потому, что он с пол-пинка собрался из сырцов прям на роутере, запустился и заработал. Но, к сожалению, он дает только SOCKS прокси и настраивать каждое устройство в домашней сети у меня никакого желания нету. Лезем дальше, нашелся проект zapret. Выглядит очень здорово, но его автоматические скрипты установки начали слишком много ошибок писать, больше того, в чем я готов разбираться и доставить проект штатно. Да и код скриптов тоже сложноват. Ну да ладно, беглое прочтение ридми сказало мне, что есть бинарик, которые делает все что нужно, он даже лежит собранный прямо в репе для разных платформ. Вот он то мне и нужен. А скрипты, ладно, без них сам все сделаю. Итого, вот что нужно:

# opkg update # opkg install iptables # mkdir git # cd git # git clone https://github.com/bol-van/zapret.git # cd zapret # ./install_bin.sh # cd /opt/etc/init.d/ # vi S51tpws

И далее вставить код сервиса, который написал я.

#!/bin/sh SCRIPT=/opt/root/git/zapret/tpws/tpws PIDFILE=/var/run/tpws.pid ARGS="--daemon --bind-addr 192.168.0.1 --port 999 --disorder --tlsrec=sni --split-pos=2 --pidfile $PIDFILE" start() { if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then echo 'Service TPWS is already running' >&2 return 1 fi $SCRIPT $ARGS iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 999 iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 999 echo 'Started TPWS service' } stop() { if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then echo 'Service TPWS is not running' >&2 return 1 fi echo 'Stopping TPWS service...' kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE" iptables -t nat -D PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 999 iptables -t nat -D PREROUTING -i br0 -p tcp --dport 443 -j REDIRECT --to-port 999 } status() { if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE); then echo 'Service TPWS is running' else echo 'Service TPWS is stopped' fi } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|status}" esac

Далее

# chmod +x /opt/etc/init.d/S51tpws # /opt/etc/init.d/S51tpws start

Замеряем

На моем ноутбуке, после запуска сервиса на роутере
На моем ноутбуке, после запуска сервиса на роутере

Пробуем YouTube ручками и видим глазками, что он стал работать оооочень быстро.

Небольшие пояснения. Код выше использует лишь один бинарь из проекта zapret - tpws . У него интерфейс прозрачной прокси, которая коверкает пакеты обманывая DPI. У этого бинаря куча флажков для старта. В коде сервиса init.d я указал аргументы для запуска, которые работают для меня. Можете убрать --daemon и запускать просто в терминале играясь с параметрами. Не забудьте прописать маршруты на ваш сервис в iptables перед тем как вращать его руками. В моем случае прямо в коде сервиса маршруты добавляются и удаляются.

Из специфичного. Для вашего случая в этих местах возможно нужно внести изменения в коде сервиса. init.d на зюкселе почему то лежит в /opt/etc. На голой OpenWrt скорее всего в корне /etc. Префикс S51 файла сервиса S51tpws взят откуда-то из потрохов entware, без этого префикса сервис не стартует при запуске сам. Опять же, в голой OpenWrt скорее всего не нужно. br0 - имя интерфейса локальной сети, на ней айпи моего роутера 192.168.0.1. Чтобы сервис tpws слушал на этом интерфейсе только(а не на ещё и внешнем), я его же прописал среди аргументов на запуск сервиса.

Вот, собственно, и всё. Теперь весь трафик идущий на внешние порты 80 и 443 из моей сети обрабатываются и извращаются сервисом tpws. Я думаю, что далеко не секрет, если я скажу, что скорее всего, ютьюб будет полностью забанен в обозримом будущем. Исходя из этого, данное решение носит временный характер. Либо же, возможно, в будущем там будет другой бинарь, который весь трафик будет отправлять по ICMP на мою приватную виртуалку где-нибудь в Нидерландах... Главное начало, и такая конструкция на домашнем роутере мне очень по душе. Всем спасибо, если дочитали до конца.

В моем тг канале больше способов ускорения ютуба!

44
1 комментарий

Добрый день! Большое спасибо за подробное описание, всё действительно заработало, но есть одно но. В какой-то момент, может и через 3 часа, может и через 10 минут всё отваливается, при этом сам сервис всё еще запущен. Приходится делать stop-start через ssh, но это не очень удобно, так как делал это я не у себя, и по ряду причин установка полноценного zapret и openwrt тут невозможна. Суть вопроса - можно ли как то дополнить Ваш код, или как либо иначе сделать, что бы к примеру раз в 20 минут происходил автоматический рестарт скрипта? Извиняюсь за вопрос, я в теме немного плаваю, если меня носом тыкнуть и рассказать - чего нибудь да получится, а сам сообразить не очень могу. Спасибо заранее.

Ответить