Вопрос или проблема
У меня есть ситуация, когда мы пытаемся получить данные из одной сети в другую – конкретно доступ к частному репозиторию maven в другой сети.
Сеть 1 содержит репозиторий maven. И сеть защищена несколькими SSH-прыжками, где проброс портов отключен на sshd
.
-
[Ноутбук], запускающий контейнер Docker с VPN в другую сеть
laptop
- Контейнер Docker
vpn
- Контейнер Docker
-
[Jumpbox]
jumpbox.vpn.network.org
-
[Сервер]
server.vpn.network.org
Мы успешно запустили vscode-server на сервере и подключаемся через:
socat tcp-listen:8080,fork EXEC:"ssh server.vpn.network.org nc localhost 8081"
Это позволяет ноутбуку обращаться к localhost:8080
, и он туннелирует трафик в наш server.vpn
, который затем проходит через netcat и перенаправляет трафик на сервер vscode
Я предполагаю, что должно быть возможно сделать наоборот, но я застрял.
Цель состоит в том, чтобы запустить Socks5
прокси на ноутбуке через что-то такое, как
ssh -f -N -D 54321 localhost
А затем выполнить вызов socat в server.vpn.network.org
и используя переменные окружения socks, я мог бы запустить maven и проксировать его обратно через соединение и т. д.
Мой подход заключался в том, чтобы попробовать следующее:
socat -v TCP:localhost:54321 EXEC:"ssh server.vpn.network.org nc -lkv localhost 54321"
Это “вроде” работало, но постоянно разрывало соединение.
Затем я попробовал комбинацию fork
и reuseaddr
, и они, похоже, не решили проблему.
Мой следующий подход заключался в рассмотрении unix-сокетов или чего-то необычного – но я wonder есть ли кто-то, кто знает, как это заставить работать.
Спасибо.
Я не уверен, что понимаю вашу настройку и что вы хотите достичь. Если я прав, вы можете заменить первый пример на:
ssh -L 8080:localhost:8081 server.vpn.network.org
а решение для обратного – это:
ssh -R 54321:localhost:54321 server.vpn.network.org
Ответ или решение
Обзор ситуации
Вы находитесь в ситуации, когда необходимо получить доступ к приватному репозиторию Maven, находящемуся в другой сети, и у вас есть несколько SSH-хопов, где перенаправление портов отключено. У вас установлены следующие компоненты:
- [Локальный компьютер] с установленным Docker-контейнером, который подключается к VPN другой сети.
- [Jumpbox] с адресом
jumpbox.vpn.network.org
. - [Сервер] с адресом
server.vpn.network.org
.
Вы уже успешно настроили vscode-server
на сервере и используете команду socat
для проброса трафика:
socat tcp-listen:8080,fork EXEC:"ssh server.vpn.network.org nc localhost 8081"
Теперь ваша задача состоит в том, чтобы выполнить обратный туннелинг, используя socat
, чтобы запустить Socks5-прокси на локальном компьютере и проксировать соединения через server.vpn.network.org
для доступа к вашему мaven-репозиторию.
Решение
Шаг 1: Настройка Socks5-прокси
Для начала вам нужно создать Socks5
прокси на вашем локальном компьютере:
ssh -f -N -D 54321 localhost
Эта команда создает прокси на порту 54321
, который будет прослушивать соединения.
Шаг 2: Настройка обратного туннелинга с помощью socat
Следующим шагом будет настройка socat
для создания обратного туннеля, который будет пересылать трафик от server.vpn.network.org
обратно к вашему локальному прокси. Вместо использования соединения nc
непосредственно, мы можем использовать socat
с правильными параметрами:
socat TCP-LISTEN:54321,fork,reuseaddr EXEC:"ssh -D 54321 -N server.vpn.network.org"
Объяснение команд
TCP-LISTEN:54321
: Эта часть открывает TCP-порт54321
на локальном компьютере и ожидает входящих соединений.fork
: Позволяет создавать новый процесс для каждого входящего соединения, что позволяет использовать нескольких клиентов.reuseaddr
: Позволяет повторно использовать адреса сокета, что особенно полезно, если вы столкнулись с ошибкой "адрес уже используется".EXEC
: Запускает заданную команду, в данном случаеssh -D 54321 -N server.vpn.network.org
, которая будет обрабатывать трафик как Socks5-прокси.
Шаг 3: Настройка Maven для использования Socks5-прокси
После того как вы настроите socat
, используйте переменные окружения в своем проекте Maven для настройки прокси:
export MAVEN_OPTS="-Dhttp.proxyHost=localhost -Dhttp.proxyPort=54321 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=54321"
Решение проблем
Если вы столкнулись с проблемами, которые описывают обрывы соединений, возможно, необходимо убедиться, что на вашем сервере KeepAlive
активирован и правильно настроен:
- Проверьте настройки SSH на
server.vpn.network.org
, чтобы убедиться, чтоClientAliveInterval
иClientAliveCountMax
выставлены на значения, позволяющие поддерживать активные соединения. - Убедитесь, что в
socat
параметрыfork
иreuseaddr
используются правильно, чтобы избежать конфликтов и повторного использования портов в случае неожиданных отключений.
Заключение
Ваше решение должно включать создание Socks5
прокси на локальном компьютере и настройку socat
для проброса соединений обратно через server.vpn.network.org
. Убедитесь, что все сетевые настройки и параметры SSH обеспечивают надежное соединение, что должно позволить вам легко получить доступ к вашему Maven репозиторию.