DNSを学ぶとき、「スタブリゾルバ」という言葉は必ずと言っていいほど登場します。
スタブリゾルバはクライアントのOS内部に組み込まれた軽量なDNSクライアントであり、私たちが日常的にインターネットを使う際に必ず動いているコンポーネントです。
本記事では、スタブリゾルバの意味・機能・動作方式を、フルサービスリゾルバとの違いも交えながらわかりやすく解説していきます。
スタブリゾルバとはクライアントOS内蔵の軽量なDNSクライアントである
それではまず、スタブリゾルバの基本的な定義と役割について解説していきます。
スタブリゾルバ(Stub Resolver)とは、クライアントコンピューターのOS内部に組み込まれた、最小限の機能を持つDNSリゾルバのことです。
「スタブ(stub)」は英語で「切り株・残り部分」を意味し、フルスペックのリゾルバ機能を持たないことを示しています。
スタブリゾルバ自身はルートサーバーへの再帰問い合わせ機能を持たず、設定されたフルサービスリゾルバ(DNSサーバー)にDNSクエリを転送するだけという非常にシンプルな役割を担っています。
WindowsではDNS Clientサービスがスタブリゾルバとして機能し、LinuxやmacOSでは/etc/resolv.confに設定されたDNSサーバーへ問い合わせを行います。
スタブリゾルバはOSのシステムコールの一部として動作するため、アプリケーション側は意識せずにDNS名前解決を利用できます。
スタブリゾルバの動作と処理方式
続いては、スタブリゾルバの具体的な動作と処理方式を確認していきます。
スタブリゾルバの名前解決の流れ
アプリケーションがドメイン名を使った通信を要求した場合、以下の流れでスタブリゾルバが動作します。
1. アプリケーションがOSのリゾルバAPIを呼び出す(例:getaddrinfo())
2. スタブリゾルバがローカルキャッシュを確認する
3. キャッシュになければ設定されたフルサービスリゾルバにDNSクエリを送信する
4. フルサービスリゾルバからIPアドレスを受け取る
5. IPアドレスをアプリケーションに返す
スタブリゾルバの処理はこれだけであり、ルートサーバーやTLDサーバーへの問い合わせは一切行いません。
DNSクエリの転送先設定
スタブリゾルバがDNSクエリを転送するフルサービスリゾルバのIPアドレスは、各OSの設定ファイルや設定画面で指定します。
WindowsではネットワークアダプターのIPv4プロパティから「優先DNSサーバー」を設定します。
Linuxでは/etc/resolv.confに「nameserver」ディレクティブでDNSサーバーのIPアドレスを記述します。
DHCPを使用しているネットワーク環境では、DHCPサーバーから自動的にDNSサーバーのアドレスが配布されることがほとんどです。
スタブリゾルバのキャッシュ機能
スタブリゾルバはフルサービスリゾルバに比べてキャッシュ容量は小さいですが、一定のキャッシュ機能を持っています。
Windowsの場合、DNS Clientサービスがシステム全体のDNSキャッシュを管理しており、「ipconfig /displaydns」コマンドでキャッシュ内容を確認できます。
キャッシュが汚染されたり古い情報が残り続けたりする場合には、「ipconfig /flushdns」コマンドでキャッシュをクリアすることで解決できます。
スタブリゾルバとフルサービスリゾルバの違い
続いては、スタブリゾルバとフルサービスリゾルバの具体的な違いを確認していきます。
機能と役割の違い
| 比較項目 | スタブリゾルバ | フルサービスリゾルバ |
|---|---|---|
| 設置場所 | クライアントOS内部 | DNSサーバー(ISP・企業内等) |
| 再帰問い合わせ | 行わない | 行う(ルートサーバー→TLD→権威) |
| キャッシュ機能 | 簡易的なキャッシュのみ | 大規模なキャッシュを保持 |
| 処理の複雑さ | シンプル(転送のみ) | 複雑(再帰的な問い合わせ) |
| 代表的な実装 | Windows DNS Client、systemd-resolved | BIND、Unbound、PowerDNS |
処理方式の違い
スタブリゾルバは「転送型」の処理方式を採用しており、フルサービスリゾルバに問い合わせを丸投げします。
フルサービスリゾルバは「再帰型」の処理方式であり、自身でルートサーバーから順番に問い合わせを行います。
この役割分担によって、クライアントの負荷を最小化しながらも効率的な名前解決が実現されています。
systemd-resolvedとは
現代のLinuxディストリビューション(Ubuntu等)では、systemd-resolvedがスタブリゾルバとして動作していることが多くなっています。
systemd-resolvedは127.0.0.53でローカルDNSプロキシとして動作し、DoH(DNS over HTTPS)やDNSSECの検証にも対応した高機能なスタブリゾルバです。
従来の/etc/resolv.confベースの設定に加えて、/etc/systemd/resolved.confで細かな設定が可能です。
スタブリゾルバの設定と管理のポイント
続いては、スタブリゾルバの設定と管理において押さえておくべきポイントを確認していきます。
複数のDNSサーバーを設定する意義
スタブリゾルバの設定では、プライマリDNSとセカンダリDNSの2つ以上のDNSサーバーを設定することが推奨されます。
プライマリDNSサーバーが応答しない場合、自動的にセカンダリDNSサーバーへフォールバックするため、名前解決の可用性が向上します。
検索ドメイン(search domain)の設定
/etc/resolv.confの「search」または「domain」ディレクティブを使うことで、短縮ホスト名での名前解決が可能になります。
search example.com
この設定がある場合、「server」というホスト名で「server.example.com」を自動的に解決できます。
社内ネットワークでの運用において非常に便利な設定です。
DoH対応スタブリゾルバの活用
近年ではDNS over HTTPS(DoH)に対応したスタブリゾルバが増えており、クライアントとフルサービスリゾルバ間のDNS通信を暗号化することが可能です。
DoH対応スタブリゾルバを使うことで、ISPや中間者によるDNSクエリの盗聴・改ざんを防ぐことができます。
プライバシーを重視する環境では積極的な活用が推奨されます。
まとめ
本記事では、スタブリゾルバの意味・機能・動作方式、フルサービスリゾルバとの違いについて解説しました。
スタブリゾルバはクライアントOS内部に組み込まれた軽量なDNSクライアントであり、フルサービスリゾルバへDNSクエリを転送することが主な役割です。
再帰問い合わせは行わず、シンプルな転送処理に特化しているため、クライアント側の負荷が最小限に抑えられます。
スタブリゾルバとフルサービスリゾルバの役割の違いを正しく理解することが、DNSの仕組み全体を把握するための重要な一歩となるでしょう。