Pull to refresh

Comments 224

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

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

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

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

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

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

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

работает, но не на всех устройствах. Смарт ТВ Яндекс и AppleTV не работают. Не через маршрутизацию не если подключится к прокси byedpi напрямую из настроек клиента.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here

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

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

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

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

Т.е. вариант "открывать только по новому протоколу" по типу HSTS в принципе не рассматривался? Невероятно странно. "У нас все безопасно, подключение по HTTPS, но если вы не поддерживаете HTTPS, то вот вам HTTP, в котором все ваши cookie и пароли видны кому угодно".

У HSTS та же проблема, чтобы узнать что нужно идти только по HTTPS, надо получить эту информацию от сайта, а если первый раз - то не ясно, поддерживает или нет. Или держать очередной доверенный список сайтов, которые это поддерживают и договориться всем его использовать.

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

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

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

а это socks сервер

а почему не сделать дробление через iptables? Он есть на микротике

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

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

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

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

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

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

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

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

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

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

Xray на Микротик с полноценным гайдом для новичков? Боюсь тут не публикация нужна, а книгу выпускать придётся и то вопросы у людей останутся.

Дайте пожалуйста мануал по настройке xray, не понимаю как его настроить в контейнере, запустился а дальше что? Адгард понятно, там вебинтерфейс и адрес подставил в днс.

ИМХО xray удобнее цеплять через wireguard. Xray поддерживает его в качестве инбаунда и не нужен второй контейнер. Особенно актуально становится когда в xray заведено несколько профилей VPN, тогда вместо 2+ доп. контейнеров просто добавляем нужное количество входных wireguard интерфейсов и настраиваем маршрутизацию 1к1 по выходным интерфейсам. Да, wireguard туннель, не выходящий за пределы роутера выглядит довольно странным решением, но это работает, потерь по производительности нет а по ресурсам гораздо выгоднее.

А можно пример конфига?

Скопирую сюда свой постик на другом ресурсе

На микроте ставим пакет с контейнерами, ребутаемся, включаем контейнеры /system/device-mode/update container=yes На железке после этого нужно будет нажать кнопку mode за ограниченное время, удалённо включить контейнеры не выйдет, т.к. потанцевальная дыра в безопасности. Дальше создаём VETH для нашего контейнера, создаём отдельный бридж для контейнеров, навешиваем туда ip адреса(я тут добавляю и ipv6 и ipv4 адрес. На самом деле для схемы с роутингом через WG интерфейс достаточно только v4, но у меня все контейнеры настроены единообразно, так что для общего понимания оставлю)

/interface/veth/add address=172.20.0.2/24,fd08:172:20::2/64 gateway=172.20.0.1 gateway6=fd08:172:20::1 name=xray_eth
/interface/bridge/add name=containers
/interface/bridge/port/add bridge=containers interface=xray_eth
/ip/address/add address=172.20.0.1/24 interface=containers interface=xray_eth
/ip/firewall/nat/add action=masquerade chain=srcnat comment="from containers masq" out-interface-list=WAN src-address=172.20.0.0/24
/ipv6/address/add address=fd08:172:20::1 interface=containers
/ipv6/firewall/nat/
add action=masquerade chain=srcnat comment="from containers masq" out-interface-list=WAN src-address=fd08:172:20::/64
add action=masquerade chain=srcnat comment="to containers masq" out-interface=containers
/ipv6/firewall/filter/add action=accept chain=forward comment="Allow Containers" out-interface-list=WAN src-address=fd08:172:20::/64

Последние два правила если что рождены в попытке заставить работать схему с byeDPI, для xray это тоже не нужно(при условии что вы отправляете траффик на ipv4 адрес. Если у вас ipv6-only VPS - то нужно, всё нужно) Дальше втыкаем в микрот флешку, из интерфейса форматируем её в EXT4(Обязательно! Иначе при распаковке контейнера порушатся разрешения фалов и ничего не взлетит) Конфигурим местный докер

/container/config/set ram-high=384.0MiB registry-url=https://ghcr.io/ tmpdir=usb1/pull

Аттеншн! Тут ram-high=384.0MiB - это конфиг для AX3 с гигом оперативы. У AС3 её всего 256Мб и с пустым конфигом и установленным пакетом wifi-qcom доступно примерно 145Мб(а с подробным конфигом и под нагрузкой - что-то около 70Мб). У AC2(128Мб) при таких же вводных доступно и того меньше - всего примерно 30Мб. Для AC2 вероятно придётся вообще перейти на легаси Wifi драйвер, иначе с ресурсами ну совсем грустно. Соотв. выставляем параметр с запасом, так чтоб и самому роутеру хватило. При превышении лимита процессы в контейнере начнут нещадно троттлиться, т.е. работать будет, но с дикими тормозами. А вот если память у роутера закончится - скорее всего он тупо крашнется. Не доводим и не включаем старт контейнера при загрузке пока не отладим всё. Скачиваем образ

/container/add comment=xray-core remote-image=xtls/xray-core:main interface=veth1 root-dir=usb1/xray/store

После этого можно попробовать его стартануть и убедиться что всё найс и ничего не сыпется. Дальше нужно приготовить конфигу xray (файлик config.json) Либо выдёргиваем его из /usr/local/x-ui/bin/config.json (не с сервера разумеется, а с заранее где-то настроенной клиентской инсталляции x-ui. В самом конфиге придётся поправить ip-шники при этом, очевидно), либо пишем ручками. Должно получиться что-то такое

