Initiative DNS-Flag-Day 2020 zur Lösung von Fragmentierungsproblemen und Unterstützung von TCP

Heute werden mehrere große DNS-Dienste und Hersteller von DNS-Servern eine gemeinsame Veranstaltung durchführen DNS-Flag-Day 2020, die darauf abzielt, auf die Lösung der Probleme mit IP-Fragmentierung bei der Verarbeitung von großen DNS-Nachrichten hinzuweisen. Dies ist die zweite derartige Veranstaltung, der letzte "DNS-Flag-Day" fokussierte sich auf die korrekte Verarbeitung von EDNS-Anfragen.

Die Teilnehmer der Initiative DNS-Flag-Day 2020 fordern, die empfohlenen Größen der EDNS-Puffer auf Werte von 1232 Bytes (MTU-Größe 1280 minus 48 Bytes für Header) festzulegen, sowie die Verarbeitung von Anfragen über TCP zur obligatorischen Unterstützung auf Servern zu machen. In RFC 1035 wird nur die Unterstützung für die Verarbeitung von Anfragen über UDP als verpflichtend ausgewiesen, während TCP als wünschenswert, aber nicht zwingend für die Funktionalität betrachtet wird. Neue RFC 7766 und RFC 5966 weisen TCP eindeutig als eine der zwingend erforderlichen Funktionen aus, die für eine korrekte DNS-Funktion erforderlich sind. Im Rahmen der laufenden Initiative wird vorgeschlagen, den Übergang von der Übertragung von Anfragen über UDP zur Anwendung von TCP zu forcieren, wenn die festgelegte EDNS-Puffergröße nicht ausreicht.

Die vorgeschlagenen Änderungen werden Verwirrung bei der Wahl der EDNS-Puffergröße beseitigen und das Problem der Fragmentierung großer UDP-Nachrichten lösen, deren Verarbeitung häufig zu Paketverlusten und Zeitüberschreitungen auf der Client-Seite führt. Auf der Client-Seite wird die EDNS-Puffergröße konstant sein, und große Antworten werden sofort an den Client über TCP gesendet. Der Ausschluss der Übertragung großer Nachrichten über UDP wird ebenfalls Probleme mit der Ablehnung großer Pakete an einigen Firewalls lösen und ermöglicht es, Angriffe auf DNS-Caching-Vergiftungen, die auf der Manipulation fragmentierter UDP-Pakete basieren (bei der Fragmentierung enthält das zweite Fragment keinen Header mit einer ID, sodass es gefälscht werden kann, solange die Prüfziffer übereinstimmt), zu blockieren.

Ab heute werden die an der Initiative beteiligten DNS-Anbieter, einschließlich CloudFlare, Quad 9, Cisco (OpenDNS) und Google, allmählich umstellen Die Größe des EDNS-Puffers wurde von 4096 auf 1232 Bytes auf ihren DNS-Servern reduziert (die Änderung von EDNS wird sich über einen Zeitraum von 4-6 Wochen erstrecken und allmählich immer mehr Anfragen betreffen). Antworten auf UDP-Anfragen, die das neue Limit überschreiten, werden per TCP gesendet. Hersteller von DNS-Servern, darunter BIND, Unbound, Knot, NSD und PowerDNS, werden Updates herausbringen, um die EDNS-Puffergröße von 4096 auf 1232 Bytes zu ändern.

Letztendlich können die vorgenommenen Änderungen zu Problemen bei der Auflösung führen, wenn Anfragen an DNS-Server gerichtet werden, deren DNS-Antworten über UDP 1232 Bytes überschreiten und die nicht in der Lage sind, Antworten per TCP zu senden. Ein Experiment von Google hat gezeigt, dass die Änderung der EDNS-Puffergröße kaum Auswirkungen auf die Ausfallraten hat — bei einem Puffer von 4096 Bytes beträgt die Anzahl der gekürzten UDP-Anfragen 0,345 %, während die Anzahl der unerreichbaren Wiederholantworten per TCP bei 0,115 % liegt. Bei einem Puffer von 1232 Bytes betragen diese Werte 0,367 % bzw. 0,116 %. Die Verpflichtung zur Unterstützung von TCP als zwingende Anforderung für DNS wird bei etwa 0,1 % der DNS-Server zu Problemen führen. Es wird darauf hingewiesen, dass diese Server unter den heutigen Bedingungen auch ohne TCP ohnehin instabil sind.

Administrator von autoritativen DNS-Servern sollte sicherstellen, dass ihr Server auf TCP am Netzwerkport 53 antwortet und dass dieser TCP-Port nicht durch eine Firewall blockiert wird. Ein autoritativer DNS-Server sollte auch keine UDP-Antworten senden, deren Größe überschreitet
die angeforderte Größe des EDNS-Puffers. Auf dem Server sollte die EDNS-Puffergröße auf 1232 Bytes festgelegt werden. Auch Resolver haben ähnliche Anforderungen — sie müssen die Möglichkeit zur Antwort per TCP bereitstellen, die Unterstützung für das Wiederholen von Anfragen per TCP bei Empfang einer gekürzten UDP-Antwort gewährleisten und die EDNS-Puffergröße auf 1232 Bytes festlegen.

Die Einstellungen zur Anpassung der EDNS-Puffergröße in verschiedenen DNS-Servern sind wie folgt:

  • BIND

    options {
    edns-udp-size 1232;
    max-udp-size 1232;
    };

  • Knot 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

  • Unbound

    edns-buffer-size: 1232

  • NSD

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

    Quelle: opennet.ru

  • 60GB SSD 8Gb DDR4