Всем привет! Это моя первая статья на хабре, которая точно кому-то пригодится в данное время. Здесь я расскажу как ускорить ютуб и разблокировать доступ к некоторым заблокированным ресурсам прямо на роутере Mikrotik и без VPN.

В моем случае используется MikroTik hAP ax3. Стоит упомянуть, что подойдут только роутеры с архитектурой ARM, ARM64 или x86 (CHR), которые и поддерживают контейнеры.

А мне можно? Какая у меня архитектура?
Место, куда нужно посмотреть и убедиться в подходящей архитектуре железа, прежде чем приступать к настройкам
Место, куда нужно посмотреть и убедиться в подходящей архитектуре железа, прежде чем приступать к настройкам

  • Прошивку желательно использовать 7.16, т.к. только в ней завезли DNS Forward запросы с использованием встроенного DoH.

Скоро версия выйдет в стабильном канале обновления, а пока в тестировании предрелизная версия на данный момент 7.16rc2.

Кто подходит под эти условия, велком под кат)


Для новичков добавил много скриншотов, т.к. не все ориентируются по командной строке.

  • Перед началом настройки рекомендую сделать бэкап конфигурации, чтобы быстро вернуться в рабочее состояние и начать заново при необходимости.

По настройке контейнеров есть официальная вики, но постараюсь всё кратко описать здесь.

Если команда /system/device-mode print показывает container: yes , то все ок, если нет, то для включения режима контейнеров на устройстве нужно выполнить следующую команду и следовать инструкциям в консоли:

/system/device-mode/update container=yes

Скорее всего придется скачать и доустановить пакеты Extra packages - Container для вашей платформы.

Для установки контейнеров не рекомендуется использовать внутреннюю память, поэтому на роутерах нужна внешняя память USB это флешка или жесткий диск и желательно USB 3.0 и выше отформатированный в ext3/ext4.

Для удобного доступа к файлам контейнеров я расшарил флешку на бридже локальной сети, куда устанавливаются контейнеры (здесь и далее обращайте внимание на имя usb накопителя в вашей системе):

/ip smb set enabled=yes interfaces=bridge
/ip smb shares add directory=usb1 name=flash
  • По умолчанию для samba присутствует пользователь guest без пароля. Для безопасности создайте своего пользователя и пароль.

UI SMB настройки
Пример настройки SMB
Пример настройки SMB

Далее мы создаем бридж для контейнеров, задаем ему адрес, создаем 2 интерфейса VETH с адресами и добавляем их в наш бридж:

/interface bridge add name=Bridge-Docker port-cost-mode=short
/ip address add address=192.168.254.1/24 interface=Bridge-Docker network=192.168.254.0
/interface veth
add address=192.168.254.5/24 gateway=192.168.254.1 name=BYEDPI-SOCKS
add address=192.168.254.2/24 gateway=192.168.254.1 name=TUN2SOCKS
/interface bridge port
add bridge=Bridge-Docker interface=BYEDPI-SOCKS
add bridge=Bridge-Docker interface=TUN2SOCKS
UI настройки Bridge, VETH
настройки бриджа и VETH
настройки бриджа и VETH

Установим URL-адрес реестра для загрузки контейнеров из реестра Docker и установим каталог извлечения tmpdir для подключенного usb носителя:

/container config set registry-url=https://registry-1.docker.io tmpdir=/usb1/docker/pull
UI Container config
настройки Container
настройки Container

Скачиваем образы контейнеров, привязываем их к созданным интерфейсам VETH и ставим на автоматический запуск при загрузке устройства:

  • В контейнере byedpi при запуске используется набор команд в аргументе cmd, которые вам возможно придется подбирать для своего провайдера (у меня дом.ру), чтобы обходить DPI, справку по настройке параметров можно посмотреть на гитхабе проекта.

/container/add remote-image=tazihad/byedpi:latest interface=BYEDPI-SOCKS cmd="--disorder 1 --auto=torst --tlsrec 1+s --debug 1" root-dir=/usb1/docker/byedpi start-on-boot=yes
/container/add remote-image=xjasonlyu/tun2socks:latest interface=TUN2SOCKS root-dir=usb1/docker/tun2socks start-on-boot=yes

Далее открываем файл \192.168.88.1\flash\docker\tun2socks\entrypoint.sh

  • Если вы будете искать файлы через проводник в WinBox и не увидите содержимое каталогов контейнеров, всему виной файлы пустышки с именем .type в каталогах, они скрывают их содержимое, чтобы не нагружать проводник файлов.

WinBox - File list
WinBox - File list

и до запуска контейнера заменяем его содержимое этим (рекомендую использовать редактор Notepad++):

Проводник файлов редактирование entrypoint.sh
Проводник открытие файла entrypoint.sh по SMB для редактирования
Проводник открытие файла entrypoint.sh по SMB для редактирования

#!/bin/sh
ip tuntap add mode tun dev tun0
ip addr add 198.18.0.1/15 dev tun0
ip link set dev tun0 up
ip route del default
ip route add default via 198.18.0.1 dev tun0 metric 1
ip route add default via 192.168.254.1 dev eth0 metric 100
ip route add 192.168.0.0/16 via 192.168.254.1 dev eth0
tun2socks -device tun0 -proxy socks5://192.168.254.5:1080 -interface eth0
  • Предпоследней командой мы настраиваем локальный маршрут через роутер к BYEDPI-SOCKS контейнеру, т.к. без этого все запросы на шлюз TUN2SOCKS будут уходить на более приоритетный маршрут tun0 с метрикой 1 внутрь туннеля, при этом коннекта с самим туннелем не будет.

Теперь можно запустить контейнеры. Проще всего это сделать через WinBox в окне Container есть кнопка start.

UI Containers start

И как минимум кого-то может устроить вариант использования только контейнера BYEDPI-SOCKS с указанием его IP адреса и порта (192.168.254.5:1080) в настройках или плагинах браузера, такой вариант удобно использовать сразу для проверки обхода DPI провайдера. Я использую браузер Мозила и плагин FoxyProxy.

  • Плагин настраивается достаточно просто, например, для ютуба можно экспортировать настройки, так же есть очень удобная фича в окне плагина "Set tab proxy", отлично подходит для проверок работоспособности сайта, чтобы не выискивать все используемые им хосты, а включить прокси только в текущей вкладке.

