1. ホーム
  2. 記事一覧
  3. 【はじめてのBIND】DNSのしくみがわかる最初の一歩

2025.10.28

【はじめてのBIND】DNSのしくみがわかる最初の一歩

はじめに

BIND(バインド:Berkeley Internet Name Domain)は、DNSサーバーを構築するための代表的なソフトウェアです。

学び始めると、設定ファイルの多さや専門用語に圧倒され、「難しそう…」と感じる人も多いかもしれません。この記事では、BINDの仕組みと役割を1つずつ整理しながらわかりやすく解説します。最初は難しく感じても大丈夫です。順を追って理解していけば、少しずつ全体像が見えてきます。

この記事で学べること

  • BINDとは何か、多くの環境で使われている理由
  • BINDを学ぶ意義と、クラウドDNSとの関係
  • 主要な構成ファイルの役割(named.conf やゾーンファイルなど)
  • 正引き・逆引きゾーンの仕組みと設定の流れ
  • BINDサービスの管理方法(systemctlnetplan

BINDの基礎を理解することで、DNSの仕組みを根本から掴めるようになります。一緒に、ネットワークを支える「名前解決」の世界を学んでいきましょう。

▼実際に手を動かしながら学びたい方は、以下の記事も参考にしてみてください。

【BIND入門実践】BINDでDNSサーバーを構築してみよう

https://envader.plus/article/213

BINDとは

BINDBerkeley Internet Name Domain)は、DNSサーバーを構築するための代表的なソフトウェアです。

インターネットでは、www.example.com のようなドメイン名を実際のIPアドレスに変換して通信を行います。この「名前と住所の対応関係」を管理し、正しいIPアドレスを返す仕組みがDNSDomain Name System)です。

BINDは、そのDNS機能を実現するためのサーバーソフトです。サーバーにBINDをインストールすると、そのサーバーがDNSサーバーとして動作できるようになります

つまり、BINDは「ドメイン名とIPアドレスの対応関係を管理し、問い合わせに応じて正しい情報を返す」役割を担っています。

オープンソースで開発されており、無料で導入できる・機能が豊富・設定の柔軟性が高いことが特徴です。UNIX系システムでは標準的な選択肢となっており、LinuxやmacOSの学習環境でもよく使用されます。

▼DNSサーバーについては以下の記事で詳しく解説しています。DNSの基本から仕組みまでを知ることができます。

DNSサーバーについて知ろう|エンベーダー:LinuC Level1 v10.0 対策コース

https://envader.plus/course/12/scenario/1023

なぜBINDを学ぶのか?

BINDを学ぶことは、DNSの仕組みを根本から理解することにつながります

現在では、AWSやGCPなどのクラウドサービスを使えば、GUI操作でDNSを簡単に構築できます。しかし、その便利さの裏では「仕組みを知らないまま設定している」という落とし穴もあります。

BINDを使ってDNS設定を体験的に学ぶことで、ドメイン名の仕組みやDNSの動作原理を理解できるようになります。この知識は、クラウド環境でも安全で正確なDNS運用を行うための確かな土台となります。

▼DNSとAWSのRoute53について、以下の記事で詳しく解説しています。

AWS Route 53とは?DNSの基本も解説

https://envader.plus/article/284

なぜBINDを使うのか?

BINDは、信頼性・普及率・自由度の高さから、現在でも多くのシステムで採用されています。

クラウドDNSが主流になりつつある今でも、BINDは自社ネットワークや教育環境などで独自のDNSサーバーを運用したい場合に欠かせません。長年の実績と豊富な機能を備えており、小規模なテスト環境から大規模な企業システムまで幅広く対応できます。

BINDが広く使われている主な理由は次のとおりです。

  • オープンソースで無料
  • 高い信頼性と実績
  • 機能が豊富で柔軟
  • 学習にも最適

では、BINDを導入・運用するうえで、どんな利点や注意点があるのでしょうか。

BINDのメリット・デメリット

BINDには数多くのメリットがありますが、デメリットも存在します。BINDを使いこなすためにはBINDのメリット・デメリットを把握・理解することが重要です。

