Ініцыятыва 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

  • Дадаць каментар