kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu 16.10 その7 - ローカルDNSリゾルバーの仕組みが変わる・systemd-resolvedの採用

ローカルDNSリゾルバー

「Ubuntu 16.10」では、現在のローカルDNSリゾルバーに代わり新しいローカルDNSリゾルバーが採用されます。


DNSリゾルバーとは

DNSリゾルバーとは、ホスト名をIPアドレスに変換するサービスのことです。

例えばこのサイトにアクセスする場合、ブラウザーに「http://kledgeb.blogspot.com/」を入力します。

この時URLのホスト名は「kledgeb.blogspot.com」です。

ホスト名が文字列のままではサイトにアクセスできません。
サイトにアクセスするにはIPアドレスが必要です。

そこでブラウザーはDNSサーバーにホスト名に対応したIPアドレスを問い合わせます。
URLのホスト名の部分をDNSサーバーから取得したIPアドレスに置き換えます。
するとURLは、「http://192.168.0.1/」のようになります。

これでようやくこのサイトにアクセスできるようになります。

名前解決

ホスト名をIPアドレスに変換する一連の流れを「名前解決」といいます。

ローカルDNSリゾルバー

現在「Ubuntu Desktop」及び「Ubuntu Touch」では、ネットワークマネージャーが「dnsmasq」を起動し、ユーザーのPCにDNSサーバーを構築します。
ユーザーのPCで起動しているDNSサーバーなので、ローカルDNSリゾルバーと呼ばれています。

本来DNSサーバーは、ISPなど外部の事業者が提供するDNSサーバーを利用します。
ホスト名とIPアドレスの対応表をユーザーが自分で用意することも不可能ではないですが、非現実的です。

ローカルDNSリゾルバーは何をしているのか?

ユーザーのPCで起動したローカルDNSリゾルバーは、ブラウザーなどのソフトウェアから名前解決の要求があると、本物のDNSサーバーにホスト名に対応したIPアドレスを問い合わせます。

本物のDNSサーバーから取得したIPアドレスを、名前解決を要求したソフトウェアに返します。

もしローカルDNSリゾルバーが存在しなければ、名前解決の要求は直接本物のDNSサーバーに行われます。
本物のDNSサーバーとは、ユーザーが指定したDNSサーバーか、DHCPで取得したDNSサーバーのことです。

従ってソフトウェアと本物のDNSサーバーのやり取りを、ローカルDNSリゾルバーが仲介しているということになります。

結果的に本物のDNSサーバーにアクセスする

ネットワークマネージャーは、ユーザーが指定した本物のDNSサーバーやDHCPで取得した本物のDNSサーバーを知っています。


ですので、結果的に本物のDNSサーバーにアクセスすることになります。

ローカルDNSリゾルバーがなぜ必要なのか

ローカルDNSリゾルバーである「dnsmasq」は、ソフトウェアから名前解決の要求があった時に、複数のDNSサーバーを循環的にアクセスし、もしサービスが停止していたり応答に時間がかかるDNSサーバーがあっても、他のDNSサーバーにアクセスし名前解決を行います。

こうすることで複数のDNSサーバーを効果的に活用でき、名前解決のパフォーマンスの向上や改善を行うことができます。

つまりアクセスしたDNSサーバーが停止していたとしても、長時間タイムアウトを待つ必要がなくなります。
DNSサーバーから応答を待っている間、他のDNSサーバーにアクセスし名前解決ができれば、「dnsmasq」はその情報をソフトウェアに返します。(フォールバック)
ソフトウェアやユーザーはタイムアウトを待つ必要が無くなります。

DNSサーバーの設定は常にローカルDNSリゾルバーを指定する

上記のようにソフトウェアが参照すべきDNSサーバーは、ローカルDNSリゾルバーになります。
つまり「/etc/resolv.conf」ファイルに指定するDNSサーバーは、必ずローカルホストを示すIPアドレスになります。(nameserver 127.0.0.1)

逆に言えば「/etc/resolv.conf」ファイルを見ても、本物のDNSサーバーは分かりません。
本物のDNSサーバーの情報は、ネットワークマネージャーが持っているためです。
このことに不満を抱いているユーザーがいます。
これが今回仕組みを変更する理由の1つになっています。

ローカルDNSリゾルバーはDNSキャッシュサーバーではない

ローカルDNSリゾルバーはDNSキャッシュサーバーではありません。
そのためソフトウェアから名前解決の要求があるたびに、本物のDNSサーバーにアクセスします。
以前と同じ名前解決の内容でもキャッシュを行わないため、常に本物のDNSサーバーにアクセスします。

この状況を改善しようという試みが、「Ubuntu 16.10」でローカルDNSリゾルバーの仕組みを変える主な理由になります。

Ubuntu ServerやUbuntu Cloudでは

「Ubuntu Server」や「Ubuntu Cloud」では、ローカルDNSリゾルバーが存在していません。
従って、「/etc/network/interfaces」で指定したDNSサーバーの情報やDHCPで取得したDNSサーバーの情報が「/etc/resolv.conf」ファイルに反映されます。

ですのでソフトウェアが名前解決を行うと、「/etc/resolv.conf」ファイルに指定されているDNSサーバーに直接アクセスします。

