Защо отговорите на DNS64 се променят, щом се свърже VPN?
Отговорът на DNS64 кодира предположение за превод. Проверете кой резолвер е отговорил, дали префиксът е маршрутизиран и дали на пътя ви има транслатор.
Отговорите на DNS64 описват мрежово устройство, а не свойство на сървъра. Резолверът синтезира адрес IPv6 от адрес IPv4 и резултатът работи само там, където в края на този префикс стои транслатор. Вкарайте VPN в пътя и това устройство може да се задържи, да се промени или да престане да е вярно в зависимост от три условия.
Тези условия са резолверът, който е отговорил, маршрутът, който устройството ви има до синтезирания префикс, и дали нещо по този маршрут извършва превода. Всяко от тях е наблюдаемо и точно това прави повредата диагностицируема.
Към какво всъщност сочи синтезиран запис AAAA
Резолверът DNS64 отговаря на заявка AAAA за име само с IPv4, като вгражда адреса IPv4 в префикс, който е конфигуриран да използва, а общоизвестният префикс за тази задача е 64:ff9b::/96, както е описано в RFC 6147. За приложението записът изглежда като всеки друг запис AAAA и точно това е смисълът: клиент само с IPv6 може да опита връзка, без да знае, че дестинацията никога не е имала IPv6. После тази връзка зависи от функция NAT64, която някъде по пътя превежда между двете семейства. Без този транслатор синтезираният адрес е правдоподобно изглеждаща дестинация, която не води никъде.
Записът следователно кодира две неща наведнъж: оригиналния адрес IPv4 и предположението, че транслаторът е достъпен. Само първото се вижда в самия отговор.
Три условия решават дали още работи
Първото условие е кой резолвер е създал записа, защото такъв без конфигуриран DNS64 не връща нищо за това име и приложението се проваля по друг начин. Второто е дали устройството ви има маршрут до синтезирания префикс, защото отговорът може да е валиден, докато пътят до него липсва. Третото е дали транслаторът, който притежава този префикс, е на пътя, който бихте използвали, защото тунел, който носи 64:ff9b::/96 другаде, достига до друга функция или до нищо. И трите могат да са налице преди тунела и да се провалят след него и затова симптомът изглежда като внезапна регресия.
Проверявайте ги в този ред. Липсващ отговор и липсващ маршрут изглеждат еднакво в браузър и напълно различно в журнала на резолвера.
Когато резолверът се смени, отговорът се сменя
VPN клиентът често налага свой резолвер или поема целия път на заявката и този резолвер може да не синтезира нищо. Заявките за имена само с IPv4 тогава не връщат запис AAAA и клиент само с IPv6 изживява това като име, до което не може да се стигне. Случва се и обратното: резолвер, който наистина синтезира, може да ви даде префикс, който тунелният ви път не носи.
Кеширането прави това по-трудно за виждане. Синтезиран запис, получен в офисната мрежа, може да надживее контекста, който го е създал, затова клиентът продължава да се свързва с адрес, чийто транслатор вече не е достъпен. Гледайте резолвера, който отговаря сега, а не този, който е отговорил, когато записът е бил запазен. Изчистването на кеша без записване на стария и новия отговор унищожава доказателството, което ви е нужно.
Проверете заявката и пътя поотделно
Заявете името директно, преди да включите приложението, и отбележете кой сървър е отговорил. Командите по-долу показват записа AAAA, използвания резолвер и дали съществува маршрут до синтезирания префикс. Изпълнете ги със спрян тунел и после отново с включен.
dig AAAA ipv4only.example.com +short
dig AAAA ipv4only.example.com | grep -E '^;; SERVER'
ip -6 route get 64:ff9b::c000:0216
curl -6 -sS -o /dev/null -w '%{http_code} %{time_connect}\n' --max-time 8 http://ipv4only.example.com/
Четете резултатите като верига. Липсващ запис AAAA означава, че резолверът пред вас не синтезира, така че път само с IPv6 няма да работи за това име, каквото и да прави клиентът. Запис има, а маршрут няма — префиксът не се носи от текущия път и това е решение за маршрутизация, а не повреда на резолвера. Маршрут има, а заявката все още се проваля — това сочи към самия транслатор и той принадлежи на още един собственик.
Записвайте резолвера, мрежовия контекст и семейството адреси до всеки резултат. Именно тази бележка позволява на следващото сравнение да отдели смяна на резолвера от смяна на маршрутизацията.