OpenVPN-də marşrutda "File exists" xətası fayl problemi deyil
Mesaj fayl sistemindən deyil, nüvənin marşrut cədvəlindən gəlir. LAN siyasətini dəyişməzdən əvvəl prefiksi artıq tutan qeydi oxuyun.
Mesajın göründüyü yerdən başlayın. Müştəri qoşulur, tunel qalxır və sonra jurnal Linux-un marşrut əlavə etmə əmrinin File exists ilə uğursuz olduğunu bildirir. Bu cümlədə heç nə sertifikata, açara və ya konfiqurasiya faylına aid deyil, baxmayaraq ki, sözlər bunu təklif edir. Nüvə öz marşrut cədvəlini təsvir edir və quraşdırmağı xahiş etdiyiniz prefiksin artıq bir qeydi var.
Müştərinin öz ardıcıllığına əməl edin: nə istədiyini, cədvəlin əvvəlcədən nə saxladığını, o qeydi ora kimin qoyduğunu və yalnız bundan sonra nəyin dəyişdirilməli olduğunu. Hər addım bir mümkün sahibi aradan qaldırır.
Müştəri əslində nə istəyirdi
Uğursuzluqdan əvvəl müştəri əlavə etmək istədiyi marşrutu qeyd edir, adətən təyinat, şəbəkə maskası, şlüz və bəzən metrika və ya cədvəl kimi. Həmin sətir sorğudur. Ardınca gələn xəta nüvənin ona cavabıdır və jurnalı oxuyarkən ikisi yan-yana olmalıdır.
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şrut köməkçisinin sıfırdan fərqli çıxış statusu altındakı mətndən daha az məlumatlıdır, çünki müxtəlif nüvə cavabları sıfırdan fərqli status yaradır. Dəqiq mesajı saxlayın; mövcud qeyd ilə əlçatmaz şlüz arasındakı fərq sonrakı bölmələrdən hansının tətbiq olunduğunu müəyyən edir.
Mövcud marşrutu oxuyun, yalnız ünvanı deyil
Cədvəldə eyni dördlü ünvanı axtarmaq kifayət deyil. Marşrut obyekti ünvan ailəsi, cədvəl, təyinat prefiksi, metrika, protokol və çıxış cihazı ilə müəyyən edilir və eyni prefiksi paylaşan qeydlər bu atributlar fərqləndikdə qanuni şəkildə birlikdə mövcud ola bilər. Toqquşan şey bütün obyektdir, mətn deyil.
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
Son əmr ilk ikisindən fərqli bir suala cavab verir: nəyin mövcud olduğuna deyil, nüvənin həmin təyinat üçün indi hansı qeydi seçəcəyinə. Hər iki baxış faydalıdır və onlar kifayət qədər tez-tez fərqlənir ki, hər hansı nəticə çıxarmazdan əvvəl müqayisə etməyə dəyər. Aralarındakı uyğunsuzluq maraqlı haldır, yuvarlaqlaşdırma xətası deyil.
Prefiksi, cədvəli, metrikanı və cihazı uğursuz sorğunun yanında qeyd edin. Əgər mövcud qeyd eyni atributlara və eyni növbəti atlama nöqtəsinə malikdirsə, marşrut problemi deyil, təkrarlanan təlimatınız var.
Prefiksin dörd sahibi ola bilər
Qoşulmuş marşrutlar təyin edilmiş ünvandan gəlir və həmin ünvan mövcud olduqda sistem tərəfindən yenidən yaradılır. DHCP müştərisi və ya bağlantı meneceri marşrutları öz həyat dövrünün bir hissəsi kimi quraşdırır. Başqa bir VPN müştərisi artıq eyni prefiksi daşıya bilər. Lokal qarmaq və ya skript isə başqa heç nəyin bilmədiyi birini əlavə edə bilər.
Hər sahib fərqli düzəliş tələb edir. Qoşulmuş marşrut sizin silməyiniz üçün deyil; onun silinməsi tunel istifadəyə yararlı olmadan lokal girişi poza bilər və nüvə onu geri qaytaracaq. Menecerə aid marşrut həmin menecer vasitəsilə dəyişdirilməlidir, növbəti yenidən qoşulmanın ləğv edəcəyi əl ilə ip route del ilə deyil.
Saxlanılan interfeys eyni qarışıqlığı asanlaşdırır. Tunel cihazı yenidən qoşulmadan sağ çıxdıqda, fərdi quraşdırma kodu ilə quraşdırılmış marşrutlar ikinci işə salmada hələ də mövcud ola bilər, buna görə təmiz başlanğıcı fərz edən skript ikinci dəfə uğursuz olur və birinci dəfə işləyir. Köhnəlmiş qeydi qəsdən təmizləyin və ya quraşdırma kodunu idempotent edin.
block-local başqa suala cavab verir
Profil bütün trafiki tuneldən keçirdikdə müştəri lokal şəbəkə ilə nə olacağına qərar verməlidir. block-local bayrağı lokal LAN-ı tuneldən yönləndirməklə bu qərarı dəyişir, eyni zamanda LAN şlüzü üçün sənədləşdirilmiş istisnanı saxlayır; bu, əlçatanlıq üçün görünən nəticələri olan trafik siyasəti seçimidir.
Bu, marşrut əlavə etmənin niyə mövcud qeyd xətası qaytardığını izah etmir və onu universal düzəliş kimi qəbul etmək faktiki konflikti siyasət dəyişikliyinin arxasında gizlədir. Profil redaktəsindən sonra lokal resurslarınız əlçatmaz olursa, bu bayraq ilk yoxlanmalı şeylərdən biridir; marşrut əlavə etmə uğursuz olursa, cavab bu deyil.
Ona hansı təyinatların lokal qalacağı barədə qəsdən verilən və yazıya alınan qərar kimi baxın. Jurnal narahat edici görünəndə sınanacaq bir açar deyil.
Dövrü bağlayın: təkrarı mənbəyində silin
Qeydi hansı sahibin tutduğunu bildikdən sonra təkrarlanan təlimatı təyin olunduğu yerdən silin. Bu, profildəki route sətri, serverdən gələn push və ya artıq işləməsinə ehtiyac olmayan qarmaq ola bilər.
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
Sonra yenidən qoşulun və üç şeyi təsdiqləyin: tunel qalxır, nəzərdə tutulan təyinat istədiyiniz yola çevrilir və uğursuzluq yerinə yenisi gəlmədən yox olur. Səhv seçilmiş yolla təmiz jurnal düzəliş deyil.
Əgər prefiks bir tərəfdə lokal LAN, digər tərəfdə uzaq şəbəkə deməkdirsə, problem təkrar deyil, ünvan üst-üstə düşməsidir və heç bir silmə hər iki mənanı eyni vaxtda doğru edə bilməz. Bu hal iki şəbəkədən biri üçün fərqli plan tələb edir. Hər ikisinə toxunmazdan əvvəl hansı tərəfin yenidən nömrələnəcəyinə qərar verin.