SSH ServerAliveInterval per VPN: kuris galas siunčia zondą?
ServerAliveInterval yra kliento pusės laikmatis, skaičiuojantis neatsakytus zondus, o ne sekundes. Sužinokite, kuris galas jį siunčia, kodėl laimi Host blokų tvarka ir kaip tai patikrinti.
Dauguma patarimų, kaip išlaikyti SSH sesiją gyvą, sustoja ties «pridėkite ServerAliveInterval 30» ir palieka nuošalyje naudingas dalis. Raktinis žodis yra kliento pusės laikmatis, kuris suveikia tik tada, kai kanalas tyli, jis skaičiuoja neatsakytus zondus, o ne sekundes, ir gyvena faile, kuriame laimi pirmoji atitinkanti reikšmė. Suklyskite šiose trijose savybėse ir sveika VPN sesija vis tiek nutrūks, o negyva liks kyboti.
Dvi kryptys priklauso skirtingiems demonams
ServerAliveInterval skaito jūsų ssh klientas. ClientAliveInterval skaito priešingos pusės sshd ir zonduoja priešinga kryptimi, nuo serverio link kliento. Tai ne sinonimai ir jie nebendrauja, todėl vieno nustatymas neturi įtakos kito galo elgsenai. Jų supainiojimas yra įprasta priežastis, kodėl pataisa atrodo veikianti viename hoste, o kitame ne.
Abu priima nulį. Kai nulis, klientas nesiunčia nieko, o serverio pusėje nulinis ClientAliveCountMax išjungia atsijungimą, kuris kitu atveju būtų įvykęs po neatsakytų patikrinimų.
Ką zondas įrodo, o ko ne
Praėjus nustatytam intervalui be duomenų iš serverio, klientas per esamą užšifruotą kanalą siunčia nedidelę užklausą ir laukia atsakymo. ServerAliveCountMax nustato, kiek iš jų gali likti be atsakymo, kol sesija bus nutraukta. Kai intervalas 60 ir skaičius 3, klientas pasiduoda maždaug po trijų minučių tylos, ir šis skaičius yra jūsų konfigūracijos savybė, o ne tinklo standartas. Palikite intervalą ties numatytąja reikšme 0 ir joks zondas niekada nebus siunčiamas, todėl standartinis klientas gali be galo sėdėti ant negyvos jungties.
Kadangi mainai vyksta SSH transporte, atsakymas įrodo, kad kitos pusės SSH procesas vis dar rašo ir skaito. Apie programą, kurią paleidote toje sesijoje, jis nieko nesako: duomenų bazės klientas, persiųstas prievadas ar ilgai veikiantis scenarijus gali būti įstrigę, kol transportas linksmai atsakinėja į zondus.
TCPKeepAlive yra atskiras mechanizmas vienu sluoksniu žemiau. Jį tvarko branduolys, jis nėra šifruojamas, o priešinga pusė, kurios SSH demonas įstrigęs, vis tiek gali jį patenkinti. Todėl SSH lygio zondas yra prasmingesnis signalas, kai jums rūpi sesija, o ne lizdas.
Tvarka lemia, kuri reikšmė išlieka
OpenSSH taiko pirmąją gautą reikšmę kiekvienam parametrui, todėl konkretus Host blokas turi būti prieš bet kurį platesnį bloką, kuris taip pat atitiktų. Numatytąsias reikšmes su pakaitos simboliais dėkite failo apačioje, o ne viršuje, ir atminkite, kad žemiau esantis Match blokas negali panaikinti jau nustatytos reikšmės. OpenSSH kliento konfigūracijos žinynas tiesiogiai nurodo pirmosios reikšmės taisyklę, ir verta ją perskaityti kartą prieš pertvarkant bendrą konfigūraciją.
Komandinės eilutės parinktys laimi prieš failą, todėl laikinas eksperimentas atsieina pigiai:
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shellNorėdami pamatyti, ką klientas iš tikrųjų išsprendė, o ne ką manote įrašę, paprašykite jo išspausdinti galiojančią konfigūraciją. Išvestyje yra sujungtos to hosto vardo reikšmės, ir tai greičiausias būdas sugauti paklydusį ankstesnį bloką:
ssh -G office-shell | grep -i aliveKą keepalive daro per tunelį
Periodinis srautas neleidžia pasibaigti būsenos saugančio NAT ar ugniasienės susiejimui, o tai yra tikra nauda VPN, kurio vartai po kelių minučių numeta neaktyvius srautus. Zondai, ateinantys kas 60 sekundžių, atnaujina tą susiejimą nepernešdami jokių programos duomenų.
Jie negali atstatyti kelio, kuris dingo. Kai tunelio sąsaja išnyksta, zondai žlunga kaip ir viskas kitas, ir sesija baigiasi, kai skaičius išsenka. Gyvybės aptikimas ir kelio atkūrimas yra skirtingos problemos, ir tik pirmoji konfigūruojama ssh_config faile. Tai, ką intervalas ir skaičius iš tikrųjų nupirkti, yra tai, kaip greitai klientas pastebi, ir būtent tai vartotojas patiria kaip užstrigimą.
Multipleksuotos jungtys prideda klostę. Kai ControlMaster žaidžia, zondai priklauso pagrindinei jungčiai, o nauja sesija per esamą pagrindinę paveldi tai, dėl ko ta pagrindinė susitarė. Jei mux pagrindinė įstrigusi, kito lango atidarymas kelio iš naujo neišbandys.
Nustatymo patikra nuo pradžios iki pabaigos
Serveryje išspausdinkite galiojančią demono konfigūraciją, o ne skaitykite failą ir spėliokite, kuris include laimėjo:
sshd -T | grep -i clientaliveTada stebėkite tikrą sesiją su įjungta derinimo išvestimi. Kai skaičius išsenka, klientas išspausdina laiko limito eilutę, o aplinkiniai laiko žymekliai rodo, ar tyla buvo nuolatinė, ar zondai apskritai nebuvo siųsti. Sesija, kuri miršta be jokio zondo srauto, paprastai turi raktinį žodį bloke, kuris niekada neatitiko.
Verta pridėti du patikrinimus kiekvienam hostui, pasiekiamam tik per tunelį: patvirtinkite, kad išspręstas intervalas yra tas, kurį ketinote, ir patvirtinkite, kad tas intervalas, padaugintas iš skaičiaus, yra trumpesnis už neveiklumo limitą VPN vartuose. Kai antrasis skaičius didesnis, vartai pirmiausia tyliai numeta srautą, ir SSH zondas niekada neturi progos nieko pranešti.