Madalas magtapos ang sariwang log ng container sa isang reklamong Read-only file system tungkol sa /proc/sys/net/ipv4/route/flush, at ang linyang iyon ang sinisisi para sa isang tunnel na maaaring ganap na malusog. Ang pagsusulat sa likod nito ay tumutungo sa isang entry ng kernel na wala nang ginagawang kapaki-pakinabang ngayong wala na ang cache ng ruta ng IPv4. Sa loob ng isang container, ang /proc/sys ay naka-mount na read-only, kaya tinatanggihan ang redirection bago pa man may halagang dumating at ipinapasok ng shell ang pagtanggi na iyon. Ang gumaganang tunnel ay maaaring maglabas ng babalang ito habang nananatili ang lumang linya sa script, at hindi kailanman ginagawang makabuluhan ng --privileged ang pagsusulat.

Ano ang sinusubukang i-flush ng script

Nagtatapos ang mga lumang script ng koneksyon sa isang paglilinis ng cache: magsulat ng halaga sa isang control file ng kernel at hilingin sa stack ng IPv4 na itapon ang cache ng routing nito, upang mapili ang bagong ruta ng tunnel nang hindi hinihintay na mag-expire ang mga lumang entry. Ang file ay naka-address sa ilalim ng /proc/sys/net/ipv4/, na ginawang redirection ng shell ang operasyon at hindi utos ng routing. Inalis ng kernel 3.6 ang cache na iyon, at kasama nito ang dahilan ng pagkakaroon ng flush. Wala sa kasalukuyang landas ng data ang umaasa sa pagsusulat na iyon.

Ang entry mismo ay nanatili bilang isang lumang file na write-only, kaya ang script na nagsusulat pa rin dito ay nakararating sa isang tunay na landas at tunay na pagsusuri ng pahintulot. Sa host, nagbabalik ng tagumpay ang pagsusulat at wala itong binabago. Sa container, ang parehong redirection ay bumangga sa isang read-only na /proc/sys at bigong may EROFS, na ipinapasok ng shell bilang mensahe ng read-only na filesystem. Sa mga kernel kung saan talagang wala ang landas, ang pananalita ay nagiging No such file or directory, at hindi nagbabago ang konklusyon.

Magkaiba ang sinasabi ng dalawang error, at sulit na panatilihing malinaw ang pagkakaiba. Ang Read-only file system ay nangangahulugang naabot ng kernel ang isang entry at tinanggihan ang pagsusulat; ang No such file or directory ay nangangahulugang wala na ang entry. Wala sa mga mensahe ang nag-uulat tungkol sa device ng tunnel, mga ruta o resolution ng pangalan, kaya wala sa kanila ang makapagbibigay-katwiran ng mas maraming pribilehiyo.

Ang pagkakasunod-sunod ang nagpapamukhang sanhi ang mensahe. Ang script ng koneksyon ay naglalagay ng mga ruta, nagbabago ng estado ng interface at nagsusulat muli ng resolution ng pangalan bago maabot ang paglilinis sa dulo, kaya ang huling linyang naipasok ang linyang sinipi ng mga tao kahit na bawat mahalagang hakbang ay nagbalik ng tagumpay. Ang tunnel na nagtatatag at nagdadala ng trapiko habang ipinapasok ang babalang ito ay tumutugma nang eksakto sa mekanismong nasa itaas.

Suriin ang mount at ang ruta bago magdagdag ng pribilehiyo

Tatlong pagbasa ang naghihiwalay ng kosmetikong babala sa tunay na pagkabigo: kung dala pa rin ng naka-install na script ang linya, kung paano naka-mount ang /proc/sys at saan talaga pumupunta ang trapiko ng aplikasyon. Patakbuhin ang mga ito sa parehong namespace ng container o sa host kung saan lumitaw ang babala, dahil ang pagsusuri sa isang walang kaugnayang makina ay sumasagot sa ibang tanong.

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

Ang sagot ng grep ay mas mahina kaysa sa tila, dahil ang mahanap ay nagpapatunay na umiiral ang linya, hindi na tumatakbo ito nang walang proteksyon; ang isang maingat na pinapanatiling script ay maaaring magdala ng pagsusulat sa loob ng isang guard na lumalaktaw dito. Ang findmnt -no OPTIONS /proc/sys ay direktang nagtatakda ng mount, at ang ro sa output na iyon ay nangangahulugang tinatanggihan ang bawat pagsusulat sa ilalim ng puntong iyon, anuman ang gawin ng script. Pagkatapos, ipinapakita ng paghahanap ng ruta kung ang destinasyong kailangan ng aplikasyon ay nareresolba sa pamamagitan ng interface ng tunnel o ng default gateway ng container. Ang paghahanap na pumipili ng default gateway ay nangangahulugang umangat ang tunnel at walang naka-ruta papasok dito, na problema sa routing at hindi sa pribilehiyo.

Saan talaga nagmumula ang pagwawasto

Ang pinapanatiling pagwawasto ay nasa script at hindi sa mga flag ng container. Binago ng upstream vpnc-script ang paraan ng paghawak nito sa operasyong ito, kaya ihambing ang kopya sa loob ng image sa kasalukuyang upstream at i-update sa pamamagitan ng package o image build na nagbibigay nito. Ang file na na-edit nang manu-mano sa loob ng tumatakbong container ay hindi maaaring suriin at hindi makakaligtas sa susunod na build.

--privileged ay dokumentadong nagbibigay ng lahat ng kakayahan kasama ang malawak na pag-access sa device, isang malaking konsesyon para sa isang mensaheng walang binabago, kaya pangalanan ang kulang na kakayahan kung talagang may kulang. Pagkatapos ng update, ulitin ang paghahanap ng ruta at hayaan ang isang aplikasyon na gamitin ang tunnel, dahil ang tahimik na log at ang gumaganang koneksyon ay magkaibang resulta.

Kaugnay na mga artikulo