Prečo net.ipv4.conf.default.forwarding necháva tun0 na pokoji
default.forwarding osieva len nové rozhrania, nie živý tunel. Porovnajte ip_forward, šablónu a rozhranie v namespace, ktorý ho vlastní.
Nastavili ste net.ipv4.conf.default.forwarding=1, reštartovali VPN a tunel napriek tomu zahadzuje pakety, ktoré by brána mala smerovať. Nastavenie v súbore vyzerá správne a rozhranie stále hlási, že preposielanie je vypnuté. Nič nie je pokazené: zmenili ste hodnotu, ktorú dedia budúce rozhrania, nie tú, ktorú používa živý tunel.
Prejdite to na hostiteľovi, ktorý tunel vlastní, v sieťovom namespace, kde tunel skutočne existuje. Kontajner alebo sieťový namespace môže rozhranie držať, zatiaľ čo hostiteľ zobrazuje iné čísla.
Čítajte tri hodnoty spoločne
Začnite porovnaním prepínača platného pre celú bránu, šablóny pre nové rozhrania a rozhrania, ktoré vás zaujíma. Nahraďte tun0 skutočným vstupným rozhraním a prečítajte si aj návratové rozhranie, pretože preposielanie sa vyhodnocuje v mieste, kde paket dorazí.
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.default.forwarding
sysctl net.ipv4.conf.tun0.forwardingČastý výsledok je ip_forward = 0, default.forwarding = 1 a tun0.forwarding = 0. Prvé dve sa nezhodujú v tom, akú úlohu má hostiteľ, a tretia ukazuje, čo rozhranie skutočne robí. Takáto kombinácia zodpovedá hostiteľovi, ktorý nebol nikdy nakonfigurovaný ako router a dostal iba hodnotu zo šablóny. Tri čísla si neodporujú; odpovedajú na tri rôzne otázky. Ani zápis hodnoty šablóny nerozhoduje o úlohe hostiteľa.
Prečo sa hýbe práve globálny prepínač
net.ipv4.ip_forward je ovládanie platné pre celú bránu. Jeho zmena aktualizuje nastavenia preposielania pre jednotlivé rozhrania ako súčasť tej istej operácie, a preto môže jediný zápis prinútiť existujúci tunel začať preposielať. default.forwarding osieva len rozhrania, ktoré sa inicializujú až potom, takže tunel, ktorý už existoval, si drží hodnotu, s ktorou sa narodil.
Dokumentácia jadra označuje ip_forward ako zvláštny z príbuzného dôvodu: jeho zmena resetuje sadu ďalších parametrov IPv4 na predvolené hodnoty pre hostiteľa alebo router. Robí z neho to tupý nástroj. Nastaviť ho raz v rámci zavedenia úlohy brány je v poriadku; prepínať ho opakovane ako ladiaci trik môže potichu prepísať konfiguráciu, ktorú ste pracne doladili.
Hodnoty pre jednotlivé rozhrania majú tiež svoj dôvod. Zámerne riadená brána môže držať preposielanie vypnuté na rozhraní, ktoré by nikdy nemalo smerovať, aj keď hostiteľ preposiela inde. Preto je dôležité čítať živé rozhranie a preto samotná globálna hodnota nie je celá odpoveď. Takúto výnimku čítajte ako vedomé rozhodnutie a zapíšte, čím sa to rozhranie líši. Inak ho budúci inžinier ochotne "opraví".
Urobte nastavenie trvalým na správnom mieste
Úspešný jednorazový sysctl -w dokazuje, že jadro hodnotu prijíma. Neprežije reštart ani sieťového správcu, ktorý pri opätovnom pripojení znova uplatní svoju predstavu o konfigurácii rozhrania. Dajte úlohu brány do konfiguračného súboru sysctl alebo do sieťového správcu, ktorý hostiteľa vlastní a potom reštartujte službu, ktorá ju uplatňuje.
Pri tuneloch záleží na poradí. Ak správca vytvorí rozhranie pri štarte a preposielanie uplatní až potom, rozhranie môže zdediť starý default. Reštart služby, ktorá tunel znova vytvorí, je tiež udalosťou vytvorenia a ľahko sa prehliadne, keď unit vyzerá zdravo. Kontrolujte sled, nie len konečný obsah súboru.
Prečítajte si tie isté tri hodnoty znova po opätovnom pripojení VPN a ešte raz po reštarte. Novovytvorený tunel je nové rozhranie a nové rozhranie preberá default platný v okamihu vytvorenia. Ak sa čísla medzi týmito udalosťami menia, konfiguráciu uplatňuje niečo, čo ste ešte neidentifikovali.
Neopravujte to nesprávnym nástrojom
Keď preposielanie vyzeralo pokazené, láka to vyprázdniť firewall alebo pridať masquerading. Ani jedno sa netýka prepínača preposielania. Stav preposielania, oprávnenie preposielať, trasa k cieľu a spätná cesta sú štyri samostatné požiadavky a len prvá z nich je sysctl.
Testujte aj správnym tokom. Požiadavka zadaná na samotnej bráne preposielanie vôbec necvičí; je to lokálne generovaná prevádzka. Otázka je, či je paket prichádzajúci z klienta VPN alebo z hostiteľa v LAN prijatý a ďalej smerovaný, takže test musí vzniknúť za bránou.
Držte prípad IPv6 bokom
Tu je všetko IPv4. Preposielanie IPv6, oznámenia routera a správanie accept_ra majú vlastné ovládanie a skopírovanie cesty ipv4 do nastavenia ipv6 vytvorí súbor, ktorý vyzerá vierohodne a nerobí nič užitočné. Brána s duálnym stackom potrebuje obe sady vedome nakonfigurované.
Posledná kontrola: keď sa hodnoty zhodujú, overte, že sa pre cieľ vyberá trasa tunela a že spätná cesta existuje. Preposielanie zapnuté na rozhraní bez trasy je stále čierna diera a toto zlyhanie vyzerá z pohľadu klienta rovnako.