DNS TXTレコード分割ツール
長いTXT値をDNSが求める255バイトの文字列へ切り分け、ゾーンファイルに貼れる形にします。
DNS TXTレコード分割ツールはすべてブラウザ内で動作します。鍵や確認トークンは端末内で分割され、送信されません。
DKIMレコードを作る
DNS TXTレコード分割 について
TXTレコードは一つの長い文字列ではありません。RFC 1035はそれを最大255バイトの文字列の並びとして保持し、リゾルバは間に何も挟まずに連結します。2048ビットのDKIM鍵をゾーンファイルへ引用符付きの複数片で渡す必要があるのはこのためで、切る場所を誤ったり、片をスペースでつないだりすると、原因の追いにくい形で署名が壊れます。このツールはバイト境界で切り分け、文字の途中では決して分割せず、BIND、括弧付き、JSON配列などの形式で出力します。
機能
- 文字ではなくバイトを数え、255バイト境界で分割
- マルチバイト文字やサロゲートペアを途中で切りません
- BINDの一行、括弧付き、引用符付き文字列のみ、JSON配列の各形式
- 片ごとのバイト数を表示し、どの文字列が満杯かがわかります
- 余分な空白、既存の引用符、512バイト超のレコードを警告
- ゾーンファイルやdigの出力から文字列を再結合
- 2048ビットDKIM、長いSPF、所有権確認トークンの例を同梱
DNS TXTレコード分割 の使い方
- TXT値をそのまま貼り付けます。引用符は自動で付きます
- ゾーン行として使うならレコード名とTTLを入力します
- DNS事業者が求める出力形式を選びます
- レコードをコピーするか、結合タブで分割済みの値を戻します
例
入力
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A… (392 bytes)
出力
default._domainkey 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIja…" "…QIDAQAB"
リゾルバが何も挟まずに連結する、引用符付きの二つの文字列。
よくあるエラーとトラブルシューティング
- DNS事業者にレコードが長すぎると拒否される。 — 一つの文字列に255バイト制限を適用しています。分割後の版を、各片を個別に引用符で囲んで貼り付けてください。
- 分割したらDKIMの検証が失敗する。 — ほぼ必ず片の間の空白が原因です。リゾルバは何も挟まずに連結するので、加えた空白は鍵の一部になってしまいます。
- 値にすでに引用符が入っている。 — 生の値を貼り付けてください。引用符は整形時に付くため、引用済みの値を貼ると二重になります。
- 片が255文字より短い。 — 制限は255バイトであって文字数ではありません。非ASCIIの文字は2〜4バイトを使うので、文字数が少なくても満杯になります。
よくある質問
- TXTレコードが255文字までに制限されるのはなぜですか。
- レコード内の各文字列には1バイトの長さが前置されるため、1文字列が255バイトに制限されます。レコード全体は複数の文字列を持てるので、実際の上限はDNSメッセージの大きさです。
- リゾルバは分割されたTXT文字列をどう戻しますか。
- 順番どおりに、区切りを一切入れずに連結します。DKIMやSPF、所有権確認トークンはこの挙動に依存しており、だから切る場所は問われません。
- DKIM鍵はどこで切ればよいですか。
- 各片が255バイト以内なら任意の位置でかまいません。検証側にとって鍵は連結後の単一のBase64文字列なので、Base64の途中で切っても問題ありません。
- TXTレコード全体はどこまで大きくできますか。
- 実用上は数キロバイトですが、512バイトを超える応答にはEDNSかTCPでの再試行が要ります。うまく扱えないリゾルバもあるため、抑えておくと不安定な失敗を避けられます。
- SPFレコードも同じように分割が必要ですか。
- 一つの文字列が255バイトを超える場合だけで、includeが多いと起こります。SPFにはDNS参照10回という別の制限もあり、分割では解決しません。
関連ツール
すべての ArrayKit ツール