Зөвхөн VPN-ээр хүрэх HTTPS сайтыг SSH дамжуулалтаар хүрэх
Зөвхөн VPN-ээр хүрэх нэг HTTPS үйлчилгээг локал SSH дамжуулалтаар холбож, --connect-to-оор жинхэнэ хостын нэрийг хадгалж, нэг TCP дамжуулалт юуг хамарч чадахгүйг мэдээрэй.
Нэг машин аль хэдийн зөвшөөрөгдсөн 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 түүхэнд оршиж буй дамжуулалт нэг дахин ачаалсны дараа давтан шалгалтад хүргэдэг бөгөөд дараагийн хүн гурван урьдчилсан нөхцөлийн алийг нь аль хэдийн шалгасныг мэдэхгүй.