Jūsų įrenginys yra už operatoriaus NAT, gali atidaryti išeinančius ryšius ir paleidžia SSH serverį, kurio niekas negali pasiekti. Gaunamas prašymas paprastai formuluojamas kaip "duokite jam VPN", o tai yra vienas atsakymas iš kelių. Prieš priimdami jį, nuspręskite, ar jums reikia vieno administracinio TCP prievado, ar maršrutizuoto kelio į visą potinklį, nes tai skirtingi projektai su skirtinga ekspozicija.

Atvirkštinis tunelis gerai atsako į siaurą variantą. Įrenginys skambina jūsų mazgui, prašo mazgo klausytis loopback prievado ir persiunčia tą prievadą atgal į savo SSH paslaugą. Tada administratoriai pasiekia klausytoją per mazgą, o ne per viešą internetą.

Trys sąlygos, kurios nulemia pasirinkimą

Užsirašykite jas prieš bet kokią konfigūraciją. Jos yra riba tarp riboto valdymo įėjimo ir tinklo išplėtimo, o jų sumaišymas yra būdas, kuriuo penkių eilučių tunelis virsta be šeimininko plokščiu tinklu.

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

Trečioji eilutė yra ta, dėl kurios žmonės ginčijasi. Tunelis į įrenginio SSH prievadą neįtraukia jo kaimynų į jūsų tinklą, ir neturėtų būti daroma, kad taip atrodytų per tolesnių peradresavimų grandinę. Jei poreikis iš tikrųjų yra LAN, pasakykite tai ir suprojektuokite jį vietoj to.

Mazgo pusė: ribota relės paskyra

Duokite kiekvienam įrenginiui savo relės paskyrą su viešojo rakto autentifikavimu ir be interaktyvios sesijos. Match blokas, apribotas ta paskyra, palieka leidimą mažą, o privatus raktas lieka įrenginyje, kur jam vieta.

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 yra įdomi eilutė. Ji atmeta apvalkalo ir posistemių sesijas, o tuo pačiu leidžia peradresavimą, kurio įrenginiui reikia, todėl pavogtas raktas negali būti paverstas interaktyviu prisijungimu. PermitListen fiksuoja mazgo pusės klausytojo adresą ir prievadą, ir GatewayPorts no laiko jį loopback, o ne atidaro tinklui, kuriame yra mazgas.

Išbandykite efektyvią konfigūraciją prieš įkeldami iš naujo ir tuo metu laikykite atidarytą antrą sesiją. Match blokas, kuris netyčia taikomas visiems, arba rašybos klaida parinkties pavadinime, yra klasikinis būdas užsirakinti už mašinos, kurią kietinate. Iškelkite veikiančią konfigūraciją ir perskaitykite parinktis iš naujo, o ne pasitikėkite ką tik parašytu failu. Atkreipkite dėmesį, kad parinkčių palaikymas skiriasi tarp versijų, todėl naujesniame serveryje priimta eilutė gali būti tiesiog ignoruojama senesniame.

Įrenginio pusė: peradresavimas, kuris garsiai nepavyksta

Įrenginys atidaro ryšį ir prašo klausytojo. Du adresai argumente -R reiškia skirtingus dalykus, o jų skaitymas iš kairės į dešinę yra greičiausias būdas įsiminti, kuris yra kuris.

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

Kairioji pora yra tai, kur mazgas turėtų klausytis. Dešinioji pora yra tai, prie ko įrenginys jungiasi, kai ateina prašymas, išsprendžiama jo paties pusėje. Juos sukeitus gaunamas tunelis, kuris švariai pakyla ir peradresuoja į netinkamą vietą, o tai blogiau nei nesėkmė.

ExitOnForwardFailure=yes priverčia komandą išeiti, kai prašomo klausytojo neįmanoma sukurti, todėl paleidimo iš naujo kilpa pasako tiesą, o ne palieka pusiau veikiančią sesiją. Jis nieko nesako apie tai, ar vietinė SSH paslauga vėliau sveika, todėl sujunkite jį su procesų tvarkykle ir retkarčiais tikru ryšio testu.

Niekada nekeiskite loopback klausymosi adreso pakaitos simboliu, kad išvengtumėte papildomo šuolio. Tas vienas pakeitimas yra skirtumas tarp valdymo kelio ir viešai pasiekiamo prievado, ir paprastai tai nutinka derinant, o paskui lieka. Jei kolega negali pasiekti prievado per mazgą, pataisykite šuolio konfigūraciją, o ne plėskite susiejimą. Loopback yra visas šio dizaino saugumo argumentas.

Administratoriaus prieiga per mazgą

Administratorius su paprasta paskyra mazge gali per jį peršokti į persiųstą prievadą. Relės paskyra tam nenaudojama, ir būtent tai yra prasmė laikyti jas atskirai.

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

Patikrinkite įrenginio pagrindinio kompiuterio raktą po pasirinktu slapyvardžiu, nes tas raktas identifikuoja įrenginį grandinės gale, o tunelis yra tik transportas. Prisijungimas nuo galo iki galo vis dar autentifikuoja abu galus; tunelis, pasibaigiantis bendrame mazge, savaime nepadaro jo patikimu keliu.

Prisiimkite gyvavimo ciklą

Paleiskite įrenginio komandą procesų tvarkyklėje su tiksliai vienu aktyviu egzempliumi ir sąmoningai pasirinkta paleidimo iš naujo politika. Keepalive parinktys aptinka negyvą partnerį; jos neprikelia proceso, kuris išėjo.

Tada parašykite išėmimo iš eksploatacijos procedūrą. Kiekvienas įrenginys gauna savo klausytoją ir savo raktą, todėl išėmimas reiškia atšaukti tą paskyrą ir pašalinti tą raktą, o ne sukti visai flotilei bendrą paslaptį.

Galiausiai prisiminkite, ką loopback jums duoda. Jis riboja tinklo ekspoziciją ir nieko nedaro dėl kitų vietinių naudotojų bendrame mazge, todėl paties mazgo prieigos politika vis tiek turi būti teisinga. sshd_config nuoroda dokumentuoja kiekvieną aukščiau naudotą parinktį, ir verta perskaityti peradresavimo skyrius iki galo prieš išplečiant bet kurią iš jų.

Susiję straipsniai