{
  "log": {
    "access": "none",
    "dnsLog": false,
    "error": "./error.log",
    "loglevel": "error"
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": [
          "api"
        ],
        "outboundTag": "api"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "192.168.88.0/24"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:ru"
        ],
        "outboundTag": "warp"
      },
      {
        "type": "field",
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": [
          "inbound-172.20.0.2:3125"
        ],
        "outboundTag": "warp"
      },
      {
        "type": "field",
        "inboundTag": [
          "inbound-172.20.0.2:3126"
        ],
        "outboundTag": "VLESS-VPS"
      }
    ]
  },
  "dns": null,
  "inbounds": [
    {
      "listen": "172.20.0.2",
      "port": 3126,
      "protocol": "wireguard",
      "settings": {
        "mtu": 1420,
        "secretKey": "секрет",
        "peers": [
          {
            "privateKey": "секрет",
            "publicKey": "секрет",
            "preSharedKey": "секрет",
            "allowedIPs": [
              "0.0.0.0/0",
              "::/0"
            ],
            "keepAlive": 0
          }
        ],
        "kernelMode": false
      },
      "streamSettings": null,
      "tag": "inbound-172.20.0.2:3126",
      "sniffing": {
        "enabled": false,
        "destOverride": [
          "http",
          "tls",
          "quic",
          "fakedns"
        ],
        "metadataOnly": false,
        "routeOnly": false
      }
    },
    {
      "listen": "172.20.0.2",
      "port": 3125,
      "protocol": "wireguard",
      "settings": {
        "mtu": 1420,
        "secretKey": "секрет",
        "peers": [
          {
            "privateKey": "секрет",
            "publicKey": "секрет",
            "allowedIPs": [
              "0.0.0.0/0",
              "::/0"
            ],
            "keepAlive": 0
          }
        ],
        "kernelMode": false
      },
      "streamSettings": null,
      "tag": "inbound-172.20.0.2:3125",
      "sniffing": {
        "enabled": false,
        "destOverride": [
          "http",
          "tls",
          "quic",
          "fakedns"
        ],
        "metadataOnly": false,
        "routeOnly": false
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "AsIs"
      }
    },
    {
      "tag": "blocked",
      "protocol": "blackhole",
      "settings": {}
    },
    {
      "tag": "VLESS-VPS",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "секрет",
            "port": 443,
            "users": [
              {
                "id": "секрет",
                "flow": "xtls-rprx-vision",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "publicKey": "секрет",
          "fingerprint": "chrome",
          "serverName": "популярный.хост.близко.к.VPS",
          "shortId": "секрет",
          "spiderX": "/"
        },
        "tcpSettings": {
          "header": {
            "type": "none"
          }
        }
      }
    },
    {
      "tag": "warp",
      "protocol": "wireguard",
      "settings": {
        "mtu": 1420,
        "secretKey": "секрет",
        "address": [
          "172.16.0.2/32",
          "секрет"
        ],
        "workers": 2,
        "domainStrategy": "ForceIP",
        "reserved": [
          166,
          231,
          19
        ],
        "peers": [
          {
            "publicKey": "секрет",
            "allowedIPs": [
              "0.0.0.0/0",
              "::/0"
            ],
            "endpoint": "список известных хостов и портов есть в сети. Подберите тот, что будет работать для вас",
            "keepAlive": 0
          }
        ],
        "kernelMode": false
      }
    }
  ],
  "transport": null,
  "policy": {
    "levels": {
      "0": {
        "statsUserDownlink": true,
        "statsUserUplink": true
      }
    },
    "system": {
      "statsInboundDownlink": true,
      "statsInboundUplink": true,
      "statsOutboundDownlink": true,
      "statsOutboundUplink": true
    }
  },
  "api": {
    "tag": "api",
    "services": [
      "HandlerService",
      "LoggerService",
      "StatsService"
    ]
  },
  "stats": {},
  "reverse": null,
  "fakedns": null,
  "observatory": null,
  "burstObservatory": null
}

Тут у меня конфига на два входа и к ним два выхода - в WARP и в свой VLESS VPN Подкидываем эту конфигу на флешку по пути /usb1/xray/ Добавляем маунт поинт и привязываем его к контейнеру

/container/mounts/add dst=/etc/xray/config.json name=xray_config src=/usb1/xray/config.json
/container/set mounts=xray_config [ /container/find comment=xray-core ]

После чего можно рестартовать контейнер.

Всё, дальше совсем легко. Любым удобным способом настраиваем Wireguard подключения к нашему контейнеру, добавляем таблицы маршрутизации, настраиваем удобный нам вариант заворота траффика. Мануалов про эту часть в сети полно.

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

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

    {
      "listen": "172.20.0.2",
      "port": 3125,
      "protocol": "wireguard",
      "settings": {
        "mtu": 1420,
        "secretKey": "PrivkeyB",
        "peers": [
          {
            "privateKey": "PrivkeyA",
            "publicKey": "PubkeyA",
            "allowedIPs": [
              "0.0.0.0/0",
              "::/0"
            ],
            "keepAlive": 0
          }
        ],
        "kernelMode": false
      },
      "streamSettings": null,
      "tag": "inbound-172.20.0.2:3125",
      "sniffing": {
        "enabled": false,
        "destOverride": [
          "http",
          "tls",
          "quic",
          "fakedns"
        ],
        "metadataOnly": false,
        "routeOnly": false
      }
    }
/interface/wireguard/print                 
Flags: X - disabled; R - running 

 4  R name="WARP-WG" mtu=1420 listen-port=13234 private-key="PrivkeyA" 
      public-key="PubkeyA" 

/interface wireguard peers
add allowed-address=0.0.0.0/0,::/0 endpoint-address=172.20.0.2 endpoint-port=3125 interface=WARP-WG name=peer5 public-key=\
    "PubkeyB"