メリット

  • 普及率の高さ

    30年以上の実績があり、トラブルシューティング情報やコミュニティリソースが豊富です。

  • 柔軟で高機能

    小規模からISPレベルまで対応。DNSSECやTSIGなどの高度なセキュリティ機能もサポートしています。

  • 安定性と成熟度

    長年の運用実績により、高い信頼性と安定性を持ちます。

  • オープンソース

    無料で利用・改変ができ、教育・実験環境にも適しています。

デメリット

  • 設定の複雑さ

    高い柔軟性の裏で、正確な設定には専門知識が求められます。

  • パフォーマンス面の課題

    特化型の軽量DNSサーバーに比べると、環境によっては処理が重くなる場合があります。

  • メンテナンスコスト

    運用後も更新・監視が必要で、大規模環境では人的リソースが求められます。

BINDの主要な5つのファイル構成

BINDでは、主要な5つの設定ファイルが連携して動作しています

Ubuntu環境では、これらのファイルは/etc/bind/ディレクトリにまとめられており、それぞれが異なる役割を担当しています。

このように設定が分割されているのは、管理を分かりやすくするためです。設定を変更する際には、目的に応じたファイルだけを編集できるため、全体を見失うことなく安全に管理できます。

ここからは、UbuntuにおけるBINDの主な構成ファイルとその役割を順に見ていきましょう。

named.conf:BINDのメイン設定ファイル

named.conf は、BIND全体の設定をまとめる中心的なファイルです。

BINDでは設定内容が複数のファイルに分かれているため、named.conf はそれらを読み込む「入口(エントリポイント)」として機能します。

このファイル自体には、BINDの動作設定を直接書くのではなく、他の設定ファイルをインクルード(取り込み)する記述が並んでいます。これにより、設定内容を整理しやすく、個別のファイルを安全に管理できる仕組みになっています。

以下は、Ubuntu環境で一般的に使用されているnamed.confの例です。

//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

このように、named.conf は他の設定ファイルを呼び出すハブのような役割を持っています。

たとえば、named.conf.options ではオプション設定を、named.conf.local では独自ゾーン設定を読み込む仕組みです。

named.conf.options:動作オプションを設定するファイル

named.conf.options は、BIND全体の動作オプションをまとめて設定するファイルです。ここでは、サーバーの動作範囲やセキュリティ、キャッシュなどに関する基本設定を行います。

このファイルを調整することで、BINDサーバーの挙動やアクセス制御を細かくカスタマイズできます。たとえば、「どのIPアドレスから問い合わせを受け付けるか」や「どのDNSに転送するか」といったネットワーク制御の設定もここで行います。

以下は、代表的な設定項目とその概要です。

オプション名説明
directoryBINDの作業ディレクトリのパスを指定します。ゾーンファイルなどがこの中に保存されます。
listen-onBINDが待ち受けるIPv4アドレスを指定します。
listen-on-v6BINDが待ち受けるIPv6アドレスを指定します。
forwardersクエリを転送するDNSサーバーのIPアドレスを指定します。
allow-queryDNSクエリを許可するクライアントの範囲を指定します。
allow-transferゾーン転送を許可するクライアントの範囲を指定します。
recursion再帰クエリを許可するかどうかを設定します(通常は yes または no)。
dnssec-enableDNSSEC(DNSセキュリティ拡張)を有効にするかどうかを設定します。
dnssec-validationDNSSECの検証を行うかどうかを設定します。
auth-nxdomainNXDOMAIN 応答を権威的に返すかどうかを設定します。
rate-limitクエリのレート制限を設定し、DDoS攻撃などからサーバーを保護します。
max-cache-sizeDNSキャッシュの最大サイズを指定します。
max-cache-ttlキャッシュデータの最大TTL(Time To Live)を設定します。
versionBINDのバージョン情報を隠す設定。セキュリティ強化に利用します。

これらのオプションを理解しておくことで、BINDの安定性と安全性を高める設定ができるようになります。

named.conf.local / xxx-zones:ゾーン定義ファイル

