Я немного поигрался с разными вариациями и не могу найти то, что вполне работает.

Я хочу иметь возможность «соединить» соединение SSL через определенный узел шлюза в сети. В частности, я хочу дополнительно иметь возможность контролировать исходящий порт источника для соединения TCP.

Я могу использовать stunnel для части этого - для моста SSL-соединения. Я знаю, что могу использовать nc чтобы установить исходный порт для соединения, но как я могу соединить эти два вместе, чтобы позволить указать исходный порт для исходящего соединения? (Или здесь есть альтернативное решение, которое я должен рассмотреть?)


Я чувствую, что если я смогу заставить nc работать как прозрачный прокси, это будет хорошо, так как я могу установить порт источника с ним. Я чувствую, что могу просто что-то упустить из-за того, как работает nc . Просто для того, чтобы предоставить немного больше контекста, вот что я пытаюсь. Предположим, у меня есть сервер SSL, работающий локально на 1235. Я хочу подключиться к нему с помощью клиента SSL, но я хочу убедиться, что мой исходящий исходный порт для подключения всегда, скажем, 1234. (Я могу подключиться напрямую к клиенту, но у меня есть произвольный порт с большим номером; мне нужно иметь возможность его указать.)

Моя мысль пыталась использовать nc в качестве моста, с чем-то вроде:

# nc -l localhost:1234 | nc localhost:1235

Это , безусловно , устанавливает прокси - серверов что - то - я вижу трафик , проходящий между правым конечными точками - но это , кажется, не справиться с SSL очень хорошо на всех. Безопасная связь не будет установлена, и я не могу на самом деле общаться между ними, используя клиент / сервер openssl.

Что мне нужно сделать, чтобы это заработало? Я попытаюсь определить, может ли stunnel помочь мне здесь; Я думал, что между ними я смогу заставить это работать.


Хорошо, я немного поиграл с socat , который, кажется, соединяет соединение - но я не могу понять, как указать исходный порт. Какие-нибудь мысли?

1 ответ1

1

Трубы, используемые | являются односторонними. Когда вы запускаете nc | nc , выход второго соединения идет на ваш терминал ; вход первого соединения читается с клавиатуры. По сути, полная форма будет </dev/tty nc | nc >/dev/tty .

Чтобы создать двунаправленный туннель, вам придется использовать что-то еще, например ...

socat tcp-l:localhost:1234 tcp:localhost:1235

(Или создайте именованный канал и используйте его с двумя nc , но это менее эффективно.)


Тем не менее, это не будет делать то, что вы хотите. 1234 не станет исходным портом второго соединения; он будет использоваться только в качестве порта назначения первого соединения, и эти два соединения не связаны: stunnel просто получает байты от обоих соединений и отправляет их на противоположный конец.

Если вы хотите просто указать исходный порт соединения, это проще:

nc -l 56789 localhost 1235

socat stdio tcp:localhost:1235,sourceport=56789

Поскольку у stunnel нет опции "локальный порт", вы можете взять одну из вышеперечисленных команд и использовать ее в опции exec= .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .