An open API service indexing awesome lists of open source software.

https://github.com/kaurcev/node-tcp-proxy

[RU] Ничего более, чем простой, легковесный и надежный TCP-прокси (TCP-туннель) на Node.js без внешних зависимостей.
https://github.com/kaurcev/node-tcp-proxy

env example example-project nodejs simple-project tcp-proxy

Last synced: 6 days ago
JSON representation

[RU] Ничего более, чем простой, легковесный и надежный TCP-прокси (TCP-туннель) на Node.js без внешних зависимостей.

Awesome Lists containing this project

README

          

# node-tcp-proxy
Ничего более, чем простой, легковесный и надежный TCP-прокси (TCP-туннель) на Node.js без внешних зависимостей.

Предназначен для перенаправления (форвардинга) входящего сетевого трафика с одного порта на другой. Полезен для проброса локальных сервисов во внешнюю сеть, смены портов на лету или отладки сетевых соединений.

## Особенности

- **Zero dependencies**: Работает исключительно на встроенных модулях Node.js (`node:net`).
- **Стриминг данных**: Использование `Stream.pipe()` обеспечивает высокую скорость и встроенное управление нагрузкой памяти (backpressure).
- **Безопасность процесса**: Корректная обработка сетевых ошибок (`ECONNRESET` и др.) предотвращает падение приложения.
- **Environment Config**: Полная настройка через переменные окружения.

## Требования

- **Node.js** v20.6.0 или выше (для встроенной поддержки `.env` файлов).
*Если у вас старая версия Node.js, потребуется установить пакет `dotenv`.*

## Быстрый старт

### 1. Настройка окружения
Создайте файл `.env` в корневом каталоге проекта и укажите ваши порты:

```env
# Порт, который будет слушать прокси-сервер
LISTEN_PORT=3000
# Сетевой интерфейс (0.0.0.0 — принимать подключения отовсюду)
LISTEN_HOST=0.0.0.0

# Адрес и порт целевого сервиса, куда перенаправляется трафик
TARGET_HOST=127.0.0.1
TARGET_PORT=8080
```

### 2. Запуск

Запустите скрипт, передав файл настроек через встроенный флаг Node.js:

```bash
node --env-file=.env index.js
```

Успешный запуск выведет в консоль:
```text
Проброс запущен!
Входной порт: 0.0.0.0:3000 ===> Целевой сервис: 127.0.0.1:8080
```

## Как это работает под капотом

1. Сервер слушает подключения на `LISTEN_PORT`.
2. При подключении клиента создается параллельное соединение к `TARGET_PORT`.
3. Потоки данных связываются нативно в обе стороны: `client ⇄ proxy ⇄ target`.

## Лицензия

MIT. Свободно для использования и модификации.