При этом на самом деле PrivkeyA в конфиге сервера по большому счёту не должен быть нужен, не знаю зачем он его хранит - может это последствия генерации конфига через x-ui. Короче общая логика тут крест-накрест. С каждой стороны(и на сервере и на клиенте) есть конфиг интерфейса WireGuard, где живёт приватный ключ. К нему будут подключаться с публичным ключём те, у кого сконфигурен соотв. пир. И есть конфига пира с публичным ключом, к котому он сам в свою очередь будет подключаться. По сети идёт обмен именно публичными ключами, которые сравниваются с приватными.

Спасибо, работает. По производительности не сильно увидел прироста, но в любом случае лучше чем лишний контейнер держать. А dokodemo-door вместо wg в inbound не лучше будет или такая схема не взлетит?

Наверное заработает, я лично не пробовал. Проблем вижу две - во первых, банально сложнее дебажить, т.к. даже шелл внутри контейнера с xray-core не открывается, уж не знаю почему). А во-вторых, dokodemo-door - это в любом случае один интерфейс, соотв. мы можем иметь только один аутбаунд(если не морочиться с маршрутами на уровне самого xray). А вот WG-интерфейсов можно наплодить сколь угодно много. Простота, единообразие, и возможность при минимальном изменении конфига утащить контейнер куда угодно(хоть на другой комп в ЛВС, хоть на удалённую площадку). При этом в приложении к использованию дома я вообще не вижу никакого пенальти по производительности(скорее всего если начать пытаться рулить сотнями одновременных подключений и гигабитными каналами разница вылезет, но у кого есть реально такие задачи - тот точно не будет разворачивать сервис в недодокере на роутере)

Это прекрасны рабочий мануал. Но остался вопрос: как пустить локальную сеть через этот контейнер?

Пробовал создать wg микротиковский - handshake работает, но у wg в контейнере нет IP. Как роутинг сделать?

Одним словом часть IP адресов в локальной сети хотелось бы зароутить прямо в этот прекрасный контейнер. Подскажете как?

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

ip/route/print where gateway="containers" 
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT
Columns: DST-ADDRESS, GATEWAY, DISTANCE
    DST-ADDRESS    GATEWAY     DISTANCE
DAc 172.20.0.0/24  containers         0
ipv6/route/print where gateway="containers"
Flags: D - DYNAMIC; X - DISABLED, I - INACTIVE, A - ACTIVE; c - CONNECT, s - STATIC
Columns: DST-ADDRESS, GATEWAY, DISTANCE
#     DST-ADDRESS           GATEWAY     DISTANCE
  DAc fd08:172:20::/64      containers         0
  DAc fe80::%containers/64  containers         0

Ну а дальше мы просто создаём WG интерфейсы и пиры для каждого inbound в контейнере

/interface wireguard
add listen-port=13233 mtu=1420 name=VLESS-WG private-key="секрет"
add listen-port=13234 mtu=1420 name=WARP-WG private-key="секрет"
/interface wireguard peers
add allowed-address=0.0.0.0/0,::/0 endpoint-address=172.20.0.2 endpoint-port=3126 interface=VLESS-WG name=peer4 public-key="секрет" 
add allowed-address=0.0.0.0/0,::/0 endpoint-address=172.20.0.2 endpoint-port=3125 interface=WARP-WG name=peer5 public-key="секрет"

создаём таблицы маршрутизации

/routing table 
add disabled=no fib name=vless
add disabled=no fib name=warp

Добавляем dummy lookup rule (возможно в актуальных версиях ROS уже не нужно, раньше без этого ipv6 маршрутизация не работала)

/routing rule
add action=lookup disabled=no interface=WARP-WG routing-mark=warp table=warp
add action=lookup disabled=no interface=VLESS-WG routing-mark=vless table=vless

Добавляем маскарадинг

/ip firewall nat
add action=masquerade chain=srcnat comment="WARP-WG masq" out-interface=WARP-WG
add action=masquerade chain=srcnat comment="VLESS-WG masq" out-interface=VLESS-WG
/ipv6 firewall nat
add action=masquerade chain=srcnat comment="WARP-WG masq" out-interface=WARP-WG
add action=masquerade chain=srcnat comment="VLESS-WG masq" out-interface=VLESS-WG

Дальше нам нужно повесить на интерфейсы WG какие-нибудь IP адреса, любые, из приватного диапазона(по ним будет идти маршрутизация только до приложения в контейнере). Например так. Опять же, в целом можно без этого, т.к. маршрутизировать мы будет тупо по интерфейсу, но некрасиво.

/ip address 
add address=172.19.0.2 interface=WARP-WG network=172.19.0.2
add address=172.19.0.3 interface=VLESS-WG network=172.19.0.3
/ipv6 address
add address=fd08:172:19::3/128 advertise=no interface=VLESS-WG no-dad=yes
add address=fd08:172:19::2/128 advertise=no interface=WARP-WG no-dad=yes

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

/ip firewall mangle
add action=mark-routing chain=prerouting comment=VLESS dst-address-list=vless new-routing-mark=vless passthrough=yes routing-mark=!vless
add action=mark-routing chain=prerouting comment=WARP dst-address-list=warp new-routing-mark=warp passthrough=yes routing-mark=!warp
/ipv6 firewall mangle
add action=mark-routing chain=prerouting comment=VLESS dst-address-list=vless new-routing-mark=vless passthrough=yes routing-mark=!vless
add action=mark-routing chain=prerouting comment=WARP dst-address-list=warp new-routing-mark=warp passthrough=yes routing-mark=!warp

Здесь мы отправляем всё, что будет в соотв. адрес листе в соотв. ему таблицу маршрутизации. Если нужно заворачивать несколько адрес листов в один интерфейс или как-то более гибко рулить всем этим безобразием - можно добавить свои цепочки и делать в них jump. Напр. как-то так:

