Aloita siitä, missä viesti ilmestyy. Asiakas yhdistää, tunneli nousee, ja sitten loki kertoo, että Linuxin reitin lisäämiskomento epäonnistui File exists-virheeseen. Mikään tuossa lauseessa ei viittaa varmenne, avaimeen tai asetustiedostoon, vaikka sanat vihjaavat siihen. Ydin kuvaa reititystauluaan, ja etuliitteellä, jonka pyysit asentamaan, on jo merkintä.

Seuraa asiakkaan omaa järjestystä: mitä se pyysi, mitä taulussa jo oli, kuka merkinnän sinne asetti ja vasta sitten, mitä muuttaa. Jokainen vaihe poistaa yhden mahdollisen omistajan.

Mitä asiakas itse asiassa pyysi

Ennen virhettä asiakas kirjaa reitin, jonka se aikoo lisätä, yleensä kohteena, verkkonaamiona, yhdyskäytävänä ja joskus metriikkana tai tauluna. Se rivi on pyyntö. Seuraava virhe on ytimen vastaus siihen, ja molemmat on luettava rinnakkain.

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

Reittiavustajan nollasta poikkeava poistumistila kertoo vähemmän kuin sen alla oleva teksti, koska erilaiset ytimen vastaukset tuottavat nollasta poikkeavan tilan. Säilytä tarkka viesti; ero olemassa olevan merkinnän ja tavoittamattoman yhdyskäytävän välillä ratkaisee, mikä seuraavista osista pätee.

Lue olemassa oleva reitti, älä vain osoitetta

Pelkkä saman pisteellisen nelikon etsiminen taulusta ei riitä. Reittiolion tunnistavat osoiteperhe, taulu, kohde-etuliite, metriikka, protokolla ja lähtölaite, ja etuliitteen jakavat merkinnät voivat laillisesti olla rinnakkain, kun nämä attribuutit eroavat. Törmää koko olio, ei teksti.

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

Viimeinen komento vastaa eri kysymykseen kuin kaksi ensimmäistä: ei siihen, mitä on olemassa, vaan siihen, minkä merkinnän ydin valitsisi kyseiselle kohteelle juuri nyt. Molemmat näkymät ovat hyödyllisiä, ja ne eroavat riittävän usein, jotta vertailu kannattaa ennen johtopäätöksiä. Niiden välinen ristiriita on kiinnostava tapaus, ei pyöristysvirhe.

Kirjaa etuliite, taulu, metriikka ja laite epäonnistuneen pyynnön viereen. Jos olemassa olevalla merkinnällä on samat attribuutit ja sama seuraava hyppy, kyseessä on kaksinkertainen ohje, ei reititysongelma.

Neljä omistajaa, joita etuliitteellä voi olla

Yhdistetyt reitit tulevat määritetystä osoitteesta, ja järjestelmä luo ne uudelleen aina, kun kyseinen osoite on olemassa. DHCP-asiakas tai yhteyksien hallinta asentaa reitit osana omaa elinkaartaan. Toinen VPN-asiakas voi jo kantaa samaa etuliitettä. Ja paikallinen koukku tai skripti voi lisätä sellaisen, josta mikään muu ei tiedä.

Jokainen omistaja tarvitsee eri korjauksen. Yhdistetty reitti ei ole sinun poistettavasi; sen poistaminen voi katkaista paikallisen pääsyn ennen kuin tunneli on käyttökelpoinen, ja ydin laittaa sen takaisin. Hallinnan omistama reitti pitää muuttaa sen hallinnan kautta, ei käsivaraisella ip route del-komennolla, jonka seuraava uudelleenyhdistäminen kumoaa.

Säilytetty käyttöliittymä tekee samasta sekaannuksesta helpompaa. Kun tunnelilaite selviää uudelleenyhdistämisestä, mukautetun asennuskoodin asentamat reitit voivat olla yhä olemassa toisella ajokerralla, joten puhtaan tilan olettava skripti epäonnistuu toisella kerralla ja toimii ensimmäisellä. Joko tyhjennä vanhentunut merkintä tarkoituksella tai tee asennuskoodista idempotentti.

block-local vastaa eri kysymykseen

Kun profiili lähettää kaiken liikenteen tunnelin läpi, asiakkaan on päätettävä, mitä paikalliselle verkolle tapahtuu. block-local-lippu muuttaa tätä päätöstä reitittämällä paikallisen lähiverkon tunnelin läpi ja säilyttämällä dokumentoidun poikkeuksen lähiverkon yhdyskäytävälle; kyse on liikennepolitiikan valinnasta, jolla on näkyvät seuraukset tavoitettavuudelle.

Se ei selitä, miksi reitin lisääminen palautti olemassa olevan merkinnän virheen, ja sen ottaminen yleiskorjaukseksi kätkee varsinaisen ristiriidan käytäntömuutoksen taakse. Jos paikalliset resurssisi eivät ole enää tavoitettavissa profiilin muokkauksen jälkeen, tämä lippu on yksi ensimmäisistä tarkistettavista asioista; jos reitin lisääminen epäonnistuu, se ei ole vastaus.

Kohtele sitä päätöksenä siitä, mitkä kohteet pysyvät paikallisina, harkitusti tehtynä ja kirjattuna. Se ei ole kytkin, jota kokeilla, kun loki näyttää hälyttävältä.

Sulje silmukka: poista kaksoiskappale sen lähteestä

Kun tiedät, mikä omistaja pitää merkintää, poista kaksinkertainen ohje siitä, missä se on määritelty. Se voi olla profiilin route-rivi, palvelimelta tuleva push tai koukku, jota ei enää tarvitse ajaa.

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

Yhdistä sitten uudelleen ja vahvista kolme asiaa: tunneli nousee, aiottu kohde selvitetään haluamallesi polulle ja virhe on poissa ilman, että sen tilalle ilmestyy uusi. Puhdas loki väärin valitulla polulla ei ole korjaus.

Jos etuliite tarkoittaa toisella puolella paikallista lähiverkkoa ja toisella etäverkkoa, ongelma on osoitteiden päällekkäisyys eikä kaksoiskappale, eikä mikään poistomäärä tee molempia merkityksiä yhtä aikaa tosiksi. Tämä tapaus tarvitsee erilaisen suunnitelman toiselle kahdesta verkosta. Päätä, kumpi puoli numeroidaan uudelleen, ennen kuin kosket kumpaankaan.

Aiheeseen liittyvät artikkelit