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

1943
Joseph Weissman

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

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

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


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

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

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

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

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


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

0
Прозрачный прокси обеспечивает прокси без необходимости указывать настройки прокси в клиенте. Это то, что вы тоже хотите - вы не касаетесь этого в описании. Paul 12 лет назад 1
Я должен спросить * почему * указание порта источника требуется? Это очень необычно для TCP-соединений, особенно когда запрашиваемый порт является «произвольным». Если это требуется брандмауэром, то указанный брандмауэр следует выбросить. grawity 12 лет назад 0

1 ответ на вопрос

1
grawity

Трубы используются |односторонние. Когда вы запускаете 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=опции.

Похожие вопросы