named.conf.localnamed.conf.xxx-zones は、DNSゾーンドメインごとの設定を定義するファイルです。

BINDでは、どのドメインをどのゾーンファイルで管理するかをここで指定します。Ubuntu環境では、named.conf.default-zones が標準で含まれており、再帰問い合わせ用のルートヒントや localhost などの基本設定が記述されています。

一方、external-zonesinternal-zones は、環境に応じて管理範囲を分けるために利用されます。

  • external-zones:インターネット上の外部ユーザーや他のサーバーが参照するゾーンを定義
  • internal-zones:企業・組織の内部ネットワークでのみ利用するゾーンを定義

このようにゾーンを外部用と内部用に分離して運用することで、内部情報が外部に漏れるリスクを防ぎ、セキュリティを高めることができます。多くの組織では、この構成によって安全で柔軟なDNS運用を実現しています。

正引きゾーンファイル

正引きゾーンファイルは、ドメイン名からIPアドレスを検索名前解決するための設定ファイルです。

DNSサーバーが問い合わせを受けたとき、このファイルを参照して「dns.com10.255.240.74」のような対応関係を返します。

BINDでは、1つのドメイン(ゾーン)につき1つの正引きゾーンファイルを用意します。このファイルは「どのドメイン名がどのIPアドレスに対応しているか」を定義する、DNSの住所録のような役割を担っています。

正引きゾーンファイルの基本と書き方

正引きゾーンファイルは、ドメインの管理情報SOA)と、サーバーの対応表NS・Aなど)で構成されています。

以下は、BINDで使用される基本構成の例です。

$TTL 86400
@       IN      SOA     ns.dns.com. root.dns.com. (
                        2023070301  ; Serial
                        3600        ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        86400 )     ; Negative Cache TTL
@       IN      NS      ns.dns.com.
@       IN      A       10.255.240.74
bind    IN      A       10.255.240.74

上から順に次のような情報を定義しています。

レコード役割
$TTLキャッシュの有効時間(秒)
SOAゾーン全体の管理情報(管理者・更新周期など)
NSゾーンを管理するネームサーバーを指定
Aドメイン名とIPv4アドレスの対応関係を定義

正引きゾーンファイルの特徴・注意点を、以下の図にまとめました。

この構造を理解することで、どのドメイン名がどのIPアドレスに対応しているかを自分で定義できるようになります。

正引きゾーンファイルの主なレコードの役割

ゾーンファイルに記述できる主なレコードと、その役割を以下にまとめます。

レコード名役割記述例
SOAゾーンの管理情報を定義。管理者名や更新サイクルを記述@ IN SOA ns.dns.com. root.dns.com.(2023070301 …)
NS管理を担当するネームサーバーを指定@ IN NS ns.dns.com.
Aドメイン名に対してIPv4アドレスを割り当て@ IN A 10.255.240.74
AAAAドメイン名に対してIPv6アドレスを割り当て@ IN AAAA ::1
CNAMEドメイン名に別名(エイリアス)を設定mail IN CNAME bind.dns.com.
MXメールサーバーを指定。優先度を数値で表す@ IN MX 10 mail.dns.com.

SOAレコードの役割と書き方

SOA(Start of Authority)レコードは、ゾーンファイルの冒頭に必ず1つだけ記述される管理情報です。ゾーンの権威サーバーや更新間隔、管理者メールなどの情報をまとめています。

@ IN SOA ns.dns.com. root.dns.com. (
        2023070301 ; Serial(ゾーン更新時に変更)
        3600       ; Refresh(セカンダリの更新間隔)
        1800       ; Retry(再試行間隔)
        604800     ; Expire(有効期限)
        86400 )    ; Negative Cache TTL

記述のポイント

  • @ はゾーン全体(例:dns.com)を表す省略記号。
  • 管理者メールは root@dns.comroot.dns.com. の形で書く。
  • ファイルを更新したら、Serial値を+1して保存する。

SOAレコードを正しく設定することで、プライマリとセカンダリDNS間での情報同期が正しく行われます。

