Ferske containerloggar endar ofte på ei Read-only file system-klage over /proc/sys/net/ipv4/route/flush, og den linja får skulda for ein tunnel som kan vere heilt sunn. Skrivinga bak han treffer ein kjerneoppføring som ikkje lenger gjer noko nyttig no som IPv4-rutecachen er borte. Inne i ein container blir /proc/sys montert skriveverna, så omdirigeringa blir avvist før nokon verdi landar, og skalet skriv ut den avvisinga. Ein fungerande tunnel kan skrive ut denne åtvaringa så lenge den gamle linja blir verande i skriptet, og --privileged gjer aldri skrivinga meiningsfull.

Kva skriptet prøvde å tømme

Eldre tilkoplingsskript slutta med ei cacheopprydding: skrive ein verdi til ei kjernekontrollfil og be IPv4-stakken kaste rutecachen sin, slik at ei ny tunnelrute vart vald utan å vente på at utdaterte oppføringar gjekk ut. Fila vart adressert under /proc/sys/net/ipv4/, noko som gjorde operasjonen til ei skalomdirigering i staden for ein rutekommando. Kjerne 3.6 fjerna den cachen, og med han grunnen til at tømminga fanst. Ingenting i den noverande databanen er avhengig av den skrivinga.

Oppføringa sjølv overlevde som ei gammal skriveverna fil, så eit skript som framleis skriv til ho, når ein ekte sti og ein ekte løyvekontroll. På ein vert returnerer skrivinga suksess og endrar ingenting. I ein container treffer same omdirigering ei skriveverna /proc/sys og feilar med EROFS, som skalet skriv ut som den skriveverna filsystemmeldinga. På kjernar der stien verkeleg manglar, blir ordlyden No such file or directory, og konklusjonen endrar seg ikkje.

Dei to feila seier ulike ting, og skilnaden er verdt å halde klar. Read-only file system tyder at kjernen nådde ei oppføring og avviste skrivinga; No such file or directory tyder at oppføringa er borte. Ingen av meldingane rapporterer om tunneleininga, rutene eller namneoppslaget, så ingen av dei kan rettferdiggjere meir privilegium.

Det er rekkjefølgja som får meldinga til å sjå kausal ut. Eit tilkoplingsskript installerer ruter, endrar grensesnitttilstand og skriv namneoppslaget på nytt før det når oppryddinga til slutt, så den siste linja som blir skriven ut, er den folk siterer sjølv når kvart viktig steg returnerte suksess. Ein tunnel som blir etablert og ber trafikk medan han skriv ut denne åtvaringa, passar nøyaktig til mekanismen ovanfor.

Kontroller monteringa og ruta før du legg til privilegium

Tre lesingar skil ei kosmetisk åtvaring frå ein ekte feil: om det installerte skriptet framleis ber linja, korleis /proc/sys er montert, og kvar trafikken til applikasjonen faktisk går. Køyr dei i same containernamnerom eller på verten der åtvaringa dukka opp, fordi ein kontroll på ein urelatert maskin svarar på eit anna spørsmål.

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

grep-svaret er svakare enn det ser ut, fordi eit treff beviser at linja finst, ikkje at ho køyrer uverna; eit vedlikehalde skript kan bere skrivinga inne i ein vakt som hoppar over ho. findmnt -no OPTIONS /proc/sys avgjer monteringa direkte, og ro i den utskrifta tyder at kvar skriving under det punktet blir avvist, uansett kva skriptet gjer. Ruteoppslaget viser deretter om målet applikasjonen treng, blir løyst gjennom tunellgrensesnittet eller gjennom standard gateway i containeren. Eit oppslag som vel standard gateway, tyder at tunnelen kom opp og ingenting blir ruta inn i han, noko som er eit ruteproblem og ikkje eit privilegieproblem.

Kvar rettinga faktisk kjem frå

Den vedlikehalde rettinga ligg i skriptet og ikkje i containerflaggene. upstream vpnc-script har endra korleis det handterer denne operasjonen, så samanlikn kopien i imaget med gjeldande upstream og oppdater via pakken eller imagebygginga som leverer han. Ei handredigert fil i ein køyrande container kan ikkje gjennomgåast og overlever ikkje neste bygg.

--privileged er dokumentert som å gje alle capabilities pluss brei einingstilgang, ei stor innrømming for ei melding som ikkje endrar noko, så nemn den manglande capabilityen i staden om ein faktisk manglar. Etter oppdateringa gjer du ruteoppslaget på nytt og lèt ein applikasjon bruke tunnelen, fordi ein stille logg og ei fungerande tilkopling er separate resultat.

Relaterte artiklar