/ipv6 firewall mangle
add action=mark-connection chain=prerouting_warp comment="WARP_chain" dst-address-list=!vpnexclude new-connection-mark=warp
add action=mark-routing chain=prerouting_warp comment="WARP_chain" dst-address-list=!vpnexclude new-routing-mark=warp passthrough=yes
add action=jump chain=prerouting comment=WARP dst-address-list=youtube jump-target=prerouting_warp routing-mark=!warp
add action=jump chain=prerouting comment=WARP dst-address-list=facebook jump-target=prerouting_warp routing-mark=!warp

В этом примере я создал для ipv6 отдельную цепочку prerouting_warp, в которой заворачиваю траффик в таблицу warp и помечаю соединение(можно собрать любое количество нужных правил). При этом проверяю, что коннект не идёт на адреса из списка, подключение до которых ни в коем случае не должно происходить через VPN - в качестве защиты от своих кривых рук. Ну и дальше двумя правилами закидываю в эту цепочку траффик для адресс листов youtube и facebook. Можно так, можно как в предыдущем примере - в зависимости от подхода и решаемой задачи. Как больше нравится и как удобнее.

Ну и вишенкой на торте - создаём маршруты в дикий интернет для наших новых таблиц маршрутизации

/ip route
add comment=WARP disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WARP-WG routing-table=warp
add comment=VLESS disabled=no distance=1 dst-address=0.0.0.0/0 gateway=VLESS-WG routing-table=vless
/ipv6 route
add comment=WARP disabled=no distance=1 dst-address=2000::/3 gateway=WARP-WG routing-table=warp
add comment=VLESS disabled=no distance=1 dst-address=2000::/3 gateway=VLESS-WG routing-table=vless

Добрый день. Специально зарегистрировался, чтобы добавить ответ. Прежде всего спасибо Вам за проделанную работу и инструкцию. Думаю кто в теме по достоинству это оценит. Я к сожалению, не понял как это реализовать на микротике, какие данные и где мне поменять под себя, как отделить трафик на запрещенные ресурсы и разрешенные. Буду Вам признателен за более подробную инструкцию с картинками (или видео). Представьте, что у Вас есть комп с Windows , настроенный в облаке сервер с VLESS и микротик и вам нужно настроить микротик с нуля до запуска. Представьте на месте себя человека который из настройки оборудования знает: "Вставляем эту команду в это окно..." "В этом окне выставляем эти параметры..." "Данные берём из этого окна..." "Жмём далее.." . Понимаю, что до такой степени это тяжело "разжёвывать", но тогда эта информация станет полезна и востребована широкому кругу обычных пользователей и благодарность за Ваш труд будет несоизмерима выше.

По вашей инструкции пробую запустить на RB1100x4, получаю ошибку "no manifest found for this architecture ". На сайте проекта не увидел поддержку микротов.

Что делаю не так?

Никак не получается прописать в конфиге Xray inbound для локального WG. Непонятно как указать ip этого интерфейса. Не могли бы выложить кусок конфига?

Так уже же выложил. Посмотрите переписку чуть выше.

"listen": "172.20.0.2",

где 172.20.0.2 - это ip, который мы назначили на veth, к которому присоединён контейнер.

Для inbound-ов можно прописать только порт. По дефолту оно будет слушать на всех интерфейсах контейнера. Не придётся менять конфиг xray при изменении IP адреса контейнера.

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

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

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

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

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

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

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

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

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.

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

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

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

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

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

И 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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это сарказм?) тут же еще больше телодвижений, помимо замены файла entrypoint.sh нужно еще и переменные настраивать...

как говорится сами даже мухи не иб...ся

Убрал этот маршрут echo "ip route add ${SOCKS5_ADDR} via ${IPV4GW} dev eth0" >> /route.sh из enrypoint.sh, заработало всё как с tun2socks, маршрутизация через таблицу clear_out, даже маскарад на бридже докеров стал не нужен. Тестировал производительность tun2socks и hev-socks5-tunnel пуская весь трафик через туннель, hev-socks5-tunnel минимум в 8 раз быстрее, при тарифе в 100 МБит hev-socks5-tunnel немного не дотягивает до сотки, а tun2socks режет на уровне 14-16 МБит.

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

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

Нужен маршрут до шлюза, через который он будет соединяться с прокси.

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

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

Спасибо!

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

UI

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

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

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

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

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

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

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

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

ip route add 192.168.0.0/16 via 192.168.254.1 dev eth0

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

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

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

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

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

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

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

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

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

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

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

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

Точно такая же ситуация. Через фоксипрокси работет замечательно, а вот через нат - нет.

Пинги идут, бутал роутер, все перепроверял по найду.

Может кто-то подскажет?

А у меня вообще tun2socks не стартует ( С невнятной ошибкой "execve: Permission denied", может сталкивались... Буду рад если подскажите чего не так делаю

та же ерунда. причем он работал. и бац. перестал. Уже переустановил его. все равно не стартует

Подскажите пожалуйста, проверил byedpi-socks, он пингуется, а tun2socks - не пингуется, в чем может быть проблема? Роутер перезагружал.

включите логи на контейнере, посмотрите при запуске подхватывает ли он настройки из entrypoint.sh

Забил на полный НАТ, поставил на свисток Ми-ТВ стик 4к альтернативный клиент ютуба https://github.com/yuliskov/SmartTube и в настройках (Общие - интернет-цензура) прописал свой же локальный СОКС-прокси микрота 192.168.254.5:1080. В начале долго думало, но взлетело. Даже рекламу само пропускает.

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

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

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

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

Вам повезло

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

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

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

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

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

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

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

Можно ставить в RAM память https://youtu.be/KO9wbarVPOk либо присмотритесь к возможностям пакета расширения https://help.mikrotik.com/docs/display/ROS/ROSE-storage

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

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

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

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

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

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

В настройках микротика -> smb-> users и у пользователя guest снять галочку “read only”

Там нет прав на изменение файла и ни блокнот ни notepad++ не ругаются на это при сохранении

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

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

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

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

Я не знаю как это работает, но если зайти первый раз через эксплорер, то там один файлик, а если правой кнопкой и в меню выбрать «обновить» то все файлы начинают отображаться😌

Вначале должно бит два слыша, а не один, но тут уже писали об этом)

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

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

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

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

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

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

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

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

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

