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

Я нашел множество вопросов и ответов о том, как создавать SSH-туннели, SSH-прокси или SSH-туннель через несколько переходов. Но я все еще не могу заставить это работать. Я считаю, что мой случай немного отличается от других. Позволь мне объяснить :

  • У меня нет SSH-доступа к серверу, на котором размещено веб-приложение (красная рамка), у него только внутренний IP-адрес.
  • У меня есть доступ к локальной коробке linux (оранжевой коробке), которая может попасть на сервер, на котором размещено веб-приложение.
  • Оранжевый ящик не имеет общедоступного IP-адреса (поэтому я не могу подключиться к нему по SSH из Интернета), но у него есть доступ к Интернету, и я могу выполнить SSH к серверу, расположенному в Интернете (например, подключиться к синему ящику). из оранжевой коробки).
  • У меня есть сервер Linux в Интернете с публичным IP-адресом (синий ящик).

Я безуспешно пробовал разные вещи, но честно говоря, заблудился.

Будет ли кто-нибудь достаточно, чтобы просветить меня? :-)

1 ответ1

0

Это команда для оранжевого компьютера:

ssh -N -R:<chosen-port>:10.0.0.101:<web-app-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>

(Как заставить его пережить свой выход из оранжевого - это отдельная проблема. Увидеть это ; или tmux/screen , disown или nohup с пользовательским скриптом.)

Приведенная выше команда заставляет SSH-сервер на синем прослушивать выбранный (TCP) <chosen-port> по интерфейсу обратной связи. Входящие соединения будут туннелированы на оранжевый и отправлены на 10.0.0.101:<web-app-port> (т.е. красный) оттуда. Это создает туннель без выполнения команды или оболочки на синем (благодаря опции -N).

Есть способ заставить синий слушать на другом (не шлейфовом) интерфейсе, но это не рекомендуется из-за безопасности; эта опция может даже быть отключена на синем (объяснено в man ssh , опция -R ).

Чтобы добраться до синего интерфейса обратной связи с вашего зеленого домашнего компьютера, используйте другой туннель. По зеленому:

ssh -N -L:<chosen-port-2>:127.0.0.1:<chosen-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>

Теперь вы должны быть в состоянии добраться до красного с зеленого по адресу:

127.0.0.1:<chosen-port-2>

<chosen-port> и <chosen-port-2> могут совпадать или не совпадать, это действительно не имеет значения. Важно то, что вы должны выбирать высокие порты (от 1024 до 65535).


Разница между туннелями -L и -R :

  • -L слушает на локальной стороне, т.е. там, где вы вызываете ssh ;
  • -R слушает на удаленной стороне, т. Е. Где вы ssh .

Зная это, вы сможете проследить, что мы только что сделали. Обратите внимание, что мы создали туннели, движущиеся в сторону зеленого, потому что (для меня) это казалось более логичным, чтобы работать таким образом. Ваше соединение будет идти с зеленого цвета, поэтому давайте проследим весь маршрут в этом направлении. Это выглядит следующим образом:

  1. Клиент SSH на зеленом слушает 127.0.0.1:<chosen-port-2> из-за второго туннеля.
  2. Он пересылает пакеты на SSH-сервер синего цвета, который отправляет их на номер 127.0.0.1:<chosen-port> . С голубой точки зрения это локальные пакеты, генерируемые сервером SSH.
  3. Тот же сервер SSH прослушивает этот порт из-за первого туннеля. Сервер захватывает пакеты и перенаправляет их на оранжевый .
  4. Клиент SSH на оранжевом отправляет пакеты на красный . С красной точки зрения пакеты от оранжевого, он ничего не знает ни о синем, ни о зеленом .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .