Основы DNS

задняя часть сервер балансировки нагрузки DNS
Основы DNS

что такое DNS

DNS (система доменных имен), также известная как система доменных имен, является службой Интернета. по сути этодоменное имяиIPРаспределенные базы данных, которые сопоставляются друг с другом, позволяют нам более удобно выходить в Интернет через доменные имена.

DNS имеет следующие характеристики:

  • распределенный
  • Протокол поддерживает TCP и UDP, общий порт 53.
  • Ограничение длины каждого доменного имени составляет 63
  • Ограничение общей длины домена: 253.

Итак, когда использовать TCP и когда использовать UDP?

В первые дни верхний предел размера UDP-пакета DNS составлял 512 байт, поэтому, когда определенный размер ответа превышает 512 (слишком много возвращаемой информации), служба DNS будет использовать протокол TCP для передачи. Позже протокол DNS расширил свой собственный протокол UDP.Когда клиент DNS отправляет запрос запроса, он может указать, что он может получать пакеты UDP, превышающие 512 байт.В этом случае DNS по-прежнему будет использовать протокол UDP.

Иерархическая структура базы данных

Структура DNS очень похожа на файловую систему Linux, как перевернутое дерево. Ниже приведен пример доменного имени дома веб-мастера:

Верхний . — это имя корневого домена, за которым следует доменное имя верхнего уровня com, а затем домашнее доменное имя веб-мастера chinaz и так далее. При использовании доменного имени начинайте снизу вверх. s.tool.chinaz.com — это полное доменное имя, как и www.chinaz.com.

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

Сервер корневых доменных имен управляет только доменом верхнего уровня и в то же время делегирует управление каждым доменом верхнего уровня каждому домену верхнего уровня, поэтому, когда вы хотите подать заявку на доменное имя второго уровня в com, Вы можете обратиться в центр регистрации доменных имен com. Например, если вы подаете заявку на доменное имя второго уровня chinaz.com, как показано на рисунке выше, доменное имя ниже chinaz.com будет управляться вами. Когда вы управляете поддоменами chinaz.com, вы можете создать свой собственный сервер имен и делегировать управление chinaz.com серверу имен, который вы создали в центре регистрации .com. Структурная схема самодельного и не самодельного сервера имен выглядит следующим образом:

В общем, не создавайте его, если можете, потому что поддерживать высокодоступный DNS непросто. Насколько я знаю, есть две ситуации, когда вам нужно создать свой собственный сервер имен:

  1. Построить внутренний DNS.В компании много внутренних машин, и взаимный доступ через ip слишком запутанный.В это время можно построить внутренний сервер имен, чтобы позволить внутренним серверам общаться друг с другом через доменные имена.
  2. Компания не удовлетворена производительностью сервера имен, предоставленного поставщиком доменных имен.Хотя регистраторы доменных имен верхнего уровня имеют свои собственные серверы имен, серверы имен, предоставляемые регистраторами, не являются профессиональными и не могут удовлетворить потребности предприятий с точки зрения производительности и стабильности.В настоящее время предприятиям необходимо создавать свои собственные высокопроизводительные серверы имен, такие как как добавление функций интеллектуального разрешения, чтобы пользователи в разных регионах получали доступ к ближайшему IP-адресу для улучшения качества обслуживания.

Подводя итог распределенному управлению DNS, когда домен делегируется серверу имен, права управления в этом домене передаются этому серверу имен. Такая конструкция позволяет с одной стороны уменьшить нагрузку на хранилище, а с другой стороны, повысить гибкость управления доменными именами (эта структура очень похожа на файловую систему Linux, которая может монтировать любой подкаталог на другой диск, а подкаталоги продолжают монтироваться). вне)

домен верхнего уровня

Домены верхнего уровня, такие как com, которые строго контролируются ICANN, не могут создаваться случайно. Существует два типа доменов верхнего уровня:

  • рДВУ
  • нДВУ

Общие общие домены верхнего уровня, такие как .com, .org, .edu и т. д., и национальные домены верхнего уровня, такие как .cn в моей стране и .us в США. Когда компания подает заявку на публичное доменное имя, если это многонациональный продукт, она должна выбрать общее доменное имя верхнего уровня, если нет многонационального бизнеса, это зависит от ее собственных предпочтений (можно сравнить услуги и стабильность каждый домен верхнего уровня, прежде чем сделать выбор). Вот несколько популярных доменов верхнего уровня. Полный список доменов верхнего уровня см.Википедия.

