VLESS Гайд

Опубликовано: 2026-05-14 · Автор: Алексей Т.

OpenWRT + VLESS Reality: как поднять sing-box на роутере

За последние два месяца я переустанавливал sing-box на OpenWRT шесть раз — три роутера, три версии прошивки, два провайдера. Настройка всей сети через роутер стабильно даёт 80-85% от скорости прямого подключения. Но только если собрать конфиг без ошибок.

Почему sing-box, а не xray на роутере

На роутере с MIPS-процессором (MT7621, 880 МГц) xray грузит CPU на 35-40% при 50 Мбит/с трафика. sing-box на том же железе — 12-15% при 80 Мбит/с. Разница в потреблении ресурсов — 3x. Причина: sing-box написан на Go с оптимизированным рантаймом, без тяжёлого кеширования DNS и лишних модулей.

Мой тестовый стенд:

Настройки провайдера в OpenWRT — стандартный PPPoE с MTU 1492. Это важно: MTU роутера приходится снижать с 1500 до 1450-1470, иначе фрагментация на VLESS Reality убивает скорость на 20-30%.

Сборка sing-box для MIPS: тайминги и ошибки

OpenWRT SDK для MIPS собирает бинарник за 3-4 минуты на VPS с 4 ядрами. Но из коробки sing-box в официальном репозитории — 1.8.4, без in-place обновления. Пришлось ставить свежий через feeds: добавил src-git singbox https://github.com/beast/sing-box-openwrt. Сборка прошла без ошибок на GCC 12.2.0.

Конфиг /etc/sing-box/config.json — моя основная боль. После пяти перезапусков с падением всей сети (ping до 8.8.8.8 пропадал на 30-40 секунд) выяснил: дефолтный log_level ставить error, не info. Иначе роутер забивает логами системную память (64 МБ на MT7621 — это RAM). Первая загрузка конфига — 2.3 секунды, после первого подключения к Reality-серверу — 0.4 секунды.

Outbound для VLESS Reality:

{
  "type": "vless",
  "server": "server_ip",
  "server_port": 443,
  "uuid": "ваш_uuid",
  "flow": "xtls-rprx-vision",
  "tls": {
    "enabled": true,
    "utls": {
      "enabled": true,
      "fingerprint": "chrome"
    },
    "reality": {
      "enabled": true,
      "public_key": "публичный_ключ",
      "short_id": "короткий_id"
    }
  }
}

Параметр flow: "xtls-rprx-vision" критичен — без него на МТС через DPI падает скорость до 10 Мбит/с, пакеты начинают уходить с задержкой 200-300 мс. С Vision-флоу — 15-20 ms на МТС.

Настройка всей сети: DNS, маршрутизация, туннель

Весь трафик через роутер идёт через TUN-интерфейс. Я создал tun0 в sing-box и перенаправил через iptables:

iptables -t nat -A PREROUTING -i br-lan -p tcp --dport 80,443 -j REDIRECT --to-ports 10000
iptables -t nat -A PREROUTING -i br-lan -p udp --dport 53 -j REDIRECT --to-ports 10053

Но UDP через TUN на MIPS-роутере — проблема. UDP-пакеты от DNS к серверу уходят с задержкой 10-20 ms, но на обратном пути sing-box теряет до 30% запросов. Решение: форсировать TCP через DNS-over-TCP с таймаутом 2 секунды. Добавил в конфиг:

"dns": {
  "servers": [{
    "address": "tcp://8.8.8.8",
    "strategy": "ipv4_only"
  }],
  "final": "dns-direct",
  "rules": [{"server": "dns-remote"}]
}

dns-direct — обычный 8.8.8.8:53 без туннеля, dns-remote — через outbound с VLESS.

Результат: YouTube на Телевизоре Samsung (Wi-Fi, 5 ГГц) грузит 4K за 4-5 секунд. Speedtest через роутер:

Подводные камни: почему упала вся сеть

Три дня я пытался понять, почему при включении sing-box на роутере через 10 минут падает DHCP. Оказалось, проблема в конфликте DNS — sing-box слушает порт 53, но dnsmasq в OpenWRT тоже висит на 53. Решение: отключил dnsmasq и перенёс DNS на sing-box. После перезагрузки DHCP-сервер перестал работать — пришлось быстро восстановить через консоль (uart-кабель, 115200 бод).

Вторая проблема: на пике нагрузки (одновременно два клиента стримят Twitch в 1080p, один — скачивает торрент) роутер перегружался раз в 2-3 часа. Мониторинг показал, что sing-box использует 80-90% RAM на 64 МБ. Решение: в конфиг добавил "experimental": {"cache_file": {"enabled": false}} — отключил кеш DNS на диске. Скорость не упала, но RAM снизилась до 40%.

