Network Education
КаталогГлоссарийПрогресс
Протокол IPv6
  1. 1Программа курса
  2. 2Общие сведения
  3. 3Принципы работы
  4. 4Формат заголовка IPv6
  5. 5DNS в сетях IPv6
  6. 6Протокол ICMPv6
  7. 7Протокол DHCPv6
  8. 8Подключение к интернету
  9. 9Переходные технологии
  10. 10Закат IPv4
Каталог/Сетевые основы/Протокол IPv6/DNS в сетях IPv6

DNS в сетях IPv6

5Урок 5 из 10

О чём этот урок

Записи AAAA и PTR для IPv6, обратная зона ip6.arpa, особенности указания IPv6-адресов в URI и требования к DNS-серверам.

Ключевые выводы

  • AAAA-запись — единственный способ получить IPv6-адрес через DNS; название отражает четырёхкратный размер по сравнению с A-записью (128 vs 32 бита)
  • Обратная зона ip6.arpa записывает каждый hex-символ адреса через точку в обратном порядке, что позволяет делегировать зоны на границах /32, /48, /64 и других кратных 4 битам масок
  • EDNS0 критичен для IPv6: десять AAAA-записей занимают 160 байт только на адреса, что быстро превышает лимит стандартной UDP-датаграммы DNS в 576 байт
  • В Windows механизм ipv6-literal.net позволяет использовать IPv6-адреса в программах без нативной поддержки, заменяя двоеточия на дефисы и добавляя суффикс .ipv6-literal.net

Проверьте себя

Вопрос 1 из 5

Как называется DNS-запись для хранения IPv6-адресов?

Вопрос 2 из 5

Как записывается обратная зона для IPv6-адресов?

Вопрос 3 из 5

Почему EDNS0 критически важен для DNS в IPv6-сетях?

Вопрос 4 из 5

Как в Windows можно использовать IPv6-адрес в программах без нативной поддержки IPv6?

Вопрос 5 из 5

На каких границах масок можно делегировать обратные зоны ip6.arpa?

🔗Связанные уроки

⚠️Сначала посмотрите

Принципы работыПротокол IPv6
→

DNS для IPv6 требует знания формата адресов и типов адресов IPv6

Формат заголовка IPv6Протокол ICMPv6

Транскрипция

IP-адреса -- это числа, которые можно записать в удобном для человека формате, но изначально они создавались не для чтения людьми. Возьмем IP-пакет: он отправляется с адреса 1 на адрес 2. Адрес отправителя -- 32-битное число, адрес получателя -- тоже. Это все, что необходимо знать для обработки IP-пакетов.

IPv6-адреса длинные, их неудобно запоминать. Что с ними делать? Для этого существуют специальные удобные метки -- DNS-имена. Вот DNS-адресацию запоминать можно и нужно, а IP-адреса запоминать не надо.

Чтобы все работало, нужен клиент, который знает, к какому DNS-серверу обращаться, когда нужно узнать, какой IPv6-адрес соответствует конкретному текстовому имени. Например, у вас в сети есть ноутбук Васи, вы используете определенный доменный суффикс, и машина называется notebook-vasya. Вы обращаетесь к DNS: "Скажи мне, какой IPv6-адрес у notebook-vasya.company.local?" DNS-сервер отвечает: "У этого компьютера будет IPv6-адрес 2001:db8:...".

Строго говоря, можно обойтись и без DNS. Если хотите запоминать IPv6-адреса -- пожалуйста, тренируйте память. Но тогда у вас будет огромная квадратная голова.

Использование IPv6-адресов напрямую

IPv6-адреса в URI

Если вы хотите использовать IPv6-адреса без DNS, можно указывать их прямо в текстовой строке адреса. Большинство современных браузеров это поддерживают.

Однако в URI (Uniform Resource Identifier) IPv6-адрес необходимо указывать в квадратных скобках. Это связано с тем, что адрес в IPv6 содержит двоеточия, а в URI двоеточие -- служебный символ, который используется для:

  • разделения типа протокола,
  • разделения пользователя и пароля,
  • указания номера порта.

Без квадратных скобок невозможно отличить, где заканчивается адрес и начинается порт. Например:

http://[2001:db8::1]:80/     -- адрес 2001:db8::1, порт 80
http://[2001:db8::1:80]/     -- адрес 2001:db8::1:80, без порта

