Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Кэширование DNS в Unifi при использовании Set Inform?, UniFi Network
 
Итак, я уже некоторое время использую свою систему Unifi с Elastic IP от Amazon в AWS. Я настроил точки доступа, чтобы они напрямую указывали на этот IP, и всё работало нормально. Но потом я решил перейти на запись в DNS, чтобы не быть привязанным к одному серверу или только к Amazon. Создал запись dns на unifi.mydomain.com, указывающую на мой контроллер, и перенастроил все точки доступа, чтобы они обращались к этому DNS.

Однако, когда я меняю IP-адрес на стороне Amazon на другой Elastic IP, точки доступа не запрашивают DNS повторно — похоже, у них статически прописан этот IP, хотя в настройках inform указан именно URL. Есть ли способ заставить точки доступа искать контроллер по DNS не только при первом подключении или это именно такая особенность, а не ошибка?

Спасибо,  
- Ryan
 
То, что вы предлагаете, возможно, но глубоко нарушает принципы работы DNS и, скорее всего, не сработает так, как вы думаете. DNS-сервер через этот TTL сообщил AP, что запись типа A действительна как минимум ещё час. А теперь вы хотите, чтобы AP проигнорировал это и всё равно переспросил. Вся суть TTL — снижать нагрузку на DNS-серверы и улучшать работу сети за счёт уменьшения повторных запросов.

Кроме того, учтите, что разрешение DNS происходит на уровне операционной системы: программное обеспечение Ubiquiti на AP может делать запросы хоть сто раз, а ОС будет отдавать ответ из кеша. Технически можно очистить весь кеш DNS на уровне ОС, но это всё равно как использовать топор — не стоит этим разбрасываться.

Если речь идёт о домене вне вашей локальной сети, например в интернете на авторитетном сервере типа godaddy, просто обновление кеша на AP вряд ли поможет. Сервер, к которому обращается AP, тоже хранит кеш. А сервер, к которому обращается этот сервер (например, у вашего провайдера), и так далее. DNS — это распределённая многоуровневая система, а не просто «клиент и один сервер». Вы собираетесь звонить своему провайдеру и просить очистить их кеш? Удачи. Скорее всего, вас не поймут, а если поймут — только рассмеются.

Делайте по правилам: если планируете изменения — заранее снижайте TTL. Если часто хотите менять на коротком сроке — просто держите низкий TTL. Заставлять клиентов самим бегать и чистить кеш ОС, чтобы исправить ваши ошибки, — решать проблему наоборот. Это не их вина, что ваши DNS-записи "врут" о сроке жизни записи.
 
На самом деле это можно сделать прямо на контроллере. Проверьте, изменился ли IP, и передайте эту информацию всем устройствам (unifi-устройствам) на контроллере. Так это произойдет мгновенно (ну, очень быстро), и не придется менять TTL. В общем, отправьте команду обновления DNS на оборудование с контроллера.
 
TTL установлен на час. Похоже, что после истечения TTL всё само собой исправляется, так что, по крайней мере, TTL соблюдается. Однако, мне кажется разумным, чтобы если информирование не прошло, скажем, 2 минуты, устройство заново запрашивало IP с некэширующего сервера, чтобы проверить, не устарел ли IP. Для этого Unifi-устройство должно быть достаточно умным, чтобы уметь запрашивать данные с другого (некэширующего) сервера. Не уверен, возможно ли это в вашей сети.
 
TTL для A-записи в DNS для «unifi.customdomain.com» установлен на короткий срок? Клиенты (и кэширующие резолверы) должны хранить ответы DNS столько, сколько указано в этом TTL, и не запрашивать заново, пока он не истечет. Если вы не уверены в значении TTL, его можно проверить следующими командами:  
Linux: dig unifi.customdomain.com  
Windows: nslookup -type=A -debug unifi.customdomain.com  
Обратите внимание, что нужно смотреть именно TTL для A-записи, а не для записи authority/SOA вверху (они важны только если вы меняли DNS-хостинг вашего домена).
 
Рад, что эта тема снова возникла — на самом деле я давно с этой проблемой не сталкивался, потому что мой сервер Unifi не менялся, но всё же кажется странным, что это до сих пор происходит. Ubiquiti, есть ли шанс, что вы сможете это исправить?
 
Прошло два года, а проблема всё та же. Некоторые устройства настроены на информирование по адресу http://unifi.customdomain.com:1234/inform. IP-адрес customdomain.com изменился, но устройства всё равно пытаются использовать закешированный IP. Заходил по SSH на устройства и пингуя домен, подтвердил это. Есть какие-то новости по этому поводу?
 
