Свежи записи контејнера често завршавају притужбом Read-only file system о /proc/sys/net/ipv4/route/flush, а тај ред се окривљује за тунел који може бити потпуно здрав. Упис иза њега циља на ставку језгра која више не ради ништа корисно откако је кеш IPv4 рута нестао. Унутар контејнера /proc/sys се монтира само за читање, па се преусмеравање одбија пре него што стигне икаква вредност и љуска испише то одбијање. Исправан тунел може исписивати ово упозорење док год стари ред остаје у скрипти, а --privileged никада не чини упис смисленим.

Шта је скрипта покушавала да очисти

Старије скрипте за повезивање завршавале су чишћењем кеша: уписати вредност у контролну датотеку језгра и замолити стог IPv4 да одбаци свој кеш усмеравања, како би нова рута тунела била изабрана без чекања да застареле ставке истекну. Датотека је била адресирана под /proc/sys/net/ipv4/, што је операцију чинило преусмеравањем љуске, а не наредбом усмеравања. Језгро 3.6 уклонило је тај кеш, а с њим и разлог постојања брисања. Ништа на тренутној путањи података не зависи од тог уписа.

Сама ставка преживела је као наслеђена датотека само за упис, па скрипта која још пише у њу досеже стварну путању и стварну проверу дозвола. На хосту упис враћа успех и не мења ништа. У контејнеру исто преусмеравање наилази на /proc/sys само за читање и пада с EROFS, што љуска испише као поруку датотечног система само за читање. На језгрима где путања заиста недостаје формулација постаје No such file or directory и закључак се не мења.

Две грешке говоре различите ствари и разлику вреди држати јасном. Read-only file system значи да је језгро достигло ставку и одбило упис; No such file or directory значи да је ставка нестала. Ниједна порука не извештава о уређају тунела, рутама или разрешавању имена, па ниједна не може оправдати више привилегија.

Поредак је оно што поруку чини наизглед узрочном. Скрипта за повезивање инсталира руте, мења стање сучеља и преписује разрешавање имена пре него што досегне чишћење на крају, па је задњи исписани ред онај који људи цитирају чак и када је сваки важан корак вратио успех. Тунел који се успостави и преноси саобраћај док исписује ово упозорење тачно одговара горе описаном механизму.

Проверите монтирање и руту пре додавања привилегија

Три читања раздвајају козметичко упозорење од стварног квара: носи ли инсталирана скрипта још тај ред, како је монтиран /proc/sys и камо саобраћај апликације заправо иде. Покрените их у истом именском простору контејнера или на хосту где се упозорење појавило, јер провера на неповезаном строју одговара на друго питање.

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-а слабији је него што изгледа, јер погодак доказује да ред постоји, а не да се изводи без заштите; одржавана скрипта може носити упис унутар заштите која га прескаче. findmnt -no OPTIONS /proc/sys изравно решава монтирање, а ro у том излазу значи да се сваки упис испод те тачке одбија, шта год скрипта радила. Затим тражење руте показује разрешава ли се одредиште које апликација треба кроз сучеље тунела или кроз задани приступник контејнера. Тражење које одабере задани приступник значи да се тунел подигао и да ништа не усмерава у њега, што је проблем усмеравања, а не привилегија.

Одакле исправка заправо долази

Одржавана исправка живи у скрипти, а не у заставицама контејнера. узводни vpnc-script променио је како обрађује ову операцију, па упоредите копију у слици с тренутним узводним издањем и ажурирајте кроз пакет или изградњу слике која га доставља. Ручно уређена датотека у покренутом контејнеру није прегледна и неће преживети следећу изградњу.

--privileged је документован као давање свих способности плус широк приступ уређајима, велики уступак за поруку која ништа не мења, па наведите способност која недостаје ако једна заиста недостаје. Након ажурирања поновите тражење руте и пустите апликацију да користи тунел, јер тих записник и исправна веза одвојени су резултати.

Повезани чланци