Это два совершенно разных адреса.

Файл hosts

Можно использовать файл hosts. Большинство современных операционных систем прекрасно воспринимают IPv6-адреса в этом файле. Например:

fd00::1    host1

IPv6 Literal Name (Windows)

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

Правила записи ipv6-literal.net:

  1. Все шестнадцатеричные символы IPv6-адреса записываются как есть
  2. Двоеточия заменяются на символ дефис (-)
  3. Двойное двоеточие (::) заменяется на двойной дефис (--)
  4. Для link-local адресов символ % (zone index) заменяется на букву s
  5. В конце добавляется суффикс .ipv6-literal.net

Пример:

Адрес:    2001:db8:b1:6b::b5:22:1
Literal:  2001-db8-b1-6b--b5-22-1.ipv6-literal.net

Link-local адрес:  fe80::2:1%4
Literal:           fe80--2-1s4.ipv6-literal.net

Это удобно, когда нужно заставить работать с IPv6 программу, которая не поддерживает ввод IPv6-адресов. Например, RDCMan (Remote Desktop Connection Manager) от Microsoft -- бесплатное приложение для управления несколькими сессиями Remote Desktop. Его последняя версия не умеет принимать IPv6-адреса напрямую, хотя транспорт IPv6 прекрасно поддерживает (работает поверх TCP-порта 3389 и UDP-порта 3389, оба нормально работают с IPv6). В этом случае как раз удобно использовать ipv6-literal.net.

Разрешение имен без DNS-сервера

LLMNR (Windows)

Если не хочется поднимать DNS, но нужно работать с IPv6-соседями, и вы не знаете их адресов, можно воспользоваться механизмом LLMNR (Link-Local Multicast Name Resolution). Это IPv6-механизм для Windows-машин, который позволяет по hostname обнаружить IPv6-адрес соседа.

Вы говорите ping server, DNS-записи нет, но имя все равно разрешается. Это не NetBIOS-разрешение имен (NetBIOS не умеет работать по IPv6) и не WINS. LLMNR отправляет пакеты на специальную мультикастовую группу, которую слушают все Windows-машины в сегменте.

mDNS (Apple/Linux)

Если у вас не Windows, есть mDNS (Multicast DNS) -- мультикаст DNS в локальной сети. Пример -- Apple Bonjour. Если у вас инфраструктура Apple/Mac, у них тоже есть свой механизм разрешения IPv6-имен.

Как работает DNS для IPv6

Рекурсивные и итеративные запросы

Допустим, вы хотите подключиться к серверу ipv6.google.com. Набираете это имя в браузере, DNS-клиент не может разрешить его из кэша, и запрос идет на DNS-сервер.

Рекурсивный запрос -- клиент требует предоставить готовый финальный ответ. Он не согласен получить промежуточный результат. Логика такая: "Сделай что хочешь, но либо скажи, что такого адреса нет, либо дай мне адрес".

Итеративный запрос -- используется между DNS-серверами. Если ваш DNS-сервер не использует пересылку (forwarding), он сам выполняет итеративное разрешение:

  1. Обращается к корневым серверам (root servers), отвечающим за зону . -- их IP-адреса заранее известны
  2. Корневой сервер отвечает: "Я не знаю адрес ipv6.google.com, но посмотри у тех, кто отвечает за зону .com"
  3. Сервер зоны .com отвечает: "Я не знаю, но посмотри у тех, кто отвечает за google.com"
  4. Авторитативный сервер google.com возвращает готовый результат с IPv6-адресом

Клиенты обычно используют рекурсивные запросы. Серверы между собой -- итеративные (если не настроен forwarding).

Ресурсная запись AAAA

Если клиент хочет получить IPv6-адрес по имени узла, он отправляет запрос с указанием типа записи AAAA ("четыре A").

Название пошло от IPv4: там запись типа A (Address) хранила 32-битный адрес. А AAAA -- это запись для IPv6-адреса (128 бит, в 4 раза больше, отсюда четыре A).

Пример с утилитой nslookup:

nslookup -d2 -type=AAAA ipv6.google.com

В запросе указывается, что мы хотим рекурсию -- готовый конечный результат. Сервер возвращает запись AAAA класса IN (Internet), содержащую IPv6-адрес размером 16 байт. Запись также содержит TTL -- время, на которое результат можно закэшировать.

