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
33
Hickory DNSで始める自作DNSフォワーダ
jyuch
November 29, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2k
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
200
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.2k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
12
2.9k
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
ゆくKotlin くるRust
exoego
1
190
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
600
Patterns of Patterns
denyspoltorak
0
410
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
愛される翻訳の秘訣
kishikawakatsumi
3
370
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
260
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
120
Testing 201, or: Great Expectations
jmmastey
46
7.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
97
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
The Pragmatic Product Professional
lauravandoore
37
7.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
390
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
220
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