UI плагина FoxyProxy
Включение прокси на вкладку
Включение прокси на вкладку
Настройки FoxyProxy
Настройки FoxyProxy

Сначала рассмотрим настройку без получаемых маршрутов для роутинга на наши контейнеры по BGP

Будем использовать DNS Forward и списки хостов, которые будем пускать через нашу карусель из контейнеров анти dpi системы :)

Для начала установим срок хранения попавших в спискок адресов до одного дня, чтобы они не удалялись сразу же как только заканчивается TTL у полученной DNS записи:

/ip dns set address-list-extra-time=1d

Обязательно должен быть настроен DoH DNS, ибо можно получить "подарок" от провайдера с липовыми адресами используя не шифрованные запросы DNS.

Затем добавим хосты, которые нужно пускать через контейнер анти DPI:

/ip/dns/static/
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=googlevideo.com type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=youtube.com type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=youtubei.googleapis.com type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=ytimg.com type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=youtu.be type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=ggpht.com type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=rutracker.org type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=rutracker.cc type=FWD
add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=medium.com type=FWD
  • Указанные домены с их поддоменами будут добавляться в список za_dpi_FWD, называется он так, чтобы быть в конце всех списков при сортировке по имени списка)

UI DNS static

Добавляем новую таблицу маршрутизации:

/routing table add disabled=no fib name=dpi_mark

И добавляем маршрут в эту таблицу на наш шлюз контейнер tun2socks:

/ip route add disabled=no distance=22 dst-address=0.0.0.0/0 gateway=192.168.254.2%Bridge-Docker pref-src="" routing-table=dpi_mark scope=30 suppress-hw-offload=no target-scope=10

Теперь добавим mangle правило, чтобы заворачивать все полученные в список хосты в таблицу маршрутизации dpi_mark где весь трафик пойдет на наш анти dpi туннель:

/ip firewall mangle add action=mark-routing chain=prerouting comment="заворачивание списка хостов по DNS FWD на тунель tun2socks => byedpi" connection-state=""  dst-address-list=za_dpi_FWD in-interface-list=LAN new-routing-mark=dpi_mark passthrough=yes
UI таблица маршрутов и mangle mark route

Так же в правиле forward fasttrack connection нужно включить на вкладке general фильтр routing mark = main, так сайты из списков по манглу будут открываться быстрее.

Настройки правила №14 fasttrack connection
Настройки правила №14 fasttrack connection

Теперь чтобы это все работало корректно, нужно все запросы DNS отправлять на роутер, для этого нужно отключить в браузере запросы DoH (например в мозилле) и добавить перехват всех запросов DNS из локальной сети:

/ip firewall nat
add action=redirect chain=dstnat dst-port=53 in-interface-list=LAN protocol=udp
add action=redirect chain=dstnat dst-port=53 in-interface-list=LAN protocol=tcp
UI Firewall NAT

Всё! Можно начинать тестировать ютуб и сайты из добавленного списка, но с одним замечанием, нужно либо перезагрузить все устройства, что иногда сделать проще всего, чтобы на них очистился кеш DNS запросов, либо очистить его вручную и на роутере в том числе. Иначе необходимые адреса не попадут в списки для роутинга.

Все это прекрасно совмещается с аналогичным выходом на vpn ресурсов по другому списку хостов в DNS FWD, которые не обходятся таким способом, но здесь не об этом.

Теперь рассмотрим настройку с получаемыми маршрутами по BGP в т.ч. для Ютуба

Допустим мы уже получаем какие-то маршруты по BGP от сервисов antifilter и дополнительно хотим получать адреса для Ютуба чтобы сразу направить их на наши контейнеры.

UI BGP подключение
Основные настройки BGP
Основные настройки BGP
Фильтр bgp_in, в который далее будем вносить маршруты.
Фильтр bgp_in, в который далее будем вносить маршруты.

Включаем этот список на сайте antifilter для получения на роутер.
Включаем этот список на сайте antifilter для получения на роутер.

В таком случае нужно ко всем вышеперечисленным настройкам создать новую таблицу маршрутизации clear_out

/routing table add disabled=no fib name=clear_out

С маршрутом в интернет для этой таблицы, который у вас есть по дефолту, у меня это выше стоящий GPON роутер 192.168.1.100:

/ip route add disabled=no distance=24 dst-address=0.0.0.0/0 gateway=192.168.1.100 pref-src="" routing-table=clear_out scope=30 suppress-hw-offload=no target-scope=10

UI таблица маршрутов
По сути нужно скопировать основной маршрут в интернет без указания VRF и с указанием новой таблицы роутинга
По сути нужно скопировать основной маршрут в интернет без указания VRF и с указанием новой таблицы роутинга

Далее в фильтрах роутинга /routing/filter нужно для Ютуба прописать наш шлюз TUN2SOCKS:

if (bgp-communities includes 65444:770) {set gw 192.168.254.2%Bridge-Docker; accept;} else {set gw 10.10.0.1%wireguard-client-vpn; accept;}

UI фильтры маршрутов
Вносим в тот фильтр chain, который выбран в настройках BGP - Filter - Input filter
Вносим в тот фильтр chain, который выбран в настройках BGP - Filter - Input filter

Скорее всего у большинства по bgp приходят роуты в main routing table, а теперь после выполнения последней команды есть роуты и на шлюз контейнера tun2socks

UI BGP и Route list
По bgp приходят роуты в routing table main
По bgp приходят роуты в routing table main
Полученные по bgp маршруты для Ютуба
Полученные по bgp маршруты для Ютуба

в таком случае сам socks контейнер byedpi выводим в отдельную таблицу маршрутизации clear_out которая выходит прямо в интернет, чтобы не зациклить маршрутизацию адресов ютуба и всего что отправляется на шлюз контейнера tun2socks в таблице main, т.к. ничего не будет работать.