me
Домен верхнего уровня me на самом деле является национальным доменным именем, да黑山共和国Доменное имя страны , но оно предназначено для приложений личного развития, поэтому многие личные блоггеры используют его в качестве доменного имени своего блога (этот блог также происходит от ~)

io
Многие проекты с открытым исходным кодом часто используют io в качестве доменного имени верхнего уровня, которое также является национальным доменным именем. Поскольку io совпадает с аббревиатурой ввода/вывода в компьютере, он также очень похож на второй механизм компьютера, вызывая у людей чувство компьютерного гения. По сравнению с доменными именами .com, в домене .io есть много ресурсов и больше вариантов.

Процесс разрешения DNS

Поговорив об основных понятиях DNS, давайте поговорим о процессе разрешения DNS. Когда мы выходим в Интернет через браузер или приложение, сначала выполняется процесс разрешения DNS. Стандартный glibc предоставляет динамическую библиотеку libresolv.so.2, которая используется нашим приложением для разрешения доменных имен (также называемых разрешением), а также предоставляет файл конфигурации./etc/nsswitch.confДля управления разрешающим поведением наиболее важной строкой в ​​файле конфигурации является следующая строка:

hosts:      files dns myhostname

Он определяет порядок разрешения.По умолчанию файл hosts ищется первым.Если совпадений нет, выполняется разрешение DNS. Процесс разбора по умолчанию выглядит следующим образом:

На приведенном выше рисунке в основном описывается процесс разрешения на стороне клиента. Мы видим, что наиболее важным шагом является запрос локального DNS-сервера на выполнение разрешения. Он отправит запрос разрешения на сервер рекурсивного разрешения в соответствии с конфигурацией локального DNS-сервера. DNS-сервер (мы расскажем, что такое сервер рекурсивного разрешения), локальный DNS-сервер в/etc/resolv.confв конфигурации. Давайте посмотрим на процесс разрешения на стороне сервера:

Разберем процесс анализа:

  1. Клиент отправляет запрос на локальный DNS-сервер (сервер рекурсивного разрешения) для разрешения доменного имени tool.chinaz.com.
  2. Проверьте кеш на локальном DNS-сервере, чтобы узнать, было ли кешировано доменное имя tool.chinaz.com, и если да, верните его клиенту напрямую; если нет, перейдите к следующему шагу.
  3. Локальный DNS-сервер отправляет запрос на сервер имен корневого домена, чтобы запросить адрес сервера имен домена верхнего уровня com.
  4. После получения IP-адреса доменного имени com отправьте запрос на сервер имен com, чтобы получить адрес сервера имен доменного имени chinaz.
  5. Продолжайте запрашивать сервер имен chinaz, получите адрес доменного имени инструмента и, наконец, получите IP-адрес tool.chinaz.com Локальный DNS-сервер кэширует результат для быстрого возврата в следующем запросе.
  6. Локальный DNS-сервер возвращает результат клиенту

Сервер рекурсивного разрешения против авторитетного сервера имен

В процессе разрешения мы обнаружили два типа DNS-серверов, и клиент напрямую обращается к递归解析服务器, который также является самым загруженным во время всего процесса синтаксического анализа. Его шаги запроса являются рекурсивными, начиная с корневого сервера доменных имен и заканчивая запросом до целевого доменного имени.

Сервер рекурсивного разрешения получает адрес следующей цели, запрашивая авторитетный сервер доменных имен на первом уровне, пока не найдет адрес целевого доменного имени.权威域名服务器

Проще говоря:递归解析服务器отвечает за разрешение доменных имен.权威域名服务器отвечает за хранение записей доменных имен

Сервер рекурсивного синтаксического анализа обычно предоставляется интернет-провайдером.Кроме того, есть также некоторые известные общедоступные серверы рекурсивного синтаксического анализа, такие как Google 8.8.8.8, China Unicom 114 и BAT, которые также запустили общедоступные серверы рекурсивного синтаксического анализа, но лучшая производительность должны быть предоставлены вашим интернет-провайдером, но могут иметьDNS劫持Проблема

тайник

