Существующие решения для ретрансляции TCP
У меня есть сценарий, который требует использования TCP Relay. Прежде чем я решил написать что-то нестандартное, я хотел узнать, знает ли кто-нибудь о существующем программном обеспечении, которое может сделать это для меня.
У меня есть 2 устройства в отдельных сетях, которые не могут соединиться друг с другом. Давайте назовем их сетями A и B. Эти устройства должны обмениваться данными, и они могут делать это с помощью посредника в сети C. A может подключаться к C, а B может подключаться к C. C не может подключаться к A или B,
A -> C <- B
Идея заключается в следующем:
- A устанавливает TCP-соединение с C и просто ждет
- B устанавливает TCP-соединение с C, когда хочет что-то от A.
- C читает данные из B и отвечает ими на уже открытое соединение из A.
- A обрабатывает данные и отвечает на C, который передает B.
Есть ли существующий инструмент, который может это сделать?
1 ответ
Если ваш ретранслятор работает под управлением Linux или любой UNIX-подобной ОС, вы можете использовать socat
( http://www.dest-unreach.org/socat/, он входит в комплект во многих дистрибутивах Linux). В простейшей форме вы можете запустить реле с помощью чего-то вроде:
socat TCP4-LISTEN:12345 TCP4-LISTEN:54321
(где 12345
а также 54321
порты, на которых сервер прослушивает каждое соединение). Один из клиентов подключает один один порт, другой - к другому, а затем происходит обмен данными в обоих направлениях. Если один компьютер отправляет данные до того, как подключится другой, он буферизируется и отправляется после подключения.
См. Также здесь: socat connect-connect "прокси" два входящих TCP-соединения для предоставления службы с межсетевым экраном?,