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
37
Hickory DNSで始める自作DNSフォワーダ
jyuch
November 29, 2025
Tweet
Share
More Decks by jyuch
See All by jyuch
ダウナー系生成AIに毎日カスの嘘を流し込まれたい
jyuch
0
28
Other Decks in Programming
See All in Programming
Oxlint JS plugins
kazupon
1
1k
CSC307 Lecture 07
javiergs
PRO
1
560
AtCoder Conference 2025
shindannin
0
1.1k
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
460
AI巻き込み型コードレビューのススメ
nealle
2
1.3k
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
CSC307 Lecture 09
javiergs
PRO
1
840
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Oxlintはいいぞ
yug1224
5
1.4k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
440
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Why Our Code Smells
bkeepers
PRO
340
58k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
What's in a price? How to price your products and services
michaelherold
247
13k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Making Projects Easy
brettharned
120
6.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
390
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
71
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