Sveži zapisi kontejnera često završavaju pritužbom Read-only file system o /proc/sys/net/ipv4/route/flush, a taj red se okrivljuje za tunel koji može biti potpuno zdrav. Upis iza njega cilja na stavku jezgre koja više ne radi ništa korisno otkako je keš IPv4 ruta nestao. Unutar kontejnera /proc/sys se montira samo za čitanje, pa se preusmeravanje odbija pre nego što stigne ikakva vrednost i ljuska ispiše to odbijanje. Ispravan tunel može ispisivati ovo upozorenje dok god stari red ostaje u skripti, a --privileged nikada ne čini upis smislenim.

Šta je skripta pokušavala očistiti

Starije skripte za povezivanje završavale su čišćenjem keša: upisati vrednost u kontrolnu datoteku jezgre i zamoliti stog IPv4 da odbaci svoj keš usmeravanja, kako bi nova ruta tunela bila odabrana bez čekanja da zastarele stavke isteknu. Datoteka je bila adresirana pod /proc/sys/net/ipv4/, što je operaciju činilo preusmeravanjem ljuske, a ne naredbom usmeravanja. Jezgra 3.6 uklonila je taj keš, a s njim i razlog postojanja brisanja. Ništa na trenutnoj putanji podataka ne zavisi od tog upisa.

Sama stavka preživela je kao nasleđena datoteka samo za upis, pa skripta koja još piše u nju doseže stvarnu putanju i stvarnu proveru dozvola. Na hostu upis vraća uspeh i ne menja ništa. U kontejneru isto preusmeravanje nailazi na /proc/sys samo za čitanje i pada s EROFS, što ljuska ispiše kao poruku datotečnog sistema samo za čitanje. Na jezgrama gde putanja zaista nedostaje formulacija postaje No such file or directory i zaključak se ne menja.

Dve greške govore različite stvari i razliku vredi držati jasnom. Read-only file system znači da je jezgra dosegla stavku i odbila upis; No such file or directory znači da je stavka nestala. Nijedna poruka ne izveštava o uređaju tunela, rutama ili razrešavanju imena, pa nijedna ne može opravdati više privilegija.

Poredak je ono što poruku čini naizgled uzročnom. Skripta za povezivanje instalira rute, menja stanje sučelja i prepisuje razrešavanje imena pre nego što dosegne čišćenje na kraju, pa je zadnji ispisani red onaj koji ljudi citiraju čak i kada je svaki važan korak vratio uspeh. Tunel koji se uspostavi i prenosi promet dok ispisuje ovo upozorenje tačno odgovara gore opisanom mehanizmu.

Proverite montiranje i rutu pre dodavanja privilegija

Tri čitanja razdvajaju kozmetičko upozorenje od stvarnog kvara: nosi li instalirana skripta još taj red, kako je montiran /proc/sys i kamo promet aplikacije zapravo ide. Pokrenite ih u istom imenskom prostoru kontejnera ili na hostu gde se upozorenje pojavilo, jer provera na nepovezanom stroju odgovara na drugo pitanje.

grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10

Odgovor grep-a slabiji je nego što izgleda, jer pogodak dokazuje da red postoji, a ne da se izvodi bez zaštite; održavana skripta može nositi upis unutar zaštite koja ga preskače. findmnt -no OPTIONS /proc/sys izravno rešava montiranje, a ro u tom izlazu znači da se svaki upis ispod te točke odbija, što god skripta radila. Zatim traženje rute pokazuje razrešava li se odredište koje aplikacija treba kroz sučelje tunela ili kroz zadani pristupnik kontejnera. Traženje koje odabere zadani pristupnik znači da se tunel podigao i da ništa ne usmerava u njega, što je problem usmeravanja, a ne privilegija.

Odakle ispravka zapravo dolazi

Održavana ispravka živi u skripti, a ne u zastavicama kontejnera. uzvodni vpnc-script promenio je kako obrađuje ovu operaciju, pa uporedite kopiju u slici s trenutnim uzvodnim izdanjem i ažurirajte kroz paket ili izgradnju slike koja ga dostavlja. Ručno uređena datoteka u pokrenutom kontejneru nije pregledna i neće preživeti sledeću izgradnju.

--privileged je dokumentiran kao davanje svih sposobnosti plus širok pristup uređajima, veliki ustupak za poruku koja ništa ne menja, pa navedite nedostajuću sposobnost ako jedna zaista nedostaje. Nakon ažuriranja ponovite traženje rute i pustite aplikaciju da koristi tunel, jer tih zapisnik i ispravna veza odvojeni su rezultati.

Povezani članci