Обзор подхода
MikroTik не поддерживает VLESS нативно — протокол реализуется через контейнер Mihomo (Clash Meta), запущенный прямо на роутере. Mihomo открывает смешанный порт 1080 (SOCKS5 + HTTP) и порт прозрачного прокси 7893 (TProxy). RouterOS перехватывает нужный трафик и перенаправляет его в контейнер.
Данная статья является продолжением руководства по установке контейнера Mihomo. Предполагается, что контейнер уже установлен, запущен и доступен по адресу 192.168.254.3.
Схема работы
- Трафик локальной сети → MikroTik Mangle → метка маршрута
use-proxy - Трафик с меткой → таблица маршрутизации → шлюз
192.168.254.3:7893(TProxy Mihomo) - Mihomo → VLESS-сервер → интернет
- Выборочная маршрутизация: только IP/домены из Address List проходят через VLESS, остальное — напрямую
Шаг 1 — Настройка переменных Mihomo
В переменных окружения контейнера укажите VLESS URI серверов. Используйте инструмент VLESS Конвертер для формирования корректной строки URI.
/container envs
add list=MIHOMO key=SRV1 value="vless://uuid@host:443?encryption=none&security=reality&fp=chrome&sni=www.example.com&pbk=PUBLIC_KEY&sid=SHORT_ID&type=tcp&flow=xtls-rprx-vision#Server1"
add list=MIHOMO key=SRV2 value="vless://uuid@host2:443?encryption=none&security=reality&fp=firefox&sni=www.example2.com&pbk=PUBLIC_KEY2&sid=SHORT_ID2&type=tcp&flow=xtls-rprx-vision#Server2"
add list=MIHOMO key=LOG_LEVEL value="error"
add list=MIHOMO key=UI_SECRET value="yourStrongPassword"
add list=MIHOMO key=EXTERNAL_UI_URL value="https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip"
Шаг 2 — Включить TProxy-порт в Mihomo
По умолчанию TProxy-порт 7893 уже включён в образе wiktorbgu/mihomo-mikrotik. Если используется кастомный конфиг, добавьте в config.yaml:
mixed-port: 1080
tproxy-port: 7893
allow-lan: true
bind-address: '*'
mode: rule
log-level: error
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.0/15
nameserver:
- 1.1.1.1
- 8.8.8.8
proxies:
- name: "Server1"
type: vless
server: host
port: 443
uuid: "uuid"
network: tcp
tls: true
flow: xtls-rprx-vision
reality-opts:
public-key: "PUBLIC_KEY"
short-id: "SHORT_ID"
client-fingerprint: chrome
servername: www.example.com
proxy-groups:
- name: "PROXY"
type: select
proxies:
- Server1
rules:
- MATCH,PROXY
Файлconfig.yamlразмещается в директории монтирования:/usb1/docker_configs/mihomo_mikrotik/config.yaml
Шаг 3 — Таблица маршрутизации для прокси
Создаём отдельную таблицу маршрутизации, которая направляет весь трафик через контейнер:
/routing/table add fib name=use-proxy
Маршрут по умолчанию в этой таблице — через IP контейнера:
/ip/route add dst-address=0.0.0.0/0 gateway=192.168.254.3 routing-table=use-proxy
Шаг 4 — Адресные списки (Address Lists)
Заносим IP-адреса и подсети, трафик к которым должен идти через VLESS. Можно добавлять домены — RouterOS разрешит их в IP автоматически.
/ip/firewall/address-list
add list=proxy-list address=8.8.8.8 comment="Google DNS"
add list=proxy-list address=8.8.4.4 comment="Google DNS"
add list=proxy-list address=1.1.1.1 comment="Cloudflare DNS"
add list=proxy-list address=1.0.0.1 comment="Cloudflare DNS"
add list=proxy-list address=youtube.com comment="YouTube"
add list=proxy-list address=googlevideo.com comment="YouTube CDN"
add list=proxy-list address=instagram.com comment="Instagram"
add list=proxy-list address=cdninstagram.com comment="Instagram CDN"
add list=proxy-list address=twitter.com comment="Twitter/X"
add list=proxy-list address=t.co comment="Twitter short"
add list=proxy-list address=twimg.com comment="Twitter media"
add list=proxy-list address=facebook.com comment="Facebook"
add list=proxy-list address=fbcdn.net comment="Facebook CDN"
add list=proxy-list address=telegram.org comment="Telegram"
add list=proxy-list address=149.154.160.0/20 comment="Telegram DC1"
add list=proxy-list address=91.108.4.0/22 comment="Telegram DC2"
add list=proxy-list address=91.108.56.0/22 comment="Telegram DC3"
add list=proxy-list address=91.108.8.0/22 comment="Telegram DC4"
add list=proxy-list address=95.161.64.0/20 comment="Telegram RU"
Список можно расширять в любое время без перезагрузки — правила применяются мгновенно.
Шаг 5 — Mangle: маркировка трафика
Правила Mangle перехватывают трафик к адресам из proxy-list и ставят метку маршрута use-proxy.
5.1 Маркировка трафика с локальных устройств (chain=prerouting)
/ip/firewall/mangle
add chain=prerouting dst-address-list=proxy-list in-interface-list=LAN action=mark-routing new-routing-mark=use-proxy passthrough=no comment="VLESS: route LAN to proxy"
5.2 Маркировка трафика самого роутера (chain=output)
/ip/firewall/mangle
add chain=output dst-address-list=proxy-list action=mark-routing new-routing-mark=use-proxy passthrough=no comment="VLESS: route router itself to proxy"
5.3 Исключить трафик самого контейнера (чтобы не зациклить)
/ip/firewall/mangle
add chain=prerouting src-address=192.168.254.0/24 action=accept place-before=0 comment="VLESS: skip container traffic"
Шаг 6 — NAT: REDIRECT для TProxy
Перенаправляем помеченный TCP/UDP трафик на TProxy-порт Mihomo:
/ip/firewall/nat
add chain=dstnat dst-address-list=proxy-list protocol=tcp in-interface-list=LAN action=dst-nat to-addresses=192.168.254.3 to-ports=7893 comment="VLESS TProxy TCP"
add chain=dstnat dst-address-list=proxy-list protocol=udp in-interface-list=LAN action=dst-nat to-addresses=192.168.254.3 to-ports=7893 comment="VLESS TProxy UDP"
Шаг 7 — Настройка DNS
Чтобы доменные имена из proxy-list правильно разрешались и попадали в IP-блокировку, направим DNS-запросы через Mihomo:
7.1 DNS роутера через Mihomo
/ip/dns set servers=192.168.254.3 allow-remote-requests=yes
7.2 Перехват DNS-запросов от клиентов
Клиенты, которые вручную указали сторонний DNS (например, 8.8.8.8), будут перенаправлены на роутер:
/ip/firewall/nat
add chain=dstnat protocol=udp dst-port=53 in-interface-list=LAN action=redirect to-ports=53 comment="Force DNS to router"
Шаг 8 — Проверка работы
8.1 Статус контейнера
/container/print detail
Статус должен быть running.
8.2 Проверка прохождения трафика
/tool/traceroute 8.8.8.8 count=3
Первый хоп должен уходить через 192.168.254.3 (контейнер), а не через WAN напрямую.
8.3 Просмотр активных соединений
/ip/firewall/connection/print where dst-address~"8.8.8"
8.4 Логи Mihomo
/log/print where topics~"container"
8.5 Проверка routing mark
/ip/firewall/mangle/print stats
Счётчик пакетов у правил use-proxy должен расти при обращении к адресам из списка.
Выборочный туннель по доменам (дополнительно)
Для автоматического добавления заблокированных доменов в proxy-list используйте скрипт на роутере, который загружает список из внешнего источника:
/system/script
add name="update-proxy-list" source={
:local url "https://your-blocklist-host/blocked.rsc"
/tool/fetch url=$url dst-path=blocked.rsc
/ip/firewall/address-list/remove [find list=proxy-list]
/import blocked.rsc
}
Запуск по расписанию — раз в сутки:
/system/scheduler
add name="update-proxy-daily" start-time=03:00:00 interval=1d on-event="/system/script/run update-proxy-list"
Полный туннель (все устройства через VLESS)
Если нужно пустить весь трафик через VLESS (а не только выборочный), замените правила Mangle — уберите фильтр по dst-address-list:
/ip/firewall/mangle
add chain=prerouting in-interface-list=LAN src-address=!192.168.254.0/24 action=mark-routing new-routing-mark=use-proxy passthrough=no comment="VLESS: full tunnel"
При полном туннеле убедитесь, что контейнер сам выходит в интернет не через таблицу use-proxy, иначе возникнет петля маршрутизации.
Устранение неполадок
Трафик не проходит через прокси
- Проверьте Mangle stats:
/ip/firewall/mangle/print stats— счётчики должны расти - Убедитесь, что
in-interface-list=LANсодержит ваш LAN-интерфейс:/interface/list/member/print - Проверьте маршрут:
/ip/route/print where routing-table=use-proxy
Петля маршрутизации (routing loop)
- Убедитесь, что правило исключения контейнера стоит первым в Mangle (place-before=0)
- Проверьте, что NAT-правило для Docker-подсети (
srcnat masquerade) не конфликтует с TProxy
DNS не работает
- Проверьте, что Mihomo слушает порт 53: войдите в веб-панель на
http://192.168.254.3:9090/ui/ - Попробуйте вручную:
/tool/dns-lookup 8.8.8.8 server=192.168.254.3
Контейнер падает при запуске
/log/print where topics~"container" limit=30
Часто причина — ошибка парсинга YAML-конфига (неверные отступы или CRLF-окончания строк).
Ссылки
- Установка контейнера Mihomo на MikroTik — предыдущая статья
- VLESS Конвертер — генерация URI и конфигов
- Документация Mihomo DNS
- Mihomo Proxy Providers
- MikroTik Mangle документация