OpenVPN „File exists“ maršrutā nav faila problēma
Ziņojums nāk no kodola maršrutu tabulas, nevis no failu sistēmas. Izlasiet ierakstu, kuram jau pieder prefikss, pirms maināt LAN politiku.
Sāciet tur, kur parādās ziņojums. Klients pievienojas, tunelis paceļas, un tad žurnāls ziņo, ka Linux maršruta pievienošanas komanda neizdevās ar File exists. Nekas šajā teikumā neattiecas uz sertifikātu, atslēgu vai konfigurācijas failu, lai gan vārdi to liek domāt. Kodols apraksta savu maršrutu tabulu, un prefiksam, kuru lūdzāt instalēt, jau ir ieraksts.
Sekojiet paša klienta secībai: ko tas prasīja, kas tabulā jau bija, kas tur ievietoja šo ierakstu, un tikai pēc tam, ko mainīt. Katrs solis noņem vienu iespējamo īpašnieku.
Ko klients patiesībā prasīja
Pirms atteices klients reģistrē maršrutu, kuru plāno pievienot, parasti kā galamērķi, tīkla masku, vārteju un dažkārt kā metriku vai tabulu. Šī rinda ir pieprasījums. Sekojošā kļūda ir kodola atbilde, un abi jālasa līdzās.
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
Maršruta palīga nulles iziešanas statuss ir mazāk informatīvs nekā teksts zem tā, jo dažādas kodola atbildes rada nulles statusu. Saglabājiet precīzu ziņojumu; atšķirība starp esošu ierakstu un nesasniedzamu vārteju nosaka, kura no nākamajām sadaļām attiecas.
Lasiet esošo maršrutu, ne tikai adresi
Meklēt tabulā to pašu punktoto četrinieku nav pietiekami. Maršruta objektu identificē adrešu saime, tabula, galamērķa prefikss, metrika, protokols un izvades ierīce, un ieraksti, kas dala prefiksu, var likumīgi pastāvēt līdzās, ja šie atribūti atšķiras. Saduras viss objekts, nevis teksts.
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
Pēdējā komanda atbild uz citu jautājumu nekā pirmās divas: nevis kas pastāv, bet kuru ierakstu kodols izvēlētos šim galamērķim tagad. Abi skatījumi ir noderīgi, un tie pietiekami bieži atšķiras, lai pirms secinājumiem tos būtu vērts salīdzināt. Neatbilstība starp tiem ir interesantais gadījums, nevis noapaļošanas kļūda.
Pierakstiet prefiksu, tabulu, metriku un ierīci blakus neizdevušajam pieprasījumam. Ja esošajam ierakstam ir tie paši atribūti un tas pats nākamais lēciens, jums ir dubultota instrukcija, nevis maršrutēšanas problēma.
Četri īpašnieki, kas prefiksam var būt
Savienotie maršruti nāk no piešķirtās adreses, un sistēma tos atkārtoti izveido ikreiz, kad šī adrese pastāv. DHCP klients vai savienojumu pārvaldnieks instalē maršrutus kā daļu no sava dzīves cikla. Cits VPN klients jau var nest to pašu prefiksu. Un vietējs āķis vai skripts var pievienot tādu, par kuru nekas cits nezina.
Katram īpašniekam vajadzīgs cits labojums. Savienotais maršruts nav jūsu dzēšams; tā noņemšana var pārtraukt vietējo piekļuvi pirms tuneļa lietošanas, un kodols to atgriezīs. Pārvaldnieka īpašumā esošais maršruts jāmaina caur šo pārvaldnieku, nevis manuāli ar ip route del, ko atceļ nākamā atkārtotā pievienošanās.
Saglabātā saskarne to pašu apjukumu atvieglo. Kad tuneļa ierīce pārdzīvo atkārtotu pievienošanos, pielāgotā iestatīšanas koda instalētie maršruti var joprojām būt otrajā palaišanā, tāpēc skripts, kas pieņem tīru stāvokli, otrajā reizē neizdodas un pirmajā strādā. Vai nu apzināti notīriet novecojušo ierakstu, vai padariet iestatīšanas kodu idempotentu.
block-local atbild uz citu jautājumu
Kad profils sūta visu trafiku caur tuneli, klientam jāizlemj, kas notiks ar vietējo tīklu. Karodziņš block-local maina šo lēmumu, maršrutējot vietējo LAN caur tuneli un saglabājot dokumentēto izņēmumu LAN vārtejai; tas ir trafika politikas lēmums ar redzamām sekām sasniedzamībai.
Tas neizskaidro, kāpēc maršruta pievienošana atgrieza esoša ieraksta kļūdu, un, pieņemot to kā universālu remontu, īstais konflikts tiek paslēpts aiz politikas maiņas. Ja jūsu vietējie resursi pēc profila rediģēšanas kļūst nesasniedzami, šis karodziņš ir viena no pirmajām pārbaudāmajām lietām; ja maršruta pievienošana neizdodas, tas nav atbilde.
Uztveriet to kā lēmumu par to, kuri galamērķi paliek vietēji, pieņemtu apzināti un pierakstītu. Tas nav slēdzis, ko izmēģināt, kad žurnāls izskatās satraucoši.
Noslēdziet ciklu: noņemiet dublikātu tā avotā
Kad zināt, kurš īpašnieks tur ierakstu, noņemiet dubultoto instrukciju tur, kur tā definēta. Tas var būt route rinda profilā, push no servera vai āķis, kas vairs nav jāizpilda.
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
Pēc tam pievienojieties no jauna un pārbaudiet trīs lietas: tunelis paceļas, paredzētais galamērķis tiek atrisināts uz vēlamo ceļu, un atteice pazūd, neparādoties jaunai tās vietā. Tīrs žurnāls ar nepareizi izvēlētu ceļu nav labojums.
Ja prefikss vienā pusē nozīmē vietējo LAN, bet otrā — attālu tīklu, problēma ir adrešu pārklāšanās, nevis dublikāts, un nekāda dzēšana nepadarīs abas nozīmes patiesas vienlaikus. Šim gadījumam nepieciešams cits plāns vienam no diviem tīkliem. Izlemiet, kura puse tiks pārnumurēta, pirms aiztiekat jebkuru.