/ip firewall mangle add action=mark-routing chain=prerouting comment="BYEDPI-SOCKS mark route to clear_out" connection-state="" new-routing-mark=clear_out passthrough=yes src-address=192.168.254.5

UI mangle mark routing
По счетчикам видно срабатывание правила. Стоит приоритетнее, чем правило по спискам.
По счетчикам видно срабатывание правила. Стоит приоритетнее, чем правило по спискам.

Это правило отлично подходит для проверки работоспособности, т.к. есть счетчики на правилах. Либо же его можно заменить аналогичным другим правилом в другом разделе:

/routing rule add action=lookup comment="BYEDPI-SOCKS mark route to clear_out" disabled=no src-address=192.168.254.5/32 table=clear_out

UI routing rules

Выбирайте на вкус и цвет, есть ли какая-то разница в производительности, не знаю. Иногда лучше видеть всё в настройках mangle, в одном месте так сказать.

  • После этой настройки наш контейнер BYEDPI-SOCKS (192.168.254.5:1080) перестает быть напрямую доступным из локальной сети, поэтому использовать его из браузера как socks5 прокси становится невозможным. Может кто-то знает как это решить, пишите в комментариях.

Заключение

Большинство опытных пользователей получают маршруты по BGP и просто всё отправляют на VPN, простые пользователи борятся с проблемами доступа к заблокированным ресурсам разными бесплатными VPN'ами, вторых можно понять, да и первых, у кого старые роутеры без поддержки контейнеров.

После погружения в тему для меня стало удивлением, что много сайтов начали работать без VPN, поэтому меня привлекла логичная идея локально "лечить" трафик прямо на роутере.

После настройки этих двух контейнеров я даже отказался от BGP, потому что не так много сайтов я использую которые не доступны, все они прекрасно работают по спискам DNS FWD, тестирую уже неделю и полёт отличный.

В целом меня раззадорил спортивный интерес и, конечно же, проблемы с ютубом, которые на компе решались очень просто, но хотелось красивого решения на роутере, не зря же была куплена свежая железка с поддержкой контейнеров, после знакомства с которыми пару лет назад я понял, какой потенциал будет на будущее у моего роутера.

Спасибо всем за внимание!

P.S. т.к. пишу здесь первый раз, готов к вашим замечаниям и конструктивным комментариям и благодарю за понимание))

