Таны төхөөрөмж операторын NAT-ийн ард байна, гадагш холболт нээж чадна, мөн хэн ч хүрч чадахгүй SSH сервер ажиллуулдаг. Ирж буй хүсэлтийг ихэвчлэн "түүнд VPN өг" гэж томьёолдог бөгөөд энэ нь хэд хэдэн хариултын нэг юм. Үүнийг хүлээн авахаас өмнө нэг захиргааны TCP порт хэрэгтэй юу, эсвэл бүхэл дэд сүлжээ рүү маршрутлагдсан зам хэрэгтэй юу гэдгийг шийдээрэй, учир нь тэдгээр нь өөр өөр өртөлттэй өөр өөр төслүүд юм.

Урвуу туннель нарийн хувилбарт сайн хариулдаг. Төхөөрөмж таны зангилаа руу залгаж, зангилааг loopback порт дээр сонсохыг хүсч, тэр портыг өөрийн SSH үйлчилгээ рүү буцааж дамжуулдаг. Дараа нь админууд сонсогч руу нийтийн интернетээр биш, зангилаагаар дамжин хүрдэг.

Сонголтыг шийдэх гурван нөхцөл

Ямар ч тохиргооны өмнө эдгээрийг бичээрэй. Тэдгээр нь хязгаарлагдмал удирдлагын орох хаалга ба сүлжээний өргөтгөлийн хоорондох хил бөгөөд тэдгээрийг холих нь таван мөрт туннелийг эзэнгүй тэгш сүлжээ болгох зам юм.

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

Гурав дахь мөр бол хүмүүсийн маргадаг мөр. Төхөөрөмжийн SSH порт руу чиглэсэн туннель нь түүний хөршүүдийг таны сүлжээнд оруулахгүй бөгөөд цаашдын дамжуулалтын гинжин хэлхээгээр тийм мэт харагдуулах ёсгүй. Хэрэв шаардлага үнэхээр LAN бол түүнийгээ хэлж, оронд нь түүнийг зохион бүтээгээрэй.

Зангилааны тал: хязгаарлагдмал реле бүртгэл

Төхөөрөмж бүрд нийтийн түлхүүрээр баталгаажуулалттай, интерактив сессгүй өөрийн реле бүртгэлийг өгөөрэй. Match Тухайн бүртгэлээр хязгаарлагдсан блок зөвшөөрлийг бага байлгаж, хувийн түлхүүр нь өөрийн байх ёстой төхөөрөмж дээр үлддэг.

Match User relay-dev-7
    AuthenticationMethods publickey
    PubkeyAuthentication yes
    AllowTcpForwarding remote
    PermitListen 127.0.0.1:21022
    GatewayPorts no
    MaxSessions 0
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no

MaxSessions 0 сонирхолтой мөр юм. Энэ нь shell болон дэд системийн сессийг татгалзахын зэрэгцээ төхөөрөмжид хэрэгтэй дамжуулалтыг зөвшөөрдөг тул хулгайлагдсан түлхүүрийг интерактив нэвтрэлт болгон хувиргах боломжгүй. PermitListen зангилааны талын сонсогчийн хаяг болон портыг бэхэлж, GatewayPorts no түүнийг зангилаа байрлах сүлжээнд нээхийн оронд loopback дээр барина.

Дахин ачаалахын өмнө үр дүнтэй тохиргоог шалгаж, үүнийг хийж байхдаа хоёр дахь сессийг нээлттэй байлгаарай. Match блок санамсаргүйгээр бүгдэд үйлчлэх, эсвэл сонголтын нэрэнд үсгийн алдаа гарах нь таны хатууруулж буй машинаас өөрийгөө түгжих сонгодог арга юм. Ажиллаж буй тохиргоог гаргаж, саяхан бичсэн файлд итгэхийн оронд сонголтуудыг дахин уншаарай. Сонголтын дэмжлэг хувилбаруудын хооронд ялгаатай тул шинэ серверт хүлээн авсан мөр хуучнаар зүгээр л үл хэрэгсэгдэж болно.

Төхөөрөмжийн тал: чанга дуугаар бүтэлгүйтдэг дамжуулалт