Отвечаю на свой вопрос: Я, оказывается, не отформатировал флешку в ext4, хотя был уверен, что делал это. Из-за этого контейнеры не разворачивались и самба постоянно отлетала. С ext4 все отлично работает.

Флешка в FAT32, отформатируйте в Ext4

/disk format-drive disk=usb1 file-system=ext4

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

У меня почему то tun2socks на CHR вообще не запускается, ошибок никаких не выдает.

Важно чтобы в конфиге не было лишних символов/пробелов, которые легко появляются если править файл даже в Notepad от Win11

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

Взял в аренду 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

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

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

в доке есть эти команды для mikrotik

только имейте ввиду, что при таких настройках устройства в локальной сети получают белый ipv6 адрес, и теоретически могут "подвергаться атакам"

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

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

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

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

Можно просто поставить впн и влючать для ютуба🗿

Ну да, и правда - кому нужно решение, которое просто работает? Лучше поставить VPN без каких бы то ни было настроек, и постоянно переключать его туда-сюда!

Заметил такую проблему.
На ПК и смартфоне все нормально работает. на Android TV приложение даже не запускаться, пишет что нет соединения с сервером.
Кто то еще с таким сталкивался? как можно решить и с чем это связано ?

Попробую здесь спросить: Можно ли на Микротике завернуть Wireguard туннель в обычный SSH (port forwarding)?

Типа запускаю SSH до зарубежного сервера, на Микротике экспозится порт, и на том конце ответочка. WG настраиваю на Микротике обращаться к этом локальному порту, а в реальности он пойдет внутри SSH, чтобы его не блочили по дороге как WG.

На RB5009 схема не рабочая, не работает tun2socks хоть убей его!

Напрямую через socks работает, 2 дня промучался, маскарад, ендтрипоинт, что только не делал НЕ РАБОТАЕТ! В микротике не новичок, больше 10 лет микро в пользовании! Имею инсталляции в контейнерах singbox, xray+tun2socks там всё летает. Помогите разобраться пожалуйста.

Попробуй hev-socks5-tunnel вместо tun2socks

Если уж xray+tun2socks работает, то почему не работает byedpi+tun2socks. Если после установки и запуска контейнера tun2socks с установленной конфигурацией ентрипоинт он не пингуется, перезагрузите роутер. Позже при тестах был замечен такой нюанс.
Да и тут не понятно, что значит не работает.

Господи, я думал ребут только для винды нужен. Тоже неделю не мог понять почему с xray работает, а byedpi нет. Спасибо...

А hev-socks5-tunnel удалось запустить? у меня что-то не пошло, не активное состояние tun адаптера в контейнере. Недавно скинули новые сборки для микротика, еще не тестил. Но тот что оригинальный, не пошел.

Удалось, но где-то там трафик подзастревает до 5 секунд, поэтому вернулся на tun2socks. Напрямую в контейнер byedpi и через tun2socks -> byedpi все ок, через hev -> byedpi задержка до 5 сек. В дебаг особо не вдавался.

Я в hev поднимал не tun0 а tun1 + подсетку другую что бы не пересекалась с уже поднятой в другом контейнере tun2socks (ибо есть у меня предположение что с этим могут быть проблемы)

Увы аналогичная задержка
А подсетки и интерфейс оставил такие же при обоих запущенных контейнерах

Upd: С такой таблицей маршрутов работают и hev и tun2socks уже без задержек

/ # ip route
default via 198.18.0.1 dev tun0 
172.17.0.0/24 dev eth0 proto kernel scope link src 172.17.0.4 
192.168.0.0/16 via 172.17.0.1 dev eth0 

На xray используете fake dns?

Исключите интерфейс или ip byedpi из маркировки или правил маршрутизации

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

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

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

Спасибо! На компе и телефонах все работает, у меня точно такой же MikroTik hAP ax3.
p.s. а в чем может быть причина того, что не работает в приложениях Youtube на Android TV (Sony/Xiaomi)? Попробовал установить SmartTube от revanced, даже указал socks-прокси, как в примере с Mozilla, тест проходит нормально, 200 код, но все равно ничего не отображает, ни одно видео, ни превью так и не появились... :(

Я долго промучался с приставками (SmartTube на Mi box) - на компе и мобилах работало, а на android tv нет. В итоге попробовал штатное приложение YouTube. И оно отлично работает. Конечно к плюшкам smarttube давно привык, но пока так. Ждем разработчиков этого отличного клиента.

/ip/dns/static/

add address-list=za_dpi_FWD forward-to=localhost match-subdomain=yes name=googlevideo.com type=FWD

Подскажите, тут использование localhost доступно в 7.16rc2 ?

У меня 7.15.3 и так не работает пока dns не вписать не локальный.

Или у вас выше есть еще одна статическая запись для localhost? Если да, то подскажите какая..)

Обновитесь, проверьте. С бекапами можно же поэкспериментировать.

Никакой секретной статической записи нет)

А насколько важна скорость usb порта? Как будет работать на Mikrotik hAP ac2, там usb2?

Думаю не сильно важна, т.к. обработка трафика идет на лету. Попробуйте, расскажите)

Далее в фильтрах роутинга /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;}

На моей железяке выдает ошибку в данном условии и у антифильтра просто поднимает по всем комьюните и айпи гв другой

/routing filter rule
add chain=antifilter-in disabled=no rule="set gw 10.75.66.20; accept;"