Думаю, твоё описание пользовательской базы как преимущественно малого и среднего бизнеса или продвинутых домашних пользователей в целом соответствует действительности, по крайней мере для линейки продуктов UAP. При этом я не думаю, что эти ребята часто меняют свои облачные IP-адреса, и, надеюсь, они продумывают всё тщательно, когда это делают. Необходимость координировать TTL в DNS при смене IP — это не только проблема Ubiquiti. Она касается любой службы с привязанным DNS-именем, будь она облачной или нет.
 
Возможно, мой случай использования не такой уж и распространённый, как я думал. Я не очень хорошо знаком с Ubiquiti, но предполагал, что их в основном используют «просумеры» и малый бизнес. Думаю, контроллеры на динамическом DNS встречаются у таких пользователей довольно часто, но, с другой стороны, я не нашёл много людей с такой проблемой, так что, наверное, я ошибаюсь, и это скорее изолированный сценарий.

Согласен, что внедрение в обычную библиотеку было бы более аккуратным решением, но, наверное, у Ubiquiti было бы больше веса и влияния в этом плане, чем у меня!
 
Я понимаю твою точку зрения, но я тоже не считаю, что чей-то контроллер UniFi должен постоянно менять IP-адреса. На самом деле, твой контроллер (или контроллеры твоих клиентов) не должны часто менять IP. Если это и происходит, то в момент, выбранный администратором контроллера. Мне кажется, что лучше заранее спланировать смену IP, чем пытаться использовать методы обнаружения вредоносного ПО на обычных сетевых клиентах, которые пытаются подключиться к серверу.

К тому же UBNT под капотом просто использует обычную Linux-систему. Никакой магии, просто обычная встроенная Linux-система. Если это действительно хорошая идея, её стоит реализовать в стандартной библиотеке резолвера, чтобы она работала повсеместно. Иди и убедись, чтобы разработчики glibc это внедрили — тогда это начнёт работать везде.
 
Так почему мы не можем заставить контроллер обновлять запись DNS на устройствах? Отправить запрос на обновление только одной записи DNS — записи с именем и IP контроллера. В этот момент никакого запроса к DNS-серверу не происходит, вы просто меняете то, что хранится на AP. Тогда, когда он отправит информ, он отправит его на правильный IP-адрес.
 
Потому что если что-то пойдет не так (например, во время TTL информирующий URL недоступен), есть два варианта. Либо URL действительно не работает, либо он, возможно, был перемещён, а TTL не был учтён. Игнорировать последний вариант и сразу винить только нарушение TTL — плохой дизайн, особенно когда это раздражает реальные сцены, как в моём случае, когда у тебя нет полного контроля над установочной средой.

Это буквально просто «не кэширующий DNS-сервер». В большинстве случаев это авторитетный DNS-сервер (ведь по определению они не кэшируют), но часто и серверы, расположенные прямо под авторитетным, тоже могут не кэшировать.

Мы не используем такие серверы в нашей сети, но применяем в продуктах. Пример: обнаружение доменов с fast-flux. Они меняются очень быстро, поэтому нельзя использовать кэшированные результаты — иначе мы их не заметим. Также мы выбираем DNS-серверы за anycast-узлами, чтобы обеспечить максимально быстрое распространение данных. Это довольно обычная практика, и в интернете полно инструментов для проверки DNS, которые работают с некэширующими серверами, например MXToolBox: https://mxtoolbox.com/SuperTool.aspx

У меня нет контроля над доменом — он принадлежит им. Я просто настраивал для них оборудование. Уверен, что такой сценарий встречается довольно часто.
 
Нет, вы на самом деле требуете, чтобы система предположила, что указанный TTL — это ложь. Это единственная причина, по которой она вообще должна повторно отправлять DNS-запрос. Если вы верите в TTL, то должны ожидать получить тот же самый ответ, что и раньше, и тогда зачем снова делать запрос? Этот TTL явно говорит, что запись A действительна минимум указанное время и не изменится раньше. Либо вы верите этому факту, либо нет. Пытаться решить проблему с TTL DNS, заставляя клиентов обходить это и повторно опрашивать «не кэширующий» DNS-резолвер, кажется абсурдом. А что вообще в этом контексте такое «не кэширующий» DNS-сервер? Он каждый раз выполняет полную рекурсию с root hints? У вас такой в сети есть? Если ваша основная идея в том, что DNS-серверы сейчас гораздо быстрее, почему бы тогда просто не поставить TTL равным 1 и не закончить с этим? Зачем вообще добавлять странные ухищрения на стороне клиента? Хотя я согласен, что стандарты довольно гибкие и часто нарушаются во имя функционала, у всего есть пределы. Я не ожидаю, что мой браузер при ошибке соединения с сайтом начнёт автоматически очищать запись из DNS-кэша. У вас есть примеры продуктов, которые делают то, что вы здесь предлагаете? Обычно разрешение DNS — это функция операционной системы, и ни Windows, ни Linux так не делают.
 