Для тестирования можно использовать имя ipv6.google.com -- у него нет обычной A-записи, оно работает только по IPv6.

Запись PTR (обратное разрешение)

Если нужно по известному IPv6-адресу получить имя узла, используется запись PTR. Запрашивается текстовая метка, содержащая IP-адрес, и возвращается текстовая метка с именем узла. Сами IPv6-адреса при этом не передаются.

В утилите nslookup можно задать IPv6-адрес напрямую -- утилита сама преобразует его в текстовую метку.

Формат обратной записи: каждый шестнадцатеричный символ адреса записывается через точку в обратном порядке, с суффиксом ip6.arpa.

Пример для адреса 2001:0db8:b16b:00b5::1:

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.b.0.0.b.6.1.b.8.b.d.0.1.0.0.2.ip6.arpa

Разбираем:

Группа адреса Символы в обратном порядке
2001 ...1.0.0.2
0db8 ...8.b.d.0
b16b ...b.6.1.b
00b5 ...5.b.0.0
0000 ...0.0.0.0 (нули)
0001 1.0.0.0...

Запись CNAME

В DNS могут быть промежуточные записи CNAME (Canonical Name). Вы спрашиваете: "Какой адрес у www.networkeducation.ru?" DNS отвечает: "Такого узла нет, но есть другой -- blablabla.azurewebsites.com, это на самом деле одно и то же". CNAME ссылается на другую запись, которая уже может быть AAAA и содержать IPv6-адрес.

Требования к DNS-серверу для работы с IPv6

Согласно RFC 4472, DNS-сервер, работающий с IPv6, должен:

  • Слушать на 53-м порту по UDP и TCP, как по IPv4, так и по IPv6 (dual stack)
  • Программное обеспечение DNS должно поддерживать записи AAAA
  • Все промежуточные записи (NS, CNAME, MX, SRV) должны уметь ссылаться на AAAA-записи

Поскольку AAAA-записи занимают 16 байт каждая, при большом количестве записей в ответе может не хватить места в стандартной UDP-датаграмме DNS. По умолчанию DNS пытается уместиться в 576 байт -- это минимальный гарантированный MTU, пришедший из эпохи коммутируемых соединений (протокол PPP поверх модемов). Десять IPv6-адресов -- это уже 160 байт только на адреса, плюс заголовки.

Поэтому при работе с IPv6 очень пригодится механизм EDNS0, который:

  • Разрешает отправку больших UDP-датаграмм DNS
  • Имеет механизм адаптации, если большая датаграмма не проходит

Делегирование обратных зон в IPv6

Зачем записывать адреса в обратном порядке? Это обеспечивает удобное делегирование зон.

Все адресное пространство IPv6 обслуживается корневыми серверами зоны ip6.arpa. У этих серверов заранее известные имена: a.ip6-servers.arpa, b.ip6-servers.arpa и т.д. Важно: у некоторых из них есть только IPv4-адреса, поэтому чистый IPv6-only DNS-сервер сделать не получится -- ему все равно нужно взаимодействие по IPv4.

Цепочка делегирования при PTR-запросе:

  1. Корневые серверы ip6.arpa -- определяют по начальным битам адреса, что адреса 2001:0d... обслуживаются региональным регистратором (например, APNIC)
  2. Региональный регистратор (ns1.apnic.net и т.д.) -- определяет, что блок 2001:0db8::/32 выдан определенному провайдеру
  3. DNS-серверы провайдера (ns1.example.com) -- определяют, что конкретная подсеть делегирована клиенту
  4. DNS-серверы клиента -- возвращают финальный PTR-результат

Благодаря записи в обратном порядке по одному шестнадцатеричному символу, зоны удобно делить на части, кратные 4 битам (один hex-символ = 4 бита). Это обеспечивает простое и красивое делегирование. В IPv4 схема была аналогичная, но менее громоздкая. В IPv6 текстовые метки длинные, зато механизм делегирования удобный.

Итоги

Поддержка протокола IPv6 в DNS полностью обеспечена. Запоминать длинные IPv6-адреса нет никакой необходимости -- DNS прекрасно с IPv6 работает. В следующем разделе разберем работу служебного протокола ICMPv6.

Network Education

Бесплатная онлайн-академия сетевых технологий. Видеоуроки, транскрипции и структурированные треки обучения — от основ до продвинутого уровня.

ТрекиКаталогО проекте
© 2026 Network Education