Ну так вы должны подставить свой шлюз vpn в настройки. Если есть вопросы, в подвале сайта есть ссылка на чат в телеграмм, там могут подсказать.

Ошибка не в ВПН, а в выражении.

failure: "[Word {set}, Word {gw}, Word {10.75.66.20%wireguard-client-vpn}]" - invalid argument

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

А может кто подсказать - взял малинку, накатил OPENWRT, настроил там VLESS. Если в браузере указать как прокси http/socks малинку то ресурсы открываются. А как прописать в микротике подключение к малинке, чтобы нужный трафик через нее шел. На самом микротике BGP сделал, но как и где создать подключение?

Здравствуйте, спасибо большое за статью!

У меня возникла проблема на настройке DoH - я попробовал использовать сервер Cloudflare, и получил след ошибку: DoH server connection error: SSL: ssl: no trusted CA certificate found.

Другие серверы отказывались устанавливаться, и я выполнил сброс настроек.

Еще одна проблема, которую я обнаружил - контейнер Tunnel2Socks останавливался через пару секунд после запуска. Подскажите пожалуйста, где можно посмотреть логи и выявить ошибку?
Роутер Mikrotik hAp ac2

Команды для настройки DoH

/tool fetch https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
/certificate import file-name=DigiCertGlobalRootG2.crt.pem passphrase=""
/ip dns set use-doh-server=https://1.1.1.1/dns-query verify-doh-cert=yes

Если после замены конфига контейнер не запускается и сразу падает, скорее всего дело в кодировке файла, попробуйте использовать другой редактор, если редактируете не из под windows

Спасибо, в этот раз получилось настроить, и на пк и телефонах youtube работает без проблем. Заметил еще 2 проблемы - после ребута роутера оба контейнера отказываются запускаться, помогает только удаление и переустановка. В чем может быть причина?

Есть ли возможность починить youtube на android tv? Изначально настраивал для телевизора, а он так и не заработал

Спасибо за подсказку, с этими командами заработало.
А по ссылке статье
/ip dns set use-doh-server=https://cloudflare-dns.com/dns-query verify-doh-cert=yes
Похоже в нашем случае лишняя настройка. С ней у меня Address Lists не пополнялся

Значит у вас версия ROS < 7.16

Обновите версию ROS, аналогично тупил почему не пополняется address-list

Автору огромный плюс в карму, отправил даже благодарность на юмани, ибо за 20 минут решил проблему с замедлением и блокировками. Единственное, не получилось решить проблему с запуском приложения ютуб ни на одном телевизоре с WebOS, приложение при запуске обращается к www.youtube.com и не запускается. Если закинуть запрос конкретно к этому адресу на ВПН, а все остальное оставить на ByePDI, то все прекрасно работает.

у www.youtube.com  целая куча адресов, о каком конкретно идет речь?

О любом, речь об обращение к этому домену. На WebOS работает только если обращение к нему завернуть на ВПН, иначе приложение просто не запускается. Проверено на 3 телевизорах LG. Параллельно AndoroidTV, стартфоны и ПК работают без проблем.

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

А есть возможность применить это решение для разблокировки wireguard с микрота, отправлять несколько мусорных пакетов перед соединением?

А как его настроить? Просто добавить в System->Scripts?

В планировщик - раз в 1 - 5 минут, в зависимости от критичности восстановления wg соединения

Скрин скрипта в планировщике с настройками

Большое спасибо за статью! Почти всё получилось, youtube и facebook работают на ПК и телефоне, на телевизоре нет. Но не вэтом суть. Есть проблема, роутер стал постоянно перезагружаться при просмотре сервисов из перечня.

Пожалуйста, помогите решить проблему. Буквально 2 минуты даёт и идёт в ребут. Если ходить по другим сервисам, то всё норм.

Проблему с ребутом решил приобретя ax3

Автору спасибо, завёл ютуб и инстаграм на сматрах и android TV, Webos тоже не завелся.

В docker tun2socks есть переменные окружения весь список можно посмотреть в Dockerfile, в частности там есть EXTRA_COMMANDS с помощью неё можно запускать bash команды с некоторыми ограничениями. Я в добавил их в MikroTik и не пришлось подсовывать свой entrypoint.sh, что само по себе моветон и хардкодинг.

/container/envs

add name="tun2_envs" key="TABLE" value=""

add name="tun2_envs" key="EXTRA_COMMANDS" value="ip route del default table $TABLE; ip rule flush table $TABLE; ip rule del prohibit; ip route del default; ip route add default via ${ADDR%%/*} dev $TUN; ip route add 192.168.0.0/16 via 192.168.254.1 dev eth0"

add name="tun2_envs" key="PROXY" value="socks5://192.168.254.5:1080"

При создании контейнера из dockerhub добавил envlist=tun2_envs

P.S. Переменной TABLE там нет, но она объявлена в entrypoint.sh как TABLE="${TABLE:-0x22b}" и к ней есть доступ, чтобы было меньше жёстких привязок, я её добавил в список.

специально зарегался на хабре для того чтобы ответить. спасибо огромное автору за статью и спасибо тебе за этот коммент! у меня tun2socks контейнер не запускался с ошибкой execve: Permission denied, когда сделал как ты сказал - взлетело

Я перешёл с tun2socks на hev-socks5-tunnel, он гораздо быстрее и меньше нагрузки на процессор.

С какими значениями в переменных запускаете hev-socks5-tunnel?

name="hev_envs" key="SOCKS5_ADDR" value="192.168.254.5"
name="hev_envs" key="IPV4_INCLUDED_ROUTES" value="0.0.0.0/0"
name="hev_envs" key="IPV4_EXCLUDED_ROUTES" value="192.168.0.0/16"

Я понимаю что тут элементарно все, я это тестил 100500 раз но ни в какую не запускается у меня этот hev-socks5-tunnel...чем он лучше не знаю, у меня и tun2socks летает.

