Per què apareix l'avís de purga de rutes de vpnc en un contenidor
La purga de la memòria cau de rutes és una resta d'un nucli que ja no manté aquesta memòria; l'error de només lectura ve del muntatge del contenidor, no del túnel.
Els registres nous de contenidors sovint acaben amb una queixa Read-only file system sobre /proc/sys/net/ipv4/route/flush, i aquesta línia rep la culpa d'un túnel que pot estar perfectament sa. L'escriptura que hi ha darrere apunta a una entrada del nucli que ja no fa res d'útil ara que la memòria cau de rutes IPv4 ha desaparegut. Dins d'un contenidor /proc/sys es munta en només lectura, així que la redirecció es rebutja abans que hi arribi cap valor i l'intèrpret escriu aquest rebuig. Un túnel que funciona pot imprimir aquest avís mentre la línia antiga es quedi a l'script, i --privileged no fa mai que l'escriptura sigui significativa.
Què intentava purgar l'script
Els scripts de connexió més antics acabaven amb una neteja de la memòria cau: escriure un valor en un fitxer de control del nucli i demanar a la pila IPv4 que descartés la seva memòria cau d'encaminament, perquè es triés una ruta de túnel nova sense esperar que les entrades obsoletes caduquessin. El fitxer s'adreçava sota /proc/sys/net/ipv4/, cosa que feia de l'operació una redirecció de l'intèrpret i no una ordre d'encaminament. El nucli 3.6 va eliminar aquella memòria cau, i amb ella la raó de ser de la purga. Res del camí de dades actual no depèn d'aquella escriptura.
L'entrada mateixa va sobreviure com a fitxer llegat de només escriptura, així que un script que encara hi escriu arriba a un camí real i a una comprovació de permisos real. En un amfitrió l'escriptura retorna èxit i no canvia res. En un contenidor la mateixa redirecció topa amb /proc/sys en només lectura i falla amb EROFS, que l'intèrpret imprimeix com el missatge de sistema de fitxers de només lectura. En nuclis on el camí realment és absent la formulació esdevé No such file or directory, i la conclusió no canvia.
Els dos errors diuen coses diferents, i la diferència val la pena mantenir-la clara. Read-only file system vol dir que el nucli va arribar a una entrada i va refusar l'escriptura; No such file or directory vol dir que l'entrada ha desaparegut. Cap dels dos missatges informa sobre el dispositiu del túnel, les rutes o la resolució de noms, així que cap pot justificar més privilegis.
És l'ordre el que fa que el missatge sembli causal. Un script de connexió instal·la rutes, canvia l'estat de la interfície i reescriu la resolució de noms abans d'arribar a la neteja del final, així que l'última línia impresa és la que la gent cita fins i tot quan cada pas important ha retornat èxit. Un túnel que s'estableix i transporta trànsit mentre imprimeix aquest avís encaixa exactament amb el mecanisme anterior.
Comproveu el muntatge i la ruta abans d'afegir privilegis
Tres lectures separen un avís cosmètic d'una fallada real: si l'script instal·lat encara porta la línia, com es munta /proc/sys i on va realment el trànsit de l'aplicació. Executeu-les al mateix espai de noms del contenidor o a l'amfitrió on va aparèixer l'avís, perquè una comprovació en una màquina no relacionada respon una pregunta diferent.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10La resposta de grep és més feble del que sembla, perquè un encert demostra que la línia hi és, no que s'executi sense protecció; un script mantingut pot portar l'escriptura dins d'una guarda que la salta. findmnt -no OPTIONS /proc/sys resol el muntatge directament, i ro en aquesta sortida vol dir que tota escriptura per sota d'aquell punt es rebutja faci el que faci l'script. Després, la consulta de ruta mostra si el destí que l'aplicació necessita es resol per la interfície del túnel o pel gateway per defecte del contenidor. Una consulta que tria el gateway per defecte vol dir que el túnel s'ha aixecat i que res hi encamina, cosa que és un problema d'encaminament i no de privilegis.
D'on surt realment la correcció
La correcció mantinguda viu a l'script i no als indicadors del contenidor. L'vpnc-script d'origen ha canviat com gestiona aquesta operació, així que compareu la còpia dins la imatge amb l'origen actual i actualitzeu pel paquet o la construcció d'imatge que la subministra. Un fitxer editat a mà dins d'un contenidor en marxa no és revisable i no sobreviurà a la propera construcció.
--privileged està documentat com a concessió de tots els permisos més accés ampli als dispositius, una concessió gran per a un missatge que no canvia res, així que anomeneu el permís que falta si realment n'hi ha un d'absent. Després de l'actualització, repetiu la consulta de ruta i deixeu que una aplicació faci servir el túnel, perquè un registre silenciós i una connexió que funciona són resultats separats.