Поскольку весь процесс разрешения очень сложен, DNS использует технологию кэширования для обеспечения надежности обслуживания. Когда рекурсивный сервер имен анализирует доменное имя tool.chianaz.com и снова получает запрос tool.chinaz.com, он не повторяет процесс рекурсивного анализа снова, а напрямую возвращает кэш последнего результата анализа. И он кэшируется иерархически, то есть когда в следующий раз он получает запрос от www.chinaz.com, поскольку этот сервер рекурсивного синтаксического анализа уже знает авторитетный сервер имен chinaz.com, ему нужно только снова запросить chinaz.com Сервер имен отправляет запрос на запрос www.

корневой сервер имен
Откуда сервер рекурсивного синтаксического анализа узнает?根域名服务器адрес его? Адрес корневого сервера доменных имен фиксированный.В настоящее время в мире существует 13 корневых серверов разрешения доменных имен.Эти 13 записей сохраняются на сервере рекурсивного разрешения:

Почему существует только 13 корневых серверов имен, а не должно ли их быть как можно больше для балансировки нагрузки? Как упоминалось ранее, протокол DNS использует UDP-запрос.Поскольку максимальная длина UDP-запроса, которая может гарантировать производительность, составляет 512 байт, чтобы разрешить включение всех данных корневого сервера доменных имен в 512-байтовый UDP-пакет, корневой сервер может только быть ограничено 13 байтами, и каждый сервер использует однобуквенное имя из алфавита

Умный парсинг

Интеллектуальное разрешение означает, что когда доменное имя соответствует нескольким IP-адресам, при запросе IP-адреса этого доменного имени будет возвращен ближайший к вам IP-адрес. Поскольку пропускная способность между различными местными операторами очень низка, для пользователей связи доступ к IP-адресу Unicom является катастрофой, и интеллектуальное разрешение DNS может решить эту проблему.

Интеллектуальное разрешение основано на протоколе EDNS, который представляет собой протокол расширения DNS, разработанный Google.Модификация относительно проста, то есть добавление исходного IP-адреса клиента в пакет DNS, чтобы сервер имен мог возвращать IP-адрес сервера, который ближе к клиент в соответствии с IP-адресом клиента.

Последней внутренней поддержкой EDNS является DNSPod. DNSPod — популярный производитель разрешений доменных имен в Китае. Многие компании будут использовать DNSPod для ускорения доменных имен. Он был приобретен Goose Factory.

Регистратор доменных имен

Как правило, если мы хотим зарегистрировать доменное имя, нам нужно найти регистратора доменного имени.Например, если я хочу зарегистрировать hello.com, мне нужно найти регистратора доменного имени com, чтобы зарегистрировать доменное имя hello. com имеет более одного регистратора доменных имен, и эти регистраторы доменных имен также получили права на регистрацию от ICANN, см.Как подать заявку, чтобы стать регистратором доменных имен .com

Так,域名注册商и权威域名解析服务器Что это значит? Регистраторы доменных имен будут создавать свои собственные уполномоченные серверы разрешения доменных имен. Например, если вы подаете заявку на доменное имя второго уровня в зоне .com на Goudaddy, вам не нужно создавать сервер имен. Вы можете напрямую управлять своим доменным именем, указав в Центр управления godaddy Причина То есть, официальные серверы имен для вашего нового доменного имени по умолчанию предоставляются регистратором доменных имен. Конечно, вы также можете изменить его.Например, если вы подаете заявку на зарубежное доменное имя от godaddy, измените авторитетный сервер доменных имен на DNSPod.С одной стороны, вы можете ускорить внутреннюю скорость разрешения, а с другой С другой стороны, вы можете пользоваться функцией интеллектуального разрешения, предоставляемой DNSPod.

Используйте привязку для создания сервера разрешения доменных имен

Поскольку в Интернете слишком много статей, посвященных сборке привязок, я не буду их повторять.Друзья, которым нравится это делать, могут поискать в Интернете учебные пособия и шаг за шагом построить локальный сервер имен, чтобы поиграть. Здесь мы в основном представляем конфигурационный файл bind.

Конфигурационный файл для привязки разделен на две части:bind配置文件иzone配置文件

привязать файл конфигурации

Файл конфигурации привязки находится по адресу/etc/named.conf, который в основном отвечает за настройку функций привязки, таких как путь к зоне, журнал, безопасность, ведущий-подчиненный и другие конфигурации.

