Nega DNS qayta yo‘naltirilgandan so‘ng dnsmasq so‘rovlari VPN tashqarisiga chiqadi
Router tomonidagi REDIRECT LAN DNS so‘rovini yangi resolver soketiga aylantiradi. Mijoz oqimidagi belgilar unga hech qachon yetib bormaydi, shuning uchun yuqori oqim chiqishini to‘g‘ridan-to‘g‘ri belgilang.
LAN mijozi o‘z VPN’iga to‘g‘ri yetib boradi, shunga qaramay uning DNS so‘rovlari noto‘g‘ri yuqori kanalda ko‘rinadi. Bu odatiy ma’noda oqib chiqish emas; bu router so‘rovni uzatishni to‘xtatib, o‘zi javob berganida yuz beradigan holat. Tutib olish manzilni mahalliy soketga qayta yozadi, so‘ngra resolver o‘zining manba manzili va o‘zining marshrutlash qarori bilan ikkinchi, bog‘liq bo‘lmagan suhbat ochadi. Mijoz oqimiga qo‘yilgan belgilar birinchi suhbatni tavsiflaydi va ikkinchisi haqida hech narsa aytmaydi.
Belgi so‘rov bilan birga sayohat qilmaydi
Paket belgilari conntrack yozuvida va uchayotgan paketda yashaydi. REDIRECT qoidasi o‘sha uchishni tugatadi: foydali yuk mahalliy soketga topshiriladi va asl yozuv o‘z ishini qilgan bo‘ladi. Shundan keyin routerdan chiqadigan narsa resolver jarayoni yaratgan yangi soket bo‘lib, manbasi routerning o‘z manzili.
Shu sababli LAN mijozi manziliga bog‘langan siyosat marshruti yuqori oqim so‘roviga hech qachon mos kelmaydi. Yangi soket mijozga emas, dnsmasqga tegishli, va yadro marshrutni routerning o‘z trafigi uchun baholaydi. Manba qoidalari, interfeys qoidalari va belgi qoidalari barchasi boshqa tuple ko‘radi. Belgi tarqaladi deb taxmin qilish bu sozlashdagi eng keng tarqalgan xato bo‘lib, mijoz tomonidagi yozib olishda ko‘rinmaydi.
Ikki suhbat haqiqatan ham bitta nom va bitta vaqtni bo‘lishadi, yozib olishni tez ko‘zdan kechirganda ularni bitta oqimday ko‘rsatadigan narsa ham shu.
Qayerda uzatish mahalliy hal qilishga aylanadi
Avval 53-port qayta yo‘naltirilyaptimi, boshqa hostga tarjima qilinyaptimi yoki o‘z holida qoldirilyaptimi, shuni aniqlang, chunki uch holat turlicha harakat qiladi. Mahalliy portga qayta yo‘naltirish uzatishni tugatadi, boshqa mashinaga tarjima esa paketni harakatda saqlaydi va mijoz tupleini ma’noli qiladi.
Ikkala protokolni ham ko‘ring. UDP va TCP orqali yetib boriladigan resolver ikkalasida ham sinovdan o‘tkaziladi, faqat UDPni qamrab olgan qoidalar to‘plami esa katta javoblar uchun jim teshik qoldiradi. Routerning o‘z konfiguratsiya menejeri yaratgan qoidalar ham hisobga olinadi, yaratilgan faylni tahrirlash esa odatda keyingi qayta yuklashga yutqazadi.
sudo nft list ruleset | grep -n -B2 -A4 'dport 53'
sudo iptables -t nat -L -n -v | grep -E ':53|dns'
sudo ss -lunp | grep ':53'
Bu chiqishlar navbat bilan uch savolga javob beradi: so‘rovni nima qayta yozadi, uni nima qabul qiladi va tinglayotgan soket qaysi jarayonga tegishli. Egasi ma’lum bo‘lgach, yuqori oqim siyosatining yashaydigan joyi bor.
Resolverga o‘zining chiqish siyosatini bering
Tunnel faqat ba’zi nomlarga kerak bo‘lganda domenga xos yuqori oqim eng toza vosita. dnsmasq domen bilan cheklangan server satrini qabul qiladi, ixtiyoriy interfeys yoki manba manzili bilan so‘rovni tanlangan qurilmadan tashqariga chiqaradi. Aynan shu yo‘naltirish ikkinchi suhbatni VPNga ergashtiradi.
server=/corp.example/10.30.0.53@tun_work
log-queries
Yuqoridagi domen, manzil va interfeys o‘z qiymatlaringiz uchun joy egallovchilardir. Domen tanlash va chiqishni nazorat qilish alohida qarorlar bo‘lib qoladi: marshrut mavjud bo‘lishi kerak, manba manziliga yuqori resolver ruxsat berishi kerak va xavfsizlik devori javobga ruxsat berishi kerak. Faqat interfeys orqali yo‘naltirish fail-closed emas, chunki yo‘qolgan tunnel resolverni boshqa yo‘lga qulatib yuborishi mumkin. Har qanday ommaviy zaxira yo‘lni maxfiy qolishi shart bo‘lgan nomlar fazosidan uzoq tuting.
Satrni yaratilgan faylga emas, router qo‘llab-quvvatlaydigan konfiguratsiya egasiga joylashtiring, aks holda keyingi qayta yuklash tuzatishni o‘chiradi.
Umumiy kesh nimani saqlab qola olmaydi
Bitta keshli bitta uzatuvchi har bir LAN mijoziga xizmat qiladi va bu ba’zi tarmoqlarga kerak bo‘ladigan farqni buzadi. Agar ikki mijoz bir xil nomni turlicha hal qilishi kerak bo‘lsa, umumiy soket kim so‘raganini tiklashning hech qanday yo‘lini topa olmaydi. Har bir mijoz uchun siyosat alohida resolver nusxalarida yoki shaxsni saqlaydigan uzatish xususiyatida yashashi kerak.
Keshga olingan javob ham yangi yo‘l haqida dalil emas. Javob xotiradan kelishi mumkin, yuqori oqim marshruti esa buzilgan holda qoladi.
53-port qoidalari DNSni HTTPS yoki TLS ustida gapiradigan ilovalar haqida hech narsa aytmaydi. O‘sha so‘rovlar qayta yo‘naltirishga hech qachon yetib bormaydi, shuning uchun faqat 53-portga qurilgan siyosat trafikning bir qismini tavsiflaydi va uni qism to‘plam sifatida hujjatlashtirish kerak.
Ikkinchi suhbatni tekshiring, birinchisini emas
O‘zingiz boshqaradigan bitta nom bilan sinab ko‘ring va ikkala tomonni kuzating. Mijoz tomonidagi yozib olish so‘rov LANdan chiqqanini isbotlaydi; keyin qayerga ketganini faqat router tomoni isbotlaydi.
sudo tcpdump -ni tun_work udp port 53
ip route get 10.30.0.53
dig +short corp.example @10.30.0.53
Har urinishdan oldin keshni tozalang, chunki iliq javob buzilgan yuqori oqimni yashiradi. TCP orqali takrorlang, so‘ng tunnel o‘chirilgan holda takrorlang, resolver o‘zining afzal ko‘rgan yo‘li yo‘qolganda nima qilishini ko‘rish uchun. Aynan o‘sha oxirgi xatti-harakat dizayn fail-closed yoki shunchaki omadli ekanini hal qiladi.