Hlásenie „File exists“ pri OpenVPN na trase nie je problém súboru
Správa pochádza z jadrovej smerovacej tabuľky, nie zo súborového systému. Prečítajte si záznam, ktorý už prefix vlastní, skôr než zmeníte politiku LAN.
Začnite tam, kde sa správa objaví. Klient sa pripojí, tunel sa zdvihne a potom log oznámi, že príkaz na pridanie trasy v Linuxe zlyhal s File exists. Nič v tej vete neodkazuje na certifikát, kľúč alebo konfiguračný súbor, hoci slová to naznačujú. Jadro popisuje svoju smerovaciu tabuľku a prefix, ktorý ste požiadali nainštalovať, už má záznam.
Sledujte vlastnú postupnosť klienta: čo požadoval, čo tabuľka už obsahovala, kto tam ten záznam umiestnil, a až potom čo zmeniť. Každý krok odstraňuje jedného možného vlastníka.
Čo klient vlastne požadoval
Pred zlyhaním klient zaznamená trasu, ktorú chce pridať, zvyčajne ako cieľ, sieťovú masku, bránu a niekedy ako metriku alebo tabuľku. Ten riadok je požiadavka. Chyba, ktorá nasleduje, je odpoveď jadra, a obe treba čítať vedľa seba.
journalctl -u openvpn-client@office -b --no-pager | grep -nE 'route|File exists'
openvpn --config /etc/openvpn/client/office.ovpn --verb 4 --log /tmp/ovpn.log
Nenulový návratový kód pomocníka pre trasy je menej informatívny než text pod ním, pretože rôzne odpovede jadra dávajú nenulový stav. Zachovajte presnú správu; rozdiel medzi existujúcim záznamom a nedostupnou bránou rozhoduje, ktorá z nasledujúcich častí platí.
Čítajte existujúcu trasu, nielen adresu
Hľadanie rovnakého bodkovaného kvadru v tabuľke nestačí. Objekt trasy je určený rodinou adries, tabuľkou, cieľovým prefixom, metrikou, protokolom a výstupným zariadením a záznamy zdieľajúce prefix môžu legitímne koexistovať, keď sa tieto atribúty líšia. Zráža sa celý objekt, nie text.
ip -4 route show table all | grep -F '10.40.'
ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5
Posledný príkaz odpovedá na inú otázku než prvé dva: nie čo existuje, ale ktorý záznam by jadro pre tento cieľ práve teraz vybralo. Oba pohľady sú užitočné a rozchádzajú sa dosť často na to, aby stálo za to ich pred akýmkoľvek záverom porovnať. Nesúlad medzi nimi je ten zaujímavý prípad, nie chyba zaokrúhlenia.
Zapíšte prefix, tabuľku, metriku a zariadenie vedľa neúspešnej požiadavky. Ak má existujúci záznam rovnaké atribúty a rovnaký ďalší skok, máte duplicitnú inštrukciu, nie problém so smerovaním.
Štyria vlastníci, ktorých môže prefix mať
Pripojené trasy pochádzajú z priradenej adresy a systém ich znovu vytvára vždy, keď tá adresa existuje. Klient DHCP alebo správca pripojení inštaluje trasy ako súčasť svojho životného cyklu. Iný klient VPN už môže niesť rovnaký prefix. A miestny hák alebo skript môže pridať trasu, o ktorej nič iné nevie.
Každý vlastník vyžaduje inú opravu. Pripojená trasa nie je vaša na zmazanie; jej odstránenie môže prerušiť miestny prístup skôr, než bude tunel použiteľný, a jadro ju vráti. Trasu vlastnenú správcom treba meniť cez toho správcu, nie ručným ip route del, ktoré ďalšie opätovné pripojenie zruší.
Zachované rozhranie robí rovnaký zmätok ľahším. Keď zariadenie tunela prežije opätovné pripojenie, trasy nainštalované vlastným kódom nastavenia môžu pri druhom behu stále existovať, takže skript predpokladajúci čistý stav druhýkrát zlyhá a prvýkrát funguje. Buď zámerne vymažte zastaraný záznam, alebo urobte kód nastavenia idempotentným.
block-local odpovedá na inú otázku
Keď profil posiela všetku prevádzku cez tunel, klient musí rozhodnúť, čo sa stane s miestnou sieťou. Prepínač block-local toto rozhodnutie mení tým, že smeruje miestnu LAN cez tunel a zachováva zdokumentovanú výnimku pre bránu LAN; je to voľba dopravnej politiky s viditeľnými dôsledkami na dostupnosť.
Nevysvetľuje, prečo pridanie trasy vrátilo chybu existujúceho záznamu, a prijatie toho ako univerzálnej opravy skrýva skutočný konflikt za zmenou politiky. Ak vaše miestne zdroje po úprave profilu prestanú byť dostupné, tento prepínač je jednou z prvých vecí na kontrolu; ak pridanie trasy zlyhá, nie je to odpoveď.
Berte to ako rozhodnutie o tom, ktoré ciele zostanú miestne, urobené zámerne a zapísané. Nie je to prepínač na vyskúšanie, keď log vyzerá znepokojujúco.
Uzavrite slučku: odstráňte duplikát v jeho zdroji
Keď viete, ktorý vlastník záznam drží, odstráňte duplicitnú inštrukciu tam, kde je definovaná. Môže to byť riadok route v profile, push zo servera alebo hák, ktorý už nemusí bežať.
ip -4 route show match 10.40.0.0/16
ip -4 route get 10.40.0.5
journalctl -u openvpn-client@office -b --no-pager | tail -n 15
Potom sa znova pripojte a potvrďte tri veci: tunel sa zdvihne, zamýšľaný cieľ sa preloží na cestu, ktorú ste chceli, a zlyhanie zmizne bez toho, aby sa na jeho mieste objavilo nové. Čistý log s nesprávne zvolenou cestou nie je oprava.
Ak prefix znamená miestnu LAN na jednej strane a vzdialenú sieť na druhej, problémom je prekrytie adries, nie duplikát, a žiadne mazanie neurobí oba významy pravdivými naraz. Ten prípad potrebuje iný plán pre jednu z dvoch sietí. Rozhodnite, ktorá strana bude prečíslovaná, skôr než sa ktorejkoľvek dotknete.