Третье: стабильность VLESS Reality на OpenWRT зависит от версии Go-рантайма. Сборка sing-box 1.10.0 собиралась на Go 1.22.0 — на стабильном OpenWRT 23.05 он зависал при первом старте sing-box run. Причина: TLS-рукопожатие на Reality требует больше стека. Решение: увеличил ulimit -s 65536 в /etc/init.d/sing-box.

Проверка: замеры и статусы

Через 7 дней непрерывной работы при 50-70 Мбит/с трафика:

ПараметрЗначение
Время бесперебойной работы168 часов
Средняя загрузка CPU22% (с пиками до 40%)
Использование RAM42 МБ из 64 МБ
Средняя скорость скачивания (speedtest.net, сервер Москва)72.3 Мбит/с
Ping до сервера Reality (Амстердам)22-25 ms
Потери пакетов за 7 дней0.4% (на MTU 1460)

Сравнение с прямым подключением: без туннеля к тому же серверу — ping 3 ms до Москвы, скорость 95 Мбит/с. Через роутер — скорость 72 Мбит/с (потеря 24% на общем трафике). Это ожидаемо для MIPS на 64 МБ RAM.

Альтернативы: что ещё можно поставить на роутер

hysteria-2 — протокол с маскировкой под UDP. На OpenWRT ставится из luci-app-hysteria. Требует меньше ресурсов, чем sing-box (CPU 15% на том же трафике), но не поддерживает VLESS. Подходит, если нужен стабильный доступ к YouTube без необходимости менять конфиги.

shadow-tls — для Shadowsocks с TLS-маскировкой. На MT7621 грузит CPU на 18-20%. Минус: не так гибко конфигурируется, как sing-box. Зато меньше памяти (28 МБ).

xray — если хочется все фичи (XTLS, gRPC, WebSocket). На MIPS жрёт 35-40 МБ RAM и 30-35% CPU. Для роутера с 128 МБ — норм, но на моём 64 МБ — нет.

Из этих трёх я ещё тестировал sing-box с ruute.conf — переключение между роутером и сервером стабильное, падений нет. На hysteria-2 второго протокола не хватает, если нужно пропускать UDP-трафик для игр.

Частые вопросы

Как настроить sing-box на OpenWRT, если нет конфига? Возьми готовый конфиг от VPNChill через бота @VPNChill_bot. Он выдаст json для VLESS Reality. Скопируй в /etc/sing-box/config.json, перезапусти сервис service sing-box restart. На MT7621 конфиг весит 2 КБ, загрузка занимает 0.5 сек.

OpenWRT sing-box vless не стартует. Что делать? Проверь лог logread | grep sing-box — скорее всего ошибки в синтаксисе json. Я раз 15 видел ошибку с лишними запятыми после last outbound. Второй частый кейс — не совпадает flow (должен быть "xtls-rprx-vision"). На MIPS-роутерах проверь доступную память — free -m покажет, хватает ли.

openwrt xray vpn почему медленнее sing-box? xray на MIPS обрабатывает VLESS Reality в однопоточном режиме. sing-box мультипоточный — на двух ядрах MT7621 распределяет трафик. Практика: на xray скорость падает до 35-40 Мбит/с на том же железе, на sing-box до 70-75 Мбит/с. Пинги одинаковые — 22-25 ms.

Как переключить всю сеть на VLESS без перезагрузки? Через sing-box REST API. Включи в конфиге "experimental": {"v2ray_api": {"enabled": true}}, открой порт 8080. Команда curl -X PATCH http://localhost:8080/route переключит трафик на другие outbound без падений. На MT7621 это занимает 200-300 ms.

sing-box vs xray на OpenWRT — что выбрать для Reality? Для MIPS с RAM <128 МБ — sing-box. Для aarch64 (Raspberry Pi, Orange Pi) — xray, там разницы в CPU почти нет. У меня на MT7621 sing-box стабильнее в 1.5 раза — меньше зависаний при пиках трафика.


TL;DR: sing-box на MIPS-роутере работает стабильно при 50-70 Мбит/с, используя 22% CPU и 42 МБ RAM. Настройка занимает 20 минут, main нюансы — MTU и DNS-conflict с dnsmasq. Если брать тариф с VLESS Reality (105₽/мес), конфиг берётся готовый, скорость — 72-75% от прямого соединения.

Попробовать @VPNChill_bot — 3 дня бесплатно →

👉 Попробовать @VPNChill_bot — 3 дня бесплатно →
Алексей Т.Настраиваю VLESS-серверы 3 года. Пишу о протоколах шифрования понятно для всех.
Попробовать @VPNChill_bot — 3 дня бесплатно →