Обновление от 08.01.2026
Инструкция предполагает, что ваш роутер сброшен до заводских настроек.
Инструкция проверена на RouterOS версии 7.20
Не все модели Mikrotik поддерживают работу с контейнерами. Командами ниже пробуем проверить поддержку и установить.
Проверяем, установлен ли пакет container:
/system package print
Если в выводе нет container, то пытаемся установить:
/system package update
/system package enable container
Проверяем включена ли поддердка container в ядро ОС:
/system/device-mode/print
Если в выводе вы видите container: no, то пытаемся включить и перезагрузить устрйоство:
/system/device-mode/update container=yes
После этой команды обязательно перезагружаем роутер по питанию. Сразу после перезагрузки проверяем, появилась ли поддержка контейнеров командой:
/system/device-mode/print
В выводе должно быть container: yes. Если у вас не так, скорее всего ваша модель не поддерживает контейнеры. Возможно, вам поможет официальное руководство: https://help.mikrotik.com/docs/spaces/ROS/pages/84901929/Container
Создаём необходимые интерфейсы:
/interface/bridge add name=container
/ip/address add address=192.168.89.1/24 interface=container network=192.168.89.0
/interface/veth add address=192.168.89.2/24 gateway=192.168.89.1 name=vless
/interface/bridge/port add bridge=container interface=vless
Настройка маршрутизации:
/routing table add disabled=no fib name=to_vpn_table
/ip route add dst-address=0.0.0.0/0 gateway=192.168.89.2 distance=1 routing-table=to_vpn_table
Обратите особое внимание, что очередность правил в файрволле критически важна!
Если вы хотите пустить через VPN только часть трафика (по списку доменов), то необходимо прописать правила ниже:
/ip firewall address-list add list=to_vpn_list address=2ip.ru
/ip firewall mangle add action=change-mss chain=forward new-mss=1360 out-interface=container passthrough=yes protocol=tcp tcp-flag=syn tcp-mss=1453-6553
/ip firewall mangle add action=mark-connection chain=prerouting connection-mark=no-mark dst-address-list=to_vpn_list in-interface-list=!WAN new-connection-mark=to_vpn_mark passthrough=yes
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=to_vpn_mark new-routing-mark=to_vpn_table passthrough=no in-interface=!container
/ip firewall filter set [find action~"fasttrack-connection"] connection-mark=!to_vpn_mark
Сам список доменов для некоторых популярных сервисов приведен в конце инструкции.
Инструкция подразумевает, что ваша домашняя сеть имеет адрес 192.168.88.0/24. Иначе замените в правилах ниже адрес сети на ваш.
Если вы хотите пуситить весь трафик через VPN, то нужно прописать правила ниже:
/ip firewall mangle add action=change-mss chain=forward new-mss=1360 out-interface=container passthrough=yes protocol=tcp tcp-flag=syn tcp-mss=1453-6553
/ip firewall mangle add action=mark-connection chain=prerouting src-address=192.168.88.0/24 dst-address=!192.168.88.0/24 connection-mark=no-mark routing-mark=!to_vpn_table in-interface-list=!WAN new-connection-mark=to_vpn_mark passthrough=yes
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=to_vpn_mark new-routing-mark=to_vpn_table passthrough=no in-interface=!container
/ip firewall filter set [find action~"fasttrack-connection"] connection-mark=!to_vpn_mark
Если вам нужно пустить трафик через VPN только с одного конкретного домашнего IP, то в поле src-address правила mark-connection указываем не всю домашнюю сеть 192.168.88.0/24, а конкретный IP - например, 192.168.88.123/32. При этом IP-адрес этого устройства нужно сделать статичтным, чтобы адрес не менялся после истечения аренды (таблица /ip arp - через WinBox выделяем в таблице нужное устройство - жмём make static).
Если у вас есть USB флешка в роутере (рекомендуется), которая примонтирована, например, в usb1, то необходимо выполнить команду:
/container config set registry-url=https://registry-1.docker.io tmpdir=usb1/container-tmp layer-dir=usb1/container-tmp/layer
Иначе будет достаточно команды:
/container config set registry-url=https://registry-1.docker.io tmpdir=ramstorage
Создадим ENV переменную для контейнера с параметрами подключения к внешнему VPN-серверу:
# value заполняем своим значением от VLESS сервера (например, из 3X-UI панели):
/container envs add list=mihomo key=SRV1 value="vless://..."
Если у вас ещё нет своего VPN-сервера, то вы можете его развернуть самостоятельно по инструкции: https://gist.github.com/nskforward/b4ee345cf825bd38e1642c4d753648be
Создаём и запускаем контейнер:
/container add envlists=mihomo interface=vless logging=no remote-image=registry-1.docker.io/wiktorbgu/mihomo-mikrotik:latest root-dir=usb1/container-tmp/docker/mihomo dns=8.8.8.8,8.8.4.4 start-on-boot=yes
/container start mihomo
Пробуем с устройства локальной сети отрыть в браузере ресурс: https://2ip.ru
При корректной работе в браузере должен отобразиться IP-адрес внешнего VPN-сервера.
Также,в браузере должна открываться UI-панель самого Mihomo, работающая в контейнере по адресу: http://192.168.89.2:9090/ui/#/setup?hostname=192.168.89.2&port=9090&secret=
Панель Mihomo не нужна вам при стандартной работе, если вдруг она не открывается. Она сильно пригодится вам, если вы хотите переключаться между разными VPN серверами внутри одного туннеля. Некоторые проблемы по Mihomo панеле обсуждены в комментариях.
Всегда проверяйте ваши vless://... ссылки на работоспособность до вставки в Mikrotik. Так вы себе сэкономите кучу времени прежде чем вы найдёте причину, почему у вас ничего не работает. В частности, много различных мобильных приложений (VPN-клиентов), где можно сразу проверить ссылку не только на валидность, но и на работоспособность.
Что тут может пойти не так?
- криво скопирована ссылка vless
- скопирована ссылка и вставлена в какой-то промежуточный редактор с левой кодировкой
- после копирования ссылки меняются параметры на VPN-сервере, меняющие саму ссылку
- VPN-сервер, откуда вы получили vless ссылку уже заблокирован цензором
- Выбраны "плохие" параметры настройки VPN-сервера, по которым цензор умеет блокировать трафик автоматически
Без DNS-over-HTTPS (DOH) примерно половина запрещенных ресурсов не будет открываться, даже с настроенным VPN. Так как маршрутизация работает по IP, но чтобы получить IP домена, нужно сперва сходить к DNS серверу (читайте азы про работу интернета). По-умолчанию, используется DNS-сервер провайдера, который цензурирует все DNS-запросы, проходящие через него.
К примеру, вы в браузере открываете ресурс "https://instagram.com", браузер отправляется запрос на трансляцию домена instagram.com в IP адрес. DNS-запрос каскадно доходит до DNS-сервера провайдера (если ранее где-то не закешировано локально), в этом месте происходит цензура и вам в ответ возвращается фейковый IP-адрес, который ведёт на ресурс, вроде такого: "Извините, ресурс заблокирован на территории РФ". Более того, DNS провайдера может перхватывать незашифрованные DNS-запросы к другим внешним серверам.
Чтобы решить эту проблему, в Mikrotik нужно включить DOH, тогда провайдер не сможет расшифровать DNS-запросы.
# Установка доверенных сертификатов (необходимо для DOH)
/certificate/settings/set builtin-trust-anchors=trusted
# Сохранение адресов вышестоящего DNS сервера, чтобы его самого не резолвить из вне
/ip dns static
add type=A name=dns.google address=8.8.8.8
add type=A name=dns.google address=8.8.4.4
# Включение DOH
/ip dns set use-doh-server=https://dns.google/dns-query verify-doh-cert=yes doh-max-server-connections=100 doh-max-concurrent-queries=300 doh-timeout=10s
# Отключаем старые DNS настройки
/ip dhcp-client set numbers=0 use-peer-dns=no
/ip dns set servers="" allow-remote-requests=yes
Ниже представлены только некоторые популярные сервисы. Вы легко можете вносить в список для обхода любые свои домены (все поддомены автоматически будут попадать в туннель, поэтому их прописывать не обязательно).
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=instagram.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=facebook.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=cdninstagram.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=fbcdn.net
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtube.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=googlevideo.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=ytimg.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=ggpht.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=gvt1.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtube-nocookie.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=googleapis.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=gstatic.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=googleusercontent.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=l.google.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=yt.be
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtu.be
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtube.ru
add type=FWD match-subdomain=yes address-list=to_vpn_list name=withyoutube.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtubego.co.id
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtubego.co.in
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtubego.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=youtubemobilesupport.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=1e100.net
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=whatsapp.net
add type=FWD match-subdomain=yes address-list=to_vpn_list name=whatsapp.com
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=openai.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=chatgpt.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=oaiusercontent.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=oaistatic.com
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=jetbrains.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=jetbrains.ai
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=pornhub.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=pornhub.org
add type=FWD match-subdomain=yes address-list=to_vpn_list name=phncdn.com
/ip dns static
add type=FWD match-subdomain=yes address-list=to_vpn_list name=interactivebrokers.com.hk
add type=FWD match-subdomain=yes address-list=to_vpn_list name=interactivebrokers.com
add type=FWD match-subdomain=yes address-list=to_vpn_list name=interactivebrokers.ie
add type=FWD match-subdomain=yes address-list=to_vpn_list name=au10tixservices.com
(обновление от 15.03.2026)
Telegram особый сервис, относительно всех остальных - мобильные и десктоп клиенты не используют системный DNS для определения IP адреса узла назначения. Это особенность работы Telegram. Он получает IP адреса через какие-то внутренние механизмы работы, которые не раскрываются. Это значит, что добавление статичных DNS записей на роутере Mikrotik для туннелирования трафика к этим ресурсам бесполезно.
Но есть хорошие новости - Telegram публикует подсети своих IP адресов по адресу: https://core.telegram.org/resources/cidr.txt
Нам нужно просто загнать актуальный список напрямую в Address List. Обратите внимание, что подсети время от времени обновляются - за актуальнсотью списка нужно следить вручную или автоматизировать обновление через скрипт внутри Mikrotik. Если взять текущие подсети (на момент написания инструкции), то команды роутера Mikrotik будут выглядеть так:
/ip firewall address-list
add list=to_vpn_list comment=telegram address=91.108.56.0/22
add list=to_vpn_list comment=telegram address=91.108.4.0/22
add list=to_vpn_list comment=telegram address=91.108.8.0/22
add list=to_vpn_list comment=telegram address=91.108.16.0/22
add list=to_vpn_list comment=telegram address=91.108.12.0/22
add list=to_vpn_list comment=telegram address=149.154.160.0/20
add list=to_vpn_list comment=telegram address=91.105.192.0/23
add list=to_vpn_list comment=telegram address=91.108.20.0/22
add list=to_vpn_list comment=telegram address=185.76.151.0/24
/system backup save name=usb1/backup/with_vpn.backup