Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hickory DNSで始める自作DNSフォワーダ
Search
jyuch
November 29, 2025
Programming
0
41
Hickory DNSで始める自作DNSフォワーダ
jyuch
November 29, 2025
Tweet
Share
More Decks by jyuch
See All by jyuch
ダウナー系生成AIに毎日カスの嘘を流し込まれたい
jyuch
0
29
Other Decks in Programming
See All in Programming
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
210
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
14
7.9k
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
240
CSC307 Lecture 12
javiergs
PRO
0
460
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
290
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.5k
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
200
文字コードの話
qnighy
43
17k
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
170
あなたはユーザーではない #PdENight
kajitack
4
300
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
350
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
5.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
330
The Language of Interfaces
destraynor
162
26k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
620
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
From π to Pie charts
rasagy
0
150
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
140
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
Transcript
Hickory DNSで始める自作DNSフォワーダ Ibaraki.dev #14 もくもく会
自己紹介 • @jyuch • 自称ソフトウェアエンジニア • 最近はデータエンジニアっぽいことをしている 2
アジェンダ 3 1. DNSのしくみのおさらい 2. Hickory DNSの紹介 3. Hickory DNSのいいところ・わるいところ
DNSのしくみのおさらい 4
通信の流れ 5 DNSサーバ Webサーバ ① www.example.comのIPアドレスを教えて ② アドレスは203.0.113.1です ③ Webサーバにアクセス
通信の流れ 6 サーバへのアクセスに先行してDNS問い合わせが実行される DNS応答を通してネットワークアクセスを制御できる • ロードバランシング • ランダム・レイテンシ・地理的近接に振り分ける • コンテンツ・違法サイトのフィルタリング
• ポリシーに従ってアクセスを遮断 • セキュリティ • C&Cサーバへのアクセスを検知・遮断
DNS問い合わせの流れ 7 ルートネームサーバ フルリゾルバ フォワーダ (宅内ルータなど) 権威DNSサーバ 権威DNSサーバ 受け取ったリクエストを フルリゾルバに転送する
ルートネームサーバから 順に問い合わせる 問い合わせに回答する 管理を委任している サーバを応答する
DNS問い合わせのインターセプト 8 ルートネームサーバ フルリゾルバ フォワーダ 権威DNSサーバ 権威DNSサーバ アクセスしてほしくないドメイン へのリクエストを捨てる そのドメインは存在しないっぽいですね(嘘)
フォワーダで問い合わせをインターセプトすれば、アクセスしてほしくない サイトへのアクセスを阻止できる
Hickory DNSの紹介 9
Hickory DNSの紹介 • Rustで実装されているDNSライブラリ • 機能ごとにクレートで分割されている 10 https://hickory-dns.org/
Hickory DNSを使ったフィルタの実装 11 11 フルリゾルバ Server クレート Client クレート アクセス拒否リスト
フィルタ ロジック フォワーダ Tokioランタイム Webフレームワークのように ハンドラを書くだけ Rustの非同期ランタイム リストを参照してフィルタ リクエストをフルリゾルバ に転送する
Hickory DNSのいいところ・わるいところ 12
Hickory DNSのいいところ • Rustで書ける • Rustでアプリケーションを書くのは全人類の願望のはず • Rustのメリットを簡単に享受できる • シングルバイナリ
• 複数のOS向けにビルドできる • メモリセーフ • GCがない • メモリフットプリントが小さい • 動作が軽い 13
Hickory DNSのいいところ • Tokioランタイム(非同期ランタイム)で動作する • Tokioランタイムにおんぶにだっこで非同期サーバが書ける • smolは未サポート(RuntimeProviderを実装すればワンチャン?) • DNSを抽象的に扱える
• ペイロードのレイアウトなどは気にしなくてもよい • 構造体に詰めればあとはよしなにしてくれる 14
Hickory DNSのわるいところ • ドキュメントがほとんどない • 使い方を解説しているブログもほとんどない • ソースコードを読んで使い方を調べる必要がある • APIの互換性を破壊する変更が入る事が稀にある
• まだメジャーリリースはされてない • 今のところ軽微な修正で済んでいる • リクエストログは自分で作りこむ必要がある • DNS Tapが簡単に扱える機能があるとすごいうれしい(願望) 15
Hickory DNSのわるいところ 16
Hickory DNSのわるいところ 17 … あ ま り 強 い 型
を 遣 う な よ コ ン パ イ ル が 通 ら な い ※ コンプライアンス愛染様
Hickory DNSのわるいところ • 面妖なシグネチャが頻出する • ライフタイム修飾子・型パラメータ • 非同期を前提としているのも難解さを加速させている • 型パズルがしんどい
• Rustで書く必要がある • やっぱりRustは難しい 18
まとめ • DNSを制する者は通信を制する • Hickory DNSを使えば簡単にDNSフォワーダが書ける • やっぱりRustは難しい・・・ 19