# dig - DNS-разведка с подробностями _Команды · LinuxLab Knowledge Base_ **TL;DR:** dig - DNS-разведка. Запросить любую запись у любого сервера. +short - компактно, +trace - путь от корня, +dnssec - показать подписи. Современная замена nslookup для отладки. ## Базовый синтаксис ``` dig [@server] [name] [type] [+option ...] ``` По умолчанию - A-запись через resolver из `/etc/resolv.conf`: ```bash $ dig example.com ;; ANSWER SECTION: example.com. 3600 IN A 93.184.216.34 ``` ## Часто используемые типы записей | Тип | Что | |--------|-----| | A | IPv4-адрес | | AAAA | IPv6-адрес | | CNAME | алиас на другое имя | | MX | mail-сервер | | NS | name-server для зоны | | TXT | произвольные текстовые записи (SPF, DKIM, верификации) | | SOA | start of authority - параметры зоны | | PTR | reverse - IP в имя | | CAA | какие CA могут выдавать сертификат для домена | | SRV | service location (SIP, XMPP, MS AD) | | DS / DNSKEY | DNSSEC | ```bash dig example.com AAAA # IPv6 dig example.com MX # почтовые серверы dig example.com TXT # SPF, DKIM dig example.com NS # авторитативные NS dig example.com ANY # всё что есть (ChannelBind может ругнуться) ``` ## +short - выжимка По умолчанию вывод многословный. `+short` оставляет только ответ: ```bash $ dig example.com +short 93.184.216.34 $ dig example.com MX +short 10 mail.example.com. 20 backup-mail.example.com. ``` Удобно скриптам, неудобно отлаживать. ## Указать сервер ```bash dig @8.8.8.8 example.com # запрос к Google DNS dig @1.1.1.1 example.com # к Cloudflare dig @ns1.example.com example.com # авторитативный ``` Без `@` - используется `/etc/resolv.conf`. Это критично при отладке - локальный resolver может кэшировать старый ответ. ## +trace - весь путь резолва Покажет, как resolver идёт от корня к авторитативному: ```bash $ dig example.com +trace ;; . root NS ;; com. .com TLD NS ;; example.com. authoritative NS ;; example.com. 93.184.216.34 ``` Каждый шаг - отдельный запрос без рекурсии. Полезно когда «работает у меня - не работает у них» - видно где сломалось. ## Reverse DNS ```bash dig -x 93.184.216.34 ;; ANSWER: 34.216.184.93.in-addr.arpa. PTR example.com. ``` PTR-запись в зоне in-addr.arpa. Часто рассинхронизирована с A (forward говорит одно, reverse - другое). ## DNSSEC ```bash dig example.com +dnssec ``` Показывает RRSIG (подписи). `+sigchase` следует цепочке доверия от корня. Удобно для отладки DNSSEC-проблем (валидация падает - где?). ## Полезные опции | Опция | Что | |-----------|-----| | `+short` | компактный | | `+trace` | путь от корня | | `+dnssec` | показать RRSIG | | `+tcp` | через [[tcp-handshake|TCP]] вместо UDP (для больших ответов) | | `+notcp` | только UDP | | `+nostats`| не показывать stats в конце | | `+nocomments` | без комментариев `;;` | | `+noall +answer` | минимально - только секция ANSWER | | `+time=3 +tries=1` | таймаут 3с, одна попытка | | `+norec` | не рекурсивный (для авторитативных) | | `-p 5353` | другой порт (mDNS) | ## Один вкусный pattern Видеть только TTL и значение: ```bash dig example.com +noall +answer example.com. 3600 IN A 93.184.216.34 ``` Если TTL уменьшается между запросами - resolver кэширует. Если держится 3600 - cache hit. ## Параллельный запрос всех типов ```bash for t in A AAAA MX NS TXT CAA SOA; do echo "=== $t ===" dig example.com $t +short done ``` ## Отладка проблем ### `connection timed out; no servers could be reached` Resolver недоступен. Проверь `/etc/resolv.conf`, firewall, сеть. ### `SERVFAIL` Авторитативный сервер вернул ошибку. Часто - проблема DNSSEC-валидации или у апстрима залип запрос. Попробуй `dig @8.8.8.8` - другим resolver'ом. ### `NXDOMAIN` Домен не существует. Проверь typo в имени, или зона ещё не делегирована. ### `REFUSED` Сервер не отвечает на запрос (рекурсию не разрешает извне). Это нормально для авторитативного - запрашивай его только за свои зоны. ## Альтернативы - **`host`** - проще, без вывода служебной информации - **`nslookup`** - устаревший, но в Windows и Mac знаком - **`drill`** (LDNS) - современная замена dig от того же NLnet, но везде установлен dig ## Команды ```bash dig example.com +short ``` Только A-запись, без шума ```bash dig @8.8.8.8 example.com ``` Спросить конкретный resolver - убедиться что проблема не локальная ```bash dig example.com +trace ``` Полный путь резолва от корневых NS - видно где обрывается ```bash dig -x 8.8.8.8 ``` Reverse DNS для IP - какое имя зарегистрировано ```bash dig example.com NS +short ``` Кто авторитативные name-серверы для зоны ```bash dig example.com TXT +short | grep -i spf ``` SPF-запись - какие mail-серверы могут слать от этого домена ```bash dig +noall +answer +nostats example.com ``` Только секция ANSWER - удобно скриптам и dashboard'ам ## См. также - [DNS resolution](/kb/dns-resolution.md) - [BIND - авторитативный/кеширующий DNS-сервер](/kb/bind-dns-server.md) - [IPv6 - адресация и базовые концепции](/kb/ipv6-basics.md) - [Порт - как несколько сервисов делят один IP](/kb/port.md)