Вопрос или проблема
Много онлайн-учебников объясняют, как настроить ssh для создания динамического прокси-сервера. В моем случае, используя только Plink, у меня возникли некоторые проблемы.
Контекст следующий: я хочу, чтобы весь мой трафик (HTTP, RDP и т.д.) с моего HOSTA
(Linux машина) перенаправлялся на HOSTB
(Windows машина).
Мои команды следующие:
[HOSTB – Windows машина]
plink.exe -N -D 127.0.0.1:8888 -P 22 REMOTEIP
plink.exe -N -R 2222:127.0.0.1:8888 -P 22 REMOTEIP
[HOSTA – Linux машина]
curl --socks5 127.0.0.1:2222 https://www.google.com
Все порты открыты (8888 на HOSTB и 2222 на HOSTA). Однако, кажется, что трафик выходит из HOSTA, но не из HOSTB. Я пробовал с разными программами и разными версиями соксов, проблема остается.
Я что-то упускаю?
Спасибо!
Это старый вопрос, но он продолжает возникать.
Как упоминалось в комментариях к вашему вопросу, ваши попытки приводят к динамическому перенаправлению порта на систему, из которой вы хотите инициировать связь (SOCKS клиент). И это не достигнет обратного динамического перенаправления порта, на которое вы надеялись.
Что вам нужно, это следующее:
plink.exe -N -R 2222:127.0.0.1:8888 -P 22 REMOTEIP
и
# когда локальный хост работает как SSH сервер
plink.exe -N -D 127.0.0.1:8888 -P 22 localhost
или
# когда локальный хост не имеет SSH сервера
plink.exe -N -D 8888 -P 22 PROXYSSHIP
или
# когда имеется выделенный SOCKS прокси-сервер
plink.exe -N -L 8888:SOCKSPROXYIP:SOCKPORT
Вы можете заменить localhost
на другой SSH сервер, который может делать динамическое перенаправление портов, или вы можете перенаправить трафик на SOCKS прокси-сервер. Но для достижения вашей цели, выбранный вами сервер должен находиться в сети, которую вы хотите проксировать.
Таким образом, проблема часто возникает, когда у вас нет SSH сервера в целевой сети, к которому вы могли бы подключиться. Например, localhost
не имеет работающего SSHd (сервера), и у вас нет учетной записи на другом сервере с поддержкой SSH в этой сети. Кроме того, если вы не знаете о каких-либо SOCKS прокси, обслуживающих эту сеть, ваши варианты значительно сокращаются.
Без SSHd, к которому можно подключиться, вы не сможете это сделать, потому что PLINK (0.63) — это клиент, который не имеет реализации SOCKS. Если бы вы использовали OpenSSH 7.6 или новее, то SSH клиент имеет функцию SOCKS, что означает, что вы могли бы подключиться обратно к своему клиентскому компьютеру с помощью команды…
ssh me@mine -R 1080 -N -f
… и SSH клиент будет действовать как прокси-сервер (не требуется отдельный прокси-сервер). Увы, это доступно только в инструментах, которые созданы с OpenSSH 7.6+, насколько я знаю.
Итак, вещи, которые вы могли бы попробовать, указаны ниже. 1, 2 и 3 работают с указанными выше изменениями, тогда как 4 и 5 требуют исследования.
- Вы могли бы установить SSH сервер на своем Windows клиенте и использовать
localhost
выше - Вы могли бы найти другой сервер в той же сети, что и ваш Windows клиент, к которому вы можете подключиться с помощью PLINK и запустить там свой SOCKS прокси.
- Вы могли бы найти существующий SOCKS прокси, который уже делает то, что вам нужно.
- Вы могли бы попробовать найти более позднюю версию PLINK, надеясь, что функция SOCKS была добавлена к ней, как в OpenSSH 7.6+
- Возможно, вы сможете использовать “Secure Socket Funneling”, но для этого потребуется настроить сервер где-то, до которого могут дойти как ваш SOCKS клиент, так и ваш Windows клиент, и потребуется запустить SSF клиент на вашем Windows клиенте. Я пока не делал этого сам, так что говорю без личного опыта.
Ответ или решение
Для реализации обратного динамического портового перенаправления с использованием только Plink, потребуется учесть несколько важных нюансов и возможных проблем. В вашем случае, задача состоит в том, чтобы перенаправить весь трафик (HTTP, RDP и т.д.) с машины HOSTA (Linux) на машину HOSTB (Windows). Рассмотрим детально, как это реализовать.
Понимание проблемы
Вы пытаетесь использовать Plink для создания обратного динамического порта, но сталкиваетесь с трудностями. Проблема, скорее всего, связана с неправильной настройкой команд и их последовательностью. Как уже упоминали в комментариях, ваши текущие команды не позволяют достичь нужного результата, так как для корректной работы SSH требуется наличие сервера.
Рассмотрим решение
-
Установка SSH-сервера на HOSTB (Windows):
Убедитесь, что на вашем Windows-машине установлен сервер SSH. Это может быть, например, OpenSSH для Windows или любое другое ПО, способное работать как SSH-сервер. При этом Plink будет использоваться как клиент для выполнения команд. -
Команды для Plink:
Для создания обратного динамического портового перенаправления используйте следующие команды:Для HOSTB:
plink.exe -N -R 2222:127.0.0.1:8888 -P 22 REMOTEIP
Объяснение:
-N
– не выполнять удаленные команды.-R 2222:127.0.0.1:8888
– это команда, которая перенаправляет порты: внешний порт 2222 на HOSTA будет направляться на 8888 на HOSTB.
Для HOSTA:
plink.exe -N -D 127.0.0.1:8888 -P 22 localhost
Объяснение:
-D 127.0.0.1:8888
– создание динамического SOCKS-прокси на localhost, который будет прослушивать 8888 порт.
-
Использование клиента cURL:
После настройки вы сможете использовать cURL на HOSTA для доступа к интернету через созданный прокси:curl --socks5 127.0.0.1:8888 https://www.google.com
Решение альтернативных проблем
Если вы не можете установить SSH-сервер на HOSTB или подключить другой SSH-сервер в той же сети, ваши варианты будут ограничены. Ниже приведены дополнительные альтернативы:
-
Использование существующего SOCKS-прокси: Постарайтесь найти работающий SOCKS-прокси на вашей сети, чтобы перенаправить трафик через него.
-
Поиск альтернатив Plink: Попробуйте найти версии Plink или SSH-клиента с поддержкой SOCKS, такие как более новые версии OpenSSH (7.6 и выше), если это возможно.
-
Использование Secure Socket Funneling (SSF): Это менее распространённый метод, который требует настройки собственного сервера и клиента SSF, что может быть довольно сложным, но это тоже один из возможных путей.
Заключение
Настройка обратного динамического портового перенаправления с использованием только Plink может быть сложной задачей, особенно из-за ограничений самого инструмента и возможных сетевых ограничений. Однако, следуя приведенным выше шагам, вы сможете добиться необходимого результата, если у вас есть доступ к соответствующим ресурсам и возможность их настройки.