Комментарии (103)


  1. NZakh61
    26.08.2024 11:00
    +1

    Спасибо за статью.

    Сильно ли сажает трафик на микторе с таким конфигом и как нагрузка вырастает на чипсет?


    1. wiktorbgu Автор
      26.08.2024 11:00

      Вообще не заметил нагрузки, скорость не падает.

      Скрытый текст


  1. Geraklll
    26.08.2024 11:00
    +2

    Спасибо за статью! Подскажите пожалуйста, я правильно понимаю, что после этой настройки, ютуб будет работать на всех устройствах в домашней сети? в том числе и на смарт тв?


    1. wiktorbgu Автор
      26.08.2024 11:00

      Смарт ТВ под рукой нет проверить, но да, должно работать на всех устройствах в домашней сети.


      1. Geraklll
        26.08.2024 11:00

        Спасибо, на днях попробую!


    1. Euganis
      26.08.2024 11:00

      Там смысл в том, что используются скрипты anti dpi. Сайты и Ютуб при этом будут работать, да. Но возможны такие штуки, как не отображение некоторых сайтов, страниц, капч.

      Тогда этот режим придется отключать, или вручную писать конфиги для нужных сайтов.


  1. Karlson_rwa
    26.08.2024 11:00
    +1

    Спасибо, надо попробовать.

    А можете написать (дополнить) инструкцию, как развернуть докер-образ в оперативке самого роутера, чтобы ничего внешнего вообще не использовать, а образ сам бы всегда разворачивался при ребуте? На канале микротика в ютубе есть коротенькое руководство, но я не настоящий сварщик :)


    1. Dife
      26.08.2024 11:00
      +1

      Развернуть докер-образ в оперативке нельзя - это просто изолированная файловая система, внутри которой запускается какой то процесс (приложение, утилита и т.д.), вот он то уже и существует в ОП.
      То, что создается в файловой системе роутера или внешнего хранилища и есть файловая система образа, которую тоже надо где то хранить, когда контейнер запущен.

      В принципе используемые образы довольно немного весят и могут вполне обойтись внутренним хранилищем роутера, если оно позволяет, это к слову об использовании чего то внешнего, а для запуска контейнеров при перезапуске роутеров, там есть отдельный чек-бокс для их запуска в параметрах контейнера - "Start on Boot"


      1. Karlson_rwa
        26.08.2024 11:00

        Т.е. это не подходящая инструкция https://www.youtube.com/watch?v=KO9wbarVPOk ?

        Везде пишут, что контейнеры лучше запускать в отдельной памяти, у которой нет проблем с количеством циклов перезаписи. Это не так что ли? Я хочу разобраться, как сделать правильно, чтобы и контейнер с обходом dpi можно было использовать и роутер при этом нормально жил. У меня только он постоянно в сеть воткнут, другие устройства периодически выключаются.


        1. DaemonGloom
          26.08.2024 11:00

          Да, должно работать. Главное - чтобы хватило ОЗУ на систему, файлы двух контейнеров и ОС двух контейнеров.


        1. mayorovp
          26.08.2024 11:00

          Везде пишут, что контейнеры лучше запускать в отдельной памяти, у которой нет проблем с количеством циклов перезаписи

          В каком именно "везде" это пишут?

          Да, логично что если развернуть в контейнере файловый сервер или там торрентокачалку - лучше бы им дать внешнюю память. Но если запущенная программа только читает из памяти, а не пишет в неё - не вижу повода переживать за циклы перезаписи.


  1. Radiohead72
    26.08.2024 11:00

    А какая концепция этого решения?

    Каким собственно образом обходится блокировка? Я не очень попимаю...

    Как работает обход через ВПН все прекрасно понимают.

    А тут как? Что куда и как "ходит"?


    1. nApoBo3
      26.08.2024 11:00
      +12

      Блокировку youtube по ip они делать пока не решаются, поскольку это подсети google, на них очень много чего потребительского завязано. Заблокировать youtube и не поломать при этом android, gmail и кучу ещё всего отдельное искусство, если это вообще возможно. По этому производится анализ пакетов по косвенным признакам на специально оборудовании и пакеты похожие на видео поток режутся. Данный софт маскирует пакеты таким образом, чтобы простых характерных сигнатур у них не было.


      1. UranusExplorer
        26.08.2024 11:00
        +4

        По этому производится анализ пакетов по косвенным признакам на специально оборудовании и пакеты похожие на видео поток режутся

        Нет, не так. Детектирование видеопотока РКН не умеет, и наврядли скоро научится. Все гораздо проще: при установлении соединения по HTTPS, имя домена назначения (так называемое SNI) передается в открытом виде в одном из первых пакетов. Оборудование РКН ищет там "googlevideo" и "youtube" и замедляет если нашлось.

        Ну а все эти анти-DPI грубо говоря, дробят первые пакеты на мелкие кусочки, то есть например на "goog", "levi" и "deo", оборудование DPI, не умеющее собирать пакеты обратно в поток, не находит там искомого имени, и блокировка/замедление не срабатывают.


        1. izogfif
          26.08.2024 11:00

          при установлении соединения по HTTPS, имя домена назначения (так называемое SNI) передается в открытом виде

          Удивительно. Несколько лет назад тут на Хабре читал про eSNI, EHELO и т.п., которые превращают подключения к сайтам из тройки (IP + заголовки + payload) в пару (IP + зашифрованный набор байт). Неужто это все еще во все браузеры / серверы (тем более гугловские) не завезли и не включили по умолчанию?


          1. force
            26.08.2024 11:00
            +4

            Сегодня модно не eSNI, а ECH. Но как всегда у всех этих технологий проблема - чтобы передать что-то шифрованное, надо откуда-то ключи достать. Т.е. куда-то их положить (по факту в DNS только получается). Но при этом должна быть обратная совместимость и уходить на обычный SNI, если не получается. Получается что можно просто блокировать пакеты с eSNI и браузер откатится на старую технологию и смысла опять нет. Так что придумывают какие-то жуткие извращения

            (Возможно что-то лучше с этим стало, но по моим ощущениям - выходит слишком сложно, а обходится легко, поэтому и не летит сильно)


        1. p2n
          26.08.2024 11:00

          А зачем тогда Tun2Socks, если достаточно дробления начальных пакетов со SNI? Или в начальных ответных TLS-пакетах тоже без проблем видно, что они с этих доменов?


          1. mayorovp
            26.08.2024 11:00
            +1

            Чтобы получить доступ к сырым пакетам. Но я тоже не понимаю почему выбран именно Tun2Socks.


            1. mike7
              26.08.2024 11:00
              +2

              выбран byedpi https://github.com/hufrea/byedpi

              а это socks сервер


    1. Euganis
      26.08.2024 11:00

      Скрипт анти DPI и socks тунель. DPI - метод который используется провайдерами для блокировки нехороших сайтов, на аппаратном уровне.

      Этот режим работы преобразует стандартные пакеты, делая невозможным для провайдера понять какой сайт требуется открыть - упрощенно говоря.


  1. Dife
    26.08.2024 11:00
    +7

    Опередил меня :-D
    Буквально несколько дней назад реализовал аналогичную схему, только для xray клиента (Да, кто не догадался, так можно цеплять и новомодный VPN) - пока полет нормальный, по ресурсам тоже все ок.

    Суть в том, что пошерстив интернет понял, что на микротик о данных реализациях информации толком нет и есть лишь общие упоминания на паре форумах об аналогичной схеме с двумя контейнерами, поэтому я и решился написать гайд, но ты оказался быстрее)

    Спасибо тебе! Уверен, что многие многие пользователи микротиков страдали от того, как им создать аналогичные схемы господ с OpenWRT.


    1. Vrag
      26.08.2024 11:00

      Все пользователи микротов от этого страдают. Фильтр по количеству памяти от 1Gb на сайте микрота даёт около 20 устройств. Из них дома у рядовых пользователей (давайте пропустим "рядовость" людей, которые сами себе осмысленно поставили микроты дома) могут оказаться Chateau, 4011, 5009, hap ax2/3, cap ax. Вероятно, это исчерпывающий список.
      Остальные, увы, продолжат страдать. Но автор статьи всё-равно - красава. =)


      1. Popadanec
        26.08.2024 11:00

        А столько ОЗУ это минимально? Почему тогда на OpenWRT/Keenetic достаточно 128, а то и 64Мб.


        1. Vrag
          26.08.2024 11:00

          WRT сильно оптимизируется большИм сообществом людей. В микроте контейнеризация пилится недолго группой попоруков по остаточному принципу (тут стоить заметить, что WRT я только трогал, а микрот вынужденно использую много лет на ежедневной основе). WRT весь функционал, который нужен для обходов DPI (включая прокси и впн клиенты) доставляет пакетами (условно как в любом дистре линукса), они хорошо кастрированы до минимально нужного функционала и оптимизированны и потому легковесны и не прожорливы до ресурсов. В микроте для этого используют контейнеризацию, которую я лично не использовал в микроте, но в этих ваших линуксах сколько угодно.
          У меня при наличии 7 не самых старых микротов дома тупо нет (ОЗУ хватило бы, наверное, на CRS326 но там 16мб флешки и USB не подвезли), на котором контейнеризация + сами контейнеры заведётся, а на работе играться в это нет ни ни желания ни необходимости. Но судя по отзывам о том, сколько контейнеры жрут ресурсов и по wiki микрота, без конкретных требований, но с фразами "requires a lot of free space in main memory" намекают, что там может быть контеризация поверх виртуализации какого-то рода. Но это чисто мои домыслы - может быть (и даже скорее всего) я не прав. (судя по размеру пакета container в 97 Кб, я точно не прав). Но что точно, они это пилят недавно и по остаточному принципу, т.к. железа, которое это всё потянет не так много. Да и пользовать это будут скорее домашнии пользователи, чем корпораты.


      1. KD26
        26.08.2024 11:00

        У меня Chateau LTE12, у него только 256МБ, но надо попробовать настроить, может всё же хватит, хотя у меня с YouTube проблем сейчас нет, так как через мобильный интернет скорость пока не режут, ради этого и покупалась эта модель, к проводным провайдерам нет доступа.


    1. QFCFC
      26.08.2024 11:00
      +7

      Я бы не отказался прочитать статью про xray-клиент в контейнере, полноценной инструкции от начала до конца для новичков по такой схеме нет, если только "аналогичные". Или вы имеете ввиду, что такой гайд был бы слишком похож на гайд из статьи?


  1. NickSin
    26.08.2024 11:00
    +2

    Спасибо за статью.

    А есть какой-то более простой способ на микротике spoof по DPI делать ? Оно бы и на более старых версиях RouterOS работало.


  1. FFR_666
    26.08.2024 11:00
    +4

    К сожалению мой роутер не подходит по характеристикам, но прочитал с удовольствием и уже знаю на что обращать внимание при обновлении роутера! P.S. Очень приятный и понятный слог !


    1. Vrag
      26.08.2024 11:00
      +1

      На выбор чего-то, поддерживающего WRT? =)))


  1. Alexsey
    26.08.2024 11:00
    +3

    Я все же остановился на варианте установки пометок роутинга на нужные пакеты по address list/tls host и отправке их на отдельный гейт для дальнейшей обработки. Раньше у меня таким гейтом просто выступал VPN интерфейс, но после того как вайргард отвалился с неделю назад поднял у себя на домашнем сервере виртуалку с openwrt и sing-box, но никто не мешает просто любой другой роутер с openwrt воткнуть.

    Такой вариант работает с любым микротиком который вытягивает установку меток на пакетах и позволяет апгрейдить методы обхода без головной боли что микротик чего-то не умеет. Минус в том что чаще всего нужно выключать hardware offloading и fast track так что некоторые модели на MIPS могут начать захлебываться.


    1. Kroligoff
      26.08.2024 11:00
      +2

      Можешь написать статью ? У меня микротик без usb , но есть старый роутер с openwrt


      1. Alexsey
        26.08.2024 11:00
        +5

        На статью времени нет, но есть ссылки на основе которых можно плюс-минус понять что делать.

        OpenWRT воткнуть WAN и любым LAN портом в одну сеть с микротом (возможно можно обойтись одним сетевым интерфейсом, у меня виртуалка поэтому я просто два сетевых интерфейса поднял для простоты) и указать WAN порту и LAN бриджу статические адреса в той же подсети что и вся остальная сеть микрота. У openwrt не забываем выключить раздачу DHCP.

        Далее https://kiberlis.ru/mikrotik-wireguard-client/ (пункты 2.1, 2.3-2.5. Пропустить DHCP, в masquerade вместо out interface использовать routing mark, в ip->routing гейтвеем указать место wireguard1 айпишник LAN бриджа openwrt)

        Далее поднимаем VLESS на VPS: https://habr.com/ru/articles/735536/

        Настраиваем openwrt: https://habr.com/ru/articles/756178/. Есть нюанс - надо так же залезть в /etc/config/sing-box и прописать там следующее иначе не поднимется:

        config sing-box 'main'
                option enabled '1'
                option user 'root'
                option conffile '/etc/sing-box/config.json'
                option workdir '/usr/share/sing-box'
        #       list ifaces 'wan'
        #       list ifaces 'wan6'
        

        Для простоты настройки sing-box можно скачать nekoray, в него вгрузить конфиг из 3x-ui, настроить по желанию и экспортнуть конфиг для sing-box.


    1. oua
      26.08.2024 11:00

      Для чего может понадобится отключение hardware offloading и fast track? У меня реализована почти такая же схема как в статье, но offloading и fast track включены.


      1. Alexsey
        26.08.2024 11:00
        +1

        С включеным fast track'ом очень много нюансов по поводу корректной настройки правил firewall/mangle/nat и не со всей функциональностью он работает. Я не замечал принципиального ухудшения производительности от отключения fast track'а, а геморроя он может добавить не мало.

        С hardware offloading на rb951g-2hnd у меня начинались дикие глюки и флаппинг портов на высоких скоростях, возможно сейчас уже не актуально.


        1. denmmx
          26.08.2024 11:00
          +1

          FastTrack не обязательно полностью выключать, по своему опыту достаточно навесить его на нужные интерфейсы (на локальный bridge -> wan-порт и обратно + исключить трафик ipsec из обработки, если он есть).


  1. c46fd3da
    26.08.2024 11:00
    +2

    Тоже использую подобную связку, но немного в другом контексте. Кстати в качестве TUN2SOCK КМК интереснее выглядит вот это https://github.com/heiher/hev-socks5-tunnel решение.


    1. mike7
      26.08.2024 11:00
      +1

      И hev-socks5-tunnel тоже можно:

      entrypoint.sh

      #!/bin/sh
      
      TUN="${TUN:-tun0}"
      MTU="${MTU:-9000}"
      IPV4="${IPV4:-198.18.0.1}"
      IPV4GW=$(ip -o -f inet route show default | awk '/dev eth0/ {print $3}')
      IPV6="${IPV6:-}"
      
      MARK="${MARK:-0}"
      
      SOCKS5_ADDR="${SOCKS5_ADDR:-172.17.0.1}"
      SOCKS5_PORT="${SOCKS5_PORT:-1080}"
      SOCKS5_USERNAME="${SOCKS5_USERNAME:-}"
      SOCKS5_PASSWORD="${SOCKS5_PASSWORD:-}"
      SOCKS5_UDP_MODE="${SOCKS5_UDP_MODE:-udp}"
      
      LOG_LEVEL="${LOG_LEVEL:-warn}"
      
      config_file() {
        cat > /hs5t.yml << EOF
      misc:
        log-level: '${LOG_LEVEL}'
      tunnel:
        name: '${TUN}'
        mtu: ${MTU}
        ipv4: '${IPV4}'
        ipv6: '${IPV6}'
        post-up-script: '/route.sh'
      socks5:
        address: '${SOCKS5_ADDR}'
        port: ${SOCKS5_PORT}
        udp: '${SOCKS5_UDP_MODE}'
        mark: ${MARK}
      EOF
      
        if [ -n "${SOCKS5_USERNAME}" ]; then
            echo "  username: '${SOCKS5_USERNAME}'" >> /hs5t.yml
        fi
      
        if [ -n "${SOCKS5_PASSWORD}" ]; then
            echo "  password: '${SOCKS5_PASSWORD}'" >> /hs5t.yml
        fi
      }
      
      config_route() {
        echo "#!/bin/sh" > /route.sh
        chmod +x /route.sh
      
        for addr in $(echo ${IPV4_INCLUDED_ROUTES} | tr ',' '\n'); do
          if [ ${addr} = "0.0.0.0/0" ]
          then
            echo "ip route del default" >> /route.sh
            echo "ip route add default via ${IPV4} dev ${TUN}" >> /route.sh
          else
            echo "ip route add ${addr} via ${IPV4} dev ${TUN}" >> /route.sh
          fi
        done
      
        echo "ip route add ${SOCKS5_ADDR} via ${IPV4GW} dev eth0" >> /route.sh
      
        for addr in $(echo ${IPV4_EXCLUDED_ROUTES} | tr ',' '\n'); do
          echo "ip route add ${addr} via ${IPV4GW} dev eth0" >> /route.sh
        done
      
        if [ ${IPV6} != "" ]
        then
          sysctl -w net.ipv6.conf.all.forwarding=1
      
          for v6addr in $(echo ${IPV6_INCLUDED_ROUTES} | tr ',' '\n'); do
            if [ ${v6addr} = "::/0" ]
            then
              echo "ip -6 route del default" >> /route.sh
              echo "ip -6 route add default dev ${TUN}" >> /route.sh
            else
              echo "ip route add ${v6addr} dev ${TUN}" >> /route.sh
            fi
          done
      
          for v6addr in $(echo ${IPV6_EXCLUDED_ROUTES} | tr ',' '\n'); do
            echo "ip route add ${v6addr} dev eth0" >> /route.sh
          done
        fi
      }
      
      run() {
        config_file
        config_route
        echo "echo 1 > /success" >> /route.sh
        hev-socks5-tunnel /hs5t.yml
      }
      
      run || exit 1

      и Dockerfile

      FROM ghcr.io/heiher/hev-socks5-tunnel
      
      COPY --chown=0:0 --chmod=755 entrypoint.sh /entrypoint.sh

      Параметры через параметры окружения

      Собирать под свою архитектуру...


      1. mike7
        26.08.2024 11:00

        Забыл про ipv6 написать, ну и пример переменных:


      1. romkazor
        26.08.2024 11:00

        Похоже не хватает поднятия tun0


        1. mike7
          26.08.2024 11:00

          hev-socks5-tunnel сам поднимает tun0 в отличии от tun2socks

          и запускает настройку маршрутов


          1. romkazor
            26.08.2024 11:00

            Да, после tun2socks где нужно все самому поднимать это немного необычным показалось)

            P.S. схема рабочая, спасибо.


            1. romkazor
              26.08.2024 11:00

              Подскажите что еще подкрутить можно что бы быстрее работало, а то после TLSv1.3 (OUT), TLS handshake, Client hello (1): до TLSv1.3 (IN), TLS handshake, Server hello (2): проходит около 3-5 секунд.


              1. mike7
                26.08.2024 11:00
                +1

                Надо настройки byedpi крутить, начните с самых простых стратегий. Подключайтесь напрямую к socks, без tun. В туннеле задержка минимальна.


                1. romkazor
                  26.08.2024 11:00

                  Удивительно но нет, напрямую отрабатывает через byedpi контейнер моментально


                  1. mike7
                    26.08.2024 11:00

                    Ну в этом случае зовем друга - Wireshark-а )

                    Через socks не проходит icmp, можно с mtu/mss поиграться


    1. DiggeD
      26.08.2024 11:00

      как на нем развернуть можно гайд для чайников?


  1. seitz
    26.08.2024 11:00
    +15

    Мда, если бы у меня дома был такой микротик, я бы может и не женился бы никогда...


  1. anbsmb
    26.08.2024 11:00
    +1

    Спасибо!

    Дополните, пожалуйста, статью. После создания Rule в Routing Filters для BGP подключения, в самом подключении на вкладке Filter, необходимо выбрать это самое правило, иначе в Route List в качестве Gateway будет оставаться адрес Remote Address BGP.

    UI


    1. wiktorbgu Автор
      26.08.2024 11:00
      +1

      Добавил скриншот и комментариев к нему, а в целом здесь не про само подключение BGP.


  1. Kiel
    26.08.2024 11:00
    +5

    5 минут? Да тут текста на 8 минут ))))


  1. Klochko
    26.08.2024 11:00

    Классная статья!

    Однако как это все поведет себя с IPTV? У меня после экспериментов с подобной конфигурацией IPTV закончилось. Не смарт не открывал видео, не обычный тв с приставкой от провайдера. Ютубчик ожил, но все остальное потухло.


  1. VenbergV
    26.08.2024 11:00

    Возможно я не прав, но для ARM64 и x86(CHR) нужны разные контейнеры.
    И хорошо бы полную сборку самих контейнеров из исходников привести. А то в нынешнее беспокойное время тянуть "специфичный" чужой контейнер, в домашнее приватное пространство, немного настораживает.


    1. DaemonGloom
      26.08.2024 11:00
      +1

      Если подозреваете контейнер - то в докерхабе есть его файл, можете сами проверить. Или собрать аналогичный по этому файлу.


  1. Roman_Pokrovsky
    26.08.2024 11:00

    Спасибо за статью, получилось настроить проксю с socks. Но с tun2socks, что-то пошло не так. Трафик не выходит.

    Есть подозрения на конфигурацию entreypoint, а именно на:

    ip route add 192.168.0.0/16 via 192.168.254.1 dev eth0

    Не понятно откуда берётся сетка 192.168.0.0/16, но может я ошибаюсь, так как не спец в этом деле)


    1. nidalee
      26.08.2024 11:00

      Не понятно откуда берётся сетка 192.168.0.0/16, но может я ошибаюсь, так как не спец в этом деле)

      Откуда берется: https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing

      Калькулятор: https://www.calculator.net/ip-subnet-calculator.html?cclass=any&csubnet=16&cip=192.168.254.1&ctype=ipv4&x=Calculate


      1. Roman_Pokrovsky
        26.08.2024 11:00

        Спасибо, за пояснение. Только с указанием этой сетки, всеравно доступнее для контейнера она не стала.


        1. nidalee
          26.08.2024 11:00

          Без шуток, попробуйте скормить конфигурацию своего микрота и этот гайд в ChatGPT.


    1. castus
      26.08.2024 11:00

      точно с таким же столкнулся...удалось победить?


      1. wiktorbgu Автор
        26.08.2024 11:00

        tun2socks пингуется? роутер перезагружали?
        например, при установке tun2socks на CHR он после запуска не пингуется, и, соответственно, не работает, пока не ребутнешь систему.


        1. castus
          26.08.2024 11:00

          Ставлю на ас2. Да, пингуется, но не не пойму как он работает и как собственно трафик должен идти и как его на тот же NAT заворачивать... Трафик приходит на tun2sock, дальше отправляется на первый контейнер для модификации, дальше возвращается обратно, а дальше как выходит и с какими src и dst. Как вообще проверить, что tun2sock работает, прежде чем начинать копать в сторону masquerade и тп?...


          1. wiktorbgu Автор
            26.08.2024 11:00

            Никаких маскарадов не нужно, зайти в контейнер tun2s /container shell (дальше клавиша tab покажет опции) и проверить доступен ли прокси который указан в конфиге, т.е. второй контейнер, пингуется ли


            1. castus
              26.08.2024 11:00

              пингуется, о том и речь... всё пингуется, но не летит ((


              1. wiktorbgu Автор
                26.08.2024 11:00

                Может есть маршруты в таблице main на те же ресурсы, что отправляете на tun2socks?


                1. castus
                  26.08.2024 11:00

                  0.0.0.0/0 конечно, но в другой таблице само собой


          1. mike7
            26.08.2024 11:00

            byedpi ничего не модифицирует, это socks. Из второго контейнера открывается новое подключение к dst и это надо пускать напрямую, т.е. либо исключать из маркировки или правилами маршрутизации


        1. yosemity
          26.08.2024 11:00

          Тоже ac2, сокс через фокси работает, НАТ - нет. В контейнеры проваливаюсь, вроде бы всё ок, пинги везде есть.


  1. Bedal
    26.08.2024 11:00

    В любом случае это попытка обфускации. Которая по естественным причинам не может быть глубокой - и банальная модификация DPI будет видеть и такие пакеты.

    В целом подобная борьба приведёт к тому, что закрыть по-настоящему можно, только полностью отрезав инет на границе. А это банально невозможно по экономическим причинам. Наше производство и экономика далеко, на десятки лет, не способна жить в режиме чучхе.


    1. Bedal
      26.08.2024 11:00

      Кстати, вот прямо сию секунду - ютьюб прекрасно работает с десктопа.


      1. nidalee
        26.08.2024 11:00

        Вам повезло, у меня без прокси даже главная не грузится.


        1. Bedal
          26.08.2024 11:00

          Вам повезло

          конечно. Это говорит разве что о нестабильности в работе DPI.


  1. vorobjovhome
    26.08.2024 11:00

    Здравствуйте. Решение я бы сказал простое, но изящное. У меня роутер с OpenWRT. Вот бы кто-нибудь написал аналогичную статью по изящной настройке OpenWRT, для работы YouTube без использования VPN.


  1. zloyevrey
    26.08.2024 11:00
    +1

    Спасибо за статью!

    У меня рядом с микротиком стоит домашний сервер, где как раз есть докер. Вот думаю как можно перенаправить трафик не внутрь контейнеров микротика, а на сервер.

    Возможно ли это? Как лучше это сделать?


    1. Alexsey
      26.08.2024 11:00
      +1

      Принципиальных различий нет. Указываете в ip->routes айпишник сервера вместо айпишника контейнера и дальше рулите трафиком на сервере. Главное исключите айпишник сервера из правила маркировки пакетов, а то петлю получите.


  1. Serjr1
    26.08.2024 11:00

    @wiktorbgu Отличная статья! Подскажите пожалуйста возможно ли использовать какое-то другое хранилище, кроме usb?


  1. iamkef
    26.08.2024 11:00

    Спасибо за статью, помогла, все работает!

    Есть такой вопрос, как в этот контейнер завернуть трафик с другого интерфейса? например с ZeroTier или Wireguard ?


    1. iamkef
      26.08.2024 11:00

      Отвечу сам себе, вдруг кому будет полезно.
      Редактируем конфиг в файле entrypoint.sh и добавляет туда маршрут своей подсети ZT по аналогии с предпоследней строчкой.
      На ZT соответственно нужно включить dafault route и настроить маршрут на контроллере ZT


  1. lazix
    26.08.2024 11:00

    А можете адаптировать ман под Synology? У роутера нет usb, не хочу мучать nand всякими глупостями, а тут на хранилке всё равно крутятся диски, пускай она работает проксей


    1. wiktorbgu Автор
      26.08.2024 11:00
      +1

      Уже есть https://bafista.ru/ustanovka-byedpi-v-kontejner-docker-na-synology/


  1. DiggeD
    26.08.2024 11:00

    Добрый день отличная статья, но у меня не завелось, опыт пользования mikrotik hap ac3 пару месяцев на пункте "Проводник файлов редактирование entrypoint.sh" пришлось открывать через ftp, smb винды отказывался работать, по умолчанию он был отключен, хотя я его включил. Не знаю где искать корень проблемы у вас настройки на подсеть 192.168.88. ? То есть на стандартные настройки роутера был настроен интернет ростелекома авторизация через pppoe, далее по вашему гайду.


  1. DilanHDR34
    26.08.2024 11:00

    Отвратительная статья! Почему? Потому что она написана умным языком для тех, кто его не знает, и при этом пытается что то сделать, использую какие то базовые знания. Я уверенный пользователь ПК, и далеко от программирования. Я всё понимаю, что тут происходит, но мне не хватает знаний, чтобы до конца настроить.
    Я остановился на моменте "Далее открываем файл \192.168.88.1\flash\docker\tun2socks\entrypoint.sh " У меня НЕТ этого файла, и как зайти на микротик (через проводник не получается) не написано, где что вводит, не написано.
    Вопрос, на кой хер делать умную статью, для чайников, если её понимать будут такие же умные???
    Изматерился весь, чертовски не хватает подробностей, мелочей, чтобы просто воспользоваться статьей!


    1. oua
      26.08.2024 11:00
      +2

      Здесь пропущен один слэш, должно быть \\192.168.88.1\.... -- это просто адрес для доступа к файлу внутри контейнера через SMB. Чуть выше автор показывает как включить SMB на микротике. Это всего лишь сетевая служба дающая доступ к файлам по сети. Вы можете использовать для доступа к файлам по такому адресу любой (почти) файловый менеджер на любом устройстве в этой локальной сети. Не ругайтесь и задавайте вопросы, мы постараемся ответить. Статья написана очень просто, ничего сложного тут нет.



    1. Roman_Pokrovsky
      26.08.2024 11:00

      Попробуй по SFTP зайти, с помощью FileZilla, Termius.
      По дефолту ssh открыт, логин и пароль такие же как от админки роутера.


    1. OverThink
      26.08.2024 11:00

      на худой конец можно wincsp скачать и подключится к роутеру по SSH


  1. Vlad824
    26.08.2024 11:00

    Привет! Ты не мог бы в начало статьи добавить, где вообще искать настройки роутера, как у тебя на скриншоте и куда вводить команды типа /system/device-mode/update container=yes ?


    1. oua
      26.08.2024 11:00

      Команды нужно вводить в терминал. Либо запустите окно терминала из меню winbox либо подключитесь к микротику по ssh напрямую. Почти все команды для микротика можно заменить действиями в графическом интерфейсе (кликать мышкой). В статье приведены скриншоты интерфейса соотвествующие состоянию после ввода всех этих команд.


  1. MrRouter2024
    26.08.2024 11:00

    Правильно писать «рутер» или «маршрутизатор».


  1. Unknown007
    26.08.2024 11:00

    Спасибо за статью. Может кто-то подсказать, почему не получается добавить контейнер? В какую сторону хоть капать, чтобы разобраться в ошибке? Такая же ошибка с любым другим контейнером...


    1. DiggeD
      26.08.2024 11:00

      пакет контейнера установлен? роутер юсб видет?


      1. Unknown007
        26.08.2024 11:00

        да и да) С самбой какая-то проблема, что происходят постоянные дисконнекты (но может проблема на стороне клиента - мак что-то чудит)...


    1. DiggeD
      26.08.2024 11:00

      я 3 раза откатывался, завтра буду еще раз пробывать ))) smb так и не смог победить хотя смысл если ftp работает как часы


    1. wiktorbgu Автор
      26.08.2024 11:00

      Покажите вывод команды /system/resource/ print

      Скриншоты спрячьте под спойлер


      1. Unknown007
        26.08.2024 11:00

        Скрытый текст


  1. castus
    26.08.2024 11:00
    +2

    Не взлетает tun2socks, уже всю головую сломал но не понимаю, что не так... С консоли самого tun2socks трафик ходит...


  1. MatveichX
    26.08.2024 11:00

    делал без bgp, взлетело, но не на всех устройствах (dns кэш почистил) - в частности на androidtvbox приложение YT + один лэптоп. Поснифаю трафик, посмотрю, куда оно там ходит...


  1. NetWalk
    26.08.2024 11:00

    Взял в аренду ipv6 у брокера 6in4 (для этого пришлось брать у провайдера белый ip)

    В cli mikrotik ввел 4 строчки конфига

    /interface 6to4 add comment="6in4 Tunnel Broker" disabled=no local-address=LOCAL IP mtu=1480 name=sit1 remote-address=SERVER IP

    /ipv6 route add disabled=no distance=1 dst-address=2000::/3 gateway=IPv6 SERVER P2P scope=30 target-scope=10

    /ipv6 address add address=IPv6 CLIENT P2P/127 advertise=no disabled=no eui-64=no interface=sit1

    /ipv6 address add address=IPv6 PD ADDRESS/64 advertise=yes disabled=no eui-64=no interface=bridge

    После этого сразу же заработал Ютуб на телефонах, планшетах, пк

    На tizen (Samsung) Ютуб работает по ipv4, поэтому пришлось через media station x его устанавливать, на Xiaomi tv приставке так же запустились после установки Ютуба в media station x


    1. tuxi
      26.08.2024 11:00

      Хотя бы указали где и на что надо менять. Айпи адреса у всех разные же.


      1. DaemonGloom
        26.08.2024 11:00

        То, что большими буквами - менять на своё.


  1. 1Pawel
    26.08.2024 11:00

    Отличная статья. На Mikrotik также есть более простой вариант: прошить OpenWRT и установить туда Zapret. Процесс установки полностью автоматизирован скриптом из коробки.


    1. Alexsey
      26.08.2024 11:00
      +7

      Не совсем только понятно зачем покупать микротик и шить на него openwrt. С точки зрения железа есть более хорошие варианты за меньшие деньги.


      1. tsilia
        26.08.2024 11:00

        С точки зрения железа есть более хорошие варианты за меньшие деньги

        Вы не могли бы набросать тут вариантов? Спасибо!