Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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
Таблица записей
| Тип | Назначение | Пример |
|---|---|---|
| A | IPv4 адрес | 192.0.2.1 |
| AAAA | IPv6 адрес | 2001:db8::1 |
| CNAME | Псевдоним | www → example.com |
| MX | Email сервер | mail.example.com |
| TXT | Текстовая информация | v=spf1 ... |
| NS | DNS сервер | ns1.example.com |
| SOA | Информация зоны | Сериал, TTL |
| SRV | Сервис | _sip._tcp.example.com |
| PTR | Обратный DNS | IP → доменное имя |
| 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 доставкой и сертификатами.