Kāpēc vpnc maršrutu notīrīšanas brīdinājums parādās konteinerā
Maršrutu kešatmiņas notīrīšana ir kodola, kas šo kešatmiņu vairs netur, palieka; tikai-lasīšanas kļūda nāk no konteinera montāžas, nevis no tuneļa.
Svaigi konteinera žurnāli bieži beidzas ar Read-only file system sūdzību par /proc/sys/net/ipv4/route/flush, un šī rinda tiek vainota tuneļa dēļ, kas var būt pilnīgi vesels. Rakstīšana aiz tās mērķē uz kodola ierakstu, kas vairs neko noderīgu nedara, kopš IPv4 maršrutu kešatmiņa ir pazudusi. Konteinera iekšpusē /proc/sys tiek montēts tikai lasīšanai, tāpēc pāradresācija tiek noraidīta pirms jebkādas vērtības nonākšanas, un čaula izdrukā šo noraidījumu. Strādājošs tunelis var drukāt šo brīdinājumu, kamēr vecā rinda paliek skriptā, un --privileged nekad nepadara rakstīšanu jēgpilnu.
Ko skripts mēģināja notīrīt
Vecāki savienojuma skripti beidzās ar kešatmiņas tīrīšanu: ierakstīt vērtību kodola vadības failā un lūgt IPv4 stekam izmest savu maršrutēšanas kešatmiņu, lai jauns tuneļa maršruts tiktu izvēlēts, negaidot, kamēr novecojušie ieraksti zaudē derīgumu. Fails tika adresēts zem /proc/sys/net/ipv4/, kas operāciju padarīja par čaulas pāradresāciju, nevis maršrutēšanas komandu. Kodols 3.6 noņēma šo kešatmiņu, un līdz ar to arī notīrīšanas pastāvēšanas iemeslu. Nekas pašreizējā datu ceļā nav atkarīgs no šīs rakstīšanas.
Pats ieraksts izdzīvoja kā vecs tikai rakstīšanai paredzēts fails, tāpēc skripts, kas tajā joprojām raksta, sasniedz reālu ceļu un reālu atļauju pārbaudi. Uz saimnieka rakstīšana atgriež panākumus un neko nemaina. Konteinerā tā pati pāradresācija atsitas pret tikai lasīšanai paredzētu /proc/sys un neizdodas ar EROFS, ko čaula izdrukā kā tikai lasīšanai paredzētas failu sistēmas ziņojumu. Kodolos, kur ceļa tiešām nav, formulējums kļūst No such file or directory, un secinājums nemainās.
Abas kļūdas saka dažādas lietas, un atšķirību ir vērts saglabāt skaidru. Read-only file system nozīmē, ka kodols sasniedza ierakstu un atteicās no rakstīšanas; No such file or directory nozīmē, ka ieraksts ir pazudis. Neviens ziņojums neziņo par tuneļa ierīci, maršrutiem vai nosaukumu atrisināšanu, tāpēc neviens nevar attaisnot vairāk privileģiju.
Tieši secība liek ziņojumam izskatīties cēloņsakarīgam. Savienojuma skripts instalē maršrutus, maina saskarnes stāvokli un pārraksta nosaukumu atrisināšanu, pirms tas sasniedz tīrīšanu beigās, tāpēc pēdējā izdrukātā rinda ir tā, ko cilvēki citē, pat ja katrs svarīgais solis atgrieza panākumus. Tunelis, kas izveidojas un pārvadā satiksmi, drukājot šo brīdinājumu, precīzi atbilst iepriekš aprakstītajam mehānismam.
Pārbaudiet montāžu un maršrutu pirms privileģijas pievienošanas
Trīs nolasījumi atdala kosmētisku brīdinājumu no īstas kļūmes: vai instalētais skripts joprojām satur rindu, kā ir montēts /proc/sys un kur lietotnes satiksme patiešām dodas. Izpildiet tos tajā pašā konteinera nosaukumvietā vai saimniekā, kur brīdinājums parādījās, jo pārbaude nesaistītā mašīnā atbild uz citu jautājumu.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10grep atbilde ir vājāka, nekā izskatās, jo atradums pierāda, ka rinda pastāv, nevis ka tā darbojas bez aizsardzības; uzturēts skripts var nest rakstīšanu aizsardzībā, kas to izlaiž. findmnt -no OPTIONS /proc/sys tieši nosaka montāžu, un ro šajā izvadē nozīmē, ka katra rakstīšana zem šī punkta tiek noraidīta, lai ko skripts darītu. Pēc tam maršruta meklēšana parāda, vai lietotnei vajadzīgais galamērķis tiek atrisināts caur tuneļa saskarni vai caur konteinera noklusējuma vārteju. Meklēšana, kas izvēlas noklusējuma vārteju, nozīmē, ka tunelis pacēlās un nekas tajā netiek maršrutēts, un tā ir maršrutēšanas, nevis privileģiju problēma.
No kurienes labojums patiešām nāk
Uzturētais labojums dzīvo skriptā, nevis konteinera karodziņos. upstream vpnc-script ir mainījis, kā apstrādā šo operāciju, tāpēc salīdziniet kopiju attēlā ar pašreizējo upstream un atjauniniet, izmantojot pakotni vai attēla būvējumu, kas to piegādā. Manuāli rediģēts fails darbojošā konteinerā nav pārskatāms un neizturēs nākamo būvējumu.
--privileged ir dokumentēts kā visu iespēju un plašas ierīču piekļuves piešķiršana, kas ir liels piekāpšanās ziņojumam, kurš neko nemaina, tāpēc nosauciet trūkstošo iespēju, ja tā patiešām trūkst. Pēc atjaunināšanas atkārtojiet maršruta meklēšanu un ļaujiet lietotnei izmantot tuneli, jo kluss žurnāls un strādājošs savienojums ir atsevišķi rezultāti.