Выполнение DNS-запросов IPv6 в Linux

CompTIABeginner
Практиковаться сейчас

Введение

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

Вы начнете с проверки файла /etc/resolv.conf для определения настроенных DNS-серверов. Далее вы будете использовать два мощных инструмента, dig и nslookup, для целенаправленного запроса записей AAAA, которые сопоставляют доменные имена с адресами IPv6. Наконец, вы используете команду ping6 для подтверждения того, что ваша система может установить прямое соединение с целью, используя ее IPv6-адрес, завершая полный цикл разрешения и связности.

Проверка конфигурации DNS-сервера в /etc/resolv.conf

На этом шаге вы найдете и проверите конфигурацию DNS-сервера в вашей системе Ubuntu. Это фундаментальный шаг для понимания того, как ваша машина разрешает доменные имена в IP-адреса, что необходимо для всего сетевого взаимодействия, включая IPv6.

Основным конфигурационным файлом для разрешения DNS в Linux является /etc/resolv.conf. Этот файл содержит список IP-адресов серверов имен, к которым будет обращаться ваша система.

Сначала давайте посмотрим содержимое этого файла. В вашем терминале, который уже открыт и находится в каталоге ~/project, выполните следующую команду:

cat /etc/resolv.conf

Эта команда считывает файл /etc/resolv.conf и отображает его содержимое непосредственно в терминале.

Вы должны увидеть одну или несколько строк, начинающихся с nameserver. Эти записи определяют DNS-серверы. Адреса могут быть как IPv4 (например, 8.8.8.8), так и IPv6 (например, 2001:4860:4860::8888). Определение этих серверов является первым шагом в диагностике любых проблем, связанных с DNS.

Пример вывода:

## Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
##     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
## 127.0.0.53 is the systemd-resolved stub resolver.
## run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
options timeout:2 attempts:3 rotate single-request-reopen

В приведенном выше примере система настроена на использование заглушки (stub resolver) systemd-resolved по адресу 127.0.0.53. Это локальный DNS-резолвер, который перенаправляет запросы на фактические DNS-серверы, настроенные для вашей системы. Вы можете выполнить команду systemd-resolve --status, чтобы увидеть подробности об используемых фактических серверах имен. Если бы ваша система была настроена для DNS IPv6, вы бы увидели здесь адрес в формате IPv6.

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

Запрос записи IPv6 AAAA с помощью dig

На этом шаге вы будете использовать утилиту командной строки dig для запроса DNS-сервера специально для записи адреса IPv6. В то время как запись A сопоставляет доменное имя с адресом IPv4, запись AAAA (или запись "quad-A") сопоставляет доменное имя с адресом IPv6.

Утилита dig (domain information groper) является мощным и гибким инструментом для запроса DNS-серверов. Она входит в пакет dnsutils, который может быть не установлен по умолчанию.

Сначала убедимся, что dig доступен в вашей системе. Выполните следующие команды, чтобы обновить список пакетов и установить dnsutils:

sudo apt-get update
sudo apt-get install -y dnsutils

Теперь, когда dig установлен, вы можете использовать его для поиска записи AAAA для домена, который известен поддержкой IPv6, например ipv6.google.com.

Выполните следующую команду в вашем терминале:

dig AAAA ipv6.google.com

Эта команда указывает dig искать записи типа AAAA для домена ipv6.google.com.

Давайте рассмотрим вывод. Он разделен на несколько секций, но наиболее важной для нас является ANSWER SECTION (Секция ответов).

Пример вывода:

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> AAAA ipv6.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35612
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;ipv6.google.com.  IN AAAA

;; ANSWER SECTION:
ipv6.google.com.        10      IN      CNAME   ipv6.l.google.com.
ipv6.l.google.com.      10      IN      AAAA    2607:f8b0:4005:814::200e

;; Query time: 148 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Jul 17 10:56:59 CST 2025
;; MSG SIZE  rcvd: 93

В ANSWER SECTION вы можете увидеть, что ipv6.google.com сначала разрешается в запись CNAME, указывающую на ipv6.l.google.com, которая затем разрешается в адрес IPv6 (например, 2607:f8b0:4005:814::200e). Наличие записей CNAME и AAAA подтверждает, что ipv6.google.com имеет адрес IPv6, и ваша система успешно его разрешила.

Теперь вы успешно использовали dig для выполнения специфического DNS-запроса IPv6. На следующем шаге вы узнаете, как сделать то же самое с другой распространенной утилитой, nslookup.

Поиск записи AAAA с помощью nslookup

На этом шаге вы научитесь использовать другую распространенную утилиту, nslookup, для выполнения той же задачи запроса записи AAAA. В то время как dig часто предпочитается системными администраторами за его подробный вывод, nslookup также широко доступен и полезен для быстрых запросов.

Инструмент nslookup (name server lookup) также входит в пакет dnsutils, который вы установили на предыдущем шаге, поэтому вам не нужно устанавливать ничего нового.