Төхөөрөмж холболтыг нээж, сонсогчийг хүсдэг. Аргумент дахь хоёр хаяг -R өөр утгатай бөгөөд тэдгээрийг зүүнээс баруун тийш унших нь аль нь аль болохыг санах хамгийн хурдан арга юм.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

Зүүн хос бол зангилаа сонсох ёстой газар. Баруун хос бол хүсэлт ирэхэд төхөөрөмж холбогдох зүйл бөгөөд төхөөрөмжийн өөрийн талаас шийдэгддэг. Тэдгээрийг солих нь цэвэр өргөгдөж, буруу газар дамжуулдаг туннель үүсгэдэг бөгөөд энэ нь бүтэлгүйтлээс ч дор.

ExitOnForwardFailure=yes хүссэн сонсогчийг бүрдүүлж чадахгүй үед командыг гарахыг албаддаг тул дахин эхлүүлэх давталт хагас ажиллаж буй сессийг орхихын оронд танд үнэнийг хэлдэг. Орон нутгийн SSH үйлчилгээ дараа нь эрүүл эсэхийг энэ нь юу ч хэлэхгүй тул үүнийг процессын менежер болон хааяа жинхэнэ холболтын тесттэй хослуулаарай.

Нэмэлт үсрэлтээс зайлсхийхэйн тулд loopback сонсох хаягийг хэзээ ч орлуулагч тэмдэгтээр сольж болохгүй. Тэр ганц өөрчлөлт нь удирдлагын зам ба нийтэд хүрэх боломжтой портын хоорондох ялгаа бөгөөд энэ нь ихэвчлэн дибаг хийх үед тохиолдож, дараа нь үлддэг. Хэрэв хамтран ажиллагч порт руу зангилаагаар дамжин хүрч чадахгүй бол холболтыг өргөтгөхийн оронд үсрэлтийн тохиргоог засаарай. Loopback бол энэ загварын бүх аюулгүй байдлын үндэслэл юм.

Зангилаагаар дамжин админы хандалт

Зангилаа дээр энгийн бүртгэлтэй админ түүгээр дамжин дамжуулагдсан порт руу үсэрч болно. Реле бүртгэлийг үүнд ашигладаггүй бөгөөд тэдгээрийг тусдаа байлгах утга нь ч энэ юм.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

Төхөөрөмжийн хост түлхүүрийг сонгосон хочит нэрний доор шалгаарай, учир нь тэр түлхүүр гинжин хэлхээний төгсгөлд төхөөрөмжийг танина, туннель бол зөвхөн тээвэр. Үзүүрээс үзүүр хүртэлх нэвтрэлт хоёр үзүүрийг хоёуланг нь баталгаажуулсар байна; нийтлэг зангилаа дээр төгсдөг туннель үүнийг өөрөө найдвартай зам болгохгүй.

Амьдралын мөчлөгийг өөртөө ав

Төхөөрөмжийн командыг процессын менежерийн доор яг нэг идэвхтэй хувилбар болон санаатайгаар сонгосон дахин эхлүүлэх бодлоготой ажиллуулаарай. Keepalive сонголтууд үхсэн түншийг илрүүлдэг; тэд гарсан процессыг сэрээхгүй.

Дараа нь ашиглалтаас гаргах журмыг бичээрэй. Төхөөрөмж бүр өөрийн сонсогч, өөрийн түлхүүртэй болдог тул гаргах нь тэр бүртгэлийг хүчингүй болгож, тэр түлхүүрийг устгахыг хэлнэ, бүх флотын хуваалцдаг нууцыг эргүүлэх биш.

Эцэст нь loopback танд юу өгдөгийг санаарай. Энэ нь сүлжээний өртөлтийг хязгаарладаг бөгөөд нийтлэг зангилааны бусад орон нутгийн хэрэглэгчдийн талаар юу ч хийдэггүй тул зангилааны өөрийн хандалтын бодлого зөв хэвээр байх ёстой. sshd_config-ийн лавлагаа дээр ашигласан сонголт бүрийг баримтжуулдаг бөгөөд тэдгээрийн аль нэгийг өргөтгөхийн өмнө дамжуулалтын хэсгүүдийг бүрэн унших нь зүйтэй.

Холбоотой нийтлэлүүд