断片化と TCP サポートの問題に対処するための DNS フラッグデー 2020 の取り組み

本日、多数の大手 DNS サービスと DNS サーバー メーカーが共同イベントを開催します 2020 年 DNS フラッグデー注意を集中させるように設計されています 決定 проблем 大きな DNS メッセージを処理するときに IP 断片化が発生します。 昨年の「DNSフラッグデー」に続きXNUMX回目となる。 集中していました EDNS リクエストの正しい処理について。

DNS Flag Day 2020 イニシアチブの参加者は、EDNS の推奨バッファ サイズを 1232 バイト (MTU サイズ 1280 からヘッダーの 48 バイトを引いた値) に固定することを求めています。 翻訳する TCP 経由のリクエストの処理はサーバーに必須の機能です。 で RFC 1035 UDP 経由のリクエスト処理のサポートのみが必須としてマークされており、TCP は望ましいものとしてリストされていますが、動作には必須ではありません。 新しい RFC 7766 и RFC 5966 DNS が正しく機能するために必要な機能として TCP を明示的にリストします。 このイニシアチブは、確立された EDNS バッファ サイズが不十分な場合に、UDP 経由でのリクエストの送信から TCP の使用への移行を強制することを提案しています。

提案された変更により、EDNS バッファ サイズの選択に関する混乱が解消され、大きな UDP メッセージの断片化の問題が解決されます。この問題の処理により、クライアント側でパケット損失やタイムアウトが発生することがよくあります。 クライアント側では、EDNS バッファ サイズは一定となり、大きな応答は TCP 経由でクライアントに即座に送信されます。 UDP を介した大きなメッセージの送信を排除すると、一部のファイアウォールでドロップされる大きなパケットの問題も解決され、ブロックが可能になります。 攻撃 フラグメント化された UDP パケットの操作に基づいて、DNS キャッシュをポイズニングします (フラグメントに分割すると、XNUMX 番目のフラグメントには識別子を含むヘッダーが含まれないため、偽造できます。チェックサムが一致するだけで十分です)。 。

本日より、CloudFlare、Quad 9、Cisco (OpenDNS)、Google などの参加 DNS プロバイダーが、 徐々に変化していきます DNS サーバー上の EDNS バッファ サイズが 4096 バイトから 1232 バイトに変更されました (EDNS の変更は 4 ~ 6 週間にわたって行われ、時間の経過とともに増加するリクエストに対応する予定です)。 新しい制限に適合しない UDP リクエストに対する応答は、TCP 経由で送信されます。 BIND、Unbound、Knot、NSD、PowerDNS などの DNS サーバー ベンダーは、デフォルトの EDNS バッファ サイズを 4096 バイトから 1232 バイトに変更するアップデートをリリースします。

最終的に、これらの変更は、UDP DNS 応答が 1232 バイトを超え、TCP 応答を送信できない DNS サーバーにアクセスするときに、解決の問題を引き起こす可能性があります。 Google で実施された実験では、EDNS バッファ サイズを変更しても失敗率には事実上影響がないことが示されました。バッファが 4096 バイトの場合、切り捨てられた UDP リクエストの数は 0.345%、TCP 経由での到達不能な再試行の数は 0.115% でした。 1232 バイトのバッファでは、これらの数値は 0.367% と 0.116% になります。 TCP サポートを必須の DNS 機能にすると、約 0.1% の DNS サーバーで問題が発生します。 現在の状況では、TCP がなければ、これらのサーバーの動作はすでに不安定であることに注意してください。

権威 DNS サーバーの管理者は、サーバーがネットワーク ポート 53 上の TCP 経由で応答し、この TCP ポートがファイアウォールによってブロックされていないことを確認する必要があります。 信頼できる DNS サーバーは、次の値よりも大きい UDP 応答を送信してはなりません。
要求された EDNS バッファ サイズ。 サーバー自体では、EDNS バッファ サイズを 1232 バイトに設定する必要があります。 リゾルバーにはほぼ同じ要件があります。つまり、TCP 経由で応答する必須機能、切り詰められた UDP 応答を受信したときに TCP 経由で繰り返しリクエストを送信するための必須サポート、EDNS バッファーを 1232 バイトに設定することです。

次のパラメータは、さまざまな DNS サーバーで EDNS バッファ サイズを設定する役割を果たします。

  • バインド

    オプション{
    edns-udp-サイズ 1232;
    最大udpサイズ1232;
    };

  • ノットDNS

    最大UDPペイロード: 1232

  • ノットリゾルバー

    net.bufsize(1232)

  • PowerDNS 権威

    udp-切り捨て-しきい値=1232

  • PowerDNS リカーサー

    edns-発信-bufsize=1232
    udp-切り捨て-しきい値=1232

  • バインドされていない

    edns-buffer-size: 1232

  • NSD

    ipv4-edns-サイズ: 1232
    ipv6-edns-サイズ: 1232

    出所: オープンネット.ru

  • コメントを追加します