4k на ТВ

А этот у меня не пингуется снаружи никак. Переустанавливал, роутер перезагружал. Пробовал сборку от снеговика... бестолку)

А то что выше дана команда EXTRA_COMMANDS через консоль не влазит

(поэтому давать её новичкам тоже как-то сомнительно, отредачить файл для меня показалось куда нагляднее, чем визуальная каша в длинной строке где тоже нужно менять адреса на свои),

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

В идеале конечно пересобрать бы контейнер со своим правильным entrypoint.sh, но не охота потом поддерживать его актуальность, если вдруг оригинал обновится.

Его надо собирать самому, у вас какая платформа (arm, arm64) могу собрать.

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

Спасибо за инфо, настроил, работает)

/container envs add key=SOCKS5_ADDR name=tun2socks value=192.168.254.5
/container envs add key=LOCAL_ROUTE name=tun2socks value="ip r a 192.168.0.0/16 via 192.168.254.1;ip r a 10.0.0.0/8 via 192.168.254.1;ip r a 172.16.0.0/12 via 192.168.254.1"
/container/add remote-image=snegowiki/hev-socks5-tunnel-mikrotik:latest interface=TUN2SOCKS root-dir=usb1/docker/hev-socks5-tunnel start-on-boot=yes envlist=tun2socks

Вы с dockerhub взяли? Я сам собирал. Там какой-то непонятный LOCAL_ROUTE

Да. Обычная команда настройки маршрутов.

Видимо что-то подкрутил РКН, ещё сегодня утром всё работало, а теперь перестало.
И ютубчик, и инста, и rutor - всё, не арбайтен с этим решением

Только что проверил, все работает как и вчера и неделю до этого

домру у меня, и в Нск завезли новое оборудование
видимо они его включили

Как-то всё сложно и запутанно... Почему нельзя контейнеры в память роутера? Много обращений - убьется флешь? А что делать, если на роутере нет usb (4011)?

Так можно же, в комментариях уже писали

https://youtu.be/KO9wbarVPOk

Спасибо за статью!!! Все заработало!!! Есть конечно особенности при статической маршрутизации - как пример если просто прописать главный домен фейсбука - то работать не будет ( может только у меня такой глюк) хотя через прокси в браузере все летает!!! Остается решить чтоб работало когда подключаюсь через VPN к своему микротику с телефона, кто сможет помочь?

Спасибо за статью, надеюсь поможет. Кто нибудь сталкивался что по SMB не видно созданной на микротике структуры. Как в статье на скрине.

Да у меня тоже не получается увидеть ни половину папок, ни сделать флешку, чтобы на неё файлы отправились, ни файла этого найти по адресу.
Я уже весь перепсиховался. Это статья написана для людей, которые УЖЕ умеют всё это делать! Простому человеку, который не разбирается глубоко, просто взять и сделать всё последовательно просто невозможно.

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

Сделал всё далее по инструкции до пункта Далее открываем файл \192.168.88.1\flash\docker\tun2socks\entrypoint.sh В памяти роутера создавалсь папка УСБ1 в самой флешке ничерта не создалось! (да флешка в файловой системе ext4, да флешка рабочая и распознаётся в роутере)
Далее зайти в папку flash и public не получается, ни через тотал командер, ни через браузер, ни через ssh ни по putty ни в терминале роутера!!!

Как пользоваться статьёй, если тут нихрена не понятно?

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

Флешку лучше всего отформатировать из оболочки роутера и сразу переименовать ее в "usb1", а потом сделать все по инструкции еще раз. Сделал уже как минимум на 10 роутерах, и все с первого раза заработало.

\192.168.88.1\flash\docker\tun2socks\entrypoint.sh - Открытие идет через пк и в начале пропущен один слеш

\\192.168.88.1\flash\docker\tun2socks\entrypoint.sh

и если что то не получается через командную строку - авто указал скрины можно настроить все по скринам в разделе все по SMB

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

Спасибо за статью. Сколько же открытий чудных я совершил со своим микротиком Hap ac2 (настраивал с 27 августа по данной статье, почти 10 дней) и каким же ярким было открытие когда весь гайд заработал на конфигурации роутера "по умолчанию"..

Скорее всего адаптирую дальнейшую работу через Синолоджи

Наблюдения:

  • Первый этап (работа через прокси) прошла успешно с первой попытки, а всё остальное не получалось по тем или иным причинам

  • регулярно делал бекапы и откатывался (например при настройке DOH не был установлен дополнительный корневой сертификат и пропадал интернет на роутере, а посмотреть в логи я не догадывался);

  • при настройке BGP роутер упирался в нехватку оперативной памяти (128 мб на моём роутере, судя по комментариям - не я один) и перезагружался. На текущий момент работает по первому этапу (без BGP)

  • не работали редиректы DNS запросов (видимо в силу моей неопытности настройки, изменения правил под свою конфигурацию) => не работал мангл

Моё большое СПАСИБО автору за столь увлекательный квест в нематериальном выражении и маленькое - в материальном.

У меня интернет отваливался когда я настраивал работу черз 1.1.1.1 - так как классический днс убирался, а защищенный не отрабатывал по причине того что по ссылки устанавливался устаревший сертификат (лично у меня он не заработал и на просторах инта писали что он устарел- скачал новый все заработало) - ну и как автор предупредил лично у меня не заработало при классическом DNS - оператор сразу стал блочить

А есть ли смысл обновлять контейнеры, если на докере появляются свежие сборки?

Спасибо большое автору. Микротик купил дней 4-5 назад. Основное настроил гуглением. А тут нарвался на обход блокировки, 3 дня мучался с тем что при настройке DOH инет сыпеться. Благо в коментариях нашел пункт решения и все. По всему дому ютубе пашет, спиногрызы счастливы. Единственное на алисе ютуб кажет в плохом качестве, хз как там поднять.

