Могу ли я использовать nc и / или stunnel для создания прозрачного SSL-прокси, чтобы я мог указать исходящий исходящий порт?

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

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

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


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

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

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

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

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


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

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= вариант.

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