Поиск способа перенаправления приложения привязки портов через SOCKS

Я запускаю программу, которая связывает определенный порт на главном компьютере (под управлением Windows 10) за брандмауэром, и у меня нет разрешения на переадресацию портов напрямую через мою сеть . Вместо этого я пытаюсь перенаправить это соединение через внешний сервер (под управлением Debian) через туннель SOCKS, чтобы сделать его общедоступным.

Проблема, с которой я столкнулся, заключается в том, что я использую команду SSH, связывающую порт локально, что делает программу неспособной правильно привязать порт и правильно запуститься. (Изменить программу нельзя; она должна быть привязана.)

Я использую следующую команду через SSH для настройки туннеля SOCKS:

ssh -vg -D 8123 meself@[external IP]

Я подтвердил, что этот туннель работает, используя следующую команду curl , которая выгружает индексную страницу Google:

curl --socks5 127.0.0.1:8123 http://www.google.com/

Кроме того, netstat также показывает, что соединение активно:

netstat -t | grep "[external IP]"

TCP    [internal IP]   [external IP]:ssh    ESTABLISHED     InHost

Я пробовал использовать FreeCap для захвата трафика от программы на хосте и принудительного перенаправления через SOCKS, но похоже, это не работает. FreeCap указывает, что прокси-сервер работает, но программа все еще пытается локально привязать порт 8123.

Также стоит отметить, что программа написана на Java. Для выполнения программы на хосте я использую следующую команду:

java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8123 -jar [program .jar]

При указанных выше условиях при этом выдается сообщение об ошибке, что порт 8123 уже привязан.

Моя конечная цель - создать впечатление, будто программа, запущенная на моем главном компьютере, напрямую доступна с внешнего сервера, так что когда клиенты подключаются к серверу, они считают, что они подключены напрямую к программе на главном компьютере, а программа на главном компьютере считает, что подключена напрямую к клиентам.

Куда мне дальше идти? Можно ли это сделать без использования VPN?

(Примечание: у меня есть разрешение на обход брандмауэра таким образом.) (Также обратите внимание: я выбрал 8123 только в качестве примера порта.)

1
задан 2 November 2016 в 05:20
1 ответ

Если я правильно понимаю вашу проблему, вы хотите запустить программу (сервер) на машине 1. Эта программа прослушивает порт x, к которому нельзя получить доступ удаленно из-за некоторых правил брандмауэра. Теперь вы хотите обойти брандмауэр с помощью ssh-туннеля на машину 2 таким образом, чтобы удаленные клиенты могли подключаться к порту y на машине 2, который перенаправляется на порт x на машине 1.

Чтобы заархивировать это, вам нужен прослушивающий сокет на машине 2 через порт y, который перенаправляет все соединения на машину 1 и порт x.

Для этого с помощью ssh и его функции туннелирования / прокси-сервера SOCKS вы можете либо запустить ssh-соединение с параметром -L с машины 2 на машину 1 :

machine2# ssh -L portY:localhost:portyX user@machine1

или наоборот с параметром -R от машины 1 к машине 2 (убедитесь, что GatewayPorts включен на машине2):

machine1# ssh -R machine2:portY:localhost:portyX user@machine2

Конечно, порт x и порт y также могут быть одинаковыми. Я просто различил их, чтобы было понятнее.

См. Подробности на странице руководства ssh: https://linux.die.net/man/1/ssh

0
ответ дан 4 December 2019 в 05:39

Теги

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