---
title: Hickory DNSで始める自作DNSフォワーダ
tags: 
author: [jyuch](https://convert.docswell.com/user/jyuch)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EZ12L9M73.jpg?width=480
description: Hickory DNSで始める自作DNSフォワーダ by jyuch
published: November 29, 25
canonical: https://convert.docswell.com/s/jyuch/KWM9MJ-2025-11-29-180000
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EZ12L9M73.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/Y76LVWK5JV.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/G751DMPGE4.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/9J21896D7R.jpg)

DNSのしくみのおさらい
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/DEYZ649M7M.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJN3ZYL3J8.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/YE99ZP4PE3.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GE891DQX7D.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LELWQMXNJR.jpg)

Hickory DNSの紹介
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JM91YLQEW.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PJRGL9KKE9.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PEXXWQL5EX.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/3EKWV9LRED.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/L731MW3GJ5.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/87DX6K4NEG.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/VJPPYKMNJ8.jpg)

Hickory DNSのわるいところ
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/2EV2GV9YEQ.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/57GR8LZWEL.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EQV9YLQJP.jpg)

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


