1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tompeppa-fastnat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 14:36 dcd277b

FAST NAT: протокол для проникновения в локальную сеть

FAST NAT — это расширенная версия WeNAT, которая поддерживает такие протоколы, как HTTP, TCP, UDP и WebSocket.

Проще говоря, FAST NAT позволяет назначить компьютеру из локальной сети публичный IP-адрес и порт. Например: 123.1.1.1:8888 -> 192.168.1.123:3306.

Когда сервер получает данные на порт 8888, он перенаправляет их на порт 3306 компьютера из локальной сети. Это и есть проникновение через сервер. В отличие от прямого соединения P2P, сервер выступает в роли посредника.

На заметку

Также можно разработать индивидуальное решение на основе P2P. Оно подойдёт для умного дома или сетевого хранилища (NAS) и позволит передавать файлы и управлять устройствами без участия сервера.

Контакты: QQ: 599194993; e-mail: newpanjing@icloud.com.

Онлайн-демоверсия 2.0

На основе этого решения мы разработали новую версию клиента для проникновения в локальную сеть. Весь исходный код доступен для покупки. Связаться с нами можно по QQ: 599194993.

Скачать клиент: https://nat.72wo.com

Поддерживаются операционные системы Windows, Linux, macOS, Raspberry Pi и командная строка.

Поддерживаемые протоколы

TCP, UDP, HTTP, HTTPS, WebSocket.

Сценарии использования

  • Публикация локального веб-сайта.
  • Удалённый доступ к рабочему столу.
  • Доступ к SSH на локальном сервере.
  • Подключение к MySQL на локальном компьютере.
  • Соединение с Redis на локальном устройстве.
  • Взаимодействие с MongoDB на локальном хосте.

Контакты: Группа QQ: 524948153; E-mail: newpanjing@icloud.com.

Язык разработки

Сервер и веб-сайт написаны на node.js, а клиент — на nw.js и node.js.

Протокол TCP и его процесс

Схема процесса

Процесс работы прокси для внутренней и внешней сети

  1. Внутренняя и внешняя сеть устанавливают канал протокола для активного подключения.
  2. Клиент из внешней сети подключается к серверу и получает идентификатор. Сервер сохраняет этот идентификатор.
  3. Сервер уведомляет клиента из внутренней сети о полученном идентификаторе. Клиент инициирует подключение.
  4. Клиент из внутренней сети подключается к прокси-серверу.
  5. Клиент из внутренней сети соединяется с сервером и передаёт идентификатор. Сервер связывает идентификатор с клиентом из внешней сети.
  6. Прокси-сервер сопоставляет сокеты внутренней и внешней сетей.

Обработка ошибок и разрывов соединения

Если одна из сторон сталкивается с ошибкой, все порты для прослушивания и все соединения закрываются. Клиент повторно инициирует запрос на соединение и может использовать случайный порт или продолжить использовать порт из предыдущего сеанса.

Интерфейс TCP

Типы протоколов

Протокол представлен в виде строки JSON.

Безопасность

При первом подключении к серверу требуется предоставить токен пользователя. После проверки подлинности сервер открывает два порта для последующего использования. В дальнейшем проверка не проводится. Хотя это создаёт риски безопасности, распространённые приложения TCP, такие как MySQL, MongoDB и Redis, имеют механизмы защиты на уровне пользователей.

Типы протоколов

Тип
TCP
UDP
HTTP
WebSocket

Подключение к коммуникационному серверу

После успешного подключения к порту 8888 на коммуникационном сервере будет отправлен ответ со следующей информацией:

Поле Тип Описание
id string(8) Идентификатор текущего сеанса
outId string(8) Идентификатор сеанса внешней сети
intPort int(5) Порт для подключения к внутренней сети (от 30000 до 65535)
outPort int(5) Порт внешней сети
command string Команда операции
protocol string [Тип протокола](#Типы протоколов)

Пример ответа:

{
  id: 'CucfFpk7',
  intPort: 61289,
  outPort: 59918,
  command: 'start_proxy',
  outId: 'GpNYO5KW'
}

Инициация подключения к серверу

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

Поле Тип Описание
outId string(8) Идентификатор внешней сети

Пример запроса:

{
  outId: 'GpNYO5KW'
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/tompeppa-fastnat.git
git@api.gitlife.ru:oschina-mirror/tompeppa-fastnat.git
oschina-mirror
tompeppa-fastnat
tompeppa-fastnat
master