Цель:
Я хочу выполнить максимально быструю передачу файлов по протоколу TCP между двумя машинами, находящимися за двумя разными NAT, в ситуации, когда публичный порт не может быть перенаправлен ни на одну из двух машин (локальные политики).
Приблизительные значения:
До сих пор я смог: 1) Настроить VPN с центральным публичным узлом, действующим как ретранслятор (OpenVPN), 2) Настроить ячеистую VPN для получения прямой связи между обеими машинами без ретранслятора (tinc). Затем VPN можно использовать для бесперебойной передачи данных через любой сторонний клиент/сервер передачи файлов (как будто обе машины находятся в одной локальной сети).
Проблема:
Линия между двумя машинами довольно нестабильна, и один поток TCP обычно достигает лишь крошечной доли доступной пропускной способности. Кроме того, инкапсуляция TCP поверх TCP вызывает дополнительные накладные расходы и, как известно, неэффективна для нестабильных линий. Поэтому я хотел бы установить прямую (без ретрансляции) и собственную линию трафика (без инкапсуляции VPN) между двумя машинами. Естественным выбором является фреймворк STUN, но я пришел к выводу, что для взаимодействия с публичным сервером STUN и достижения обхода NAT приложение должно быть скомпилировано с помощью специальных библиотек STUN и полагаться на специальные сокеты STUN вместо обычных сокетов. Это по сути означает, что каждый новый набор клиентских/серверных приложений с поддержкой STUN должен быть написан с нуля.
Вопрос:
Чтобы упростить процесс, мне интересно, возможно ли реализовать универсальный STUN-клиент, который в основном будет работать как демон на обеих машинах. Клиенты будут подключаться к публичному STUN-серверу для регистрации и запроса информации о других клиентах. Они также будут перенаправлять весь исходящий трафик с локального контролируемого порта на правильный IP/порт (конфигурация пользователя + информация STUN-сервера) для достижения другой машины. Это может позволить любому стороннему клиентскому/серверному приложению беспрепятственно открывать обычные TCP-сокеты (возможно, несколько) и устанавливать соединение с другой машиной (как если бы она находилась в той же локальной сети).
решение1
Можешь попробоватьSoftEther VPN
- это:
- Иметь довольно хороший
NAT Traversal
. - Позволяет настроить несколько
Listener Ports
.
На мой взгляд, это довольно хорошее программное обеспечение, которое может сэкономить вам массу работы...