← Назад к вопросам

Зачем нужна каждая из записей в DNS?

2.3 Middle🔥 131 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Записи DNS: назначение каждого типа

DNS (Domain Name System) — это распределённая система, которая преобразует доменные имена в IP адреса. Каждая запись DNS имеет специфичное назначение для правильной маршрутизации трафика и конфигурации интернет-сервисов.

1. A запись (Address Record)

Основная запись, которая связывает доменное имя с IPv4 адресом:

example.com    IN    A    192.0.2.1
www.example.com IN   A    192.0.2.1
api.example.com IN   A    192.0.2.10

Назначение:

  • Основной способ направить пользователей на сервер
  • Каждый домен или поддомен может указывать на свой IP
  • Используется для веб-сайтов, API, приложений

Пример в коде:

import socket

# Получить IP по доменному имени
ip = socket.gethostbyname('example.com')
print(ip)  # 192.0.2.1

2. AAAA запись (IPv6 Address)

Аналог A записи, но для IPv6:

example.com    IN    AAAA    2001:db8::1
api.example.com IN  AAAA    2001:db8::2

Назначение:

  • Направить IPv6 трафик (будущее интернета)
  • Нужна для поддержки современных сетей
  • Часто используется в крупных сетях и облачных сервисах

Пример:

# Получить A и AAAA записи
import dns.resolver

answers = dns.resolver.resolve('example.com', 'AAAA')
for rdata in answers:
    print(rdata)  # 2001:db8::1

3. CNAME запись (Canonical Name)

Создаёт псевдоним для другого домена:

www.example.com    IN    CNAME    example.com
cdn.example.com    IN    CNAME    cloudfront.amazonaws.com
mail.example.com   IN    CNAME    ghs.google.com

Назначение:

  • Перенаправить на другой доменное имя
  • Удобно для CDN, облачных сервисов, почты
  • Позволяет изменить цель без изменения основного домена

Практика:

# CNAME используется при подключении CloudFlare
# example.com → эти серверы CloudFlare
www.example.com → IP address CloudFlare

4. MX запись (Mail Exchange)

Указывает сервер для приёма почты:

example.com    IN    MX    10    mail.example.com
example.com    IN    MX    20    mail2.example.com
example.com    IN    MX    30    mail.thirdparty.com

Назначение:

  • Направить входящую почту на почтовый сервер
  • Приоритет (10 < 20 < 30) — какой сервер использовать сначала
  • Необходима для получения электронной почты

Пример настройки в Python:

import smtplib
from email.mime.text import MIMEText

# Отправка почты через SMTP
smtp_server = smtplib.SMTP('mail.example.com', 587)
smtp_server.sendmail(
    'sender@example.com',
    'recipient@example.com',
    'Subject: Test\n\nMessage'
)

# MX запись определяет какой сервер получит письмо

5. TXT запись (Text Record)

Хранит текстовую информацию, используется для верификации:

example.com    IN    TXT    "v=spf1 include:sendgrid.net ~all"
example.com    IN    TXT    "google-site-verification=abcd1234..."
example.com    IN    TXT    "dkim=v=DKIM1; k=rsa; p=MIGfMA0BgQ..."

Назначение:

  • SPF — указать какие серверы могут отправлять почту (борьба со спамом)
  • DKIM — электронная подпись для писем
  • DMARC — политика проверки подлинности
  • Верификация владельца домена (Google, Yandex)

Пример SPF:

v=spf1                    # Версия SPF
include:sendgrid.net      # Разрешить SendGrid
include:_spf.google.com   # Разрешить Google
~all                      # Мягкий отказ для остальных

6. NS запись (Name Server)

Указывает DNS серверы для домена:

example.com    IN    NS    ns1.example.com
example.com    IN    NS    ns2.example.com
example.com    IN    NS    ns3.dnshost.com

Назначение:

  • Делегировать управление DNS этому хостингу
  • Нужна при использовании Cloudflare, Selectel и т.д.
  • Меняется при смене хостинга

Пример делегирования:

Процесс разрешения:
1. Запрос идёт в корневой DNS
2. Корневой DNS смотрит NS запись example.com
3. Направляет запрос на ns1.example.com
4. ns1.example.com возвращает IP

