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

Какие знаешь записи в DNS?

1.0 Junior🔥 11 комментариев

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

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

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

DNS записи

DNS (Domain Name System) переводит доменные имена в IP адреса. Различные типы записей служат для разных целей. Рассмотрю основные типы, которые встречаются в практике.

1. A Record (Address Record)

Назначение: Связывает доменное имя с IPv4 адресом.

Домен: example.com
Тип: A
Значение: 192.0.2.1

Использование:

# Резолв домена
nslookup example.com
# example.com  has address 192.0.2.1

# Или через dig
dig example.com A
# example.com.        300 IN A 192.0.2.1

В коде:

import socket

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

2. AAAA Record

Назначение: Связывает доменное имя с IPv6 адресом.

Домен: example.com
Тип: AAAA
Значение: 2001:0db8:85a3::8a2e:0370:7334

Использование:

dig example.com AAAA
# example.com.  300 IN AAAA 2001:0db8:85a3::8a2e:0370:7334

3. CNAME Record (Canonical Name)

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

Домен: www.example.com
Тип: CNAME
Значение: example.com

Использование:

dig www.example.com CNAME
# www.example.com. 300 IN CNAME example.com.
# example.com.     300 IN A     192.0.2.1

В коде:

import dns.resolver

# Резолв CNAME
for rrset in dns.resolver.resolve('www.example.com', 'CNAME'):
    print(rrset)  # example.com.

Ограничения:

  • CNAME не может быть на корневом домене (example.com)
  • CNAME не может быть вместе с другими записями (кроме DNSSEC)

4. MX Record (Mail Exchange)

Назначение: Указывает серверы для обработки email.

Домен: example.com
Тип: MX
Приоритет: 10
Значение: mail.example.com

Использование:

dig example.com MX
# example.com.  300 IN MX 10 mail.example.com.
# example.com.  300 IN MX 20 mail2.example.com.

Приоритет: Меньше число = выше приоритет. Почтовый сервер пытается доставить на 10, если не удаётся — на 20.

В коде:

import dns.resolver

# Получить MX записи
mx_records = dns.resolver.resolve('example.com', 'MX')
for mx in sorted(mx_records, key=lambda x: x.preference):
    print(f"Priority: {mx.preference}, Server: {mx.exchange}")

5. TXT Record

Назначение: Хранит текстовую информацию (SPF, DKIM, DMARC, верификация домена).

Домен: example.com
Тип: TXT
Значение: v=spf1 include:_spf.google.com ~all

Основные использования:

SPF (Sender Policy Framework):

example.com TXT v=spf1 include:_spf.google.com ~all

Указывает какие серверы могут отправлять email от этого домена.

DKIM (DomainKeys Identified Mail):

default._domainkey.example.com TXT v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3...

Цифровая подпись для email.

DMARC (Domain-based Message Authentication):

_dmarc.example.com TXT v=DMARC1; p=quarantine; rua=mailto:admin@example.com

Политика для обработки непроверенных email.

Верификация домена (Google, Microsoft):

example.com TXT google-site-verification=1234567890abcdef

В коде:

import dns.resolver

# Получить TXT записи
txt_records = dns.resolver.resolve('example.com', 'TXT')
for txt in txt_records:
    print(txt)

6. NS Record (Name Server)

Назначение: Указывает авторитетный DNS сервер для домена.

Домен: example.com
Тип: NS
Значение: ns1.example.com
Значение: ns2.example.com

Использование:

dig example.com NS
# example.com.  300 IN NS ns1.example.com.
# example.com.  300 IN NS ns2.example.com.

7. SOA Record (Start of Authority)

Назначение: Хранит основную информацию о DNS зоне.

Домен: example.com
Тип: SOA
Значение:
Primary NS: ns1.example.com
Admin Email: admin@example.com
Serial: 2024032201
Refresh: 7200
Retry: 3600
Expire: 1209600
Minimum TTL: 3600

Использование:

dig example.com SOA

8. SRV Record (Service)

Назначение: Указывает сервер и порт для конкретного сервиса.

Домен: _sip._tcp.example.com
Тип: SRV
Приоритет: 10
Вес: 60
Порт: 5060
Цель: sipserver.example.com

Формат: _service._proto.name

Использование: SIP, XMPP и другие сервисы.

9. PTR Record (Pointer)

Назначение: Обратный поиск — от IP адреса к доменному имени.

IP: 192.0.2.1
Тип: PTR
Домен: mail.example.com

Зона: В специальной зоне .in-addr.arpa

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

Использование:

# Обратный DNS поиск
nslookup 192.0.2.1
# 1.2.0.192.in-addr.arpa name = mail.example.com.

# В коде
import socket
socket.getfqdn('192.0.2.1')  # mail.example.com

10. CAA Record (Certification Authority Authorization)

Назначение: Указывает какие центры сертификации могут выдавать сертификаты для домена.

Домен: example.com
Тип: CAA
Флаги: 0
Тег: issue
Значение: letsencrypt.org

Использование:

example.com CAA 0 issue "letsencrypt.org"
example.com CAA 0 issuewild ";"  # Запретить wildcard

Таблица записей

ТипНазначениеПример
AIPv4 адрес192.0.2.1
AAAAIPv6 адрес2001:db8::1
CNAMEПсевдонимwww → example.com
MXEmail серверmail.example.com
TXTТекстовая информацияv=spf1 ...
NSDNS серверns1.example.com
SOAИнформация зоныСериал, TTL
SRVСервис_sip._tcp.example.com
PTRОбратный DNSIP → доменное имя
CAAЦифровой сертификатВыдать letsencrypt

TTL (Time To Live)

TTL — время кэширования DNS записи (в секундах).

# TTL = 300 (5 минут)
example.com A 192.0.2.1 TTL=300

Практика:

  • Низкий TTL (300-900): Часто меняющиеся записи
  • Высокий TTL (3600-86400): Стабильные записи

Проверка DNS в коде

import dns.resolver
import dnspython

# Установка: pip install dnspython

# Простой резолв
results = dns.resolver.resolve('example.com', 'A')
for result in results:
    print(result)

# С обработкой ошибок
try:
    results = dns.resolver.resolve('example.com', 'MX')
except dns.resolver.NXDOMAIN:
    print("Domain does not exist")
except dns.resolver.NoAnswer:
    print("No MX records")

Практические рекомендации

  • Всегда настраивайте SPF, DKIM, DMARC для email доставки
  • Используйте CAA записи для защиты от выдачи сертификатов
  • Установите CNAME для www поддомена
  • Мониторьте TTL при миграции серверов
  • Используйте DNS провайдеры с хорошей поддержкой (Route53, Cloudflare, Namecheap)

Данные знания критичны при работе с инфраструктурой, email доставкой и сертификатами.