Hickory DNSで始める自作DNSフォワーダ

>100 Views

November 29, 25

スライド概要

profile-image

データエンジニアです

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Hickory DNSで始める自作DNSフォワーダ Ibaraki.dev #14 もくもく会

2.

自己紹介 • @jyuch • 自称ソフトウェアエンジニア • 最近はデータエンジニアっぽいことをしている 2

3.

アジェンダ 1. DNSのしくみのおさらい 2. Hickory DNSの紹介 3. Hickory DNSのいいところ・わるいところ 3

4.

DNSのしくみのおさらい 4

5.

通信の流れ ① www.example.comのIPアドレスを教えて ② アドレスは203.0.113.1です DNSサーバ ③ Webサーバにアクセス Webサーバ 5

6.

通信の流れ サーバへのアクセスに先行してDNS問い合わせが実行される DNS応答を通してネットワークアクセスを制御できる • ロードバランシング • ランダム・レイテンシ・地理的近接に振り分ける • コンテンツ・違法サイトのフィルタリング • ポリシーに従ってアクセスを遮断 • セキュリティ • C&Cサーバへのアクセスを検知・遮断 6

7.

DNS問い合わせの流れ 管理を委任している サーバを応答する 受け取ったリクエストを フルリゾルバに転送する ルートネームサーバから 順に問い合わせる フォワーダ (宅内ルータなど) フルリゾルバ ルートネームサーバ 権威DNSサーバ 問い合わせに回答する 権威DNSサーバ 7

8.

DNS問い合わせのインターセプト フォワーダで問い合わせをインターセプトすれば、アクセスしてほしくない サイトへのアクセスを阻止できる そのドメインは存在しないっぽいですね(嘘) フォワーダ ルートネームサーバ フルリゾルバ 権威DNSサーバ アクセスしてほしくないドメイン へのリクエストを捨てる 権威DNSサーバ 8

9.

Hickory DNSの紹介 9

10.

Hickory DNSの紹介 • Rustで実装されているDNSライブラリ • 機能ごとにクレートで分割されている https://hickory-dns.org/ 10

11.

Hickory DNSを使ったフィルタの実装 フォワーダ Rustの非同期ランタイム Server クレート Tokioランタイム フィルタ ロジック リクエストをフルリゾルバ に転送する Client クレート フルリゾルバ リストを参照してフィルタ Webフレームワークのように ハンドラを書くだけ アクセス拒否リスト 11

12.

Hickory DNSのいいところ・わるいところ 12

13.

Hickory DNSのいいところ • Rustで書ける • Rustでアプリケーションを書くのは全人類の願望のはず • Rustのメリットを簡単に享受できる • シングルバイナリ • 複数のOS向けにビルドできる • メモリセーフ • GCがない • メモリフットプリントが小さい • 動作が軽い 13

14.

Hickory DNSのいいところ • Tokioランタイム(非同期ランタイム)で動作する • Tokioランタイムにおんぶにだっこで非同期サーバが書ける • smolは未サポート(RuntimeProviderを実装すればワンチャン?) • DNSを抽象的に扱える • ペイロードのレイアウトなどは気にしなくてもよい • 構造体に詰めればあとはよしなにしてくれる 14

15.

Hickory DNSのわるいところ • ドキュメントがほとんどない • 使い方を解説しているブログもほとんどない • ソースコードを読んで使い方を調べる必要がある • APIの互換性を破壊する変更が入る事が稀にある • まだメジャーリリースはされてない • 今のところ軽微な修正で済んでいる • リクエストログは自分で作りこむ必要がある • DNS Tapが簡単に扱える機能があるとすごいうれしい(願望) 15

16.

Hickory DNSのわるいところ 16

17.

Hickory DNSのわるいところ … 遣強 ういあ な型ま よをり コ 通ン らパ なイ いル が ※ コンプライアンス愛染様 17

18.

Hickory DNSのわるいところ • 面妖なシグネチャが頻出する • ライフタイム修飾子・型パラメータ • 非同期を前提としているのも難解さを加速させている • 型パズルがしんどい • Rustで書く必要がある • やっぱりRustは難しい 18

19.

まとめ • DNSを制する者は通信を制する • Hickory DNSを使えば簡単にDNSフォワーダが書ける • やっぱりRustは難しい・・・ 19