Могу ли я использовать 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=
вариант.