
Rustで作る ”壊れる” DNSサーバー
無料で読める本
HTTPサーバーは、 ・TCP ・文字列ベース ・connectionあり の世界でした。 一方DNSは、 ・UDP ・バイナリプロトコル ・packetベース の世界です。 この本では、RustでDNSリゾルバを実装しながら、 「なぜDNSは壊れるのか」「なぜその仕組みが必要なのか」 を確認していきます。
Chapters
はじめに
作るもの・作らないもの(DNSサーバーの範囲)
最小のDNSリゾルバを作る
DNSパケットを読む(リクエストの解析)
存在しない名前はどう扱う?NXDOMAIN
権威DNSを作る
キャッシュでDNSを高速化する
TTLを間違えて壊す
NXDOMAINをキャッシュしないと壊れる
レコードがない=NXDOMAIN、ではない
補足: AAAAが遅いとWebも遅くなる
委任で壊す
Glueレコード
Glueを信用すると壊れる
CNAMEで壊す
CNAME loopで終わらない
main.rsの限界
遅延した上流DNSで詰まる
timeout / retryで壊す
tokioで直す
thundering herd で壊す
巨大レスポンスで壊す
cache poisoning で壊す
(補足)DNSSECは何を解決する?
まとめ
関連リンク
Author
Topics