Ilgak birinchi marta ishlaydi, uch marta qayta ulanishdan keyin zanjirda bir xil qoidaning uch nusxasi qoladi. Hech narsa baland ovozda muvaffaqiyatsiz bo'lmadi; skript har ishga tushganda faqat aytilganini qildi. VPN ilgagi bir necha marta ishlashi mumkin bo'lgan konfiguratsiya amalidir, shuning uchun unga ega, kerakli holat va tartiblangan o'zgarish kerak. Shu tartibda yuring, nusxalar to'xtaydi.

Biron qoida yozishdan oldin qoidalarga egasini bering

Bitta qoida yozishdan oldin bu integratsiya qaysi zanjir yoki jadvalga egaligini hal qiling. Ilgak yaratadigan va bo'shatadigan alohida zanjir egalikning eng aniq shaklidir, chunki tozalash keyin o'sha zanjirni boshqalarning siyosatiga tegmasdan olib tashlashi mumkin. Agar qoidalarni umumiy zanjirga qo'shishga majbur bo'lsangiz, ularni izoh bilan belgilang, keyingi qidiruv aynan siznikini topsin. Egalik demontajni xavfsiz qiladi, demontaj esa jimgina muvaffaqiyatsiz bo'ladigan qismdir.

iptables -N VPN_HOOK 2>/dev/null || true
iptables -C INPUT -j VPN_HOOK 2>/dev/null || iptables -I INPUT -j VPN_HOOK
iptables -S VPN_HOOK

Bu yerda izoh bezak emas. Bu sizning qoidangizni olib tashlash va tasodifan o'xshash ko'rinadigan qoidani olib tashlash o'rtasidagi farq, va u saqlangan qoidalar to'plamida qoladi. Izohni bir marta o'zgaruvchiga yozing va qo'shadigan, sinaydigan yoki o'chiradigan har bir buyruqda bir xil satrni ishlating.

Yana qo'shish o'rniga kerakli holatni sinab ko'ring

Tunnel ko'tarilgan paytda nima bo'lishi kerakligini yozing: qaysi interfeyslar, qaysi manba va manzil, qaysi protokol va qaysi port. Keyin har bir qoidani sinov va undan keyin kiritish sifatida ifodalang, ikkinchi ishga tushishda qoida topilsin va hech narsa qilinmasin. Qoida mavjud bo'lganda tekshiruv buyrug'i nol bilan chiqadi, va skriptga kerak bo'lgan signal aynan shu. iptables ma'lumotnomasi bu yerda ishlatilgan tekshirish, qo'shish va kiritish shakllarini hujjatlashtiradi.

iptables -C VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT ||
  iptables -A VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT

Joylashuvga ehtiyot bo'ling. Qoidani tekshirib, boshiga kiritish avval birinchi kelgan qasddan rad etishdan oldin ruxsatni siljitishi mumkin, shuning uchun ikkinchi ishga tushish hech narsa qo'shmasa ham xatti-harakatni o'zgartiradi. O'z zanjiringiz ichida oxiriga qo'shing va tartibni o'sha zanjirga sakrash joyi bilan boshqaring. Agar zanjir ichidagi tartib muhim bo'lsa, qoidama-qoida yamab chiqish o'rniga ma'lum ro'yxatdan zanjirni qayta quring.

Kerakli qoidani barqaror sinov sifatida ifodalash mumkin bo'lmasa, to'xtang. Bu odatda kerakli holat hali noaniq ekanini bildiradi.

Chidashiga umid qilish o'rniga o'zgarishni tartiblang

Ilgakning ikkita chaqiruvi bir-biriga tushishi mumkin, va ikkalasi ham biri qo'shishdan oldin qoidaning yo'qligini ko'rishi mumkin. xtables kutish varianti buyruqni qulfni kutishga majbur qiladi, lekin ikki buyruq bo'ylab tekshirib-keyin-qo'shish ketma-ketligini atomar qilmaydi. Butun amalni o'z qulfingiz bilan tartiblang yoki e'lon qilingan to'plamni bitta tranzaksiya sifatida qo'llaydigan menejerdan foydalaning. nftables oxirgisini qila oladi, va bu uni mavjud bo'lgan xostlarda afzal ko'rishning bir sababidir.

flock /run/vpn-hook.lock /usr/local/sbin/vpn-firewall-apply
nft -f /etc/nftables/vpn-hook.nft

Qaysi mexanizmni tanlasangiz ham, muhim qismni qisqa tuting va uni qayta kirishli qiling: yarim yo'lda muvaffaqiyatsiz bo'lgan ilgakni qayta ishga tushirish xavfsiz bo'lishi kerak. Natijani jurnalga yozing, takroriy ishga tushish qoidalar sonidan taxmin qilinmasin, jurnalda ko'rinsin. Agar ikki xil nazoratchi ilgakni chaqira olsa, avval shuni tuzating; hech bir qulf ikki egasini tuzatmaydi.

Faqat o'zingizga tegishli narsani demontaj qiling

Demontaj o'rinbosar ulanishni u nafaqaga chiqargan ulanishdan ajratishi kerak, va hech qachon tartibli tozalash olmaydigan hodisaga bardosh berishi kerak. Qo'shish uchun ishlatgan bir xil identifikatorlar bilan o'chiring, va tozalashni soddalashtirish uchun hech qachon umumiy zanjirni bo'shatmang. Qattiq to'xtashdan keyin pastki ilgak ishladi deb taxmin qilish o'rniga keyingi startda moslashtirish bosqichini ishga tushiring.

iptables -D VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
iptables -F VPN_HOOK
ip -brief link show type tun

Interfeysning umri ham loyihaga kiradi. Qayta ulanish boshqa nomli qurilma yaratishi mumkin, shuning uchun ikkinchi tunnel nomini qattiq kodlaydigan qoida hali amalda ko'rinib turib, eskiradi. Ulanishning o'zi oshkor qiladigan identifikatsiyani afzal ko'ring va har ishga tushishda uni qayta o'qing. Uch hodisani alohida sinang: takroriy ulanish, o'rinbosar ulanish va o'chirish. Ruxsat etilgan trafik uchtasidan ham nusxalarsiz o'tishi kerak, aloqasiz xizmatlar esa tegilmagan qolishi kerak.

Yurish ilgakning egasi, u qo'shadigan har bir qoida uchun sinov, bitta tartiblangan yo'l va faqat o'z holatini olib tashlaydigan demontaj bo'lganda tugaydi. Ikki marta ishlatish xavfsiz ilgak bir marta aqlli ilgakdan qimmatroq.

O'xshash maqolalar