Честно говоря, я совсем не рад был сидеть целый час в ожидании очистки кэша. На самом деле, это потратило несколько часов времени, ведь сначала я вообще не понимал, почему они не могут подключиться. Но с другой стороны, я же новичок в оборудовании Ubiquiti.
 
Странный аргумент. На самом деле это не нарушает принципы DNS. Есть высокоуровневые RFC (1034, 1035) и еще куча рекомендательных RFC (1591, 3071 и т.д.), которые настолько устарели, что вообще не похожи на современный интернет. Мне кажется, я прочитал все эти документы, но не вижу, как это противоречит каким-то актуальным принципам. Не стоит сразу думать, что это ложь. Лучше предположить, что раз информ (inform) несколько раз не сработал, то тут может быть что-то другое. Это просто разумное использование резервного варианта. Что тебе лучше: делать систему без резервных вариантов, и если что-то перестанет работать, можно будет указать на кого-то, кто нарушил стандарт? Я предпочитаю, чтобы системы работали. Да, это был один из изначальных принципов, но он давно устарел. DNS-серверы стали намного быстрее (частично за счет самого ПО и аппаратного обеспечения серверов, частично из-за архитектуры серверов и улучшений в архитектуре интернета в целом, особенно с развертыванием Anycast). Времени жизни (TTL) записей сильно сократились. Они могут быть даже 60 секунд, и всё будет нормально работать. Поэтому я и сказал, что сегодня почти нет таких принципов DNS, которые действительно применимы.

Как я писал в первом сообщении, можно сделать дополнительный запрос к некэширующему серверу имен. Это легко реализуется. Было бы лучше, если бы устройство доверяло DNS реализации ОС и не трогало ничего вне пользовательского пространства? Да, это была бы «чище» с точки зрения программирования, но выбираешь то, что лучше для пользователей, а не то, что чище.

Нет, я именно сказал делать запрос к некэширующему серверу имен. Это снова не важно, потому что я предлагаю опрашивать именно такой сервер. Сейчас много сервисов делают запросы к некэширующим серверам, я разрабатываю решения по безопасности, и большинство из них тоже так работают. Иногда нужно знать, чему запись соответствует прямо сейчас, а не в пределах TTL. Принципы DNS это не запрещают, особенно на уровне инфраструктуры.

Я знаю, как правильно использовать DNS, по крайней мере в своих продуктах. Но знаешь, не всегда сеть разворачивается в контролируемой среде. Случай, с которым я столкнулся, был в доме одного моего родственника, где я на время развернул систему в качестве услуги, и там просто невозможно иметь статический IP. Контроллер — это Cloud Key в их сети, но точкам доступа придется перемещаться между этим домом и другим объектом, поэтому я решил, что логичнее всего будет настроить информ-адрес на динамическое DNS-имя, хостящееся у них дома, чтобы при переносе точек доступа на удаленный объект всё продолжало работать.

Извини за длинный ответ, но твой комментарий, по-моему, заслуживал развернутого объяснения, потому что в нем было много неверных предположений. В завершение: если ты считаешь стандарты каким-то законом, то Facebook нарушает почти все стандарты подряд. Это всего лишь рекомендации — если нужно обойти стандарт, чтобы сделать что-то лучше или быстрее, так и делай. Ни одна хорошая инфраструктура не рассчитывает, что все третьи стороны будут строго соблюдать стандарты, иначе пользователи будут страдать.
 
Эм, если ваш контроллер изначально настроен на 1.1.1.1, а потом изменился на 2.2.2.2, вы говорите устройствам использовать теперь 2.2.2.2 на контроллере, но они так и не получают обновление, потому что ищут 1.1.1.1, чтобы получить инструкции... Вот почему лучше всего использовать DNS: вы обновляете адрес в DNS, и после истечения TTL устройства автоматически получают новый IP, и всё снова работает как надо.
 
Я говорил, что можно полностью обойти DNS-серверы и просто отправить обновлённый IP на устройства для доменного имени контроллера прямо с контроллера. Это будет своего рода обратное динамическое обновление DNS, как делают роутеры и другие устройства. Насколько сложно реализовать отправку всего одной обновлённой DNS-записи на устройства с новым адресом контроллера? Эта функция могла бы использоваться и для контроллеров с высокой доступностью — проверять, работает ли основной контроллер, и если он недоступен, то отправлять новое адресное обновление на устройства, если основной контроллер офлайн и находится по другому публичному IP. Мой TTL получился 3 минуты, что, думаю, достаточно быстро для большинства, но не для высокодоступных систем. Мы используем DynDns.
Страницы: 1
Читают тему (гостей: 1)