Демистификация DNS для веб-разработчиков

Получите представление о системе доменных имен и о том, как все это работает!

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

Я собираюсь сэкономить вам усилия и объяснить как можно проще, как работает DNS, с практической, упрощенной точки зрения.

Что такое доменное имя?

Доменное имя - это уникальный текстовый идентификатор для веб-сайта или сервера. Обычно это удобочитаемая строка.

Части доменного имени

Формат доменного имени следующий:

<subdomain>.<domain>.<TLD>

TLD - это домен верхнего уровня, который является корневымdomain, который включает в себя все остальные домены внутри него. .com, .io и .edu являются примерами TLD.

TLD подразделяется на domains. github.com, jgefroh.com и google.com являются примерами доменов TLD .com.

Эти домены можно разделить на subdomains (которые затем можно разделить на дополнительные subdomains). todolist.jgefroh.com и pages.github.com являются примерами поддоменов.

Технически domain - это subdomain из TLD, но это не то, что обычно имеет в виду большинство людей, когда используют термин subdomain.

Для иллюстрации я разбил следующие доменные имена:

jgefroh.com

  • jgefroh - это домен (поддомен com)
  • com - это домен верхнего уровня.

todolist.jgefroh.com

  • todolist является субдоменом jgefroh
  • jgefroh - это домен (поддомен com)
  • com - домен верхнего уровня

www.jgefroh.com

  • www - это субдомен jgefroh
  • jgefroh - это домен (поддомен com)
  • com - домен верхнего уровня

www.todolist.jgefroh.com

  • www является субдоменом todolist
  • todolist является субдоменом jgefroh
  • jgefroh - это домен (поддомен com)
  • com - домен верхнего уровня

github.io

  • github - это домен (поддомен io)
  • .io - домен верхнего уровня

Теперь, когда вы знаете, что такое доменное имя, позвольте мне представить систему, которая управляет доменными именами, метко названную Система доменных имен или для краткости DNS.

Что такое DNS?

DNS, система доменных имен, отвечает за одну вещь: преобразование доменных имен, таких как jgefroh.com, в числовые IP-адреса, такие как 198.199.103.100, которые компьютеры действительно могут понять.

Видите ли, компьютеры на самом деле не знают, что такое jgefroh.com. Они понимают только числа. Поэтому всякий раз, когда вы пытаетесь перейти к jgefroh.com в браузере, ваш компьютер сначала должен выяснить, что это за хрень.

Он связывается с сервером доменных имен и просит его вернуть IP-адрес, связанный с jgefroh.com. Если сервер доменных имен знает, что это такое, он его вернет. В противном случае он спросит у другого сервера доменных имен, что это такое. Этот процесс повторяется до тех пор, пока IP-адрес, связанный с доменным именем, не будет получен с главных серверов доменных имен (корневых серверов имен).

Получение собственного доменного имени

Очевидно, вы не хотите, чтобы людям приходилось запоминать случайную последовательность чисел (ваш IP-адрес), чтобы перейти на ваш сайт. Вы захотите купить собственное доменное имя. Для этого вы переходите к Регистратору доменных имен, например Namecheap, GoDaddy или Enom.

Когда вы покупаете доменное имя у регистратора доменных имен, вы регистрируете доменное имя на серверах доменных имен и эффективно контролируете возможность создания записи для этого доменного имени.

Когда вы контролируете домен, вы также контролируете все его поддомены. Поскольку я контролирую jgefroh.com, я также контролирую *.jgefroh.com, где * может быть любым субдоменом или комбинацией субдоменов.

Если вы создаете запись для доменного имени, вы сообщаете серверу доменных имен об измененной информации. Этот сервер доменных имен затем сообщит всем другим серверам доменных имен об изменении, эффективно распространяя новости, пока об этом не узнают все.

Различные виды записей

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

  • Записи
  • AAAA отчеты
  • CAA Records
  • Записи CNAME
  • Записи MX
  • Записи TXT

A

Записи - это основа DNS.

Запись A сопоставляет доменное имя с IPv4-адресом. Это то, что вы используете, чтобы указать jgefroh.com на 198.199.103.100 или todolist.jgefroh.com на 107.170.244.12. Он говорит компьютерам мира: «Эй! Когда вы переходите к jgefroh.com, вам нужно вместо этого перейти на IP-адрес 198.199.103.100 ».

AAAA

