Я заинтересован в точном механизме, который происходит, когда SSH туннель установлен.
Предположим, у нас есть 3 компьютера: ЛОКАЛЬНЫЙ хост, ПРОМЕЖУТОЧНЫЙ хост и УДАЛЕННЫЙ хост с этой топологией:
Localhost --- INTERNET --- IntermediateHost --- LAN --- RemoteHost
И мы хотим создать туннель для веб-сервера, работающего на RemoteHost.
Промежуточные и Удаленные хосты принимают соединения SSH.
Когда я выполняю следующую команду на Локальной машине:
$ ssh -L 2022:remote:80 user@intermediate
Я прав, если я предполагаю следующее?
- SSH- клиент localhost открывает порт 2022 и слушает его (начинает действовать как сервер)
- В то же время SSH- клиент localhost открывает SSH-соединение с портом по умолчанию (22) на промежуточном хосте.
- В связи с этим клиент сообщает IntermediateHost, что он хочет открыть туннель (поскольку протокол SSH поддерживает его), поэтому теперь промежуточный SSH-сервер знает, что он должен отправлять трафик, полученный через это соединение, на RemoteHost, порт 80.
Итак, теперь веб-браузер, работающий на Localhost, подключается к localhost:2022 и отправляет «GET /» через сокет. SO берет на себя управление и инкапсулирует эту информацию в пакет TCP с портом назначения 2022, а затем в пакет IP, с адресом назначения LOCALHOST, таблицы маршрутизации операционной системы определяют, что пакет предназначен для той же машины, поэтому он разворачивает пакет TCP, считывает место назначения и разворачивает его, возвращая «GET /» в serverSocket, который ранее был открыт SSH-клиентом (на порту 2022)
Это правильно? потому что, насколько мне известно, туннель оборачивает пакет TCP/IP через SSH, но в этом случае клиент SSH не имеет доступа к пакету TCP/IP, он получает только информацию "уровня приложения": «GET /».
Спасибо!