Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】DNS: Domain Name Server

2025年09月27日に「Dev.to」が公開したITニュース「DNS: Domain Name Server」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

DNSは、ドメイン名をIPアドレスに変換するシステム。IPを覚えずサイトにアクセスでき、IP変更や負荷分散を可能にする。ドメイン名入力後、複数のDNSサーバが連携しIPを解決、サイトへ接続する。BINDは広く使われるDNSサーバソフトウェアだ。

出典: DNS: Domain Name Server | Dev.to公開日:

ITニュース解説

インターネットの仕組みを理解する上で、ドメインネームシステム、通称DNSは非常に重要な役割を果たす。DNSは、まるでインターネットの電話帳のようなもので、私たちがウェブサイトにアクセスする際に使う「www.example.com」のような、人間にとって覚えやすいドメイン名を、「192.0.2.1」といったコンピューターが理解できるIPアドレスに変換するシステムだ。この変換処理を「名前解決」と呼ぶ。DNSは階層的で世界中に分散したシステムとして機能している。

DNSがなぜこれほどまでに重要なのかというと、まず一つ目に、インターネットのナビゲーションを非常にシンプルにする点がある。もしDNSがなければ、私たちはGoogleやYouTubeにアクセスするたびに、それらのウェブサイトのIPアドレス、つまり数字の羅列を記憶しなければならない。これは非常に困難であり、インターネットの利用を著しく煩雑にするだろう。しかし、DNSがあるおかげで、私たちは「google.com」や「youtube.com」といった覚えやすい名前を入力するだけで、目的のウェブサイトにたどり着けるのだ。

二つ目の理由は、ウェブサイトのホスティングに柔軟性をもたらすことだ。ウェブサイトが稼働しているサーバーのIPアドレスは、システムの変更や移転、負荷分散などの理由で、時間の経過とともに変わる可能性がある。しかし、ドメイン名は一度登録すれば基本的に変わらないため、DNSがIPアドレスの変更を適切に処理し、常に正しいサーバーへアクセスを誘導してくれる。これにより、ユーザーはIPアドレスの変更を意識することなく、同じドメイン名でアクセスを続けられる。

さらに、DNSはウェブサイトの負荷分散や耐障害性にも寄与する。一つのドメイン名に対して複数の異なるIPアドレスを設定し、アクセスを分散させることが可能だ。これにより、特定のサーバーにアクセスが集中して性能が低下するのを防ぎ、また、もし一つのサーバーが故障した場合でも、別のサーバーへ自動的にアクセスを切り替えることで、ウェブサイトの継続的な利用を保証できる。

私たちがブラウザにドメイン名を入力してからウェブページが表示されるまでの裏側では、瞬時に複雑なDNSの名前解決プロセスが進行している。まず、あなたのコンピューターや、使っているルーターなどのネットワーク機器は、以前に同じドメイン名にアクセスした情報がキャッシュとして残っていないかを確認する。もしキャッシュに見つからなければ、次にインターネットサービスプロバイダー(ISP)が提供する、あるいはGoogle DNSのような公開サービスを利用する「再帰リゾルバー」と呼ばれるDNSサーバーに問い合わせを送る。

再帰リゾルバーは、名前解決の最終的な答えを見つける役割を担う。まず、インターネットのDNS階層の頂点に位置する「ルートネームサーバー」に、目的のドメイン名に関する情報を尋ねる。ルートサーバーは「.com」や「.org」といったトップレベルドメイン(TLD)ごとに担当する「TLDネームサーバー」のアドレスを再帰リゾルバーに教える。次に、再帰リゾルバーは適切なTLDネームサーバーに問い合わせを行い、TLDネームサーバーは目的のドメイン名、例えば「example.com」の公式な情報を管理する「権威DNSサーバー」のアドレスを教える。最後に、再帰リゾルバーは権威DNSサーバーに直接問い合わせを行い、そこでようやくドメイン名に対応する正確なIPアドレスが取得される。このIPアドレスは再帰リゾルバーからあなたのブラウザに送り返され、ブラウザはこのIPアドレスを使ってウェブサイトのサーバーに接続し、ウェブページを読み込むのだ。この一連のプロセスは通常、ミリ秒単位で完了する。

このDNSの仕組みを支えるソフトウェアの一つに「BIND(Berkeley Internet Name Domain)」がある。BINDはインターネット上で最も広く利用されているDNSサーバーソフトウェアであり、その中心となるサーバープログラムは「named(ネームディー)」と呼ばれる。namedデーモンは、コンピューターのポート53番でDNSクエリ(問い合わせ)を待ち受け、それに応答する役割を果たす。このデーモンの設定は、通常 /etc/named.conf というファイル、またはこのファイルから参照される複数の設定ファイルに記述されている。

/etc/named.conf にはいくつかの重要な設定項目が存在する。「options」ブロックには、サーバー全体に適用されるグローバルな設定が記述される。例えば、「listen-on port 53 { IP_ADDRESS; };」は、DNSサーバーがどのIPアドレスからの問い合わせを待ち受けるかを指定する。「directory "/var/named";」は、ゾーンファイルと呼ばれるデータファイルをどこに保存するかを指定する。「allow-query { any; };」は、どのホストからのDNSクエリを許可するかを制御する項目で、通常はセキュリティのために限定された範囲のIPアドレスのみを許可する。「forwarders { IP_of_External_DNS_1; ... };」は、自身のサーバーで解決できないクエリを、指定された外部のDNSサーバーに転送して解決してもらうための設定だ。