Самое важное из которых — добавить конфигурацию зоны и указать файл конфигурации зоны.recursionВключите функцию рекурсивного синтаксического анализа. Если это не так, то эту службу привязки можно использовать только в качестве авторитетной службы синтаксического анализа. Когда ваша служба привязки является внешней, ее открытие будет сопряжено с риском для безопасности. Неправильная защита позволит использовать ваш сервер имен хакеры бройлер

файл конфигурации зоны

Конфигурационный файл зоны указывается в файле конфигурации привязки.На следующем рисунке показана простая конфигурация зоны:

Конфигурация зоны является основной конфигурацией сервера имён. Она определяет записи ресурсов DNS, такие как записи SOA, A, CNAME, AAAA и др. В Интернете слишком много данных о концепции различных записей, поэтому я не буду повторять их здесь. . Которые в основном говорят о роли SOA и CNAME.

SOA-записи

Запись SOA представляет собой адрес авторитетного сервера разрешения для этого доменного имени. Разница между авторитетным сервером разрешения и сервером рекурсивного разрешения упомянута выше.Когда все серверы рекурсивного разрешения не имеют кеша для разрешения вашего доменного имени, они вернутся к источнику, чтобы запросить запись SOA этого доменного имени, также называемую авторитетная резолюция.

CNAME

Концепция CNAME очень похожа на псевдоним, как и логика его обработки. Когда сервер выполняет resloving, он обнаруживает, что имя является CNAME, и обращается к записи A этого CNAME. Вообще говоря, запись A можно использовать вместо места, где можно использовать CNAME, так зачем изобретать такую ​​вещь, как CNAME? Это быстрый способ сделать так, чтобы несколько доменных имен указывали на один и тот же IP-адрес, поэтому при изменении IP-адреса, соответствующего CNAME самого низкого уровня, CNAME верхнего уровня не нужно менять. Так же, как жесткое кодирование в нашем коде, мы всегда удаляем эти жесткое кодирование и представляем их с помощью переменной, поэтому, когда эта переменная изменяется, нам нужно изменить только одно место.

После настройки вы можете использоватьnamed-checkconfиnamed-checkzoneДве команды, чтобы проверить, есть ли проблема с нашим файлом конфигурации, после чего мы можем запустить службу привязки:

$> service named start
Redirecting to /bin/systemctl restart  named.service

мы используемnetstat -ntlpЧтобы проверить, запущена ли служба:

Порт 53 запущен, поэтому давайте проверим эффект и проанализируем его с помощью digwww.hello.comДоменное имя, используйте 127.0.0.1 в качестве сервера рекурсивного разрешения.

Мы видим, что результат dig — 1.2.3.4, как настроено в нашем конфигурационном файле, DNS выполнил свою миссию и получил IP в соответствии с доменным именем, но IP, который мы используем для демонстрации, явно является поддельным IP :)

Балансировка нагрузки с DNS

Добавьте несколько записей A к доменному имени и используйте метод опроса, чтобы вернуть случайную запись во время разрешения, и трафик будет равномерно классифицирован на несколько записей A.

www     IN      A       1.2.3.4
www     IN      A       1.2.3.5

В приведенной выше конфигурации мы добавили две записи A в домен www, который называетсяmulti-homed hosts, его эффект таков: когда мы запрашиваем сервер имен для разрешения доменного имени www.hello.com, возвращаемый IP-адрес будет чередоваться между двумя IP-адресами (поведение по умолчанию, некоторые интеллектуальные разрешения DNS будут оценивать на основе IP-адреса и возвращать IP, который находится близко к клиенту, расстояние, пожалуйста, ищитеDNS智能解析).

На самом деле, каждый раз, когда делается запрос на разрешение DNS, сервер имен будет возвращать все IP-адреса.Если настроить выше, он вернет клиенту как 1.2.3.4, так и 1.2.3.5. Так как же он достигает RR? Сервер имен просто каждый раз возвращает другой порядок IP-адресов, и клиент будет использовать первый IP-адрес в ответе для отправки запроса.

Балансировка нагрузки DNS против балансировки нагрузки LVS Professional

По сравнению с LVS, профессиональным инструментом балансировки нагрузки, балансировка нагрузки на уровне DNS имеет следующие характеристики:

  1. Реализация очень проста
  2. По умолчанию его можно запланировать только в режиме RR.
  3. DNS не имеет проверок работоспособности для серверных служб.
  4. Время восстановления после сбоя DNS относительно велико (между службами DNS существует кэш)
  5. Количество rs, которое может быть загружено, ограничено (ограничено размером пакета ответа DNS)

