VPN orqali SSH ServerAliveInterval: zondni qaysi tomon yuboradi?
ServerAliveInterval — javobsiz zondlarni sanaydigan mijoz tomonidagi taymer, soniyalarni emas. Qaysi tomon yuborishini, Host bloklari tartibi nima uchun yutishini va buni qanday tekshirishni ko'ring.
SSH sessiyasini tirik saqlash haqidagi maslahatlarning ko'pchiligi «ServerAliveInterval 30 qo'shing» deyish bilan to'xtaydi va foydali qismlarni chetda qoldiradi. Kalit so'z — mijoz tomonidagi taymer bo'lib, u faqat kanal jim bo'lganda ishga tushadi, soniyalarni emas, javobsiz zondlarni sanaydi va birinchi mos qiymat yutadigan faylda yashaydi. Ushbu uch xususiyatda xato qilsangiz, sog'lom VPN sessiyasi baribir uziladi, o'lik sessiya esa osilib qoladi.
Ikki yo'nalish turli demonlarga tegishli
ServerAliveInterval ni sizning ssh mijozingiz o'qiydi. ClientAliveInterval ni uzoq tomondagi sshd o'qiydi va qarama-qarshi yo'nalishda, serverdan mijozga qarab zondlaydi. Ular bir xil narsaning ikki nomi emas va birgalikda ishlamaydi, shuning uchun birini sozlash boshqa tomonning xatti-harakatiga ta'sir qilmaydi. Ularni chalkashtirish — tuzatish bir hostda ishlab, keyingisida ishlamagandek ko'rinishining odatiy sababi.
Ikkalasi ham nolni qabul qiladi. Nolda mijoz umuman hech narsa yubormaydi, server tomonida esa nolga teng ClientAliveCountMax javobsiz tekshiruvlardan keyin keladigan uzilishni o'chiradi.
Zond nimani isbotlaydi, nimani emas
Belgilangan interval serverdan ma'lumot kelmasdan o'tgach, mijoz mavjud shifrlangan kanal orqali kichik so'rov yuboradi va javob kutadi. ServerAliveCountMax sessiya uzilishidan oldin ularning qanchasi javobsiz qolishi mumkinligini belgilaydi. Interval 60 va son 3 bo'lganda mijoz taxminan uch daqiqalik sukunatdan keyin taslim bo'ladi, va bu raqam tarmoq standarti emas, sizning konfiguratsiyangizning xususiyati. Intervalni standart 0 qiymatida qoldirsangiz, hech qanday zond yuborilmaydi, shuning uchun oddiy mijoz o'lik ulanishda cheksiz o'tira oladi.
Almashinuv SSH transporti ichida kechgani uchun, javob qarshi tomonning SSH jarayoni hali o'qib-yozayotganini isbotlaydi. U o'sha sessiya ichida ishga tushirgan dasturingiz haqida hech narsa aytmaydi: ma'lumotlar bazasi mijozi, yo'naltirilgan port yoki uzoq ishlaydigan skript transport zondlarga xursandchilik bilan javob berayotganda qotib qolishi mumkin.
TCPKeepAlive — bir qatlam pastdagi alohida mexanizm. Uni yadro boshqaradi, u shifrlanmagan va SSH demoni qotib qolgan qarshi tomon ham uni qondira oladi. Shuning uchun soket emas, sessiya muhim bo'lganda SSH darajasidagi zond mazmunliroq signal hisoblanadi.
Qaysi qiymat omon qolishini tartib hal qiladi
OpenSSH har bir parametr uchun olgan birinchi qiymatni qo'llaydi, shuning uchun aniq Host bloki mos keladigan har qanday kengroq blokdan oldin turishi kerak. Joker belgili standart qiymatlarni faylning pastiga qo'ying, yuqoriga emas, va pastdagi Match bloki allaqachon o'rnatilgan qiymatni bekor qila olmasligini unutmang. OpenSSH mijoz konfiguratsiyasi bo'yicha ma'lumotnoma birinchi qiymat qoidasini to'g'ridan-to'g'ri aytadi va umumiy konfiguratsiyani qayta tashkil qilishdan oldin uni bir marta o'qishga arziydi.
Buyruq qatori parametrlari fayldan ustun, bu esa vaqtinchalik tajribani arzon qiladi:
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=4 office-shellMijoz aslida nimani hal qilganini, siz yozdim deb o'ylagan narsangizdan ko'ra ko'rish uchun undan amaldagi konfiguratsiyani chiqarishni so'rang. Chiqishda o'sha host nomi uchun birlashtirilgan qiymatlar bor va yo'qolgan oldingi blokni ushlashning eng tez yo'li shu:
ssh -G office-shell | grep -i aliveKeepalive tunneldan o'tib nima qiladi
Davriy trafik holatli NAT yoki xavfsizlik devori xaritasining muddati tugashining oldini oladi, bu esa bo'sh oqimlarni bir necha daqiqadan keyin tashlab yuboradigan VPN uchun haqiqiy foyda. Har 60 soniyada keladigan zondlar hech qanday ilova ma'lumotini olib yurmasdan o'sha xaritani yangilaydi.
Ular yo'qolgan yo'lni qaytadan qura olmaydi. Tunnel interfeysi yo'qolganda zondlar ham boshqa hamma narsa kabi muvaffaqiyatsiz bo'ladi va son tugagach sessiya yakunlanadi. Tiriklikni aniqlash va yo'lni tiklash turli muammolar, va faqat birinchisini ssh_config ichida sozlash mumkin. Interval va son sizga aslida mijozi qanchalik tez sezishini sotib oladi, foydalanuvchi esa buni qotish sifatida his qiladi.
Multiplekslangan ulanishlar bir burma qo'shadi. ControlMaster ishtirok etganda zondlar asosiy ulanishga tegishli, mavjud asosiy ustidagi yangi sessiya esa o'sha asosiy kelishgan narsani meros oladi. Agar mux asosiysi qotib qolgan bo'lsa, boshqa oyna ochish yo'lni qayta sinamaydi.
Sozlamani boshidan oxirigacha tasdiqlash
Serverda faylni o'qib, qaysi include yutganini taxmin qilish o'rniga demonning amaldagi konfiguratsiyasini chiqaring:
sshd -T | grep -i clientaliveKeyin tuzatish chiqishi yoqilgan haqiqiy sessiyani kuzating. Son tugaganda mijoz kutish vaqti satrini chop etadi va uning atrofidagi vaqt belgilari sukunat uzluksiz bo'lganini yoki zondlar umuman yuborilmaganini ko'rsatadi. Zond trafigisiz o'ladigan sessiya odatda kalit so'zni hech qachon mos kelmagan blokda saqlaydi.
Faqat tunnel orqali yetib boradigan har qanday host uchun ikkita tekshiruv qo'shishga arziydi: hal qilingan interval siz niyat qilgan qiymat ekanini va bu interval son bilan ko'paytirilganda VPN darvozasidagi bo'sh turish muddatidan qisqa ekanini tasdiqlang. Ikkinchi son kattaroq bo'lsa, darvoza oqimni birinchi bo'lib jimgina tashlaydi va SSH zondi hech narsa xabar qilish imkoniyatiga ega bo'lmaydi.