Записи AAAA похожи на записи A, за исключением того, что они сопоставляют имя домена с адресом IPv6, а не с адресом IPv4. Некоторое время назад в мире буквально закончились IP-адреса, поэтому был создан новый набор с гораздо большим адресным пространством.

  • Когда вы видите набор из 4 чисел, разделенных точкой, вы знаете, что это IPv4-адрес.
  • Если вы видите наборы из 4 шестнадцатеричных символов, разделенных двоеточием, скорее всего, это IPv6-адрес.

CAA

Записи CAA, записи авторизации центра сертификации, позволяют внести в белый список центры сертификации, которым разрешено выдавать сертификаты SSL от имени вашего доменного имени.

Вам не нужно устанавливать это, если только вы не особо обеспокоены.

CNAME

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

MX

MX Rrecords, известные как Mail Exchange Records, сообщает, какой почтовый сервер связан с определенным доменом. Вы можете установить эту запись, например, для смены провайдеров электронной почты.

Обычно поставщик электронной почты, например Google, сообщает вам, какие значения следует установить для этих записей.

текст

Записи TXT - это способы связать произвольный текст с определенным Доменным именем. Эти значения не имеют смысла для системы доменных имен.

В первую очередь вы будете использовать их для подтверждения того, что вам принадлежит определенное доменное имя для услуг и поставщиков, которые требуют такой проверки, например Google Search Console. Обоснование этого состоит в том, что если у вас есть разрешение на создание записи TXT с произвольными данными для определенного доменного имени, вы, вероятно, являетесь ее владельцем.

Существуют и другие типы записей, такие как записи PTR, SRV и NAPTR, но вы, как веб-разработчик, обычно не используете их регулярно.

Смена регистратора

Иногда вам нужно передать свое доменное имя другому провайдеру или регистратору, возможно потому, что один регистратор предоставляет более качественные услуги, чем другой.

Чтобы передать, вы следуете короткой процедуре (которая немного варьируется в зависимости от различных условий, таких как поставщик или домен):

  • Вы разблокируете доменное имя, если оно заблокировано.
    Заблокированные доменные имена не могут быть перенесены.
  • Вы получаете код авторизации (называемый кодом EPP), разрешающий перевод.
  • Вы начинаете перевод и указываете полученный код EPP.
  • Тот, кто назначен контактным лицом для доменного имени, получит электронное письмо с просьбой утвердить или отклонить перенос.
  • Подтвердите перевод, и это произойдет.

Вы также можете оставить доменное имя у регистратора, но управлять им будет другая служба. Для этого вы должны изменить серверы имен, связанные с доменным именем.

Особые моменты на заметку

Распространение

Возможно, вы слышали термин «распространение», когда обсуждали DNS. Распространение означает время, необходимое для обновления или «вступления в силу» записей DNS для большинства пользователей.

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

Записи DNS обычно кэшируются, и до тех пор, пока кеш не истечет или не будет остановлен, люди не будут обновляться. Этот процесс может занять около 24–48 часов.

Вы можете проверить статус распространения изменений DNS, которые вы делаете, просмотрев инструмент распространения, такой как whatsmydns.

Кстати, такие сервисы, как Amazon’s Route 53, распространяют изменения DNS на порядки быстрее, чем другие сервисы.

Маскировка

Маскировка домена означает, что ваше доменное имя перенаправит пользователя на другой веб-сайт, но пользователь не заметит, что имя домена изменилось.

Например, я маскирую jgefroh.com и указываю его на github.com, пользователи будут видеть содержимое github.com, но увидят jgefroh.com в URL-адресе.

Перенаправление / пересылка

Перенаправление или переадресация означает, что ваше доменное имя переведет пользователя на другой веб-сайт.

Например, я перенаправляю jgefroh.com на github.com, пользователи будут видеть содержимое github.com, а также видеть, что в их URL-адресе теперь указано github.com.

КТО

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

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

Погрузитесь глубже - посмотрите, что видит компьютер

Вы можете увидеть, что видит компьютер, используя инструменты командной строки, чтобы вручную выполнить поиск DNS. Это может быть полезно при отладке, если вы получаете данные, отличные от ожидаемых, или просто хотите знать, как все это работает.

Окна

В командной строке запустите nslookup.

nslookup jgefroh.com

вернет запись A для jgefroh.com.

Если вы хотите получить другой тип записи, введите запрос nslookup и введите:

set type=<TYPE>

где <TYPE> - один из возможных типов записей (например, TXT).

Mac

В терминале используйте команду dig.

dig jgefroh.com

вернет запись A для jgefroh.com.

Если вы хотите получить другой тип записи, вы можете указать его после имени домена, как показано ниже:

dig jgefroh.com TXT

Надеюсь, это руководство было для вас полезным! Если вам кажется, что я что-то упростил, усложнил или упустил важную деталь, дайте мне знать!