1758372619
2025-09-20 11:50:00
TXTレコードにできるものの限界は何ですか?
いくつかの場所は255バイトと言っています。彼らです
間違っている。 TXTレコードには複数の文字弦があります(RFC 1035セクション
3.3.14)そして、それらは長さが制限されています(単一のバイトがその長さに使用されるため)が、それらの多くが存在する場合があります。
実際の制限はによって制限されます DNSペイロードのサイズ、UDPにとって最近ではこれがあります 1232バイト。それは明らかに非常に低いです。ただし、DNSが行うTCPへの通常のフォールバック以外に、特別なものを必要としないTCPを使用する場合は、最大64kbを提供できます。
私はそれを使用して、それを正確に実証することに着手しました Google Public DNSのJSON API その後、カスタムサーバーからTCPを介して大きなTXT応答を提供します。
これは主に機能しますが、主な問題は長さではなく、バイナリデータを使用します。これは、JSONがバイナリデータを処理するように設計されていないためです。したがって、少しカスタムJSON解析があります。 TXTレコードで生のバイナリデータを使用すると、Base64または別のエンコードのオーバーヘッドが回避されます。つまり、より多くのデータを梱包できます。
👉 動作中にそれを見てください。詳細については、コメントをご覧ください
image.html。
非ブラウザー
これを介してこれを照会することができます。 DNS応答のプレゼンテーションフォームが出力のために逃げられるため、バイナリ出力に戻すのは少し難しいです。
DIGとLittle Perlを使用してデータを取得して、キャラクターシーケンスを組み合わせることができます。
$ dig +short dog.log.battery.st TXT | perl -pe'chomp; s/" "//g; s/^"//; s/"$//; s/\\(\d{3})/chr $1/eg; s/\\([\\"])/$1/g' > dog.avif
$ sha256sum dog.avif
7058fbd20ef2af84d5efb0ae7d91f87ce7a912380636c468b32f2c759cbb9130 dog.avif
(これは実際には私のPerl Oneライナーの単なる変更されたバージョンです
DNSを介したウィキペディア 2008年から、何も変わりません。)
WebバージョンはGoogleのJSONリゾルバーを使用しているため、非常に大きなTXTレコードのクエリに問題がないことはわかっていますが、地元の再帰はこれをサポートしていない可能性があります。うまくいかない場合は、追加できます @dns.google GoogleのパブリックDNSサーバー(またはその他のオープンリクルャーにクエリを送信するコマンドラインに、 @9.9.9.9 も機能しているようです)。
なぜ?
それが可能だと気づいたとき、私はそれがかわいいハックだと思った。
セキュリティに興味がある人のためにここに考慮があります、攻撃者は長い間持っています DNSを介してトンネル、しかし、大きなペイロードをブラウザにトンネリングすることは、潜在的に新しいものです。 Google Public DNSには含まれる証明書があるためです 8.8.8.8 など、HTTPSトラフィックは、DNSルックアップなしでブラウザから直接移動できます。これは、DNSフィルタリングを使用する環境では予想外の場合があります。これは、暗号化が完全に展開されると、より一般的になるものです IPアドレス証明書、ここでの違いは、既存のIPアドレス証明書のピギーバックです。
これは、低TTL(10秒)を意図的に使用して、DNS Recursorのキャッシュが役に立たないコンテンツで充填されないようにします。これを増やして、リクルサーからキャッシュを取得することが可能です。これは、無料で分散したCDNのようなものです(実際にこれを行った場合、そのようなことがまだ行われていない場合、適応的にTTLを制限すると思います)。
サーバー側
サーバーはカスタムGO DNSサーバーです。正直に言うと、それはChatGptによって書かれました。なぜなら、それはそれほど賢いものではないからです。アイデアは重要です。 (ChatGptは切り捨てのような詳細を間違えたので、コードを自分で修正しました。)
すべてのコードはです ここ。 AIはサーバーコンポーネントにのみ使用され、このブログ投稿とクライアントHTMLコードは私自身の作業です。
20th 2025年9月
#DNS上の画像