Oʻchirish skripti yoki tarmoq devori qoidasi: sizishni qaysi biri toʻxtatadi?
Uzilishda interfeyslarni tushirish qoʻpol usul boʻlib, koʻpincha huquqsiz ishlaydi. Uni uzilishdan keyin ham saqlanib qoladigan va boʻshliqni yopadigan tarmoq devori qoidasi bilan solishtiring.
Ikki dizayn bir xil narsani vaʼda qiladi: tunnel yiqilganda, hech narsa ochiq holda tashqariga chiqmaydi. Biri oʻchirish paytida skript ishga tushirib, interfeyslarni kesadi. Ikkinchisi tarmoq devori qoidasini kuchda qoldiradi va VPN mijozidan hech narsa talab qilmaydi. Ular kimda harakat qilish huquqi borligi, boʻshliq paytida nima sodir boʻlishi va mashina keyin qanday qayta onlayn boʻlishi bilan farq qiladi. Ularni bu uch nuqtada solishtirish qaysi biri qattiqroq ekanini muhokama qilishdan foydaliroq.
Bir xil ish, ikki mexanizm
Mijoz tunnel koʻtarilganda va tushirilganda ilgaklarni ishga tushirishi mumkin, agar profil skript bajarishga ruxsat bersa. Bu ilgak mijozning hayot sikli ichida, ulanish yopilayotgan paytda ishlaydi. Tarmoq devori qoidasi esa tizimga tegishli boʻlib, mijoz ishlayaptimi, quladimi yoki oʻldirildimi — bu unga ahamiyatsiz.
| Property | Teardown script | Firewall unit |
|---|---|---|
| Runs when the client is killed | No | Yes |
| Needs privilege at teardown time | Usually yes | Configured once, at boot |
| Acts on the whole machine | Often, including recovery paths | Only on the flows it matches |
Bu jadval butun dalildir. Faqat tartibli yopilishda ishlaydigan skript sizni eng kam tashvishlantirgan holatni qamrab oladi; muhim holat — qulash yoki tarmoqning yoʻqolishi, va ikkalasi ham toza oʻchirish bermaydi.
Oʻchirish ilgagi nima qila oladi va nima qila olmaydi
Hujjatlashtirilgan namuna tarmoq interfeyslarini aylanib, loopbackdan tashqari hammasini tushiradi. Jismoniy qurilma tushirilganda tunneldan tashqariga hech narsa qochib chiqa olmaydi, va aynan shu koʻzda tutilgan.
#!/bin/sh
for dev in /sys/class/net/*; do
name=$(basename "$dev")
[ "$name" = lo ] || ip link set dev "$name" down
done
U mahalliy tarmoqni, mashina joylashtirgan har qanday xizmatni va muammoni tuzatish uchun ishlatadigan yoʻlni ham tushiradi. Noutbukda simsiz qurilma baʼzan keyin qoʻlda almashtirishni talab qiladi, shuning uchun qisqa uzilish taʼmirlash seansiga aylanadi. Bundan yomoni, ilgakka bularning hech birini qilishga ruxsat berilmasligi mumkin: mijoz huquqlardan voz kechganda, oʻchirish skripti imtiyozsiz hisobda ishlaydi va har bir interfeys oʻzgarishi hech kim jurnalni oʻqimaydigan paytda yozilgan ruxsat xatosi bilan barbod boʻladi.
Ilgakka ishonishdan oldin mijoz qanday ishga tushishini tekshiring. root sifatida qoʻlda ishga tushirganda ishlaydigan skript yuklanishda boshlanadigan xizmat haqida hech narsani isbotlamaydi.
Tarmoq devori qoidasi nimani boshqacha qiladi
Faqat tunnel trafigiga ruxsat beradigan qoida mijoz jarayoni yoʻqolganda ham ishlaydi, chunki yadro bu jarayonga bogʻliq emas. Qoida torroq ham: u mos keladigan oqimlarnigina bloklaydi va loopback, mahalliy quyi tarmoq hamda tiklanish yoʻlini tinch qoldiradi, shuning uchun mashinani boshi berk koʻchaga qoʻymaydi.
Narx shuki, qoidani xost tarmoq devorining egasi yozishi va saqlashi kerak, va u mijoz haqiqatda yaratadigan tunnel qurilmasini nomlashi kerak. Bu qoida va profilni birga saqlash kerakligini bildiradi; nomi oʻzgartirilgan interfeys hamma narsani bloklaydigan va hech narsani tushuntirmaydigan tarmoq devorini qoldiradi.
Hech bir mexanizm ikkinchisini ortiqcha qilmaydi. Tahrirdan keyin hech qachon qayta yuklanmaydigan tarmoq devori qoidasi hech qachon ishlamaydigan skript kabi xayoliydir.
Boʻshliq bor-yoʻqligini persist-tun hal qiladi
Tunnel qurilmasi uzilishdan omon qolsa, unga qarab ketadigan marshrutlar ham omon qoladi. Shunda trafik qayta yoʻnaltirilish oʻrniga tashlab yuboriladi, shuning uchun standart marshrut jismoniy shlyuzga qaytib tushmaydi. Aynan shu xatti-harakat har qanday tarmoq devori qoidasi ishtirok etishidan oldin ham sizishni ehtimoldan yiroq qiladi.
Bu sozlama boʻlmasa, qurilma marshrutlar bilan birga olib tashlanadi va standart marshrut yana jismoniy shlyuzga ishora qilishi mumkin. Shunday boʻladimi — platforma va mijozga bogʻliq, shuning uchun holatni taxmin qilmay kuzatish kerak. Sozlamani kill switchning bir qismi deb biling, unumdorlik varianti deb emas.
Qayta ulanish yoʻlini tirik saqlang, soʻng toʻrt holatni sinang
Qattiq blok mijozning qayta ulanishiga ham toʻsqinlik qilishi mumkin, chunki qolgan hamma narsa rad etilganda ham mijozga jismoniy shlyuz orqali serverga marshrut kerak. Tunnel koʻtarilishidan oldin oʻsha bitta manzil uchun xost marshrutini oʻrnating va avval nomni hal qiling, chunki kerak boʻlgan paytda DNS bloklangan boʻlishi mumkin.
ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0
Soʻng yorliqni emas, holatlarni tekshiring. Toʻrt lahzani ataylab boshdan kechiring: tunnelsiz sovuq start, sogʻlom sessiya, hech kim soʻramagan uzilish va tiklanishdan keyingi sessiya. Har lahzada standart marshrutni oʻqing va chiqish manzili koʻrinadigan bitta soʻrov yuboring. Tunnel pastda boʻlganda taslim boʻladigan dastur pochta mijozi yoki yangilagich haqida hech narsa demaydi, shuning uchun oxirgi tekshiruvni bitta fon dasturi bilan takrorlang. Qoida, interfeys nomlari va tiklash qadamlarini yozib qoʻying, chunki hech kim tekshira olmaydigan kill switch faqat mish-mishdir.