5分で完了:Unboundの基本インストール
「借り物」のDNS設定を使う代わりに、自分専用のDNSを構築しましょう。この手順はUbuntu/Debianを前提としていますが、CentOSやFedoraを使用している場合は apt を dnf に読み替えればOKです。
# システムの更新とUnboundのインストール
sudo apt update
sudo apt install unbound -y
# ルートヒント(Unboundがルートサーバを見つけるための地図)をダウンロード
wget https://www.internic.net/domain/named.cache -O /etc/unbound/root.hints
# 最小限の設定ファイルを作成
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
以下の設定内容をファイルに貼り付けてください。これは基本的な構成ですが、ほとんどの用途には十分です:
server:
interface: 127.0.0.1
port: 53
do-ip4: yes
do-udp: yes
do-tcp: yes
root-hints: "/etc/unbound/root.hints"
access-control: 127.0.0.0/8 allow
auto-trust-anchor-file: "/var/lib/unbound/root.key"
サービスを有効化して、成果を確認しましょう:
sudo systemctl restart unbound
dig google.com @127.0.0.1
出力の中に status: NOERROR という行があれば、自分専用のローカルDNSリゾルバーが正常に動作しています。
GoogleやCloudflareが便利な中、なぜ自分でDNSを構築するのか?
8.8.8.8や1.1.1.1を使えば手軽ですが、その代償はプライバシーです。ブラウザでURLを入力してEnterを押すたびに、テック大手はあなたが何をしているかを知ることになります。Unboundを自作することで、この追跡を断ち切ることができます。
さらに深刻なのがDNSハイジャックです。多くのISPは、エラーになったDNSリクエストを「不当に」広告ページへリダイレクトしたり、偽のIPを使って特定のサイトをブロックしたりすることがあります。Unboundは、中間業者を一切介さずルートサーバから直接再帰的に問い合わせを行うため、この問題を根本的に解決します。
私の経験談: DNSは混雑時のネットワークの安定性に直結します。DNSのレスポンスが遅いと、回線が数百Mbpsあってもブラウジングは非常にストレスフルになります。ローカルにキャッシュを持つUnboundを導入すれば、2回目以降のアクセスでは遅延が150msからほぼ0msへと劇的に改善されます。
動作の仕組み:代理で聞くのではなく「再帰」で解決
再帰リゾルバー(Recursive)vs フォワーダー(Forwarder)
一般的に使われているDNSの多くはフォワーダーです。彼らが代わりに問い合わせを行い、その結果を返します。対してUnboundは真の再帰リゾルバーです。そのプロセスは、以下のような対話形式で行われます:
- あなた:「itfromzero.comはどこ?」
- Unboundがルートサーバ(”.”)に聞く:「.comの管理者は誰?」
- ルートサーバがTLDサーバ(”.com”)を指し示す。
- UnboundがTLDサーバに聞く:「itfromzero.comのアドレスはどこ?」
- 最後に、権威サーバ(Authoritative Server)からIPを取得し、あなたに回答します。
DNSSECによる鉄壁のセキュリティ
DNSSECは、DNSデータに対する「封印」のようなものです。Unboundはデフォルトでこの電子署名を検証します。もしドメインのIPが偽装(DNSポイズニング)された場合、Unboundは署名の不一致を検知して即座に結果をブロックし、フィッシングサイトからあなたを守ります。
高度な設定:ハイスペックサーバ向けの最適化
サーバのリソースに余裕があるなら、Unboundのパフォーマンスをさらに引き出すための調整を行いましょう。設定ファイルに以下の行を追加してください:
server:
num-threads: 2 # CPUのコア数に合わせて調整してください
# キャッシュフラグメンテーションの最適化
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
# レスポンス向上のためのキャッシュ容量拡大
rrset-cache-size: 100m
msg-cache-size: 50m
# 匿名化設定
hide-identity: yes
hide-version: yes
prefetch: yes # 期限が切れる前にキャッシュを自動更新する
DNS over TLS (DoT) の威力
Cloudflareにリクエストを転送したいけれど、ISPの監視が気になる?DoTがその解決策です。外部へのクエリをすべて暗号化するために、以下のセクションを追加します:
forward-zone:
name: "."
forward-addr: 1.1.1.1@853#cloudflare-dns.com
forward-addr: 1.0.0.1@853#cloudflare-dns.com
forward-ssl-upstream: yes
実際の運用における注意点
Unbound의 導入では、時として些細なネットワーク接続問題で時間を浪費することがあります。以下のポイントを心に留めておいてください:
- ポート53の競合: Ubuntuでは
systemd-resolvedがポート53を占有していることがよくあります。sudo systemctl disable --now systemd-resolvedで停止させましょう。 - root.keyの権限: ログに「permission denied」と表示される場合は、
unboundユーザーに/var/lib/unbound/root.keyへの書き込み権限を付与してください。 - ファイアウォールの設定: LAN内の他のデバイスからも利用する場合は、ファイアウォールでポート53(UDPおよびTCP)を開放するのを忘れないでください。
小技:dig コマンドを2回実行してみてください。2回目は Query time が0 msecになり、キャッシュが完璧に動作していることが実感できるはずです。
# 1回目:150〜200 msecかかる場合があります
dig itfromzero.com @127.0.0.1 | grep "Query time"
# 2回目:0 msec。これぞ光速!
dig itfromzero.com @127.0.0.1 | grep "Query time"
DNSを自律させることは、単なる速度の問題ではなく、インターネットインフラをより深く理解するための第一歩です。もし途中で困ったことがあれば、コメント欄で教えてください。一緒に解決しましょう。

