Por que aparece o aviso de purga de rutas de vpnc nun contedor
A purga da caché de rutas é un resto dun núcleo que xa non mantén esa caché; o erro de só lectura vén da montaxe do contedor, non do túnel.
Os rexistros novos de contedores adoitan rematar cunha queixa Read-only file system sobre /proc/sys/net/ipv4/route/flush, e esa liña carrexa coa culpa dun túnel que pode estar perfectamente san. A escritura que hai detrás apunta a unha entrada do núcleo que xa non fai nada útil agora que a caché de rutas IPv4 desapareceu. Dentro dun contedor /proc/sys móntase en só lectura, así que a redirección rexéitase antes de que chegue ningún valor e o shell imprime ese rexeitamento. Un túnel que funciona pode imprimir este aviso mentres a liña antiga siga no script, e --privileged nunca fai que a escritura teña sentido.
Que intentaba purgar o script
Os scripts de conexión antigos remataban cunha limpeza de caché: escribir un valor nun ficheiro de control do núcleo e pedirlle á pila IPv4 que descartase a súa caché de encamiñamento, para que se elixise unha ruta de túnel nova sen agardar a que caducasen as entradas obsoletas. O ficheiro dirixíase baixo /proc/sys/net/ipv4/, o que convertía a operación nunha redirección do shell e non nun comando de encamiñamento. O núcleo 3.6 eliminou esa caché, e con ela a razón de ser da purga. Nada no camiño de datos actual depende desa escritura.
A entrada sobreviviu como ficheiro herdado de só escritura, así que un script que aínda escribe nela chega a un camiño real e a unha comprobación de permisos real. Nun host a escritura devolve éxito e non cambia nada. Nun contedor a mesma redirección choca cun /proc/sys de só lectura e falla con EROFS, que o shell imprime como a mensaxe de sistema de ficheiros de só lectura. En núcleos onde o camiño realmente falta, a redacción pasa a No such file or directory, e a conclusión non cambia.
Os dous erros din cousas distintas, e a diferenza paga a pena mantela clara. Read-only file system significa que o núcleo chegou a unha entrada e rexeitou a escritura; No such file or directory significa que a entrada desapareceu. Ningunha das mensaxes informa sobre o dispositivo do túnel, as rutas ou a resolución de nomes, así que ningunha pode xustificar máis privilexios.
É a orde o que fai que a mensaxe pareza causal. Un script de conexión instala rutas, cambia o estado da interface e reescribe a resolución de nomes antes de chegar á limpeza do final, así que a última liña impresa é a que a xente cita mesmo cando cada paso importante devolveu éxito. Un túnel que se establece e transporta tráfico mentres imprime este aviso encaixa exactamente co mecanismo anterior.
Comprobe a montaxe e a ruta antes de engadir privilexios
Tres lecturas separan un aviso cosmético dun fallo real: se o script instalado aínda leva a liña, como se monta /proc/sys e a onde vai realmente o tráfico da aplicación. Execúteas no mesmo espazo de nomes do contedor ou no host onde apareceu o aviso, porque unha comprobación nunha máquina allea responde a outra pregunta.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10A resposta de grep é máis feble do que parece, porque un acerto demostra que a liña está presente, non que se execute sen protección; un script mantido pode levar a escritura dentro dunha garda que a salta. findmnt -no OPTIONS /proc/sys resolve a montaxe directamente, e ro nesa saída significa que toda escritura por baixo dese punto se rexeita faga o que faga o script. Despois, a consulta de ruta mostra se o destino que a aplicación necesita se resolve pola interface do túnel ou pola pasarela predeterminada do contedor. Unha consulta que escolle a pasarela predeterminada significa que o túnel subiu e nada encamiña cara a el, o que é un problema de encamiñamento e non de privilexios.
De onde sae realmente a corrección
A corrección mantida vive no script e non nos indicadores do contedor. O vpnc-script de orixe cambiou como xestiona esta operación, así que compare a copia dentro da imaxe coa orixe actual e actualice mediante o paquete ou a compilación de imaxe que a fornece. Un ficheiro editado a man dentro dun contedor en marcha non é revisable e non sobrevivirá á seguinte compilación.
--privileged está documentado como concesión de todas as capacidades máis acceso amplo a dispositivos, unha concesión grande para unha mensaxe que non cambia nada, así que nomee a capacidade que falta se realmente falta algunha. Despois da actualización, repita a consulta de ruta e deixe que unha aplicación use o túnel, porque un rexistro silencioso e unha conexión que funciona son resultados separados.