SOCAT (только) обратный туннель

Вопрос или проблема

У меня есть ситуация, когда мы пытаемся получить данные из одной сети в другую – конкретно доступ к частному репозиторию maven в другой сети.

Сеть 1 содержит репозиторий maven. И сеть защищена несколькими SSH-прыжками, где проброс портов отключен на sshd.

  • [Ноутбук], запускающий контейнер Docker с VPN в другую сеть laptop

    • Контейнер Docker vpn
  • [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-хопов, где перенаправление портов отключено. У вас установлены следующие компоненты:

  1. [Локальный компьютер] с установленным Docker-контейнером, который подключается к VPN другой сети.
  2. [Jumpbox] с адресом jumpbox.vpn.network.org.
  3. [Сервер] с адресом 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 активирован и правильно настроен:

  1. Проверьте настройки SSH на server.vpn.network.org, чтобы убедиться, что ClientAliveInterval и ClientAliveCountMax выставлены на значения, позволяющие поддерживать активные соединения.
  2. Убедитесь, что в socat параметры fork и reuseaddr используются правильно, чтобы избежать конфликтов и повторного использования портов в случае неожиданных отключений.

Заключение

Ваше решение должно включать создание Socks5 прокси на локальном компьютере и настройку socat для проброса соединений обратно через server.vpn.network.org. Убедитесь, что все сетевые настройки и параметры SSH обеспечивают надежное соединение, что должно позволить вам легко получить доступ к вашему Maven репозиторию.

Оцените материал
Добавить комментарий

Капча загружается...