Сбой DNS или проблема с MTU? Где на самом деле останавливается запрос
Имя, которое никогда не разрешается, терпит неудачу до любого соединения; застревание MTU начинается после рукопожатия. Сначала найдите этап, затем измените один уровень и проверьте снова.
Две ошибки дают от пользователя одну и ту же фразу: сайт не работает. Они происходят на разных уровнях, и это различие определяет, что вы измените. Сбой разрешения имени останавливается до того, как появится хоть какое-то соединение. Сбой размера пакета происходит после разрешения имени и после завершения рукопожатия, поэтому страница начинает загружаться и затем зависает. Найдите этап раньше, чем найдёте настройку.
Две ошибки на разных уровнях
Разрешение превращает имя в адрес, и ничто другое в соединении не может начаться, пока это не удастся. Проблемы с MTU пути возникают позже, когда пакет больше предела какого-либо звена отбрасывается, а отправитель об этом никогда не узнаёт. Одно — это поиск; другое — сбой доставки, который проявляется только выше определённого размера.
Симптомы различаются так, что это можно наблюдать без всяких инструментов. Сбой DNS мгновенный и постоянный: браузер сообщает, что сервер не найден. Сбой MTU частичный: страница начинается, часть ресурсов приходит, а большой ответ или выгрузка застревают.
Если ваш симптом частичный, перестаньте смотреть на DNS.
Этап 1: разрешается ли имя вообще
Используйте инструменты поиска платформы с тем же точным именем хоста, которое использует приложение. Частное имя в офисе может требовать внутреннего резолвера, а собственный защищённый DNS браузера может вести себя иначе, чем резолвер операционной системы, поэтому оба могут расходиться насчёт одного и того же имени.
Спросите резолвер, который использовала бы операционная система, затем сравните:
dig +short vpn.example.com
dig +short vpn.example.com @10.0.0.53
Если разрешение не удаётся, проблема в этой политике и её доступности. Не отправляйте частные имена произвольным публичным резолверам только ради сравнения, потому что само сравнение раскрывает имена, которые вы хотели держать внутренними.
Этап 2: где останавливается передача
Если имя разрешилось и соединение началось, запишите, где останавливается операция. Страница, которая отображается и затем зависает на одном ресурсе, выгрузка, которая умирает в постоянной точке, или большая загрузка, которая никогда не заканчивается, пока малые запросы работают, — всё это симптомы формы размера. Ответ, который вообще не начинается, имеет другую форму.
Держите конечную точку и назначение приложения фиксированными во время сравнения, иначе вы измеряете две переменные одновременно. Другие причины на этом этапе тоже возможны: ошибки службы, потери, поведение фильтра и переподключения туннеля — все они дают зависания.
Одно повторяемое зависание ценнее десяти случайных.
Почему MTU вредит только после рукопожатия
Рукопожатие TCP использует малые пакеты, поэтому удаётся на пути, который не может пронести сегмент полного размера. Сбой появляется, когда отправитель выдаёт большой пакет с битом запрета фрагментации, звено его отбрасывает, а сообщение ICMP, которое сообщило бы о пределе, не приходит, потому что фильтр его съел. Тогда отправитель повторяет тот же размер, и передача застревает.
Поэтому симптом зависит от размера и повторяется, а не является случайным. Это также объясняет, почему ping хоста ничего не доказывает: малый эхо-ответ ICMP может пройти по пути, который не пронесёт полезную нагрузку полного размера. Измерьте размер с обоих концов пути, если можете. Предел, который появляется только в одном направлении, — это асимметрия маршрутизации, а не MTU туннеля.
Измерьте размер явно, вместо того чтобы выводить его:
ping -M do -s 1472 203.0.113.20
tracepath 203.0.113.20
Измените один уровень и докажите
Для имён измените политику резолвера и повторите тот же поиск. Для размера используйте процедуру MTU с записанными исходными значениями и готовым откатом, потому что ограничение MSS без знания реального MTU туннеля меняет одно зависание на другое.
Страница, которая загрузилась один раз после изменения нескольких настроек, не указывает, что было исправлением. Измените одну вещь, повторите тот же тест и держите результат рядом с первым записанным неудачным этапом.
Именно эта запись мешает DNS, размеру пакетов и аутентификации превратиться в кучу постоянных обходов, которые никто не может объяснить. Проверка по «сырому» IP — хороший пример короткого пути, который меняет идентичность TLS, а отключение проверки сертификата, чтобы сравнение прошло, — не диагностика.