При построении частных сетей часто возникает задача подключить маршрутизатор MikroTik к серверу с панелью 3x-ui по WireGuard и направить трафик через Xray.
Например, на MikroTik могут использоваться списки IP-адресов или доменов ресурсов, недоступных в вашем регионе или через вашего провайдера. Вместо организации VPN на каждом устройстве удобнее настроить домашнюю или офисную сеть таким образом, чтобы необходимый трафик автоматически направлялся в туннель.
В данной статье рассмотрим рабочую конфигурацию, в которой:
- на VPS установлен Debian 12 и панель 3x-ui;
- Xray использует TUN-интерфейс для перехвата трафика;
- MikroTik подключается к серверу по WireGuard;
- весь трафик, поступающий от MikroTik через WireGuard, автоматически перенаправляется в Xray TUN;
- Xray может отправлять трафик как напрямую в интернет, так и через вышестоящий сервер;
- собственный трафик сервера продолжает использовать стандартный маршрут провайдера.
Для тестирования использовался VPS от RUVDS
Схема работы
Локальная сеть
│
▼
MikroTik
│
│ WireGuard
▼
VPS + 3x-ui
Debian 12
│
▼
Xray TUN
(xray0)
│
┌────────────┴────────────┐
│ │
▼ ▼
Direct Outbound Proxy Outbound
(прямой выход) (вышестоящий сервер)
│ │
▼ ▼
Интернет Сервер в другой
стране
│
▼
Интернет
В этой схеме MikroTik выступает в роли клиента WireGuard.
Маршрутизатор принимает решение, какой трафик необходимо направить через VPN. Это может быть:
- весь интернет-трафик;
- только определённые IP-адреса;
- отдельные сервисы;
- списки ресурсов, сформированные по ASN;
- списки ресурсов, сформированные по географическому признаку.
После попадания пакетов в туннель WireGuard они поступают на сервер с 3x-ui, где Linux перенаправляет их в TUN-интерфейс Xray.
Далее Xray выполняет обработку трафика и в зависимости от правил маршрутизации может:
- отправить трафик напрямую в интернет через Direct Outbound;
- отправить трафик через вышестоящий сервер, расположенный в другой стране;
- использовать различные outbound-подключения для разных типов трафика.
Одним из преимуществ использования 3x-ui является возможность гибко управлять исходящими подключениями (Outbound). Это позволяет строить сложные многоуровневые схемы маршрутизации без изменения конфигурации MikroTik.
Почему не удалось использовать встроенный WireGuard в 3x-ui
Изначально задача казалась достаточно простой. В панели 3x-ui присутствует встроенный inbound WireGuard, который, согласно документации, должен позволять принимать трафик от клиентов и передавать его в систему маршрутизации Xray.
Поэтому первым вариантом решения было использование штатного WireGuard inbound непосредственно внутри Xray без установки отдельного WireGuard-сервера в Linux.
Однако на практике данный вариант так и не удалось заставить работать стабильно.
В ходе тестирования наблюдалась следующая картина:
- WireGuard-клиент успешно устанавливал соединение;
- обмен служебным трафиком происходил корректно;
- интерфейс создавался без ошибок;
- трафик клиентов не проходил через Xray должным образом;
- маршрутизация работала нестабильно или отсутствовала полностью.
Было потрачено значительное время на анализ документации Xray, 3x-ui и различных примеров конфигураций из открытых источников.
Также предпринимались попытки найти решение при помощи различных ИИ-ассистентов и специализированных технических сообществ.
К сожалению, найти рабочую конфигурацию, которая позволила бы использовать встроенный WireGuard inbound в сочетании с требуемой схемой маршрутизации через Xray, не удалось. Соединение устанавливалось, но логи были заполнены ошибками, а трафик корректно не маршрутизировался.
В результате было принято решение отказаться от встроенного WireGuard в Xray и использовать классический WireGuard Linux.
Такой подход имеет несколько преимуществ:
- WireGuard работает непосредственно в ядре Linux;
- проще выполнять диагностику через стандартные инструменты Linux;
- можно использовать Policy Based Routing;
- отсутствует зависимость от внутренней логики Xray.
После перехода на классический WireGuard задача была решена через отдельную таблицу маршрутизации Linux и перенаправление трафика в интерфейс xray0.
Именно эта конфигурация в итоге показала стабильную работу при длительной эксплуатации и многочисленных перезапусках сервисов.
Настройка сервера 3x-ui
Для реализации схемы понадобится VPS с Debian 12 и установленной панелью 3x-ui.
В нашем примере используются следующие параметры:
| Параметр | Значение |
|---|---|
| WireGuard сервер | 10.10.10.1/24 |
| MikroTik | 10.10.10.2/24 |
| Локальная сеть MikroTik | 192.168.88.0/24 |
| Интерфейс Xray TUN | xray0 |
| Таблица маршрутизации | 100 |
Предполагается, что WireGuard уже настроен и MikroTik успешно подключается к серверу.
Настройка TUN в 3x-ui
В панели 3x-ui необходимо создать входящий интерфейс TUN.
Основные параметры:
{
"tag": "tun-in",
"type": "tun",
"interface_name": "xray0",
"inet4_address": "172.19.0.1/30",
"auto_route": false,
"strict_route": false,
"stack": "system"
}
Ключевым параметром является:
"auto_route": false
В этом случае Xray не будет изменять системную таблицу маршрутизации. Управление маршрутами полностью остаётся на стороне Linux.
Такой подход позволяет избежать конфликтов с сетевой конфигурацией сервера и сохранить доступ к VPS даже при ошибках в настройке TUN.
Настройка WireGuard на сервере
Полная рабочая конфигурация WireGuard сервера выглядит следующим образом:
[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = ip addr add 172.19.0.1/30 dev xray0 2>/dev/null || true
PostUp = ip link set xray0 up 2>/dev/null || true
PostUp = ip rule add from 10.10.10.0/24 table 100 priority 100
PostUp = ip route add default dev xray0 table 100
PostDown = ip rule del from 10.10.10.0/24 table 100 priority 100
PostDown = ip route del default dev xray0 table 100
[Peer]
PublicKey = MIKROTIK_PUBLIC_KEY
AllowedIPs = 10.10.10.2/32,192.168.88.0/24
PersistentKeepalive = 20
Где:
SERVER_PRIVATE_KEY— приватный ключ сервера;MIKROTIK_PUBLIC_KEY— публичный ключ MikroTik;10.10.10.1— адрес WireGuard сервера;10.10.10.2— адрес интерфейса WireGuard на MikroTik;192.168.88.0/24— локальная сеть за MikroTik.
Если используется другой диапазон локальной сети, его необходимо заменить на соответствующий вашей конфигурации.
После запуска WireGuard создаётся отдельная таблица маршрутизации, через которую весь трафик от MikroTik отправляется в интерфейс xray0.
Важно понимать, что основной маршрут сервера не изменяется.
Трафик Debian продолжает идти через шлюз провайдера, а в Xray попадает только трафик, поступающий через WireGuard.
Проверить состояние туннеля можно командой:
wg show
При успешном подключении MikroTik в выводе будет отображаться peer, время последнего handshake и объём переданного трафика.
Проверка Policy Based Routing
Проверяем наличие правила:
ip rule
Ожидаемый результат:
100: from 10.10.10.0/24 lookup 100
Проверяем содержимое таблицы:
ip route show table 100
Результат должен быть следующим:
default dev xray0
Это означает, что любой пакет, пришедший от MikroTik по WireGuard, будет автоматически перенаправлен в Xray.
Настройка MikroTik
Создаём интерфейс WireGuard:
/interface wireguard
add name=wg-xray
Назначаем адрес:
/ip address
add address=10.10.10.2/24 interface=wg-xray
Добавляем peer сервера:
/interface wireguard peers
add interface=wg-xray \
public-key="SERVER_PUBLIC_KEY" \
endpoint-address=SERVER_IP \
endpoint-port=51820 \
allowed-address=0.0.0.0/0 \
persistent-keepalive=20s
После настройки WireGuard MikroTik может самостоятельно определять, какой трафик необходимо направлять через туннель. Разумеется это работает на основе Address-list
Например:
- ChatGPT;
- YouTube;
- Instagram;
- отдельные ASN;
- отдельные страны;
- любые заранее подготовленные списки IP-адресов.
В нашем случае маршрутизатор выступает точкой принятия решения, а сервер 3x-ui выполняет роль шлюза для выбранного трафика.
Особенность перезапуска Xray
Во время тестирования была обнаружена особенность работы TUN-интерфейса.
После перезапуска Xray интерфейс xray0 пересоздаётся, а маршрутизация WireGuard может перестать работать до повторной инициализации правил.
Для автоматического восстановления был использован вызов:
ExecStartPost=/bin/systemctl restart wg-quick@wg0
Команду можно выполнить вручную введя:
systemctl restart wg-quick@wg0
После запуска Xray WireGuard автоматически перезапускается и заново создаёт необходимые правила маршрутизации.
Такое решение показало стабильную работу после многочисленных тестов и перезагрузок сервера.
Проверка работы
На сервере можно убедиться, что пакеты поступают от MikroTik:
tcpdump -i wg0
Затем проверяем интерфейс Xray:
tcpdump -i xray0
Если настройка выполнена корректно, пакеты будут одновременно видны на обоих интерфейсах.
Это означает, что Linux успешно перенаправляет трафик WireGuard в TUN-интерфейс Xray.
Также полезно контролировать состояние туннеля командой:
wg show
Преимущества решения
Полученная схема обладает рядом преимуществ:
- не требуется устанавливать VPN-клиент на каждое устройство;
- вся логика маршрутизации сосредоточена на MikroTik;
- 3x-ui и Xray используются как шлюз для трафика, поступающего от MikroTik;
- локальный трафик сервера не затрагивается;
- легко масштабируется на несколько офисов, филиалов или домашних площадок;
- позволяет использовать сложные правила маршрутизации на основе списков IP-адресов, ASN и географических диапазонов;
- поддерживает одновременную работу нескольких outbound-подключений и гибкую маршрутизацию между ними.
Фактически получается полноценный шлюз селективной маршрутизации, в котором MikroTik принимает решение, какой трафик необходимо отправить через VPN, а Xray обеспечивает его дальнейшую обработку и доставку.
При этом нет необходимости настраивать каждое устройство в офисе или квартире отдельно — вся логика сосредоточена на маршрутизаторе.
Заключение
Несмотря на наличие встроенного WireGuard в 3x-ui, в данном сценарии наиболее стабильным решением оказалось использование классического WireGuard Linux в сочетании с Xray TUN и отдельной таблицей маршрутизации Linux.
Такой подход позволяет получить полностью управляемый шлюз для MikroTik, поддерживающий сложные сценарии маршрутизации, работу с географическими списками IP-адресов, ASN, а также возможность выбора между прямым выходом в интернет и маршрутизацией через вышестоящие серверы.
В результате получается надёжная и масштабируемая архитектура, которую можно использовать как дома, так и в корпоративной инфраструктуре.