また、「zone "domainname" IN { ... };」ブロックは、特定のドメインゾーンに関する設定を定義する。DNSサーバーがそのドメインの情報を公式に管理する「権威サーバー」である場合、type master;と記述され、そのゾーンのオリジナルの情報を保持する。もし、別のマスターサーバーからゾーン情報を受け取る「セカンダリサーバー」である場合は、type slave;と記述される。file "forward.zone";は、そのゾーンの具体的なレコード情報が記述されたゾーンファイルの場所を指定する。マスターサーバーにとって重要な設定にallow-transfer { IP_of_Slave_Server; };があり、これはゾーン情報を転送することを許可するスレーブサーバーのIPアドレスを明示的に指定する。

ゾーンファイル、例えば/var/named/internal.local.zoneのようなファイルには、実際にドメイン名とIPアドレスの対応付けなどの情報である「リソースレコード(RR)」が記述されている。それぞれのレコードは、名前、TTL(Time To Live、キャッシュの有効期間)、クラス、タイプ、データという形式を持つ。主要なレコードタイプには以下のようなものがある。SOA(Start of Authority)レコードは、ゾーンの管理者情報や、ゾーンファイルの更新をスレーブサーバーに通知するためのシリアル番号などの管理情報を定義する。NS(Name Server)レコードは、そのドメインの権威ネームサーバーを指定する。A(Address)レコードは、ホスト名(例: web)をIPv4アドレス(例: 192.168.1.10)に対応付ける最も基本的なレコードだ。AAAA(Quad-A Address)レコードは、AレコードのIPv6版である。PTR(Pointer)レコードは、IPアドレスからホスト名への逆引き解決に使われ、リバースゾーンファイルに記述される。MX(Mail Exchanger)レコードは、そのドメインのメールサーバーを指定し、メールの配送先を決定する。CNAME(Canonical Name)レコードは、あるドメイン名に別のドメイン名の別名(エイリアス)を付ける際に使用される。

実際にDNSサーバーを構築する際の例として、マスターサーバー、スレーブサーバー、クライアントからなる小規模な内部ネットワークを考えてみよう。例えば、internal.localというドメイン名と、192.168.10.0/24というIPアドレス帯を使用する。

まず、マスターDNSサーバー(例えばIPアドレスが192.168.10.10のサーバー)を設定する。このサーバーの/etc/named.confには、全体設定のoptionsブロックに加え、internal.localの正引きゾーンと192.168.10.xの逆引きゾーンをtype masterとして定義する。ここで重要なのは、スレーブサーバー(例えば192.168.10.20)へのゾーン転送を許可するallow-transferと、ゾーンの変更をスレーブに通知するnotify yesの設定だ。次に、正引きゾーンファイルinternal.local.zoneを作成し、SOAレコードでゾーンの管理情報と、スレーブへの変更通知を促すためのシリアル番号を記述する。このシリアル番号は、ゾーンファイルを変更するたびに増やさなければならない。その後、NSレコードで権威ネームサーバーを、Aレコードで各ホスト名とIPv4アドレスの対応を記述する。同様に、逆引きゾーンファイル10.168.192.revを作成し、PTRレコードでIPアドレスからホスト名への対応を記述する。設定が完了したら、named-checkconfnamed-checkzoneといったコマンドで設定ファイルの文法やゾーンファイルの内容に誤りがないかを確認し、systemctl reload namedコマンドでサービスを再読み込みするか、systemctl start namedで開始する。

次に、スレーブDNSサーバー(例えばIPアドレスが192.168.10.20のサーバー)を設定する。スレーブサーバーの/etc/named.confは、マスターサーバーよりもはるかにシンプルになる。zoneブロック内でtype slave;と指定し、masters { 192.168.10.10; };のようにマスターサーバーのIPアドレスを記述するだけでよい。スレーブサーバーが起動すると、マスターサーバーに自動的に問い合わせを行い、ゾーン転送によってすべてのゾーンデータを取得し、自身のローカルストレージにゾーンファイルのコピーを作成する。これにより、マスターサーバーのデータが破損したり停止したりした場合でも、スレーブサーバーが名前解決のサービスを継続できるようになる。

最後に、クライアントマシン(例えばIPアドレスが192.168.10.50のワークステーション)を設定する。クライアントは、自身の名前解決にどのDNSサーバーを使うかを知る必要がある。通常、Linuxシステムでは/etc/resolv.confファイルに設定する。このファイルにnameserver 192.168.10.10nameserver 192.168.10.20のように、マスターDNSサーバーとスレーブDNSサーバーのIPアドレスを記述する。search internal.localという行を追加することで、短いホスト名でアクセスした際に自動的にinternal.localドメインを補完してくれるようになる。設定後、digコマンドを使って、例えばdig @192.168.10.10 web.internal.localのように問い合わせることで、正しく名前解決ができるか、マスターサーバーとスレーブサーバーの両方に対して確認できる。また、dig @192.168.10.10 -x 192.168.10.50のようにIPアドレスを指定して逆引きのテストも行うと良いだろう。現代のLinuxディストリビューションでは、NetworkManagersystemd-resolvedなどのツールがDNS設定を管理していることが多いため、手動でresolv.confを編集するのではなく、それらのツールを通じて設定する方が望ましい場合もある。

このように、DNSはインターネットを円滑に機能させる上で不可欠な基盤技術であり、その仕組みや設定方法を理解することは、システムエンジニアを目指す上で非常に重要な第一歩となるだろう。

関連コンテンツ

関連IT用語