Исходя из моего базового понимания перенаправления портов SSH, клиентское программное обеспечение SSH открывает сокет прослушивания на IP:PORT, скажем, 185.68.93.141:80. Поэтому, если я зайду в свой веб-браузер и зайду на сайт somewebsite.com с разрешением 185.68.93.141, то мой веб-браузер откроет сокет для разговора с 185.68.93.141:80.

Увы, без ведома браузера он говорит не с веб-сервером, а с SSH-клиентом. Клиент SSH отправит его через соединение SSH (через порт 22, который является единственным, разрешенным через NAT и брандмауэр), а сервер SSH передаст его на localhost:80.

Однако, как я знаю из опыта и нескольких поисков в Google, вы не можете привязать сокет прослушивания к внешнему IP. Вы получаете сообщение об ошибке «IP-адрес недействителен в этом контексте».

Итак, как это на самом деле работает?

3 ответа3

1

Клиент SSH привязывается к порту на локальном хосте. Браузер отправляет запрос клиенту SSH. Клиент перенаправляет запрос на сервер SSH (за пределами брандмауэра). Сервер SSH подключается к URL. Сервер SSH не должен связываться с портом (кроме 22), потому что в этом контексте он действует как клиент, и удаленный веб-сервер подберет свой IP-адрес по умолчанию.

Кроме того, причина, по которой браузер подключается к локальному хосту вместо IP-адреса в URL-адресе, связана с настройками прокси-сервера браузера. Когда вы настраиваете прокси, браузер всегда подключается к IP-адресу прокси-сервера (в данном случае, вероятно, localhost) и сообщает прокси-серверу реальный адрес, к которому вы хотите подключиться.

1

Принимая ваш вопрос из комментариев:

Если у меня есть удаленный хост, который поддерживает SSH, на котором работает веб-сервер, но порт 80 не отображается, могу ли я настроить SSH-клиент так, чтобы, когда кто-то открывает веб-браузер на локальном компьютере, он мог получить доступ к веб-серверу на удаленном компьютере ?

Если SSH на удаленном хосте прослушивает 22, и вы можете получить к нему доступ, то вы можете подключиться с помощью переадресации локального порта. Например, рассматривая клиент Linux:

ssh remotehost -L 81:localhost:80

После выполнения предыдущей команды вы должны увидеть новый прослушивающий сокет на порту 81 (вы можете проверить с помощью netstat -latn | grep 81).

В результате локальный порт 81 будет перенаправлен на удаленный хост:80.

Теперь вы можете просмотреть на своем клиентском компьютере http://localhost:81, и вы увидите веб-сервер.

1

Предположения:

  • За NAT находится удаленный сервер, общедоступный IP-адрес 185.68.93.141 но из-за NAT сервер недоступен напрямую.
  • Сервер запускает sshd на порту 22 и httpd на порту 80 .
  • 185.68.93.141:22 пересылается на сервер, поэтому мы можем ввести ssh (например, ssh 185.68.93.141).
  • 185.68.93.141:80 не пересылается на сервер.

Цель:

  • Доберитесь до удаленного httpd снаружи.

Возможные подходы:

  1. ssh -L 5678:localhost:80 185.68.93.141

    (Примечание: localhost выше означает localhost в контексте удаленного сервера). Теперь каждое соединение с localhost:5678 на локальном компьютере будет достигать localhost:80 (127.0.0.1:80) удаленного сервера. Удаленный httpd "увидит" соединение с самого удаленного сервера. Ваш локальный браузер должен посетить http://localhost:5678 . Есть несколько препятствий:

    • Удаленный httpd может отклонить соединение, потому что используемый URL-адрес не соответствует ожидаемому, скажем, он ожидает http://example.com . Это можно исправить, перенаправив example.com на 127.0.0.1 на локальной стороне, либо предоставив собственную службу DNS, либо изменив /etc/hosts . Даже тогда вам нужно подключиться к http://example.com:5678 .
    • Возможно, вы захотите использовать порт 80 вместо 5678 на локальной стороне (поэтому с помощью вышеприведенного трюка нужно использовать URL-адрес http://example.com), но, вероятно, ваша локальная ОС не позволит вам открывать порты с номера ниже 1024 , если вы не являетесь пользователем root (или администратором и т. д.). Запускать ssh от имени root не рекомендуется.
  2. ssh -D 5678 185.68.93.141

    В этом случае вам необходимо настроить локальный браузер на использование динамического прокси-сервера SOCKS4 или SOCKS5 по адресу localhost:5678 (127.0.0.1:5678). Соединения с любым сайтом, который он посещает, устанавливаются sshd на удаленной стороне от имени браузера. Ваш браузер "виден" так, как будто он подключен с удаленного сервера. Теперь все, что вам нужно сделать, это использовать URL, который работает при подключении с удаленного сервера к его собственному httpd (но если это http://localhost или аналогичный, то имейте в виду, что в вашем локальном браузере может быть опция "не использовать". прокси для локальных адресов ").

    Больше информации здесь .

Если вы хотите использовать 185.68.93.141 (или somewebsite.com который разрешается до 185.68.93.141) в качестве основной части URL-адреса в локальном браузере и по-прежнему обращаться к удаленному sshd несмотря на отсутствие переадресации порта 80 на 185.68.93.141 , тогда вам нужно как-то подключить браузер в соответствии с вышеуказанными правилами. Единственный ssh не имеет возможности перехватывать трафик от браузера, который не взаимодействует.

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