Sporočilo „File exists“ OpenVPN na poti ni težava z datoteko
Sporočilo prihaja iz usmerjevalne tabele jedra, ne iz datotečnega sistema. Preberite vnos, ki že ima predpono, preden spremenite politiko LAN.
Začnite tam, kjer se sporočilo pojavi. Odjemalec se poveže, tunel se dvigne, nato dnevnik sporoči, da je ukaz za dodajanje poti v Linuxu spodletel z File exists. Nič v tem stavku se ne nanaša na potrdilo, ključ ali konfiguracijsko datoteko, čeprav besede to nakazujejo. Jedro opisuje svojo usmerjevalno tabelo, predpona, ki ste jo prosili namestiti, pa že ima vnos.
Sledite lastnemu zaporedju odjemalca: kaj je zahteval, kaj je tabela že vsebovala, kdo je ta vnos postavil tja, in šele nato, kaj spremeniti. Vsak korak odstrani enega možnega lastnika.
Kaj je odjemalec v resnici zahteval
Pred napako odjemalec zabeleži pot, ki jo namerava dodati, običajno kot cilj, omrežno masko, prehod in včasih kot metriko ali tabelo. Ta vrstica je zahteva. Napaka, ki sledi, je odgovor jedra, in oba je treba brati drug ob drugem.
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
Neničeln izhodni status pomočnika za poti je manj informativen od besedila pod njim, ker različni odgovori jedra dajo neničelno stanje. Shranite točno sporočilo; razlika med obstoječim vnosom in nedosegljivim prehodom odloča, kateri od naslednjih razdelkov velja.
Preberite obstoječo pot, ne le naslova
Iskanje v tabeli po istem pikčastem četvercu ni dovolj. Predmet poti določajo družina naslovov, tabela, predpona cilja, metrika, protokol in izhodna naprava, vnosi, ki si delijo predpono, pa lahko zakonito sobivajo, ko se te lastnosti razlikujejo. Trči celoten predmet, ne besedilo.
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
Zadnji ukaz odgovarja na drugo vprašanje kot prva dva: ne kaj obstaja, ampak kateri vnos bi jedro zdaj izbralo za ta cilj. Oba pogleda sta koristna in se dovolj pogosto razhajata, da ju je pred sklepanjem vredno primerjati. Neskladje med njima je zanimiv primer, ne napaka zaokroževanja.
Zapišite predpono, tabelo, metriko in napravo ob neuspešno zahtevo. Če ima obstoječi vnos iste lastnosti in isti naslednji skok, imate podvojeno navodilo, ne težave z usmerjanjem.
Štirje lastniki, ki jih ima lahko predpona
Povezane poti izhajajo iz dodeljenega naslova in sistem jih znova ustvari vsakič, ko ta naslov obstaja. Odjemalec DHCP ali upravitelj povezav namesti poti kot del svojega življenjskega cikla. Drug odjemalec VPN morda že nosi isto predpono. In lokalna kljuka ali skript lahko doda tako, za katero nič drugega ne ve.
Vsak lastnik potrebuje drugačen popravek. Povezana pot ni vaša za brisanje; če jo odstranite, se lahko prekine lokalni dostop, preden je tunel uporaben, in jedro jo bo vrnilo. Pot, ki jo ima upravitelj, je treba spremeniti prek tega upravitelja, ne z ročnim ip route del, ki ga naslednja ponovna povezava razveljavi.
Ohranjen vmesnik olajša isto zmedo. Ko naprava tunela preživi ponovno povezavo, so lahko poti, ki jih je namestila koda za namestitev po meri, prisotne tudi pri drugem zagonu, zato skript, ki predpostavlja čisto stanje, drugič spodleti in prvič deluje. Bodisi namerno počistite zastareli vnos bodisi naredite kodo za namestitev idempotentno.
block-local odgovarja na drugo vprašanje
Ko profil pošlje ves promet skozi tunel, se mora odjemalec odločiti, kaj se zgodi z lokalnim omrežjem. Zastavica block-local spremeni to odločitev tako, da usmeri lokalni LAN skozi tunel in ohrani dokumentirano izjemo za prehod LAN; to je izbira prometne politike z vidnimi posledicami za dosegljivost.
Ne pojasnjuje, zakaj je dodajanje poti vrnilo napako obstoječega vnosa, in če to sprejmemo kot univerzalno popravilo, se resnični konflikt skrije za spremembo politike. Če vaši lokalni viri po urejanju profila postanejo nedosegljivi, je ta zastavica ena prvih stvari, ki jih je treba preveriti; če dodajanje poti spodleti, to ni odgovor.
Obravnavajte jo kot odločitev o tem, katere cilje ostanejo lokalni, sprejeto namerno in zapisano. Ni stikalo, ki bi ga preizkusili, ko je dnevnik videti alarmanten.
Zaprite zanko: odstranite dvojnik pri njegovem viru
Ko veste, kateri lastnik ima vnos, odstranite podvojeno navodilo tam, kjer je opredeljeno. To je lahko vrstica route v profilu, push s strežnika ali kljuka, ki je ni več treba izvajati.
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
Nato se znova povežite in potrdite tri stvari: tunel se dvigne, predvideni cilj se razreši na pot, ki ste jo želeli, in napaka izgine, ne da bi se na njenem mestu pojavila nova. Čist dnevnik z napačno izbrano potjo ni popravek.
Če predpona pomeni lokalni LAN na eni strani in oddaljeno omrežje na drugi, je težava prekrivanje naslovov in ne dvojnik, in nobeno brisanje ne bo naredilo obeh pomenov resničnih hkrati. Ta primer potrebuje drugačen načrt za eno od dveh omrežij. Odločite se, katera stran bo preštevilčena, preden se dotaknete katere koli.