Главная Проекты Статьи 🔑 Генератор паролей ⚡ VLESS Конвертер Контакты
← Все статьи
MikroTik

Настройка маршрутизации VLESS на MikroTik через Mihomo

Обзор подхода

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-окончания строк).

Ссылки