Nima uchun vpnc marshrut tozalash ogohlantirishi konteynerda paydo bo'ladi
Marshrut keshi tozalash — bu keshni endi saqlamaydigan yadro qoldig'i; faqat o'qish xatosi tunnel bu emas, konteyner mount'idan keladi.
Yangi konteyner jurnallari ko'pincha /proc/sys/net/ipv4/route/flush haqida Read-only file system shikoyati bilan tugaydi va bu satr butunlay sog'lom bo'lishi mumkin bo'lgan tunnelda ayblanadi. Uning ortidagi yozuv IPv4 marshrut keshi yo'qolganidan beri foydali hech narsa qilmaydigan yadro yozuvini nishonga oladi. Konteyner ichida /proc/sys faqat o'qish rejimida mount qilinadi, shuning uchun har qanday qiymat kelishidan oldin qayta yo'naltirish rad etiladi va shell bu rad etishni chop etadi. Ishlaydigan tunnel bu ogohlantirishni eski satr skriptda qolgan ekan chop etishi mumkin va --privileged yozuvni hech qachon mazmunli qilmaydi.
Skript nimani tozalamoqchi edi
Eski ulanish skriptlari kesh tozalash bilan tugardi: yadro nazorat fayliga qiymat yozish va IPv4 stekidan o'z marshrutlash keshini tashlashni so'rash, shunda yangi tunnel marshruti eskirgan yozuvlar muddati tugashini kutmasdan tanlanadi. Fayl /proc/sys/net/ipv4/ ostida manzillangan, bu amalni marshrutlash buyrug'i emas, shell qayta yo'naltirishi qilgan. Yadro 3.6 o'sha keshni, u bilan birga tozalashning mavjudlik sababini ham olib tashladi. Joriy ma'lumot yo'lida hech narsa o'sha yozuvga bog'liq emas.
Yozuvning o'zi eski faqat yozish fayli sifatida saqlanib qoldi, shuning uchun unga hali ham yozadigan skript haqiqiy yo'lga va haqiqiy ruxsat tekshiruviga yetadi. Xostda yozuv muvaffaqiyat qaytaradi va hech narsani o'zgartirmaydi. Konteynerda o'sha qayta yo'naltirish faqat o'qish /proc/sys ga urilib, EROFS bilan muvaffaqiyatsiz bo'ladi, shell buni faqat o'qish fayl tizimi xabari sifatida chop etadi. Yo'l haqiqatan yo'q yadrolarda ibora No such file or directory bo'ladi va xulosa o'zgarmaydi.
Ikki xato turli narsalarni aytadi va farqni aniq saqlashga arziydi. Read-only file system yadro yozuvga yetib, yozishni rad etganini bildiradi; No such file or directory yozuv yo'qolganini bildiradi. Hech qaysi xabar tunnel qurilmasi, marshrutlar yoki nomlarni hal qilish haqida hisobot bermaydi, shuning uchun hech biri ko'proq imtiyozni oqlay olmaydi.
Xabarni sababli ko'rsatadigan narsa tartibdir. Ulanish skripti oxiridagi tozalashga yetishdan oldin marshrutlarni o'rnatadi, interfeys holatini o'zgartiradi va nomlarni hal qilishni qayta yozadi, shuning uchun oxirgi chop etilgan satr odamlar iqtibos keltiradigan satr bo'ladi, hatto har bir muhim qadam muvaffaqiyat qaytargan bo'lsa ham. Bu ogohlantirishni chop etib, o'rnatiladigan va trafik tashiyotgan tunnel yuqoridagi mexanizmga to'liq mos keladi.
Imtiyoz qo'shishdan oldin mount va marshrutni tekshiring
Uch o'qish kosmetik ogohlantirishni haqiqiy nosozlikdan ajratadi: o'rnatilgan skript satrni hali ham olib yurganmi, /proc/sys qanday mount qilingan va ilova trafigi haqiqatan qayerga ketadi. Ularni bir xil konteyner nom maydonida yoki ogohlantirish chiqqan xostda ishga tushiring, chunki aloqasiz mashinadagi tekshiruv boshqa savolga javob beradi.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10grep javobi ko'ringanidan zaif, chunki topilma satr mavjudligini isbotlaydi, himoyasiz ishlashini emas; saqlanadigan skript yozuvni uni o'tkazib yuboradigan himoya ichida olib yurishi mumkin. findmnt -no OPTIONS /proc/sys mountni to'g'ridan-to'g'ri hal qiladi va o'sha chiqishdagi ro o'sha nuqtadan pastdagi har bir yozuv rad etilishini bildiradi, skript nima qilsa ham. Keyin marshrut qidiruvi ilova uchun kerakli manzil tunnel interfeysi orqali yoki konteynerning standart shlyuzi orqali hal qilinishini ko'rsatadi. Standart shlyuzni tanlagan qidiruv tunnel ko'tarilganini va unga hech narsa yo'naltirilmasligini bildiradi, bu marshrutlash muammosi, imtiyoz emas.
Tuzatish aslida qayerdan keladi
Saqlanadigan tuzatish konteyner bayroqlarida emas, skriptda yashaydi. upstream vpnc-script bu amalni qanday boshqarishini o'zgartirdi, shuning uchun tasvir ichidagi nusxani joriy upstream bilan solishtiring va uni ta'minlaydigan paket yoki tasvir qurilishi orqali yangilang. Ishlab turgan konteyner ichida qo'lda tahrirlangan fayl ko'rib chiqilmaydi va keyingi qurilishgacha yashamaydi.
--privileged barcha qobiliyatlar va qurilmalarga keng kirishni berishi hujjatlashtirilgan, bu hech narsani o'zgartirmaydigan xabar uchun katta yon berishdir, shuning uchun haqiqatan qobiliyat yetishmasa, o'shani nomlang. Yangilashdan keyin marshrut qidiruvini takrorlang va ilovaga tunneldan foydalanishga ruxsat bering, chunki sokin jurnal va ishlaydigan ulanish alohida natijalardir.