На одной машине уже есть одобренный доступ к VPN, второй машине нужен ровно один частный сервис HTTPS, и локальное SSH-перенаправление может закрыть этот пробел, не давая второй машине туннель. Перенаправление переносит одно TCP-назначение, а не всю сеть, и именно это ограничение и есть суть. Пройдите пять шагов ниже по порядку, потому что каждый сбой происходит по своей причине и более поздний шаг не может спасти более ранний пробел. Если отсутствует любое предварительное условие, этот проект его не решает, и никакая настройка команд не поможет.

Шаг первый: подтвердите три предварительных условия

Три вещи должны быть верны ещё до того, как какая-либо команда будет иметь значение. Нужны разрешение использовать первую машину как хост перенаправления, работающий доступ по SSH к ней и политика сервера, разрешающая намеченное назначение. У учётной записи SSH, созданной для передачи файлов, перенаправление может быть отключено, а сервер, разрешающий перенаправление, всё равно может ограничивать, какие назначения через него доступны. Спросите до тестирования, потому что использование рабочей станции коллеги как точки перехода без договорённости — это проблема политики, даже когда команда работает безупречно.

Две команды решают техническую половину этого списка. Первая доказывает, что учётная запись и ключ работают без интерактивного запроса, а вторая печатает действующую политику сервера, а не закомментированный пример в файле конфигурации.

ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'

Шаг второй: привяжите порт loopback и держите сеанс живым

На машине, где работает клиентское приложение, откройте локальное перенаправление к частному сервису. Привяжите его явно к loopback, чтобы он не публиковался в локальной сети, и выберите высокий порт, который ещё не занят ни одним локальным сервисом. Держите сеанс работающим, пока вы работаете, потому что его закрытие закрывает и слушателя. ExitOnForwardFailure превращает отклонённую привязку или занятый порт в немедленный выход вместо сеанса, который остаётся без перенаправления, и именно этот режим отказа тратит больше всего времени.

Частное соединение устанавливается с хоста перехода, поэтому его DNS, маршруты, политика VPN и доступ к сервису должны все работать. Сеанс SSH не создаёт достижимость, которой у хоста перехода нет, и не может починить маршрут, который VPN так и не протолкнул. Подтвердите слушателя там, где он действительно находится, вместо того чтобы доверять молчанию команды.

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'

Шаг третий: сохраняйте имя HTTPS, когда сокет локальный

Переход на https://127.0.0.1:9443/ меняет имя сервера TLS и полномочия приложения. Сертификат, выданный для portal.lab.example, не будет проверен против адреса loopback, и возникшая ошибка выглядит как сломанный сертификат, а не как сокращённый путь перенаправления. Для проверки из командной строки сохраните настоящий URL и измените только назначение сокета. Это делает --connect-to, а руководство curl описывает используемую ниже форму из четырёх полей.

curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/

Имя остаётся в URL, в рукопожатии TLS и в заголовке Host, а TCP-соединение идёт к локальному слушателю. Параметр без прокси удерживает проверку на этом перенаправлении, вместо того чтобы настроенный HTTP-прокси её перехватил, а сохранение проверки сертификата включённой и делает результат осмысленным.

Шаг четвёртый: знайте, что не покрывает одно перенаправление

Одно TCP-перенаправление покрывает один порт назначения. Странице, которая перенаправляет на второе имя хоста, загружает ресурсы с хоста внутри частной сети или отправляет на другой порт, нужно собственное перенаправление, и каждому из них требуется такая же проверка политики, как первому. Рабочие процессы браузера добавляют свои требования, потому что браузеру нужно сказать, чтобы он отправлял настоящее имя на локальный порт через конфигурацию прокси или локальное сопоставление. Поэтому успешная проверка из командной строки не доказывает, что браузер тоже справится, хотя и доказывает путь.

UDP, обнаружение SMB и вход в домен вообще не проходят через TCP-перенаправление. Если настоящая потребность — общий доступ к сети, этот проект — неправильный инструмент, а правильный — поддерживаемый шлюз удалённого доступа.

Шаг пятый: уберите и запишите

Остановите сеанс, когда проверка закончена, и подтвердите, что слушатель исчез. Если выбранный порт уже был занят, выберите другой неиспользуемый порт loopback и обновите вместе URL, тестовую команду и заметку, вместо того чтобы останавливать несвязанный локальный сервис ради освобождения номера. Оставленное открытым перенаправление на ноутбуке превращает диагностику в неуправляемый сервис.

Запишите хост перехода, перенаправленное назначение, локальный порт и того, кто одобрил договорённость. Перенаправление, существующее только в чьей-то истории shell, находится в одном перезапуске от повторного расследования, и следующий человек не будет знать, какое из трёх предварительных условий уже проверено.

Похожие статьи