逆引きゾーンファイル

逆引きゾーンファイルは、IPアドレスからドメイン名を検索逆引きするための設定ファイルです。

正引きゾーンが「名前 → 住所(IP)」の対応を定義するのに対し、逆引きゾーンはその逆方向住所 → 名前の対応を扱います。たとえば「10.255.240.74 はどのドメイン名か?」という問い合わせに対して、「dns.com」という名前を返します。

この仕組みを使うと、サーバーのIPアドレスが正しいドメインに対応しているかを確認できるため、メールサーバーの認証や通信の信頼性向上に役立ちます。

逆引きゾーンファイルの基本と書き方

逆引きゾーンファイルも、正引きゾーンと同様にSOA・NS・PTRレコードで構成されます。ただし、ゾーン名の指定方法が異なり、IPアドレスを逆順にした形式in-addr.arpaドメイン) を使います。

以下は、IPv4アドレス 10.255.240.74 に対応する逆引きゾーンの例です。

$TTL 86400
@       IN      SOA     ns.dns.com. root.dns.com. (
                        2023070301  ; Serial
                        3600        ; Refresh
                        1800        ; Retry
                        604800      ; Expire
                        86400 )     ; Negative Cache TTL
@       IN      NS      ns.dns.com.
74      IN      PTR     dns.com.

逆引きゾーンファイルの特徴・注意点を、以下の図にまとめました。

逆引きゾーンファイルの主なレコードの役割

ゾーンファイルに記述できる主なレコードと、その役割を以下にまとめます。

レコード名役割記述例
SOAゾーン全体の管理情報を定義@ IN SOA ns.dns.com. root.dns.com. (2023070301 …)
NS管理を担当するネームサーバーを指定@ IN NS ns.dns.com.
PTRIPアドレスに対応するドメイン名を定義74 IN PTR dns.com.

ゾーン名の指定方法(in-addr.arpaドメイン)

逆引きゾーンでは、ゾーン名に「in-addr.arpa」という特別なドメインを使用します。このドメインはIPアドレスを逆順に並べることで構成されます。

たとえば、IPアドレス 10.255.240.74 の場合、以下のようになります。

通常の表記逆引きゾーン名
10.255.240.74240.255.10.in-addr.arpa

このように書くことで、「この範囲のIPアドレスに対してどのドメイン名を返すか」を定義できます。

設定時の注意点

  • 正引きゾーンとの整合性の維持

    たとえば、dns.com → 10.255.240.74 と正引きで定義した場合、逆引き側にも 10.255.240.74 → dns.com を定義します。

  • PTRレコードのドット.の付け忘れ

    dns.com. のように、末尾にピリオドを付けないと相対指定とみなされ、誤ったドメインに解決されることがあります。

  • ゾーン名in-addr.arpaの範囲設定

    IPアドレスブロックの構成に合わせてゾーン名を指定します。

    例:240.255.10.in-addr.arpa など。

補足:ファイル名と命名ルール

逆引きゾーンファイルの名前には、IPアドレスを逆順にした形式がよく使われます。例として 240.255.10.in-addr.arpa240.255.10.rev などがあります。

また、IPとドメイン名の対応を定義するのがPTRレコードです。ゾーン名やレコード名の末尾には必ずピリオド(.)を付けましょう。

BINDの操作方法

BINDのサービスは、Linuxのサービス管理ツールsystemdを通して操作します。設定の反映や状態確認は、いずれも systemctl コマンドで行います。

このセクションでは、BINDを使用する際に知っておきたい基本コマンドを紹介します。

BINDの状態確認

BINDの動作状況を確認するには、次のコマンドを使用します。

sudo systemctl status named

出力結果の中で「Active:」の行を確認し、現在の稼働状態を把握します。

主な状態を以下の表にまとめます。

稼働状態説明
active(running)サービスが正常に動作している
inactive(dead)サービスが停止している
failed起動や実行中にエラーが発生している
activatingサービスが起動中
deactivatingサービスが停止中
reloading設定の再読み込みを実行している

BINDの再起動

