Proč se v kontejneru objevuje varování vpnc o vymazání tras
Vymazání mezipaměti tras je pozůstatek jádra, které tuto mezipaměť už nevede; chyba jen pro čtení pochází z připojení v kontejneru, ne z tunelu.
Čerstvé protokoly kontejnerů často končí stížností Read-only file system na /proc/sys/net/ipv4/route/flush a tento řádek je obviňován za tunel, který může být zcela v pořádku. Zápis za ním cílí na položku jádra, která už nic užitečného nedělá, protože mezipaměť tras IPv4 zmizela. Uvnitř kontejneru se /proc/sys připojuje jen pro čtení, takže přesměrování je odmítnuto dřív, než se dostane nějaká hodnota, a shell to odmítnutí vypíše. Fungující tunel může toto varování vypisovat, dokud starý řádek zůstává ve skriptu, a --privileged nikdy neudělá zápis smysluplným.
Co se skript snažil vymazat
Starší připojovací skripty končily vyčištěním mezipaměti: zapsat hodnotu do řídicího souboru jádra a požádat zásobník IPv4, aby zahodil svou mezipaměť směrování, takže nová trasa tunelu se vybrala, aniž by se čekalo na vypršení zastaralých položek. Soubor byl adresován pod /proc/sys/net/ipv4/, což z operace udělalo přesměrování shellu, nikoli směrovací příkaz. Jádro 3.6 tuto mezipaměť odstranilo a s ní i důvod existence vymazání. Nic v aktuální datové cestě na ten zápis nespoléhá.
Položka sama přežila jako starší soubor pouze pro zápis, takže skript, který do něj stále zapisuje, dosáhne skutečné cesty a skutečné kontroly oprávnění. Na hostiteli zápis vrátí úspěch a nic nezmění. V kontejneru stejné přesměrování narazí na /proc/sys jen pro čtení a selže s EROFS, což shell vypíše jako zprávu o systému souborů jen pro čtení. Na jádrech, kde cesta skutečně chybí, se znění změní na No such file or directory a závěr se nemění.
Obě chyby říkají různé věci a rozdíl stojí za to udržet. Read-only file system znamená, že jádro dosáhlo položky a zápis odmítlo; No such file or directory znamená, že položka zmizela. Ani jedna zpráva nic neříká o zařízení tunelu, trasách ani překladu jmen, takže ani jedna nemůže ospravedlnit vyšší oprávnění.
Pořadí je to, co zprávě dává zdánlivě kauzální podobu. Připojovací skript instaluje trasy, mění stav rozhraní a přepisuje překlad jmen, než se dostane k vyčištění na konci, takže poslední vypsaný řádek je ten, který lidé citují, i když každý důležitý krok vrátil úspěch. Tunel, který se naváže a přenáší provoz, zatímco vypisuje toto varování, přesně odpovídá výše popsanému mechanismu.
Zkontrolujte připojení a trasu, než přidáte oprávnění
Tři čtení oddělují kosmetické varování od skutečné poruchy: zda instalovaný skript stále nese řádek, jak je připojen /proc/sys a kam provoz aplikace skutečně jde. Spusťte je ve stejném jmenném prostoru kontejneru nebo na hostiteli, kde se varování objevilo, protože kontrola na nesouvisejícím stroji odpovídá na jinou otázku.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10Odpověď grep je slabší, než vypadá, protože nález dokazuje, že řádek existuje, ne že běží bez ochrany; udržovaný skript může zápis nést uvnitř kontroly, která ho přeskakuje. findmnt -no OPTIONS /proc/sys vyřeší připojení přímo a ro v tomto výstupu znamená, že každý zápis pod tímto bodem je odmítnut, ať skript dělá cokoli. Hledání trasy pak ukáže, zda se cíl, který aplikace potřebuje, překládá přes rozhraní tunelu, nebo přes výchozí bránu kontejneru. Hledání, které zvolí výchozí bránu, znamená, že tunel vstal a nic do něj nesměruje, což je problém směrování, ne oprávnění.
Odkud oprava skutečně přichází
Udržovaná oprava žije ve skriptu, nikoli v přepínačích kontejneru. upstream vpnc-script změnil, jak s touto operací zachází, takže porovnejte kopii v obraze s aktuálním upstreamem a aktualizujte přes balíček nebo sestavení obrazu, které ji dodává. Ručně upravený soubor v běžícím kontejneru nelze zkontrolovat a nepřežije další sestavení.
--privileged je dokumentován jako udělení všech schopností a širokého přístupu k zařízením, velký ústupek za zprávu, která nic nemění, takže pojmenujte chybějící schopnost, pokud skutečně chybí. Po aktualizaci zopakujte hledání trasy a nechte aplikaci tunel použít, protože tichý protokol a fungující spojení jsou oddělené výsledky.