В реальных сценариях также необходимо выбрать соответствующую стратегию балансировки нагрузки в соответствии с требованиями.

Авторизация поддомена

После того, как мы подали заявку на доменное имя второго уровня hello.com из домена .com, наша компания расширилась, и нам нужно было разделить два подразделения, A и B, и компания присвоила им обоим доменные имена третьего уровня.a.hello.comиb.hello.com, структура доменного имени выглядит следующим образом:

После очередного периода разработки у отделов А и Б слишком много внутренних дел, и им нужно часто подавать заявки на доменные имена для новых продуктов.В настоящее время они хотят создать свой собственный сервер имен и им необходимо передать управление соответствующим доменным именем. права на себя.Предполагаемая структура выглядит следующим образом:

Обратите внимание на разницу между первым этапом и вторым этапом: на первом этапе, если отдел А хочет подать заявку на поддомен под a.hello.com, он должен обратиться к вышестоящему руководству. Домен hello.com находится в головном офисе; На этом этапе отдел А сначала строит свой собственный сервер имен, а затем головной офис передает права на управление доменом a.hello.com самостоятельно созданному серверу имен. права называется子域授权

Авторизация поддоменов делится на две части:

  1. Отдел A создает свой собственный сервер имен и указывает авторитетный сервер разрешения a.hello.com в файле конфигурации зоны в качестве адреса своего собственного сервера имен.
  2. Головной офис добавляет запись NS на сервер имен для авторизации домена a.hello.com на сервере имен отдела А.

Первый шаг мы用bind搭建域名解析服务器Как уже упоминалось, просто укажите запись SOA в файле конфигурации зоны:

@       IN     SOA      ns.a.hello.com    admin.a.hello.com. (……)

Второй шаг — добавить NS-запись на сервер имён домена hello.com:

a.hello.com      IN       NS       ns.a.hello.com
ns.a.hello.com      IN      A        xx.xx.xx.xx (自建nameserver的IP)

Таким образом, при разборе доменного имени xx.a.hello.com сервер имен hello.com обнаружит, что в конфигурации есть записи NS, и продолжит рекурсивный анализ.

Инструмент отладки DNS

Обычно используемые OPS инструменты отладки DNS: host, nslookup, dig

Эти три команды относятся к пакету bind-utils, то есть набору инструментов связывания, и их сложность и функциональность возрастают в свою очередь. Что касается их использования, на странице руководства и в Интернете слишком много руководств.Вот краткий анализ вывода команды dig:

dig имеет много параметров и много функций, вы можете использовать его самостоятельно.

разное

Атака с усилением DNS

Атака с усилением DNS — это разновидность DoS-атаки, при которой полоса пропускания целевой машины заполняется большим объемом трафика, так что целевая машина отказывается от подключения к обычному запросу пользователя и вешает трубку.

идеи
В атаках с обычным трафиком хакер устанавливает большое количество запросов-ответов на целевую машину, но проблема в том, что требуется большое количество хакеров. Поскольку общая пропускная способность сервера намного больше, чем у домашней сети, если наш собственный домашний компьютер используется в качестве хакерской машины, наша пропускная способность будет перегружена до того, как пропускная способность целевого компьютера будет заполнена.

принцип
Процесс рекурсивного разрешения DNS весьма специфичен: мы можем обмениваться сотнями или даже тысячами байтов разрешающих ответов через запрос запроса из нескольких байтов.(流量放大), и большинство серверов не защищают от DNS-серверов. Затем хакеры могут проводить DoS-атаки, если они могут замаскировать исходный IP-адрес пакета DNS-запроса, чтобы DNS-сервер мог отправлять большое количество ответов на целевую машину.

Однако обычно используемые DNS-серверы будут фильтровать запросы атак, поэтому поиск уязвимостей DNS-серверов также является проблемой. Если вам интересен подробный метод атаки с усилением, пожалуйста, погуглите сами, вот лишь краткое введение :)

Простой в использовании общедоступный рекурсивный DNS-сервер

Видеть:Какой публичный DNS лучше?

продлевать

Как создать домашний DNS с помощью Raspberry Pi

d71b0cd7ce9bde3025133b6e6