OpenVPN-ning marshrutdagi "File exists" xatosi fayl muammosi emas
Xabar fayl tizimidan emas, yadro marshrutlar jadvalidan keladi. LAN siyosatini o'zgartirishdan oldin prefiksga allaqachon ega bo'lgan yozuvni o'qing.
Xabar paydo bo'ladigan joydan boshlang. Mijoz ulanadi, tunnel ko'tariladi, so'ngra jurnal Linuxning marshrut qo'shish buyrug'i File exists bilan muvaffaqiyatsiz tugaganini xabar qiladi. Bu gapda sertifikat, kalit yoki konfiguratsiya fayliga hech narsa ishora qilmaydi, garchi so'zlar shuni ko'rsatsa ham. Yadro o'zining marshrutlar jadvalini tasvirlayapti va siz o'rnatishni so'ragan prefiksda allaqachon yozuv bor.
Mijozning o'z tartibiga amal qiling: nima so'radi, jadvalda nima bor edi, o'sha yozuvni u yerga kim qo'ydi va shundan keyingina nimani o'zgartirish kerak. Har bir qadam bitta mumkin bo'lgan egasini olib tashlaydi.
Mijoz aslida nima so'rayotgan edi
Muvaffaqiyatsizlikdan oldin mijoz qo'shmoqchi bo'lgan marshrutni yozadi, odatda manzil, tarmoq maskasi, shlyuz va ba'zan metrika yoki jadval sifatida. O'sha qator so'rovdir. Keyingi xato yadroning javobidir va ikkalasini yonma-yon o'qish kerak.
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
Marshrut yordamchisining nolga teng bo'lmagan chiqish holati uning ostidagi matndan kamroq ma'lumot beradi, chunki turli yadro javoblari nolga teng bo'lmagan holat beradi. Aniq xabarni saqlang; mavjud yozuv va yetib bo'lmaydigan shlyuz orasidagi farq keyingi bo'limlardan qaysi biri qo'llanilishini belgilaydi.
Mavjud marshrutni o'qing, faqat manzilni emas
Jadvalda o'sha nuqtali to'rtlikni izlash yetarli emas. Marshrut obyekti manzil oilasi, jadval, manzil prefiksi, metrika, protokol va chiqish qurilmasi bilan aniqlanadi va bir xil prefiksni bo'lishadigan yozuvlar bu atributlar farq qilganda qonuniy ravishda birga mavjud bo'lishi mumkin. To'qnashadigan narsa butun obyekt, matn emas.
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
Oxirgi buyruq birinchi ikkitasidan boshqa savolga javob beradi: nima borligini emas, yadro o'sha manzil uchun ayni damda qaysi yozuvni tanlashini. Ikkala qarash ham foydali va ular har qanday xulosa oldidan taqqoslashga arziydigan darajada tez-tez farqlanadi. Ularning orasidagi nomuvofiqlik qiziqarli holat, yaxlitlash xatosi emas.
Muvaffaqiyatsiz so'rov yoniga prefiks, jadval, metrika va qurilmani yozib qo'ying. Agar mavjud yozuv bir xil atributlarga va bir xil keyingi sakrashga ega bo'lsa, sizda marshrutlash muammosi emas, takrorlangan ko'rsatma bor.
Prefiks ega bo'lishi mumkin bo'lgan to'rt egasi
Ulangan marshrutlar tayinlangan manzildan keladi va o'sha manzil mavjud bo'lganda tizim ularni qayta yaratadi. DHCP mijozi yoki ulanish menejeri marshrutlarni o'z hayot tsiklining bir qismi sifatida o'rnatadi. Boshqa VPN mijozi allaqachon o'sha prefiksni olib yurgan bo'lishi mumkin. Va mahalliy ilgak yoki skript boshqa hech narsa bilmaydigan birini qo'shishi mumkin.
Har bir egasi boshqa tuzatishni talab qiladi. Ulangan marshrut siz o'chiradigan narsa emas; uni olib tashlash tunnel foydali bo'lishidan oldin mahalliy kirishni buzishi mumkin va yadro uni qaytaradi. Menejerga tegishli marshrut o'sha menejer orqali o'zgartirilishi kerak, keyingi qayta ulanish bekor qiladigan qo'lda yozilgan ip route del bilan emas.
Saqlanib qolgan interfeys o'sha chalkashlikni osonlashtiradi. Tunnel qurilmasi qayta ulanishdan omon qolsa, maxsus sozlash kodi o'rnatgan marshrutlar ikkinchi ishga tushirishda ham mavjud bo'lishi mumkin, shuning uchun toza holatni taxmin qiluvchi skript ikkinchi marta muvaffaqiyatsiz bo'ladi va birinchi marta ishlaydi. Yoki eskirgan yozuvni ataylab tozalang yoki sozlash kodini idempotent qiling.
block-local boshqa savolga javob beradi
Profil barcha trafikni tunnel orqali yuborganda, mijoz mahalliy tarmoq bilan nima bo'lishini hal qilishi kerak. block-local bayrog'i mahalliy LANni tunnel orqali yo'naltirish orqali bu qarorni o'zgartiradi, shu bilan birga LAN shlyuzi uchun hujjatlashtirilgan istisnoni saqlaydi; bu yetib borish qobiliyatiga ko'rinadigan oqibatlari bo'lgan trafik siyosati tanlovidir.
Bu marshrut qo'shish nima uchun mavjud yozuv xatosini qaytarganini tushuntirmaydi va uni universal tuzatish sifatida qabul qilish haqiqiy ziddiyatni siyosat o'zgarishi orqasiga yashiradi. Profilni tahrirlashdan keyin mahalliy resurslaringiz yetib bo'lmaydigan bo'lsa, bu bayroq birinchi tekshiriladigan narsalardan biri; agar marshrut qo'shish muvaffaqiyatsiz bo'lsa, bu javob emas.
Buni qaysi manzillar mahalliy qolishi haqidagi qaror sifatida qabul qiling, ataylab qabul qilingan va yozib qo'yilgan. Jurnal xavotirli ko'ringanda sinab ko'riladigan kalit emas.
Davrni yoping: takroriy nusxani uning manbasida olib tashlang
Yozuvni qaysi egasi ushlab turganini bilganingizdan so'ng, takroriy ko'rsatmani u belgilangan joydan olib tashlang. Bu profildagi route qatori, serverdan kelgan push yoki endi ishga tushirish shart bo'lmagan ilgak bo'lishi mumkin.
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
Keyin qayta ulanib, uch narsani tasdiqlang: tunnel ko'tariladi, ko'zda tutilgan manzil siz xohlagan yo'lga hal bo'ladi va muvaffaqiyatsizlik uning o'rniga yangisi kelmasdan yo'qoladi. Noto'g'ri tanlangan yo'l bilan toza jurnal tuzatish emas.
Agar prefiks bir tomonda mahalliy LAN, ikkinchi tomonda uzoq tarmoqni anglatsa, muammo takror emas, manzillar ustma-ust tushishi va hech qanday o'chirish ikkala ma'noni bir vaqtda haqiqatga aylantira olmaydi. Bu holat ikki tarmoqdan biri uchun boshqa reja talab qiladi. Ikkalasiga tegishdan oldin qaysi tomon qayta raqamlanashini hal qiling.