Использование обратного туннеля для доступа к URL, который не доступен напрямую

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

У меня есть следующая сеть:

 ___________          ___________          ===========================
|   HostA   |        |   HostB   |        || www.internetservice.com ||
|-----------| <===== |-----------| =====> ||=========================||
|10.11.12.13|        |66.77.88.99|        ||    151.141.12.10:123    ||
|___________|        |___________|         ===========================
  • HostB может получить доступ к HostA (например, ping 10.11.12.13 выполняется успешно)
  • HostB может получить доступ к www.internetservice.com на 151.141.12.10:123 (например, telnet www.internetservice.com 123 и telnet 151.141.12.10 123 выполняются успешно)
  • HostA не может получить доступ к HostB (например, ping 66.77.88.99 не выполняется)
  • и, конечно, HostA не может получить доступ к www.internetservice.com на 151.141.12.10:123 (telnet www.internetservice.com 123 и telnet 151.141.12.10 123 также не выполняются)

Конечно, я хочу сделать так, чтобы интернет на 151.141.12.10:123 был доступен с HostA!

У меня уже есть решение, но оно мне не совсем подходит; я хотел бы чего-то лучше. Моё решение — создать с HostB обратный SSH туннель на HostA к InternetService:

myuserB@HostB:~ ssh -N  -R 123:www.internetservice.com:123 myuserA@HostA

Таким образом, myuserA на HostA может открыть соединение с www.internetservice.com:123, выполнив:

myuserA@HostA:~ telnet localhost 123

Это работает нормально; почти идеально… кроме того, что я предпочёл бы выполнить

myuserA@HostA:~ telnet www.internetservice.com 123

или, по крайней мере

myuserA@HostA:~ telnet 151.141.12.10 123

Чтобы получить то, что я хочу, я пытался (безуспешно) инициализировать SSH туннель, выполнив

myuserB@HostB:~ ssh -N  -R www.internetservice.com:123:www.internetservice.com:123 myuserA@HostA

Я также пробовал

myuserB@HostB:~ ssh -N  -R 151.141.12.10:123:151.141.12.10:123 myuserA@HostA

но при этом я не могу выполнить telnet ни на www.internetservice.com:123, ни на 151.141.12.10 123 с HostA

Есть идеи, что мне делать?
Спасибо

Ответ или решение

Использование обратного туннелирования SSH для доступа к URL, недоступному напрямую

Ваша задача заключается в том, чтобы предоставить возможность удаленному хосту (HostA) получить доступ к Интернет-сервису, расположенному по адресу 151.141.12.10:123, через промежуточный хост (HostB), поскольку HostA не имеет прямого доступа к интернету. Вы уже настроили обратный SSH туннель, и это решение, безусловно, работает. Однако вам хотелось бы упростить доступ, позволив HostA непосредственно использовать URL-интерфейс Internet-сервиса.

Шаг за шагом: Как реализовать это решение

  1. Настройка обратного SSH туннеля:
    Основная команда, которую вы использовали:

    myuserB@HostB:~ ssh -N -R 123:www.internetservice.com:123 myuserA@HostA

    Это создает туннель, который перенаправляет трафик с порта 123 на HostA к интернет-сервису. Давайте разберем ваш запрос на более удобный доступ через URL.

  2. Обсуждение текущего подхода:
    Вы правильно настроили SSH туннель, но доступ к интернет-сервису происходит через localhost. Это означает, что вам необходимо локально подключаться, чтобы пройти через туннель. Поскольку вы хотите использовать внешний URL, можно использовать локальное перенаправление с использованием iptables или специальной настройки на HostA.

Альтернативное решение с использованием перенаправления DNS

Вместо использования отдельного порта для туннеля, вы можете настроить HostA для переадресации запросов, поступающих на www.internetservice.com. Это можно сделать следующим образом:

  1. Изменение файла hosts на HostA:
    В файле /etc/hosts на HostA добавьте следующую строку:

    10.11.12.13    www.internetservice.com

    Это перенаправит любой запрос к www.internetservice.com на локальный IP-адрес HostA, но через порт SSH туннеля.

  2. Настройка нового обратного туннеля:
    Затем выполните команду на HostB для создания нового обратного туннеля, используя более специализированное перенаправление:

    myuserB@HostB:~ ssh -N -R www.internetservice.com:123:www.internetservice.com:123 myuserA@HostA

    Важно: Убедитесь, что HostB может разрешать имена, и у него есть доступ к www.internetservice.com.

  3. Тестирование соединения:
    После изменения файла hosts и создания нового туннеля, вы можете использовать команду следующего вида на HostA:

    myuserA@HostA:~ telnet www.internetservice.com 123

    Это должно работать, если туннель настроен правильно.

Параллельные проверки и отладка

  • Убедитесь, что SSH-сервер на HostA настроен на разрешение обратных соединений.
  • Проверьте, нет ли брандмауэров или метрик безопасности, которые могут блокировать соединения на порту 123.
  • Используйте утилиты, такие как netstat или ss, чтобы убедиться, что туннель работает на нужном порту.

Заключение

Используя метод с изменением файла hosts и более правильным перенаправлением, вы сможете упростить доступ для HostA к требуемому интернет-сервису. Это решение не только позволяет использовать прямой доступ через URL, но и сохраняет текущую конфигурацию без значительных изменений.

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

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