socat connect-connect "прокси" два входящих TCP-соединения для предоставления службы с межсетевым экраном?

Я немного пытаюсь понять, как использовать socat (или подобный перенаправитель TCP-порта) для предоставления службы брандмауэра на ПК.

Вот сценарий: у меня есть серверный ПК, который будет действовать как прокси / перенаправитель прослушивания-прослушивания между двумя клиентскими машинами. На сервере может быть открыто столько портов брандмауэра, сколько необходимо, и он имеет общедоступный IP-адрес. На первом "клиенте" (как при установлении исходящего соединения с прокси-сервером), клиенте А, я размещаю службу на порту 4200. Этот ПК находится за брандмауэром, который разрешает только входящие TCP-соединения на основе предыдущего исходящего соединения. То же самое относится и к клиенту Брандмауэра, который находится позади.

Мне нужно, чтобы клиент B мог получить доступ к порту 42000 на клиенте A через прокси-сервер TCP, подключенный к Интернету. Проблема заключается в том, что я могу инициировать только исходящие TCP-соединения от клиента A. Как я могу перенаправить TCP-соединения через сервер, когда оба клиента ретранслятора находятся за брандмауэрами, которые разрешают только исходящие соединения? Пожалуйста, смотрите схему ниже и дайте мне знать, если разъяснения в порядке.

                  ------------
                 |   Server   |
                 |w/ public IP|
                  ------------
                 /            \
          {|<Firewall>|}    {|<Firewall>|}
                |                 |
          ----------          ----------        
         | Client A |        | Client B |
          ----------          ----------
       (hosting a service    (wanting to access
         on port 4200)         Client A port 4200)

Буду очень признателен за любые советы, спасибо.

2 ответа

Решение

Что-то вроде

На "Сервере":

socat TCP4-LISTEN:10000 TCP4-LISTEN:4200

На "Клиенте А"

socat TCP4:Server:10000 TCP4:localhost:4200

На "Клиенте Б"
Настройте клиент для подключения к серверу:4200

В качестве альтернативы, посмотрите на переадресацию порта SSH.

Вы также можете использовать PortFusion, который я изначально разработал лично для этого типа сценария, особенно для RDP.

  server> PortFusion                ] 10000        [
client-a> PortFusion 4200 localhost - 10000 server [ 4200

Теперь клиент-b может подключиться к серверу:4200 для RDP.

ВАЖНАЯ ЗАМЕТКА!!

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

Надеюсь, мой ответ может помочь.

Другие вопросы по тегам