7. SOA запись (Start of Authority)

Описывает авторитетный источник информации о домене:

example.com    IN    SOA    ns1.example.com. admin.example.com. 2024032201 3600 1800 604800 86400

Поля:

  • ns1.example.com — первичный DNS сервер
  • admin.example.com — email администратора (точка вместо @)
  • 2024032201 — серийный номер (версия записей)
  • 3600 — refresh (обновлять каждые 3600 сек)
  • 1800 — retry (повторить через 1800 сек)
  • 604800 — expire (истечение через 604800 сек)
  • 86400 — TTL (кешировать на 86400 сек)

Назначение:

  • Управление синхронизацией между DNS серверами
  • Контроль времени жизни записей

8. PTR запись (Pointer)

Обратная запись — преобразование IP в доменное имя:

1.2.0.192.in-addr.arpa    IN    PTR    example.com

Назначение:

  • Обратная проверка DNS (reverse DNS lookup)
  • Используется при проверке подлинности SMTP
  • Помогает в борьбе со спамом

Пример:

import socket

# Прямая запись: доменное имя → IP
ip = socket.gethostbyname('example.com')  # 192.0.2.1

# Обратная запись: IP → доменное имя
hostname = socket.gethostbyaddr('192.0.2.1')  # example.com

9. SRV запись (Service)

Указывает расположение сервиса:

_sip._tcp.example.com    IN    SRV    10    60    5060    server.example.com
_xmpp._tcp.example.com   IN    SRV    10    60    5222    xmpp.example.com

Назначение:

  • Поиск серверов для специфичных сервисов (SIP, XMPP, Kerberos)
  • Используется в корпоративных системах
  • Включает приоритет и вес распределения нагрузки

10. CAA запись (Certification Authority Authorization)

Указывает какие Certificate Authority могут выдавать сертификаты для домена:

example.com    IN    CAA    0    issue    "letsencrypt.org"
example.com    IN    CAA    0    issuewild    "letsencrypt.org"
example.com    IN    CAA    0    iodef    "mailto:admin@example.com"

Назначение:

  • Защита от выдачи поддельных SSL сертификатов
  • Только указанные CA могут выдавать сертификаты
  • Критично для безопасности

11. Практический пример: полная конфигурация

# A запись — основной веб-сервер
example.com           IN    A       192.0.2.1
www.example.example.com IN  A       192.0.2.1
api.example.com       IN    A       192.0.2.10

# AAAA запись — IPv6
example.com           IN    AAAA    2001:db8::1

# CNAME — CDN
cdn.example.com       IN    CNAME   d111111abcdef8.cloudfront.net

# MX записи — почта
example.com           IN    MX      10    mail1.example.com
example.com           IN    MX      20    mail2.example.com

# SPF, DKIM, DMARC — безопасность почты
example.com           IN    TXT     "v=spf1 include:sendgrid.net ~all"
example.com           IN    TXT     "dkim=v=DKIM1; k=rsa; p=..."
example.com           IN    TXT     "v=DMARC1; p=reject; rua=mailto:..."

# CAA — разрешённые CA для SSL
example.com           IN    CAA     0    issue    "letsencrypt.org"

# NS — делегирование DNS
example.com           IN    NS      ns1.example.com
example.com           IN    NS      ns2.example.com

Проверка DNS записей в Python:

import dns.resolver

def check_dns(domain, record_type):
    try:
        answers = dns.resolver.resolve(domain, record_type)
        for rdata in answers:
            print(f"{record_type}: {rdata}")
    except Exception as e:
        print(f"Error: {e}")

# Проверить все типы
for rtype in ['A', 'AAAA', 'MX', 'TXT', 'NS']:
    check_dns('example.com', rtype)

Ключевые практики:

  • A/AAAA — обязательны для веб-сайта
  • MX — обязательны для получения почты
  • SPF/DKIM/DMARC — критичны для доставляемости почты
  • CAA — защита от фишинга через фальшивые сертификаты
  • CNAME — удобны для CDN и облачных сервисов
  • TTL — меньше TTL = быстрее обновления, но больше запросов

Правильная конфигурация DNS — основа надёжной и безопасной работы веб-приложения.

Зачем нужна каждая из записей в DNS? | PrepBro