Вопрос или проблема
У меня есть следующая сеть:
___________ ___________ ===========================
| 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-сервиса.
Шаг за шагом: Как реализовать это решение
-
Настройка обратного SSH туннеля:
Основная команда, которую вы использовали:myuserB@HostB:~ ssh -N -R 123:www.internetservice.com:123 myuserA@HostA
Это создает туннель, который перенаправляет трафик с порта 123 на HostA к интернет-сервису. Давайте разберем ваш запрос на более удобный доступ через URL.
-
Обсуждение текущего подхода:
Вы правильно настроили SSH туннель, но доступ к интернет-сервису происходит черезlocalhost
. Это означает, что вам необходимо локально подключаться, чтобы пройти через туннель. Поскольку вы хотите использовать внешний URL, можно использовать локальное перенаправление с использованиемiptables
или специальной настройки на HostA.
Альтернативное решение с использованием перенаправления DNS
Вместо использования отдельного порта для туннеля, вы можете настроить HostA для переадресации запросов, поступающих на www.internetservice.com. Это можно сделать следующим образом:
-
Изменение файла hosts на HostA:
В файле/etc/hosts
на HostA добавьте следующую строку:10.11.12.13 www.internetservice.com
Это перенаправит любой запрос к www.internetservice.com на локальный IP-адрес HostA, но через порт SSH туннеля.
-
Настройка нового обратного туннеля:
Затем выполните команду на HostB для создания нового обратного туннеля, используя более специализированное перенаправление:myuserB@HostB:~ ssh -N -R www.internetservice.com:123:www.internetservice.com:123 myuserA@HostA
Важно: Убедитесь, что HostB может разрешать имена, и у него есть доступ к www.internetservice.com.
-
Тестирование соединения:
После изменения файла hosts и создания нового туннеля, вы можете использовать команду следующего вида на HostA:myuserA@HostA:~ telnet www.internetservice.com 123
Это должно работать, если туннель настроен правильно.
Параллельные проверки и отладка
- Убедитесь, что SSH-сервер на HostA настроен на разрешение обратных соединений.
- Проверьте, нет ли брандмауэров или метрик безопасности, которые могут блокировать соединения на порту 123.
- Используйте утилиты, такие как
netstat
илиss
, чтобы убедиться, что туннель работает на нужном порту.
Заключение
Используя метод с изменением файла hosts и более правильным перенаправлением, вы сможете упростить доступ для HostA к требуемому интернет-сервису. Это решение не только позволяет использовать прямой доступ через URL, но и сохраняет текущую конфигурацию без значительных изменений.