"File exists" OpenVPN pada laluan bukan masalah fail
Mesej datang dari jadual laluan kernel, bukan dari sistem fail. Baca entri yang sudah memiliki awalan sebelum menukar dasar LAN.
Mulakan di tempat mesej muncul. Klien menyambung, terowong naik, kemudian log melaporkan bahawa arahan tambah laluan Linux gagal dengan File exists. Tiada apa-apa dalam ayat itu merujuk kepada sijil, kunci atau fail konfigurasi, walaupun perkataan itu mencadangkannya. Kernel sedang menerangkan jadual laluannya, dan awalan yang anda minta dipasang sudah mempunyai entri.
Ikut urutan klien itu sendiri: apa yang dimintanya, apa yang sudah ada dalam jadual, siapa yang meletakkan entri itu di sana, dan hanya selepas itu apa yang perlu diubah. Setiap langkah membuang satu pemilik yang mungkin.
Apa yang sebenarnya diminta klien
Sebelum kegagalan, klien merekodkan laluan yang ingin ditambahnya, biasanya sebagai destinasi, topeng rangkaian, gerbang dan kadangkala sebagai metrik atau jadual. Baris itu ialah permintaan. Ralat yang menyusul ialah jawapan kernel, dan kedua-duanya harus dibaca bersebelahan.
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
Status keluar bukan sifar daripada pembantu laluan kurang bermaklumat daripada teks di bawahnya, kerana tindak balas kernel yang berbeza menghasilkan status bukan sifar. Simpan mesej tepat; perbezaan antara entri sedia ada dan gerbang yang tidak dapat dicapai menentukan bahagian mana yang terpakai.
Baca laluan sedia ada, bukan hanya alamat
Mencari dalam jadual bagi empat serangkai bertitik yang sama tidak mencukupi. Objek laluan dikenal pasti oleh keluarga alamat, jadual, awalan destinasi, metrik, protokol dan peranti output, dan entri yang berkongsi awalan boleh wujud bersama secara sah apabila atribut itu berbeza. Yang berlanggar ialah keseluruhan objek, bukan teks.
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
Arahan terakhir menjawab soalan yang berbeza daripada dua yang pertama: bukan apa yang wujud, tetapi entri mana yang akan dipilih kernel untuk destinasi itu sekarang. Kedua-dua pandangan berguna, dan mereka cukup kerap berbeza sehingga wajar dibandingkan sebelum membuat sebarang kesimpulan. Percanggahan antara keduanya ialah kes yang menarik, bukan ralat pembundaran.
Catat awalan, jadual, metrik dan peranti di sebelah permintaan yang gagal. Jika entri sedia ada mempunyai atribut yang sama dan hop seterusnya yang sama, anda mempunyai arahan berganda, bukan masalah penghalaan.
Empat pemilik yang boleh dimiliki sesuatu awalan
Laluan bersambung datang daripada alamat yang diberikan dan dicipta semula oleh sistem setiap kali alamat itu wujud. Klien DHCP atau pengurus sambungan memasang laluan sebagai sebahagian daripada kitaran hayatnya sendiri. Klien VPN lain mungkin sudah membawa awalan yang sama. Dan cangkuk atau skrip tempatan boleh menambah satu yang tiada apa-apa lain tahu.
Setiap pemilik memerlukan pembetulan berbeza. Laluan bersambung bukan milik anda untuk dipadam; membuangnya boleh memutuskan akses tempatan sebelum terowong boleh digunakan, dan kernel akan meletakkannya semula. Laluan milik pengurus harus diubah melalui pengurus itu, bukan dengan ip route del manual yang dibatalkan oleh sambungan semula seterusnya.
Antara muka yang dikekalkan menjadikan kekeliruan yang sama lebih mudah. Apabila peranti terowong bertahan selepas sambungan semula, laluan yang dipasang oleh kod persediaan tersuai mungkin masih ada pada larian kedua, jadi skrip yang menganggap keadaan bersih gagal pada kali kedua dan berjaya pada kali pertama. Sama ada bersihkan entri lapuk dengan sengaja atau jadikan kod persediaan idempoten.
block-local menjawab soalan yang berbeza
Apabila profil menghantar semua trafik melalui terowong, klien harus memutuskan apa yang berlaku kepada rangkaian tempatan. Bendera block-local menukar keputusan itu dengan menghalakan LAN tempatan melalui terowong sambil mengekalkan pengecualian yang didokumenkan untuk gerbang LAN; ini ialah pilihan dasar trafik dengan kesan ketara pada kebolehcapaian.
Ia tidak menjelaskan mengapa penambahan laluan memulangkan ralat entri sedia ada, dan menganggapnya sebagai pembaikan sejagat menyembunyikan konflik sebenar di sebalik perubahan dasar. Jika sumber tempatan anda tidak lagi boleh dicapai selepas penyuntingan profil, bendera ini ialah salah satu perkara pertama untuk diperiksa; jika penambahan laluan gagal, ia bukan jawapannya.
Anggapnya sebagai keputusan tentang destinasi mana yang kekal tempatan, dibuat dengan sengaja dan dicatatkan. Ia bukan suis untuk dicuba apabila log kelihatan membimbangkan.
Tutup gelung: buang pertindihan di punca asalnya
Setelah anda tahu pemilik mana yang memegang entri, buang arahan berganda di tempat ia ditakrifkan. Ia mungkin baris route dalam profil, push daripada pelayan, atau cangkuk yang tidak perlu dijalankan lagi.
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
Kemudian sambung semula dan sahkan tiga perkara: terowong naik, destinasi yang dimaksudkan diselesaikan ke laluan yang anda mahu, dan kegagalan hilang tanpa yang baru muncul menggantikannya. Log bersih dengan laluan yang salah dipilih bukan pembaikan.
Jika awalan bermaksud LAN tempatan di satu pihak dan rangkaian jauh di pihak yang lain, masalahnya ialah pertindihan alamat, bukan pertindihan entri, dan tiada pemadaman akan menjadikan kedua-dua makna benar serentak. Kes itu memerlukan pelan berbeza untuk salah satu daripada dua rangkaian. Tentukan pihak mana yang akan dinomborkan semula sebelum anda menyentuh mana-mana.