Если использовать статический список DNS и не включить DoH то указанный в поле Forward To: localhost приведёт к зацикливанию (петле), так как этот список будет полноценно работать. Чтобы этого избежать в поле Forward To: надо указывать адрес того DNS сервера к которому обращается MikroTik для разрешения имён. Есть причины по которым не нужно включать DoH, например настроен свой DNS сервер, к примеру Pi-hole.

/ip/dns/static/
add address-list=za_dpi_FWD forward-to=8.8.8.8 match-subdomain=yes name=googlevideo.com type=FWD

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

Подскажите знатоки, можно ли данный роутер (из статьи) подключить к внешнему проки серверу? Есть VPS в Европе, установлен Tinyproxy, для подключения к нему есть IP и порт. Как сделать так, что бы роутер отправлят интересный трафик через внешний Proxy? Раньше все отправлял через Wireguard, но теперь не подключается(заворачивал маркированный трафик-адресслист).

Спасибо за статью!
Всё работало и на первой итерации решения, буквально вчера сломалось( Сломалось на мобилке андроид и android tv xiaomi, десктопная винда фурыкает без проблем. Есть ли мысли куда капать?

Использую:
7.16rc4 Testing 3011
tazihad/byedpi:latest
snegowiki/hev-socks5-tunnel-mikrotik:test

Копайте в сторону подбора параметров для byedpi
например:

--disorder 1 --auto=torst --tlsrec 1+s --auto-mode 1
--fake 1 --auto=torst --tlsrec 1+s --debug 1
--split 1 --disorder 3+s --mod-http=h,d --auto none --fake -1 --tlsrec 3+h
--split=2 --auto=n
и т.д.

Спасибо.

Рабочий вариант для Ростелеком

--split 1 --disorder 3+s --mod-http=h,d --auto none --fake -1 --tlsrec 3+h

и --fake 1 --auto=torst --tlsrec 1+s --debug 1

А по какому приципу хотя бы копать?) Я прочитал описания всех аргументов cmd, пытался подобрать, но тщетно(

Спасибо за статью!
Поделюсь немного своим опытом, на основе статьи. Входные данные:

  • MikroTik hAP ac² (IPQ-4018:Arm® Cortex®-A7)

  • RouterOS 7.15.3

DNS FWD

Так как у меня RouterOS 7.15.3, то /ip/dns/static/ add ... forwad-to=localhost... еще не работает. Но есть отдельная железка с Pi-hole, туда и направил. Работает.

Docker образ hev-socks5-tunnel-mikrotik

Docker образ snegowiki/hev-socks5-tunnel-mikrotik c тегом latest (на момент написания коментария), поддерживает две архитектуры amd64 и arm64, тоесть не подходят для моего роутера. К счастью, тег test поддерживает уже три архитектуры, включая arm/v7. В итоге его и использовал: snegowiki/hev-socks5-tunnel-mikrotik:test

Маркировка соединения, вместо маркировки пакетов

При маркировки пакетов, на основе списка, придется проверять каждый пролетающий пакет на наличие в этом списке. Можно ограничится проверкой присутствия в списке только первых пакетов соединений и пометить само соединение. А вторым правилом, на основе помеченных соединений, выдавать метку для роутинга. Так роутеру будет полегче. У меня выглядит так:

/ip firewall mangle
add action=mark-connection chain=prerouting comment="DPI bypass" \
    connection-mark=no-mark connection-state=new dst-address-list=za_dpi_FWD \
    in-interface-list=LAN new-connection-mark=dpi_mark packet-mark=no-mark \
    passthrough=yes
add action=mark-routing chain=prerouting comment="DPI bypass" \
    connection-mark=dpi_mark connection-state=established,related,new \
    in-interface-list=LAN new-routing-mark=dpi_mark passthrough=yes

fasttrack

fasttrack можно не отключать. Просто указать, чтобы не помечал уже помеченные соединения connection-mark=no-mark. Выглядит примерно так (убедившись в правильном порядке):

/ip firewall filter
add action=fasttrack-connection chain=forward connection-mark=no-mark \
    connection-state=established,related hw-offload=yes

Спасибо за интересную статью!

У меня при импорте контейнера snegowiki/hev-socks5-tunnel-mikrotik:latest выдает ошибку.

К сожалению, метод перестал работать несколько дней назад. Есть идеи по этому поводу у кого?

Читал. С указанными наборами параметров (пробовались и другие) Youtube на Android TV так и не заработал.

Спасибо за инструкцию. Сделал у себя в AX3 по аналогии связку:
hev-socks5-tunnel -> Socks5-XRay ----> XRay Server

До этого использовал "порт-мапинг" для проброса WireGuard:
WG -> dokodemo-door-XRay ----> XRay Server -> WG
Но это работало очень медленно - 62 Мбит/с на скачивание при ширине канала 700 Мбит/сек. Почему так - не понятно. CPU роутера, можно сказать, был не нагружен.

Теперь, через hev-socks5-tunnel, у меня разгоняется до 230Мбит/сек, при общей нагрузке на CPU 50-60%.
Это конечно сильно лучше чем было с WG, но не идеально. Если напрямую, в обход tun2socks, подключится браузером через Sock5 к XRay, то выдаёт 600 Мбит/сек.
Судя по распределению нагрузки на ядра роутера, hev-socks5-tunnel работает как будто в один поток. Только одно ядро из 4-её грузит на 100%, а остальные болтаются в районе 30-50%.

Так же пробовал вариант с использованием WireGuard inbound-а в XRay, но это тоже работало очень медленно. По моему даже хуже чем с порт-мапингом.

Sign up to leave a comment.

Articles