Jūsu ierīce atrodas aiz operatora NAT, tā var atvērt izejošus savienojumus un darbojas SSH serveris, kuram neviens nevar piekļūt. Ienākošais pieprasījums parasti tiek formulēts kā "dodiet tam VPN", kas ir viena atbilde no vairākām. Pirms pieņemat to, izlemiet, vai jums vajag vienu administratīvu TCP portu vai maršrutētu ceļu uz visu apakštīklu, jo tie ir dažādi projekti ar atšķirīgu pakļautību.

Apgrieztais tunelis labi atbild uz šauro versiju. Ierīce zvana uz jūsu mezglu, lūdz mezglam klausīties loopback portā un pārsūta šo portu atpakaļ uz savu SSH pakalpojumu. Pēc tam administratori sasniedz klausītāju caur mezglu, nevis caur publisko internetu.

Trīs nosacījumi, kas izlemj izvēli

Pierakstiet tos pirms jebkuras konfigurācijas. Tie ir robeža starp ierobežotu pārvaldības ieeju un tīkla paplašinājumu, un to sajaukšana ir ceļš, kā piecu rindu tunelis pārvēršas par bezsaimnieka plakanu tīklu.

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šā rinda ir tā, par ko cilvēki strīdas. Tunelis uz ierīces SSH portu neieliek tās kaimiņus jūsu tīklā, un nevajadzētu likt tam izskatīties tā, it kā tas to darītu ar turpmāku pārsūtījumu ķēdi. Ja prasība tiešām ir LAN, sakiet to un projektējiet to tā vietā.

Mezglu puse: ierobežots releja konts

Dodiet katrai ierīcei savu releja kontu ar publiskās atslēgas autentifikāciju un bez interaktīvas sesijas. Match bloks, kas ierobežots ar šo kontu, uztur atļauju mazu, un privātā atslēga paliek ierīcē, kur tai jāatrodas.

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 ir interesantā rinda. Tā atsaka apvalka un apakšsistēmu sesijas, vienlaikus ļaujot pārsūtīšanu, kas ierīcei nepieciešama, tāpēc nozagtu atslēgu nevar pārvērst interaktīvā pieteikšanās reizē. PermitListen nosaka mezgla puses klausītāja adresi un portu, un GatewayPorts no patur to loopback, nevis atver to tīklā, kurā atrodas mezgls.

Pārbaudiet efektīvo konfigurāciju pirms pārlādes un šajā laikā turiet atvērtu otru sesiju. Match bloks, kas nejauši attiecas uz visiem, vai drukas kļūda opcijas nosaukumā, ir klasiskā metode, kā sevi izslēgt no mašīnas, kuru jūs nocietināt. Izgūstiet darbojošos konfigurāciju un nolasiet opcijas vēlreiz, nevis uzticieties tikko uzrakstītajai datnei. Ņemiet vērā, ka opciju atbalsts atšķiras starp būvēm, tāpēc jaunākā serverī pieņemta rinda vecākā var tikt vienkārši ignorēta.

Ierīces puse: pārsūtīšana, kas skaļi neizdodas

Ierīce atver savienojumu un pieprasa klausītāju. Abas adreses argumentā -R nozīmē dažādas lietas, un to lasīšana no kreisās uz labo ir ātrākais veids, kā atcerēties, kura ir kura.

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

Kreisais pāris ir vieta, kur mezglam jāklausās. Labais pāris ir tas, kam ierīce pieslēdzas, kad pienāk pieprasījums, atrisināts no pašas ierīces puses. To samainīšana rada tuneli, kas tīri paceļas un pārsūta uz nepareizo vietu, kas ir sliktāk par neveiksmi.

ExitOnForwardFailure=yes liek komandai iziet, kad pieprasīto klausītāju nevar izveidot, tāpēc restartēšanas cilpa pasaka jums patiesību, nevis atstāj pusstrādājošu sesiju. Tā neko nesaka par to, vai vietējais SSH pakalpojums vēlāk ir vesels, tāpēc savienojiet to ar procesu pārvaldnieku un laiku pa laikam īstu savienojuma testu.

Nekad neaizstājiet loopback klausīšanās adresi ar aizstājējzīmi, lai izvairītos no papildu lēciena. Šī vienīgā izmaiņa ir atšķirība starp pārvaldības ceļu un publiski sasniedzamu portu, un tā parasti notiek atkļūdošanas laikā un pēc tam paliek. Ja kolēģis nevar sasniegt portu caur mezglu, labojiet lēciena konfigurāciju, nevis paplašiniet piesaisti. Loopback ir viss šī dizaina drošības arguments.

Administratora piekļuve caur mezglu

Administrators ar parastu kontu mezglā var pārlēkt caur to uz pārsūtīto portu. Releja konts tam netiek izmantots, un tieši tā ir jēga tos turēt atsevišķi.

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

Pārbaudiet ierīces resursdatora atslēgu zem izvēlētā aizstājvārda, jo šī atslēga identificē ierīci ķēdes galā, un tunelis ir tikai transports. Pieteikšanās no gala līdz galam joprojām autentificē abus galus; tunelis, kas beidzas kopīgā mezglā, pats par sevi nepadara to par uzticamu ceļu.

Pārņemiet dzīves ciklu

Palaidiet ierīces komandu procesu pārvaldniekā ar tieši vienu aktīvu eksemplāru un apzināti izvēlētu restartēšanas politiku. Keepalive opcijas atklāj mirušu partneri; tās neceļ atpakaļ procesu, kas izgāja.

Pēc tam uzrakstiet ekspluatācijas pārtraukšanas procedūru. Katra ierīce iegūst savu klausītāju un savu atslēgu, tāpēc pārtraukšana nozīmē atsaukt šo kontu un noņemt šo atslēgu, nevis rotēt visai flotei kopīgu noslēpumu.

Visbeidzot atcerieties, ko loopback jums dod. Tas ierobežo tīkla pakļautību un neko nedara attiecībā uz citiem vietējiem lietotājiem kopīgā mezglā, tāpēc paša mezgla piekļuves politikai joprojām jābūt pareizai. sshd_config atsauce dokumentē katru iepriekš izmantoto opciju, un ir vērts pilnībā izlasīt pārsūtīšanas sadaļas, pirms paplašināt jebkuru no tām.

Saistītie raksti