設定ファイルを変更した場合など、新しい設定を反映する際は次のコマンドを使用します。

sudo systemctl restart named

BINDのログ確認

BINDの動作ログは、デフォルトで /var/log/syslog に出力されます。動作確認やエラー調査には、次のコマンドを使います。

# 直近のログ50行を確認
tail -n 50 /var/log/syslog

# リアルタイムでログを確認
tail -f /var/log/syslog

# 行数を指定せず、すべてのログを表示
cat /var/log/syslog

すべてのログを確認したい場合は cat コマンドを使用しますが、出力量が多くなるため、less コマンド(less /var/log/syslog)での閲覧もおすすめです。

必要に応じて、named.conf.options ファイルでログ出力先や詳細レベルを調整できます。

DNSサーバー設定の変更

Ubuntuでは、システムが使用するDNSサーバーの情報は /etc/resolv.conf で管理されています。

BINDを自分のDNSサーバーとして利用する場合、この設定を変更してBINDサーバーを優先的に使用するようにします。

netplanでDNSサーバーを指定する方法

Ubuntu 18.04以降では、DNS設定をnetplanで管理できます。YAML形式の設定ファイルを作成して、使用するDNSサーバーを指定します。

たとえば、BINDを自分のサーバーとして利用する場合は、netplan設定ファイルに次のように設定します。

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [10.255.240.74/24]
      gateway4: 10.255.240.1
      nameservers:
        addresses: [10.255.240.74]

このファイルでは、Ubuntuのネットワーク設定を以下のように変更しています。

設定項目意味
renderer: networkdsystemd-networkdを使用してネットワークを管理する指定
eth0設定対象のネットワークインターフェース名
dhcp4: noDHCPを無効化し、手動でIPを指定する設定
addressesサーバーの固定IPアドレス(例:10.255.240.74/24)
gateway4デフォルトゲートウェイ(外部通信の出口)
nameservers.addresses使用するDNSサーバー(ここではBINDを動かしている自分自身のサーバー)

設定を保存したら、次のコマンドで適用します。

sudo netplan apply

設定時のポイント

  • 初期設定ファイル50-cloud-init.yamlの直接編集は非推奨

    上書きを防ぐため、新しい .yaml ファイルを作成するのがおすすめです。

  • 新しい設定ファイルを優先的に読み込ませる工夫

    netplanでは、設定ファイルがファイル名の数字順に読み込まれ、後に読み込まれるファイルが前の設定を上書きします。そのため、たとえば 60-custom-dns.yaml のように「50」より大きい数字を付けることで、新しい設定が確実に反映されます。

まとめ

この記事では、BINDの基礎と構成、そしてDNSの仕組みを自分の手で理解する方法を学びました。BINDは一見難しそうに感じるかもしれませんが、学びを進めるうちに「名前解決」というインターネットの裏側の仕組みが見えてきます。

この記事で学んだこと

  • BINDとは何か:DNSサーバーを構築するための代表的なソフトウェアであること
  • BINDを学ぶ意義:DNSの仕組みを根本から理解し、クラウド環境でも応用できること
  • 主要な構成ファイルnamed.conf やゾーンファイルなど、5つの設定ファイルの役割
  • 正引き・逆引きゾーンの仕組み:ドメイン名とIPアドレスを相互に対応づける方法
  • BINDサービス管理の基本systemctlnetplan を使った設定と運用の流れ

サーバーにBINDをインストールし、設定ファイルを編集して名前解決が成功したとき、あなたはすでに「ネットワークを自分で設計できるエンジニア」への第一歩を踏み出しています。

BINDの知識は、単にDNSを扱うためだけのものではなく、ネットワーク全体の理解を深め、クラウドやセキュリティの分野へと学びを広げる強力な基盤になります。

次のステップへ

学んだ内容を実際に試したい方は、次の関連記事を参考に進めてみましょう。自分の設定でドメインが正しく解決できた瞬間、BINDの理解が一気に深まります。

参考資料

以下のリンクは、この記事で解説した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 LINE登録で記事を見る

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事