Ініціатива DNS flag day 2020 для вирішення проблем із фрагментацією та підтримкою TCP

Сьогодні низка великих DNS-сервісів та виробників DNS-серверів проведуть спільний захід DNS flag day 2020, покликане сфокусувати увагу на рішенні проблем з IP-фрагментацією під час обробки DNS-повідомлень великого розміру. Це другий подібний захід, торік «DNS flag day» був зосереджений на коректній обробці запитів EDNS

Учасники ініціативи DNS flag day 2020 закликають зафіксувати рекомендовані розміри буферів для EDNS до значень на рівні 1232 байтів (розмір MTU 1280±48 байт для заголовків), а також перевести обробку запитів TCP у розряд обов'язково підтримуваних на серверах. У RFC 1035 обов'язковою позначено лише підтримку обробки запитів по UDP, а TCP вказаний як бажаний, але не обов'язковий для роботи. Нові RFC 7766 и RFC 5966 явно відносять TCP до обов'язкових можливостей, необхідні коректної роботи DNS. В рамках проведеної ініціативи пропонується форсувати перехід від надсилання запитів UDP до застосування TCP у випадках, коли встановленого розміру буфера EDNS недостатньо.

Запропоновані зміни позбавлять плутанини з вибором розміру буфера EDNS і вирішать проблему з фрагментацією великих UDP-повідомлень, обробка яких нерідко призводить до втрати пакетів та таймутів на стороні клієнта. На стороні клієнта розмір буфера EDNS буде постійним, а великі відповіді відразу надсилатимуться клієнту по TCP. Виняток надсилання великих повідомлень UDP також вирішить проблеми з відкиданням великих пакетів на деяких міжмережевих екранах і дозволить блокувати атаки по отруєнню кеша DNS, засновані на маніпуляції фрагментованими UDP-пакетами (при розбитті на фрагменти, другий фрагмент не включає заголовок з ідентифікатором, тому може бути підроблений для чого достатньо, щоб збігалася контрольна сума).

Починаючи з сьогоднішнього дня провайдери DNS, що беруть участь в ініціативі, включаючи CloudFlare, Quad 9, Cisco (OpenDNS) і Google, поступово поміняють розмір буфера EDNS з 4096 до 1232 байт на своїх DNS-серверах (зміна EDNS буде розтягнута на 4-6 тижнів і з часом охоплюватиме все більше запитів). Відповіді на UDP-запити, які не вкладаються в нове обмеження, будуть надсилатися через TCP. Виробники DNS-серверів, включаючи BIND, Unbound, Knot, NSD та PowerDNS, випустять оновлення зі зміною розміру буфера EDNS за замовчуванням з 4096 до 1232 байт.

В кінцевому рахунку, зміни, що вводяться, можуть призвести до проблем з резолвінгом при зверненні до DNS-серверів, DNS-відповіді яких за UDP перевищують 1232 байт, і які не можуть відправити відповідь по TCP. Проведений в Google експеримент показав, що зміна розміру буфера EDNS практично не вплине на рівень збоїв - при буфері в 4096 байт кількість запитів UDP, що урізаються, становить 0.345%, а число недосяжних повторних відповідей по TCP - 0.115%. При буфері 1232 байт ці показники становлять 0.367% і 0.116%. Переведення підтримки TCP у розряд обов'язкових можливостей DNS призведе до проблем при взаємодії близько 0.1% DNS-серверів. Зазначається, що у сучасних умовах без TCP робота даних серверів і так нестабільна.

Адміністраторам авторитетних (authoritative) DNS-серверів слід переконатися, що їхній сервер відповідає по TCP на мережевому порту 53 і даний TCP-порт не блокується міжмережевим екраном. Авторитетний DNS-сервер також не повинен надсилати UDP-відповіді, розмір яких перевищує
розмір буфера EDNS. На самому сервері розмір буфера EDNS повинен бути встановлений 1232 байт. До резолверів пред'являються приблизно такі ж вимоги - обов'язкова можливість відповіді TCP, обов'язкова підтримка відправки повторних запитів TCP при отриманні урізаної відповіді UDP і встановлення буфера EDNS в 1232 байт.

За налаштування розміру буфера EDNS у різних DNS-серверах відповідають такі параметри:

  • BIND

    варіанти {
    edns-udp-size 1232;
    max-udp-size 1232;
    };

  • Вузол DNS

    max-udp-payload: 1232

  • Knot Resolver

    net.bufsize(1232)

  • PowerDNS Authoritative

    udp-truncation-threshold=1232

  • PowerDNS Recursor

    edns-outgoing-bufsize=1232
    udp-truncation-threshold=1232

  • непов'язаний

    edns-buffer-size: 1232

  • NSD

    ipv4-edns-size: 1232
    ipv6-edns-size: 1232

    Джерело: opennet.ru

  • Додати коментар або відгук