ローカルDNSリゾルバーの利点が得られない

「Ubuntu Desktop」のようなローカルDNSリゾルバーの仕組みがデフォルトで提供されていないため、もし最初にアクセスしたDNSサーバーが停止していたり応答に時間がかかり、その後他のすべてのDNSサーバーの応答に時間がかかる場合、ネットワークのパフォーマンスが大幅に低下します。

この問題を解決しようという試みも、「Ubuntu 16.10」でローカルDNSリゾルバーの仕組みを変える主な理由になります。

ローカルDNSリゾルバーをsystemd-resolvedに変更

「Ubuntu 16.10」では、ローカルDNSリゾルバーが「dnsmasq」から「systemd-resolved」に変更されます。

「systemd-resolved」は小型で軽量なソフトウェアであり、すでに「systemd」パッケージの一部として提供されています。

D-Busが不要に

「systemd-resolved」は「dnsmasq」と異なり「D-Bus」を必要とせず、「DNSSEC」をサポートし、透過的なフォールバックを提供します。
もしローカルでの名前解決がうまくいかない場合は、本物のDNSサーバーにアクセスします。

/etc/resolv.confの問題が解決する

「/etc/resolv.conf」ファイルには、本物のDNSサーバが記述されるようになります。

libnss-resolveを経由して名前解決を行う

名前解決は「libnss-resolve」モジュールを経由して行います。
「libnss-resolve」モジュールは、「resolved」にアクセスし名前解決を行います。

複数のDNSサーバーを効果的に扱う

本来の目的である複数のDNSサーバーの効果的な活用も行われます。
サービスが停止しているDNSサーバーや応答に時間がかかるDNSサーバーがあっても、タイムアウトを待つこと無く他のDNSサーバーから情報を取得します。

DNSの情報をキャッシュする

今までローカルDNSリゾルバーは、DNSサーバーから取得した情報をキャッシュしていませんでしたが、これからはDNSサーバーから取得した情報がキャッシュされるようになります。

キャッシュにより、同じ内容の名前解決はDNSサーバーにアクセスすること無く名前解決が行われるようになり、パフォーマンスが向上します。

ネットワークマネージャーはdnsmasqを起動しない

もうネットワークマネージャーは、「dnsmasq」を起動しなくなります。

すべてのUbuntuでローカルDNSリゾルバーが有効になる

すべての「Ubuntu」で「systemd-resolved」によるローカルDNSリゾルバーが有効になります。
すべての「Ubuntu」とは、「Ubuntu Desktop」はもちろんのこと「Ubuntu Server」等も含まれます。

参考

  • Ubuntu 16.10 (Yakkety Yak) Switches to a Universal Local DNS Resolver Service
  • ANN: DNS resolver changes in yakkety



Ubuntu 16.10
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 26.04 その42 - Ubuntu 26.04.1 LTS のリリーススケジュール
    Ubuntu 26.04.1 LTSのリリーススケジュール Ubuntu 26.04.1 LTS のリリーススケジュールを紹介します。
  • Linux Mint その292 - Linux kernel 7.0 採用の Linux Mint 22.3 リリース・システム管理ツールにカーネル管理機能追加など
    Linux Mint 月刊ニュース Linux Mint 開発チームは Linux Mint 月刊ニュースにて、Linux Mint の開発状況や取り組みを紹介しています。
  • Linux その422 - GNOME Boxes の再構築と未来・Flatpak のみの提供やモダンな機能の実装など
    GNOME Boxes の再構築と未来 GNOME Boxes の再構築と未来が以下で紹介されています。
  • Ubuntu 26.04 その68 - Ubuntu 26.04.1 LTS がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.04.1 LTS リリース 2026年8月27日、Ubuntu 26.04.1 LTS がリリースされました。
  • Kubuntu その117 - Kubuntu 26.04 LTS にもっと手厚いサポートを・最高の信頼性を誇る KDE 搭載ディストリビューションを目指して
    最高の信頼性を誇る KDE 搭載ディストリビューションを目指して Kubuntu 26.04 LTS に手厚いサポートが導入されました。
  • Linux その421 - GNOME Shell のデザイン構想と長期的な見通し
    GNOME Shell のデザイン構想と長期的な見通し GNOME Shell のデザイン構想と長期的な見通しが、以下で紹介されています。
  • Linux その420 - KDE Plasma で実装予定の新機能や改善・UI レイアウトの調整やリモートデスクトップの改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Windows その29 - Windows 向け Coreutils 登場・Coreutils のインストールやコマンドの一覧など
    Windows 向け Coreutils 登場 Windows 向け Coreutils が登場しました。
  • Linux その386 - Arch Linux の AUR パッケージで悪意あるコミットが続く・今度はソースコードの難読化か
    Arch Linux の AUR パッケージで悪意あるコミットが続く Arch Linux の AUR パッケージで悪意あるコミット(マルウェア)が続いています。
  • Ubuntu 18.04 その195 - PolicyKitにクラッシュや権限の昇格など複数の脆弱性・今すぐアップデートを
    PolicyKitの脆弱性 2018年7月16日、クラッシュや権限の昇格など複数の脆弱性に対応した「PolicyKit」がリリースされました。
記事のピックアップ
オプション