Как пробросить порты через NAT и не сойти с ума от тормозов

03 Jun, 2026

Репозиторий давно не обновлялся

Последнее обновление было 9 месяцев назад.

Знакомая ситуация: у вас есть сервис на локальной машине или в домашней сети, к которому нужно достучаться извне, но мешает «серый» IP, NAT провайдера или злой корпоративный файрвол. Обычно в таких случаях вспоминают про SSH-туннели или классический ngrok. Но если данных много, а соединений — тысячи, эти решения начинают безбожно тормозить или съедать ресурсы.

Недавно наткнулся на интересный проект на Go под названием Backhaul. Это инструмент для реверс-туннелирования, который авторы затачивали именно под высокую нагрузку и производительность. Пока у проекта меньше тысячи звезд, но технически он выглядит очень бодро.

Что умеет Backhaul

Если вкратце, это клиент-серверное приложение. Вы ставите серверную часть на VPS с «белым» IP, а клиентскую — внутри вашей сети. Клиент стучится к серверу, и они создают устойчивый туннель, через который можно пробрасывать любые порты.

Меня зацепило то, сколько внимания разработчики уделили протоколам. Здесь нет просто «туннеля», здесь есть выбор из шести вариантов транспорта:

  • Обычный TCP и UDP.
  • Мультиплексированные TCP и WebSocket (smux).
  • Шифрованные WSS (WebSocket Secure).

Кстати, про мультиплексирование. Если вам нужно гонять сотни мелких запросов, создавать под каждый отдельное TCP-соединение накладно. Backhaul умеет упаковывать множество логических потоков в одно физическое соединение. Это сильно экономит ресурсы на установку связи.

Реклама

Главные фишки, которые упрощают жизнь

В README проекта много конфигов, но если выжать суть, то вот что делает инструмент полезным:

UDP поверх TCP. Это отличная штука для нестабильных сетей. Backhaul берет UDP-трафик, упаковывает его в TCP-пакеты и отправляет через туннель. Так мы получаем встроенный контроль перегрузок и гарантию доставки там, где обычный UDP просто потеряется.

Горячая перезагрузка. Можно менять config.toml прямо на лету. Не нужно убивать процесс и обрывать текущие соединения — сервис подхватит изменения без перезапуска. Для продакшена или активно меняющейся среды это маст-хэв.

Встроенный веб-интерфейс. Можно поднять мониторинг на отдельном порту и в реальном времени смотреть, сколько трафика улетает и сколько соединений сейчас активно.

Сниффинг трафика. Если что-то идет не так (а в туннелях это бывает часто), можно включить логирование сетевой активности прямо в конфиге. Все данные полетят в JSON-файл для дальнейшего разбора.

Как это настраивается

Конфигурация здесь на TOML, и она довольно подробная. Интересно, что разработчики вынесли в конфиг даже такие низкоуровневые вещи, как размер буфера сокета (so_rcvbuf, so_sndbuf) и MSS. Это намекает на то, что проект делали люди, понимающие, как работает сеть под нагрузкой.

Серверная часть настраивается примерно так:

[server]
bind_addr = "0.0.0.0:3080"
transport = "tcpmux"
token = "придумайте_сложный_токен"
web_port = 2060

# А вот так пробрасываются порты
ports = [
    "443-600",             # Диапазон портов
    "8080=127.0.0.1:80"    # Конкретный маппинг
]

На стороне клиента указываем адрес сервера и тот же тип транспорта. Если используете WebSocket, можно даже указать edge_ip для работы через CDN, что часто помогает обходить особо хитрые ограничения.

Нюансы и детали

Проект написан на Go, так что бинарник получается статическим и заводится везде — от Raspberry Pi до мощных серверов. Установка сводится к скачиванию файла из релизов или go build.

Из того, что стоит учитывать:

  1. Документация в основном в README. Она подробная в плане конфигов, но архитектурных подробностей маловато. К счастью, код на Go читается легко.
  2. Лицензия AGPL-3.0. Если решите встроить это в свой закрытый продукт, будьте осторожны.
  3. Проект активно развивается, и автор даже принимает донаты в TRX, что характерно для разработчиков из определенных регионов, где другие способы оплаты ограничены.

Кому стоит попробовать

Backhaul подойдет тем, кому тесно в рамках стандартных туннелей. Если вам нужно пробросить не один порт для дебага, а построить инфраструктуру для связи десятка офисов или домашних серверов с мониторингом и гибким управлением трафиком — это оно.

Особенно полезным проект будет в сценариях, где важна скорость: например, для передачи видеопотоков или работы баз данных через туннель. Мультиплексирование и тонкая настройка TCP-стека тут дают заметный профит.

Посмотреть исходники и скачать бинарники можно в репозитории Musixal/Backhaul. Там же в папке benchmark лежат результаты тестов производительности, если цифры вам важнее слов.