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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
jyuch
November 29, 2025
Programming
86
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hickory DNSで始める自作DNSフォワーダ
jyuch
November 29, 2025
More Decks by jyuch
See All by jyuch
ダウナー系生成AIに毎日カスの嘘を流し込まれたい
jyuch
0
44
Other Decks in Programming
See All in Programming
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
1
300
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
600
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
「人を評価する AI」の設計と実装
ryoyanara
0
230
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
100
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
450
Cloudflare is Agents
chimame
0
180
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
プロポーザルを書いてもらう
pvcresin
0
580
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
510
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Utilizing Notion as your number one productivity tool
mfonobong
4
550
AI: The stuff that nobody shows you
jnunemaker
PRO
9
940
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
550
Mind Mapping
helmedeiros
PRO
1
330
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
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