Чтобы попросить nslookup найти определенный тип записи, вы используете опцию -query=. Мы снова будем искать запись AAAA, чтобы найти IPv6-адрес домена. На этот раз давайте используем другой домен с поддержкой IPv6, например facebook.com.

В вашем терминале выполните следующую команду:

nslookup -query=AAAA facebook.com

Эта команда предписывает nslookup специально запросить запись AAAA для facebook.com у сервера DNS по умолчанию.

Вывод nslookup обычно более лаконичен, чем у dig. Ищите секцию "Non-authoritative answer" (Неавторитетный ответ).

Пример вывода:

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   facebook.com
Address: 2a03:2880:f131:83:face:b00c:0:25de

Вывод четко показывает IPv6-адрес, связанный с facebook.com, в секции "Non-authoritative answer". Термин "Non-authoritative" просто означает, что ответ поступил от DNS-сервера, который не является конечным авторитетом для домена, что является нормальным для рекурсивных DNS-запросов.

Теперь вы успешно использовали два разных инструмента, dig и nslookup, для разрешения доменного имени в адрес IPv6. На заключительном шаге вы протестируете фактическую сетевую связность, используя один из этих разрешенных доменов.

Тестирование подключения IPv6 с помощью ping6

На этом заключительном шаге вы объедините разрешение DNS и сетевое тестирование для проверки сквозного IPv6-соединения. После успешного разрешения доменного имени в его IPv6-адрес на предыдущих шагах вам теперь необходимо проверить, может ли ваша система фактически обмениваться данными с этим адресом по сети.

Для этого вы будете использовать команду ping6. Эта утилита является эквивалентом знакомой команды ping для IPv6 и используется для проверки доступности сети путем отправки пакетов ICMPv6 echo request целевому хосту.

Когда вы передаете ping6 доменное имя, она выполняет два действия:

  1. Сначала она разрешает доменное имя в IPv6-адрес, запрашивая его запись AAAA.
  2. Затем она отправляет пакеты ping на разрешенный IPv6-адрес.

Давайте проверим соединение с ipv6.google.com. Мы будем использовать опцию -c 4, чтобы отправить только 4 пакета, а затем остановиться; в противном случае ping будет работать бесконечно.

В вашем терминале выполните следующую команду:

ping6 -c 4 ipv6.google.com

Наблюдайте за выводом. Если ваша система имеет рабочее IPv6-соединение с Интернетом, вы увидите успешные ответы.

Пример успешного вывода:

PING ipv6.google.com(prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e)) 56 data bytes
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=1 ttl=118 time=1.23 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=2 ttl=118 time=1.30 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=3 ttl=118 time=1.25 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=4 ttl=118 time=1.28 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.230/1.265/1.300/0.027 ms

Ожидаемый вывод в большинстве лабораторных сред:

ping6: connect: Network is unreachable

Важное примечание: В виртуальной машине LabEx вы, скорее всего, увидите сообщение "Network is unreachable" (Сеть недоступна) при попытке пинговать IPv6-адреса. Это связано с тем, что лабораторная среда может разрешать IPv6-адрес, но не имеет IPv6-маршрута к общедоступному Интернету. Этот распространенный сценарий, известный как "пробел IPv6" (IPv6 gap), демонстрирует критическую разницу между успешным разрешением DNS и фактической сетевой связностью. Тот факт, что разрешение DNS работало на предыдущих шагах, а связность здесь отсутствует, иллюстрирует, что ваша система может правильно запрашивать и получать IPv6-адреса, даже когда она не может установить фактические IPv6-соединения.

Поздравляем! Вы завершили эту лабораторную работу. Вы научились проверять локальную конфигурацию DNS, использовать dig и nslookup для запроса IPv6-записей AAAA и использовать ping6 для проверки IPv6-соединения.

Резюме

В этой лабораторной работе вы изучили основные шаги для выполнения DNS-запросов IPv6 в среде Linux. Вы начали с проверки файла /etc/resolv.conf, чтобы определить DNS-серверы, которые использует ваша система. Затем вы попрактиковались в использовании двух основных утилит командной строки, dig и nslookup, для конкретного запроса IPv6-записей AAAA, успешно разрешая доменные имена в соответствующие им IPv6-адреса.

Наконец, вы использовали команду ping6 для тестирования IPv6-соединения, что продемонстрировало важное различие между разрешением DNS и фактической сетевой связностью. Несмотря на то, что лабораторная среда может успешно разрешать IPv6-адреса, ей не хватает маршрутизации IPv6 к общедоступному Интернету, что приводит к ошибкам "Network is unreachable" (Сеть недоступна). Выполнив эти шаги, вы получили практический опыт работы с основными инструментами и концепциями для управления и устранения неполадок разрешения имен IPv6 в Linux, а также поняли разницу между успешными DNS-запросами и фактической сетевой связностью.