Bitta ish stolida ikkita VPN mijozi: nima to'qnashadi va nima ishlaydi
Ikki mijoz odatiy marshrut, nom hal qiluvchi va filtr drayverlari uchun kurashadi. Chiqish kimga tegishli ekanini yozib oling, so'ng ikkinchi tunnelni VM yoki netns bilan ajrating.
Ikkinchi mijozingiz ulanadi, birinchisining resurslari hal qilinmay qoladi va chiptada ish VPN shaxsiy VPNni buzgani aytiladi. Nosozlik ma'nosida hech narsa buzilmagan: ikkala mijoz ham o'zi uchun yaratilgan ishni qildi va mashinada faqat bitta marshrutlash jadvali bor. To'qnashuv har bir mijoz o'ziniki deb hisoblaydigan to'rt resurs ustida. Ularni tartib bilan ko'rib chiqing, va tuzatish odatda ta'mirlash emas, dizayn tanloviga aylanadi.
1-qadam: chiqish qaysi mijozga tegishli ekanini aniqlang
Biror narsani o'zgartirishdan oldin joriy chiqish qarorini o'qing. Ommaviy manzilga marshrut izlash paket hozir qaysi interfeys va keyingi sakrashni ishlatishini aytadi, va bu kim yutgani haqidagi javob. Uni mijozlar yaratgan interfeys nomlari bilan solishtiring; ular odatda mahsulot yoki protokol nomini olib yuradi. Agar izlash kutmagan tunnelingizga ishora qilsa, siz to'qnashuvni allaqachon topdingiz.
ip route get 1.1.1.1
ip route show default
route print
Ba'zi mijozlar odatiy marshrutni umuman almashtirmaydi; ular ikki yarmini qo'shadi, biri manzil fazosining pastki yarmiga va biri yuqori yarmiga, ular birgalikda hamma narsani qamrab oladi. Bu asl odatiy marshrutni ko'rinadigan qoldiradi va qo'lda tuzatishni to'g'ri ko'rsatadi, ammo trafik baribir tunnel orqali chiqadi. Faqat odatiy yozuv borligini emas, metrika va prefiks uzunligini o'qing.
Agar ikkala mijoz ham bir xil metrika bilan bir xil prefiksni talab qilsa, to'xtang. Yadro bittasini tanlaydi, ikkinchisi esa hech narsa tashimasdan ulangan ko'rinadi.
2-qadam: hal qiluvchi va qoplamali prefikslarni tekshiring
DNS ikkinchi to'qnashuv bo'lib, o'ziga xos alomat beradi: manzillar ishlaydi, nomlar esa ishlamaydi. Har bir mijoz o'z hal qiluvchisini majburan o'tkazadi va keyingi so'rovlar uchun oxirgi yozgan yutadi. Mijozning sozlamalar sahifasini o'qish o'rniga hal qiluvchi xizmatidan har bir ulanish uchun nima ishlatishini so'rang.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
So'ng ikki tarmoq ishlatadigan xususiy prefikslarni solishtiring. Agar ikki tomon ham bir diapazondan ajratsa, mijoz tomonidagi hech qanday chora buni tuzatmaydi, chunki mashina qaysi 10.0.0.0/8 manzili qaysi tunnelga tegishli ekanini ayta olmaydi. Bir tomonni qayta raqamlash yoki tarjima qilish kerak, va bu sozlamalarni o'zgartirish emas, tarmoq egalari bilan suhbat. Qoplama — halol javob «dizaynni o'zgartirish kerak» bo'ladigan yagona to'qnashuv.
Prefikslar qoplansa, shu yerda to'xtang. Bu ro'yxatdagi keyingi hamma narsa ular qoplanmaydi deb hisoblaydi.
3-qadam: bardoshli ajratish andozasini tanlang
Ishonchli andozalar bir marshrutlash jadvaliga qarshi ikki mijoz ishga tushirishdan qochadi. ikkala xususiy tarmoqqa yetib boradigan split-tunnel siyosati bo'lgan bitta mijoz eng sodda, agar manzillar qoplanmasa va siyosat egasi rozi bo'lsa. Virtual mashina yoki tarmoq nom fazosi keyingi qadam, chunki har biri o'z jadvali va o'z hal qiluvchisiga ega bo'ladi.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
Nom fazosi ikkinchi operatsion tizimsiz virtual mashina kabi ajratish beradi, lekin qo'pol qirralari bor: tunnel qurilmasi uning ichiga ko'chirilishi kerak va dastur uning ichida ishga tushirilishi kerak. Boshqariladigan ish mijozi yonida shaxsiy VPN uchun alohida jismoniy qurilma ko'pincha eng kam hayratlanarli tanlov. Bir tunnelni boshqasining ichiga qatlamlash ajratish andozasi emas; ichki so'nggi nuqta tashqi tunnel orqali yetib boriladigan bo'lib qolishi kerak, va bu tartib ustiga MTU va kechikish muammolarini qo'shadi.
Bitta andoza tanlang va nima uchunligini yozing. Bitta dastur uchun nom fazosini qolganlari uchun split-tunnel bilan aralashtirish asl to'qnashuvni tuzatish qiyinroq shaklda qayta yaratadi.
4-qadam: ikkala tarmoqni bir sessiyadan tekshiring
Har bir xususiy tarmoqda bitta resursni dastur haqiqatan ishlaydigan muhitdan sinang, dastur nom fazosi ichida ishlasa, o'z qobig'ingizdan emas. Chiqish interfeysini, hal qilingan manzilni va javob kodini birga tekshiring, chunki uchtadan biridagi muvaffaqiyat qolganlaridagi muvaffaqiyatsizlikni yashirishi mumkin. Qayta yuklashdan keyin takrorlang, chunki mijozlar qaysi tartibda ishga tushishi kim yutishini hal qiladi. Aynan shu tartibni odamlar yozib olishni unutadi.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
Har bir tarmoq uchun mijoz versiyalari, interfeyslar, hal qiluvchi holati va prefikslarni yozib oling. Mijoz yangilanib marshrut xatti-harakatini o'zgartirganda, o'sha yozuv besh daqiqalik tuzatish va qayta qurish orasidagi farq. Keyingi odam qaysi tunnel birinchi ko'tarilgani haqidagi xotirangizni baham ko'rmaydi.
Ro'yxat odatiy marshrutga ega interfeysni, har bir nom ishlatadigan hal qiluvchini, ikkinchi tunnelni ajratadigan andozani va qayta yuklashdan keyin har bir tarmoq bo'yicha bitta so'rov natijasini ayta olganingizda to'liq bo'ladi. Bundan kami — bugun tasodifan ishlab turgan sozlama.