Unboundで構築する高速DNSキャッシュサーバー入門

に公開

Unboundで構築する高速DNSキャッシュサーバー入門

自前のDNSキャッシュサーバーを構築することで、プライバシー保護と応答速度の大幅な改善が実現できます。本記事では、Unboundを使用した基本的なDNSサーバーの構築手順を解説します。

Unboundとは

Unboundは軽量で高速なDNSリゾルバーです。BINDよりもシンプルで、dnsmasqよりも高機能という絶妙なポジションで、多くの環境で採用されています。

インストールと初期設定

環境準備

# Ubuntu/Debian環境を前提
sudo apt update && sudo apt upgrade -y

# Unboundインストール
sudo apt install unbound unbound-anchor dnsutils -y

# バージョン確認
unbound -V

ルートヒントの設定

# 最新のルートサーバー情報を取得
sudo wget -O /var/lib/unbound/root.hints \
    https://www.internic.net/domain/named.cache

# DNSSEC用ルートキー初期化
sudo unbound-anchor -a /var/lib/unbound/root.key

# 権限設定
sudo chown -R unbound:unbound /var/lib/unbound

基本設定ファイル

# /etc/unbound/unbound.conf.d/01-basic.conf
server:
    # ネットワーク設定
    interface: 0.0.0.0
    port: 53

    # アクセス制御(ローカルネットワークのみ許可)
    access-control: 127.0.0.0/8 allow
    access-control: 192.168.0.0/16 allow
    access-control: 10.0.0.0/8 allow
    access-control: 0.0.0.0/0 refuse

    # プロトコル設定
    do-ip4: yes
    do-ip6: yes
    do-udp: yes
    do-tcp: yes

    # 基本的なプライバシー保護
    hide-identity: yes
    hide-version: yes

    # ルートヒント指定
    root-hints: "/var/lib/unbound/root.hints"

    # 基本的なキャッシュ設定
    cache-max-ttl: 86400
    cache-min-ttl: 60

    # プリフェッチで応答速度改善
    prefetch: yes

サービス起動と確認

# 設定ファイルの検証
sudo unbound-checkconf

# サービス起動・自動起動設定
sudo systemctl enable --now unbound

# 状態確認
sudo systemctl status unbound

# 動作テスト
dig @127.0.0.1 google.com

# 応答時間の確認(Query timeに注目)
dig @127.0.0.1 github.com | grep "Query time"

systemd-resolvedとの競合解決

Ubuntu環境では、systemd-resolvedが53番ポートを使用しているため競合が発生します。

# systemd-resolved無効化
sudo systemctl disable --now systemd-resolved

# 既存のresolv.confを削除
sudo rm /etc/resolv.conf

# 新しいresolv.conf作成
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

# 書き込み保護
sudo chattr +i /etc/resolv.conf

簡易パフォーマンステスト

# 100回のDNSクエリでテスト
for i in {1..100}; do
    dig @127.0.0.1 example.com +short > /dev/null
done

# キャッシュ状態の確認
sudo unbound-control stats | grep "total.num"

運用コマンド

# キャッシュクリア(全体)
sudo unbound-control flush_zone .

# 特定ドメインのキャッシュクリア
sudo unbound-control flush google.com

# 統計情報表示
sudo unbound-control stats

# 設定リロード(再起動なし)
sudo unbound-control reload

基本設定での性能

この基本設定でも、以下のような改善が期待できます:

  • 初回クエリ: 20-50ms(ISP DNSと同等)
  • キャッシュヒット時: 0.1-1ms(10倍以上高速)
  • プライバシー: 完全にローカル制御

さらなる最適化について

この基本設定は最小構成です。実運用環境では、以下の最適化でさらなる性能向上が可能です:

  • メモリチューニング: 応答速度を5-10倍改善
  • DNSSEC設定: セキュリティ強化
  • DoT/DoH対応: 暗号化DNS通信
  • AdGuardHome連携: 広告ブロック統合

詳細な最適化設定とベンチマーク結果はブログで解説しています 👇

Unbound DNS完全構築ガイド:パフォーマンス10倍改善の実装例

  • 実測ベンチマークデータ
  • トラブルシューティング事例集
  • AdGuardHomeとの連携設定
  • 本番環境での運用ノウハウ

まとめ

Unboundの基本設定だけでも、十分実用的なDNSキャッシュサーバーが構築できます。プライバシー保護と応答速度改善を同時に実現したい方は、ぜひ試してみてください。

関連記事


投稿者: @junchi_kurin
技術ブログ: blog.junchi8.com

Discussion