Една машина вече има одобрен достъп до 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, тестовата команда и бележката, вместо да спирате несвързана локална услуга, за да освободите номера. Оставеното отворено препращане на лаптоп превръща диагностиката в неуправлявана услуга.

Запишете хоста за преминаване, препратената дестинация, локалния порт и кой е одобрил уговорката. Препращане, което съществува само в историята на нечия командна обвивка, е на едно рестартиране от повторно разследване и следващият човек няма да знае кое от трите предварителни условия вече е проверено.

Подобни статии