Comments 225
Спасибо за статью.
Сильно ли сажает трафик на микторе с таким конфигом и как нагрузка вырастает на чипсет?
Спасибо за статью! Подскажите пожалуйста, я правильно понимаю, что после этой настройки, ютуб будет работать на всех устройствах в домашней сети? в том числе и на смарт тв?
Смарт ТВ под рукой нет проверить, но да, должно работать на всех устройствах в домашней сети.
Там смысл в том, что используются скрипты anti dpi. Сайты и Ютуб при этом будут работать, да. Но возможны такие штуки, как не отображение некоторых сайтов, страниц, капч.
Тогда этот режим придется отключать, или вручную писать конфиги для нужных сайтов.
Спасибо, надо попробовать.
А можете написать (дополнить) инструкцию, как развернуть докер-образ в оперативке самого роутера, чтобы ничего внешнего вообще не использовать, а образ сам бы всегда разворачивался при ребуте? На канале микротика в ютубе есть коротенькое руководство, но я не настоящий сварщик :)
Развернуть докер-образ в оперативке нельзя - это просто изолированная файловая система, внутри которой запускается какой то процесс (приложение, утилита и т.д.), вот он то уже и существует в ОП.
То, что создается в файловой системе роутера или внешнего хранилища и есть файловая система образа, которую тоже надо где то хранить, когда контейнер запущен.
В принципе используемые образы довольно немного весят и могут вполне обойтись внутренним хранилищем роутера, если оно позволяет, это к слову об использовании чего то внешнего, а для запуска контейнеров при перезапуске роутеров, там есть отдельный чек-бокс для их запуска в параметрах контейнера - "Start on Boot"
Т.е. это не подходящая инструкция https://www.youtube.com/watch?v=KO9wbarVPOk ?
Везде пишут, что контейнеры лучше запускать в отдельной памяти, у которой нет проблем с количеством циклов перезаписи. Это не так что ли? Я хочу разобраться, как сделать правильно, чтобы и контейнер с обходом dpi можно было использовать и роутер при этом нормально жил. У меня только он постоянно в сеть воткнут, другие устройства периодически выключаются.
Да, должно работать. Главное - чтобы хватило ОЗУ на систему, файлы двух контейнеров и ОС двух контейнеров.
Везде пишут, что контейнеры лучше запускать в отдельной памяти, у которой нет проблем с количеством циклов перезаписи
В каком именно "везде" это пишут?
Да, логично что если развернуть в контейнере файловый сервер или там торрентокачалку - лучше бы им дать внешнюю память. Но если запущенная программа только читает из памяти, а не пишет в неё - не вижу повода переживать за циклы перезаписи.
А какая концепция этого решения?
Каким собственно образом обходится блокировка? Я не очень попимаю...
Как работает обход через ВПН все прекрасно понимают.
А тут как? Что куда и как "ходит"?
Блокировку youtube по ip они делать пока не решаются, поскольку это подсети google, на них очень много чего потребительского завязано. Заблокировать youtube и не поломать при этом android, gmail и кучу ещё всего отдельное искусство, если это вообще возможно. По этому производится анализ пакетов по косвенным признакам на специально оборудовании и пакеты похожие на видео поток режутся. Данный софт маскирует пакеты таким образом, чтобы простых характерных сигнатур у них не было.
при установлении соединения по HTTPS, имя домена назначения (так называемое SNI) передается в открытом виде
Удивительно. Несколько лет назад тут на Хабре читал про eSNI, EHELO и т.п., которые превращают подключения к сайтам из тройки (IP + заголовки + payload) в пару (IP + зашифрованный набор байт). Неужто это все еще во все браузеры / серверы (тем более гугловские) не завезли и не включили по умолчанию?
Сегодня модно не eSNI, а ECH. Но как всегда у всех этих технологий проблема - чтобы передать что-то шифрованное, надо откуда-то ключи достать. Т.е. куда-то их положить (по факту в DNS только получается). Но при этом должна быть обратная совместимость и уходить на обычный SNI, если не получается. Получается что можно просто блокировать пакеты с eSNI и браузер откатится на старую технологию и смысла опять нет. Так что придумывают какие-то жуткие извращения
(Возможно что-то лучше с этим стало, но по моим ощущениям - выходит слишком сложно, а обходится легко, поэтому и не летит сильно)
Т.е. вариант "открывать только по новому протоколу" по типу HSTS в принципе не рассматривался? Невероятно странно. "У нас все безопасно, подключение по HTTPS, но если вы не поддерживаете HTTPS, то вот вам HTTP, в котором все ваши cookie и пароли видны кому угодно".
А зачем тогда Tun2Socks, если достаточно дробления начальных пакетов со SNI? Или в начальных ответных TLS-пакетах тоже без проблем видно, что они с этих доменов?
а почему не сделать дробление через 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 удобнее цеплять через 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. Очень приятный и понятный слог !
Я все же остановился на варианте установки пометок роутинга на нужные пакеты по 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 у меня начинались дикие глюки и флаппинг портов на высоких скоростях, возможно сейчас уже не актуально.
Тоже использую подобную связку, но немного в другом контексте. Кстати в качестве 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 секунд.
Это сарказм?) тут же еще больше телодвижений, помимо замены файла 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 МБит.
как на нем развернуть можно гайд для чайников?
Мда, если бы у меня дома был такой микротик, я бы может и не женился бы никогда...
Спасибо!
Дополните, пожалуйста, статью. После создания Rule в Routing Filters для BGP подключения, в самом подключении на вкладке Filter, необходимо выбрать это самое правило, иначе в Route List в качестве Gateway будет оставаться адрес Remote Address BGP.
UI
Классная статья!
Однако как это все поведет себя с 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
, но может я ошибаюсь, так как не спец в этом деле)
Не понятно откуда берётся сетка
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
точно с таким же столкнулся...удалось победить?
tun2socks пингуется? роутер перезагружали?
например, при установке tun2socks на CHR он после запуска не пингуется, и, соответственно, не работает, пока не ребутнешь систему.
Ставлю на ас2. Да, пингуется, но не не пойму как он работает и как собственно трафик должен идти и как его на тот же NAT заворачивать... Трафик приходит на tun2sock, дальше отправляется на первый контейнер для модификации, дальше возвращается обратно, а дальше как выходит и с какими src и dst. Как вообще проверить, что tun2sock работает, прежде чем начинать копать в сторону masquerade и тп?...
Никаких маскарадов не нужно, зайти в контейнер tun2s /container shell
(дальше клавиша tab покажет опции) и проверить доступен ли прокси который указан в конфиге, т.е. второй контейнер, пингуется ли
byedpi ничего не модифицирует, это socks. Из второго контейнера открывается новое подключение к dst и это надо пускать напрямую, т.е. либо исключать из маркировки или правилами маршрутизации
Тоже ac2, сокс через фокси работает, НАТ - нет. В контейнеры проваливаюсь, вроде бы всё ок, пинги везде есть.
А у меня вообще tun2socks не стартует ( С невнятной ошибкой "execve: Permission denied", может сталкивались... Буду рад если подскажите чего не так делаю
Подскажите пожалуйста, проверил byedpi-socks, он пингуется, а tun2socks - не пингуется, в чем может быть проблема? Роутер перезагружал.
Забил на полный НАТ, поставил на свисток Ми-ТВ стик 4к альтернативный клиент ютуба https://github.com/yuliskov/SmartTube и в настройках (Общие - интернет-цензура) прописал свой же локальный СОКС-прокси микрота 192.168.254.5:1080. В начале долго думало, но взлетело. Даже рекламу само пропускает.
В любом случае это попытка обфускации. Которая по естественным причинам не может быть глубокой - и банальная модификация DPI будет видеть и такие пакеты.
В целом подобная борьба приведёт к тому, что закрыть по-настоящему можно, только полностью отрезав инет на границе. А это банально невозможно по экономическим причинам. Наше производство и экономика далеко, на десятки лет, не способна жить в режиме чучхе.
Здравствуйте. Решение я бы сказал простое, но изящное. У меня роутер с OpenWRT. Вот бы кто-нибудь написал аналогичную статью по изящной настройке OpenWRT, для работы YouTube без использования VPN.
Спасибо за статью!
У меня рядом с микротиком стоит домашний сервер, где как раз есть докер. Вот думаю как можно перенаправить трафик не внутрь контейнеров микротика, а на сервер.
Возможно ли это? Как лучше это сделать?
@wiktorbgu Отличная статья! Подскажите пожалуйста возможно ли использовать какое-то другое хранилище, кроме usb?
Спасибо за статью, помогла, все работает!
Есть такой вопрос, как в этот контейнер завернуть трафик с другого интерфейса? например с ZeroTier или Wireguard ?
А можете адаптировать ман под Synology? У роутера нет usb, не хочу мучать nand всякими глупостями, а тут на хранилке всё равно крутятся диски, пускай она работает проксей
Добрый день отличная статья, но у меня не завелось, опыт пользования mikrotik hap ac3 пару месяцев на пункте "Проводник файлов редактирование entrypoint.sh" пришлось открывать через ftp, smb винды отказывался работать, по умолчанию он был отключен, хотя я его включил. Не знаю где искать корень проблемы у вас настройки на подсеть 192.168.88. ? То есть на стандартные настройки роутера был настроен интернет ростелекома авторизация через pppoe, далее по вашему гайду.
Отвратительная статья! Почему? Потому что она написана умным языком для тех, кто его не знает, и при этом пытается что то сделать, использую какие то базовые знания. Я уверенный пользователь ПК, и далеко от программирования. Я всё понимаю, что тут происходит, но мне не хватает знаний, чтобы до конца настроить.
Я остановился на моменте "Далее открываем файл \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 трафик ходит...
делал без 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
Можно просто поставить впн и влючать для ютуба🗿
Заметил такую проблему.
На ПК и смартфоне все нормально работает. на 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 (ибо есть у меня предположение что с этим могут быть проблемы)
Увы аналогичная задержка
А подсетки и интерфейс оставил такие же при обоих запущенных контейнерах
На xray используете fake dns?
Исключите интерфейс или ip byedpi из маркировки или правил маршрутизации
Спасибо за статью. Пробую схему где контейнеры подняты на отдельном сервере, есть вопрос по настройке роутера, в правилах фаервола встречается лист LAN, что в этом листе должно быть прописано?
Спасибо! На компе и телефонах все работает, у меня точно такой же MikroTik hAP ax3.
p.s. а в чем может быть причина того, что не работает в приложениях Youtube на Android TV (Sony/Xiaomi)? Попробовал установить SmartTube от revanced, даже указал socks-прокси, как в примере с Mozilla, тест проходит нормально, 200 код, но все равно ничего не отображает, ни одно видео, ни превью так и не появились... :(
/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 в настройки. Если есть вопросы, в подвале сайта есть ссылка на чат в телеграмм, там могут подсказать.
А может кто подсказать - взял малинку, накатил 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 не пополнялся
Автору огромный плюс в карму, отправил даже благодарность на юмани, ибо за 20 минут решил проблему с замедлением и блокировками. Единственное, не получилось решить проблему с запуском приложения ютуб ни на одном телевизоре с WebOS, приложение при запуске обращается к www.youtube.com и не запускается. Если закинуть запрос конкретно к этому адресу на ВПН, а все остальное оставить на ByePDI, то все прекрасно работает.
у www.youtube.com целая куча адресов, о каком конкретно идет речь?
Долго думал что написать, спасибо, получил) впервые спустя 10 лет в найме вышел на вольные хлеба и как же это приятно писать годные статьи да еще и получать благодарности :)
Большое спасибо за статью! Почти всё получилось, youtube и facebook работают на ПК и телефоне, на телевизоре нет. Но не вэтом суть. Есть проблема, роутер стал постоянно перезагружаться при просмотре сервисов из перечня.
Пожалуйста, помогите решить проблему. Буквально 2 минуты даёт и идёт в ребут. Если ходить по другим сервисам, то всё норм.
Автору спасибо, завёл ютуб и инстаграм на сматрах и 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
Видимо что-то подкрутил РКН, ещё сегодня утром всё работало, а теперь перестало.
И ютубчик, и инста, и rutor - всё, не арбайтен с этим решением
Как-то всё сложно и запутанно... Почему нельзя контейнеры в память роутера? Много обращений - убьется флешь? А что делать, если на роутере нет usb (4011)?
Спасибо за статью!!! Все заработало!!! Есть конечно особенности при статической маршрутизации - как пример если просто прописать главный домен фейсбука - то работать не будет ( может только у меня такой глюк) хотя через прокси в браузере все летает!!! Остается решить чтоб работало когда подключаюсь через 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 3011tazihad/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, пытался подобрать, но тщетно(
Можете гуглить и смотреть обсуждения в проектах на гитхабе и пробовать готовые варианты
https://github.com/hufrea/byedpi/discussions
https://github.com/dovecoteescapee/ByeDPIAndroid/discussions
Спасибо за статью!
Поделюсь немного своим опытом, на основе статьи. Входные данные:
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 выдает ошибку.
Прочитайте предыдущий комментарий
К сожалению, метод перестал работать несколько дней назад. Есть идеи по этому поводу у кого?
К счастью, только у Вас. Читайте комментарии.
Спасибо за инструкцию. Сделал у себя в 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, но это тоже работало очень медленно. По моему даже хуже чем с порт-мапингом.
Для vless cобрал всё в один контейнер https://hub.docker.com/r/wiktorbgu/vless-hev-socks5-tunnel-mikrotik
Решаем проблему блокировок (и YouTube) за 5 минут на роутере Mikrotik через контейнеры и без VPN