Kodėl vpnc maršrutų valymo įspėjimas pasirodo konteineryje
Maršrutų podėlio valymas – tai branduolio, kuris nebevaldo šio podėlio, likutis; tik skaitymo klaida kyla iš konteinerio prijungimo, o ne iš tunelio.
Nauji konteinerio žurnalai dažnai baigiasi Read-only file system skundu dėl /proc/sys/net/ipv4/route/flush, ir ta eilutė kaltinama dėl tunelio, kuris gali būti visiškai sveikas. Už jos esantis rašymas taikomas branduolio įrašui, kuris nebedaro nieko naudingo, nes IPv4 maršrutų podėlis dingo. Konteinerio viduje /proc/sys prijungiamas tik skaitymui, todėl peradresavimas atmetamas prieš atsirandant bet kokiai reikšmei, ir apvalkalas atspausdina tą atmetimą. Veikiantis tunelis gali spausdinti šį įspėjimą tol, kol sena eilutė lieka scenarijuje, o --privileged niekada nepadaro rašymo prasmingo.
Ką scenarijus bandė išvalyti
Senesni ryšio scenarijai baigdavosi podėlio valymu: įrašyti reikšmę į branduolio valdymo failą ir paprašyti IPv4 steko išmesti savo maršrutizavimo podėlį, kad naujas tunelio maršrutas būtų pasirinktas nelaukiant, kol pasenę įrašai nustos galioti. Failas buvo adresuojamas po /proc/sys/net/ipv4/, todėl operacija tapo apvalkalo peradresavimu, o ne maršrutizavimo komanda. Branduolys 3.6 pašalino tą podėlį ir kartu valymo egzistavimo priežastį. Niekas dabartiniame duomenų kelyje nepriklauso nuo to rašymo.
Pats įrašas išliko kaip senas tik rašymui skirtas failas, todėl scenarijus, kuris vis dar į jį rašo, pasiekia tikrą kelią ir tikrą leidimų patikrą. Hoste rašymas grąžina sėkmę ir nieko nekeičia. Konteineryje tas pats peradresavimas atsimuša į tik skaitymui skirtą /proc/sys ir nepavyksta su EROFS, kurį apvalkalas atspausdina kaip tik skaitymui skirtos failų sistemos pranešimą. Branduoliuose, kur kelio tikrai nėra, formuluotė tampa No such file or directory, o išvada nesikeičia.
Dvi klaidos sako skirtingus dalykus, ir skirtumą verta išlaikyti aiškų. Read-only file system reiškia, kad branduolys pasiekė įrašą ir atmetė rašymą; No such file or directory reiškia, kad įrašo nebėra. Nė vienas pranešimas nepraneša apie tunelio įrenginį, maršrutus ar vardų sprendimą, todėl nė vienas negali pateisinti daugiau privilegijų.
Būtent tvarka leidžia pranešimui atrodyti priežastingu. Ryšio scenarijus įdiegia maršrutus, pakeičia sąsajos būseną ir perrašo vardų sprendimą, kol pasiekia valymą pabaigoje, todėl paskutinė atspausdinta eilutė yra ta, kurią žmonės cituoja, net kai kiekvienas svarbus žingsnis grąžino sėkmę. Tunelis, kuris susikuria ir neša srautą spausdindamas šį įspėjimą, tiksliai atitinka aukščiau aprašytą mechanizmą.
Patikrinkite prijungimą ir maršrutą prieš pridėdami privilegijų
Trys skaitymai atskiria kosmetinį įspėjimą nuo tikro gedimo: ar įdiegtas scenarijus dar turi eilutę, kaip prijungtas /proc/sys ir kur iš tikrųjų keliauja programos srautas. Vykdykite juos toje pačioje konteinerio vardų erdvėje arba hoste, kuriame pasirodė įspėjimas, nes patikra nesusijusiame kompiuteryje atsako į kitą klausimą.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10grep atsakymas silpnesnis, nei atrodo, nes radinys įrodo, kad eilutė yra, o ne kad ji vykdoma be apsaugos; prižiūrimas scenarijus gali nešti rašymą apsaugos, kuri ją praleidžia, viduje. findmnt -no OPTIONS /proc/sys tiesiogiai išsprendžia prijungimą, o ro tame išvestyje reiškia, kad kiekvienas žemiau to taško esantis rašymas atmetamas, kad ir ką darytų scenarijus. Tada maršruto paieška parodo, ar programai reikalinga paskirtis sprendžiama per tunelio sąsają, ar per konteinerio numatytąją tinklų sietuvą. Paieška, pasirenkanti numatytąją sietuvą, reiškia, kad tunelis pakilo ir niekas į jį nemaršrutizuojama, o tai yra maršrutizavimo, o ne privilegijų problema.
Iš kur iš tikrųjų ateina pataisa
Prižiūrima pataisa gyvena scenarijuje, o ne konteinerio vėliavose. upstream vpnc-script pakeitė, kaip tvarko šią operaciją, todėl palyginkite atvaizde esančią kopiją su dabartiniu upstream ir atnaujinkite per paketą ar atvaizdo kūrimą, kuris ją tiekia. Rankiniu būdu redaguotas failas veikiančiame konteineryje neperžiūrimas ir neišgyvens kito kūrimo.
--privileged dokumentuotas kaip suteikiantis visas galimybes ir platų priėjimą prie įrenginių, tai didelė nuolaida žinutei, kuri nieko nekeičia, todėl įvardykite trūkstamą galimybę, jei jos tikrai trūksta. Po atnaujinimo pakartokite maršruto paiešką ir leiskite programai naudoti tunelį, nes tyli žurnalo eilutė ir veikiantis ryšys yra atskiri rezultatai.