DNSSEC: як працює захист доменних імен



Класична система доменних імен (DNS) – одна з головних складових роботи Інтернету. Проте у базовому варіанті DNS не має механізму перевірки достовірності даних. Щоб вирішити цю проблему, було розроблено DNSSEC (Domain Name System Security Extensions) – набір розширень до DNS, які додають до системи перевірку цілісності та автентичності даних.

Що таке DNSSEC

DNSSEC — це набір криптографічних розширень для DNS, які дозволяють:

  • Перевіряти достовірність записів (автентичність джерела);
  • Захищати від підробки та підміни відповідей (integrity protection);
  • Будувати довірений ланцюжок від кореня DNS до конкретного домену.

Принцип роботи ґрунтується на цифрових підписах. Кожен DNS-запис підписується приватним ключем. Клієнт (резольвер) отримує не лише значення, а й криптографічний підпис, який можна перевірити за допомогою відкритого ключа, збереженого у батьківській зоні.

Як працює DNSSEC

Візуально дуже спрощено на моєму реальному домені ostrich.kyiv.ua можна побудувати таку графічну схему:

  • Створення ключів. Для домену генерується пара ключів:
    • KSK (Key Signing Key) — підписує ключі;
    • ZSK (Zone Signing Key) — підписує записи у зоні.
  • Підпис зон. Усі записи (A, MX, TXT тощо) підписуються за допомогою ZSK.
  • Передача відкритого ключа. Хеш відкритого ключа (DS-запис) публікується у батьківській зоні (наприклад, у .ua для домену .com.ua).
  • Ланцюг довіри. Коли резольвер отримує відповідь, він перевіряє підпис, а потім перевіряє, чи ключ довірений через ланцюг від кореня DNS.

У результаті користувач може бути впевнений, що отримані DNS-дані — справжні і не були підмінені.

Приклад застосування

Припустимо, користувач заходить на мій сайт. Без DNSSEC хакер може підмінити DNS-відповідь і переспрямувати його на фішинговий сайт. З DNSSEC браузер (через резольвер) отримає лише підписані записи, і якщо підпис не збігається – відповідь буде відхилена. Таким чином, користувач потрапить лише на справжній сервер банку.

Налаштування DNSSEC

Реєстратор мого доменого імені – це локальний провайдер, який нещодавно додав до переліку своїх послуг DNSSEC. Я вирішив скористатися такою можливістю і внести налаштування. Оскільки реєстратором виступає не Cloudflare, а мій локальний провайдер, то необхідно внести налаштування саме на стороні мого провайдера, проте самі дані я буду отримувати від Cloudflare адже наразі на цьому сервері прописані мої DNS записи.

Активувати функцію доволі просто. В панелі Cloudflare необхідно вибрати DNSSettingsDNSSECEnable

У вікні буде згенерована вся необхідна інформація для подальшоїх активації в панелі керування свого реєстратора домену, про що свідчить попередження: “To enable DNSSEC you will need to add this DS record to your registrar. Most registrars will ask for only a few of the fields below. We have instructions for common registrars”.

Мій реєстратор вимагає заповнити лише 4 поля:

  • Key tag
  • Algorithm
  • Digest type
  • Digest

Буквально через декілька хвилин, статус DNSSEC зміниться на “Success! ostrich.kyiv.ua is protected with DNSSEC.

Перевірка

Щоб перевірити чи дійсно зміни застосувалися, достатньо в терміналі виконати наступну команду, яка напряму звернеться до Cloudflare.

dig +dnssec ostrich.kyiv.ua @1.1.1.1

Очікується отримати до звичайного виводу додатковий рядок із записом RRSIG:

ostrich.kyiv.ua.        300     IN      RRSIG   A 13 3 300 20250926095050 20250924075050 34505 ostrich.kyiv.ua. IQE6axVd6YMeHnyXC2zW9ELt9P+6ZNzuhPbWQ4BqRnAtAGkQtIA7ETiE k/079aSTNqHk+fnnKidHU3Jp5pdORQ==

Цей запис складається з наступних параметрів:

  • A – Це означає, що підпис стосується записів типу A (IPv4).
  • 13 – Алгоритм підпису. 13 = ECDSA Curve P-256 with SHA-256 (сучасний алгоритм, Cloudflare його використовує за замовчуванням).
  • 3 – Кількість міток у доменному імені (для ostrich.kyiv.ua → 3: ostrich, kyiv, ua).
  • 300 – ТТL у секундах, з яким був підписаний запис (тобто максимальний час кешування цього підпису).
  • 20250926095050 – Час закінчення дії підпису (UTC, формат YYYYMMDDHHMMSS). Тут → 26 вересня 2025, 09:50:50 UTC.
  • 20250924075050 – Час початку дії підпису (UTC). Тут → 24 вересня 2025, 07:50:50 UTC. (Отже, підпис дійсний лише в цьому проміжку.)
  • 34505 – Ідентифікатор ключа DNSKEY, яким зроблено підпис. Резольвер шукає DNSKEY із таким тегом, щоб перевірити підпис.
  • ostrich.kyiv.ua. – Домен, якому належить ключ, яким підписано запис.
  • IQE6axVd6YM… – Власне криптографічний підпис (base64). Використовується разом із DNSKEY для перевірки достовірності.

Таким чином вже через декілька хвилин після засосування змін можна отримати додатковий захист свого DNS.

Також є ресурс dnssec-analyzer, який візуально покаже чи все добре із валідацією домена.

Висновок

DNSSEC – це важливий крок до підвищення безпеки Інтернету. Він не замінює HTTPS чи VPN, але робить DNS-назви більш надійними.
Для власників сайтів налаштування DNSSEC – це демонстрація турботи про безпеку відвідувачів і готовність до майбутніх стандартів (як-от DANE).
Якщо твій DNS-провайдер підтримує DNSSEC (наприклад, Cloudflare), рекомендується обов’язково його увімкнути.