BINDによるDNSサーバ構築入門|DNSサーバの仕組みと基本設定を理解する

BIND_DNSサーバ

BINDによるDNSサーバ構築入門

LinuxでDNSサーバを構築する場合、最も代表的なソフトウェアがBIND(Berkeley Internet Name Domain)です。

BINDは長い歴史を持つDNSサーバソフトウェアであり、現在でも多くの企業や組織で利用されています。

クラウドDNSサービスが普及した現在でも、社内DNSや検証環境、教育環境ではBINDを利用する機会が少なくありません。

本記事では、BINDの基本的な仕組みからインストール、設定ファイルの構成、DNSサーバ構築の流れまでを解説します。

BINDとは

BINDはDNSサーバソフトウェアの一つです。

正式名称は以下の通りです。


Berkeley Internet Name Domain

カリフォルニア大学バークレー校で開発され、現在はISC(Internet Systems Consortium)によって開発が継続されています。

LinuxでDNSサーバを構築する際の事実上の標準ソフトウェアと言えます。

BINDでできること

BINDは様々な役割のDNSサーバとして動作できます。

  • 権威DNSサーバ
  • キャッシュDNSサーバ
  • フォワーダDNSサーバ
  • セカンダリーDNSサーバ

1つのソフトウェアで複数の役割を実現できます。

DNSサーバ構築の全体像

権威DNSサーバを構築する場合、基本的な流れは次のようになります。

BINDインストール
↓
named.conf設定
↓
ゾーンファイル作成
↓
設定確認
↓
サービス起動
↓
動作確認

DNSサーバ構築はこの流れを繰り返しながら行います。

BINDの主要コンポーネント

BINDにはいくつかの重要なプログラムがあります。

コマンド役割
namedDNSサーバ本体
rndc管理コマンド
dig問い合わせ確認
named-checkconf設定確認
named-checkzoneゾーン確認

Rocky Linuxへのインストール

Rocky Linuxではdnfコマンドを利用します。

# dnf install bind bind-utils

bind-utilsにはdigなどの確認コマンドが含まれています。

インストール確認

インストール後はバージョンを確認できます。

# named -v

出力例です。

BIND 9.18.x

サービス管理

BINDのサービス名はnamedです。

起動します。
# systemctl start named

自動起動設定です。
# systemctl enable named

状態確認です。
# systemctl status named

named.confとは

BINDのメイン設定ファイルです。

/etc/named.conf

Apacheでいうhttpd.confに相当します。

DNSサーバ全体の設定を管理します。

named.confの構成

基本的な構成です。

options {
};

zone "example.com" {
};

logging {
};

主にoptionsとzoneを利用します。

optionsセクション

DNSサーバ全体の設定を記述します。

options {
    directory "/var/named";
};

ゾーンファイル保存場所などを指定します。

listen-on設定

待ち受けIPアドレスを指定します。

listen-on port 53 {
    any;
};

すべてのIPアドレスで待ち受けます。

allow-query設定

問い合わせを許可する範囲です。

allow-query {
    any;
};

学習環境ではよく利用されます。

実運用では制限する場合があります。

ゾーン設定とは

ドメインごとの管理情報を定義します。

例です。

zone "example.com" IN {
    type master;
    file "example.com.zone";
};

example.comの権威DNSサーバになります。

type masterとは

ゾーン情報の原本を持つDNSサーバを意味します。

type master;

現在はPrimaryという表現も利用されます。

ゾーンファイルとは

DNSレコードを保存するファイルです。

例えば次のファイルです。

/var/named/example.com.zone

Webサーバでいうコンテンツに相当します。

最小構成のゾーンファイル

$TTL 3600

@ IN SOA ns1.example.com. root.example.com. (
    2026060801
    28800
    14400
    3600000
    86400
)

@ IN NS ns1.example.com.

ns1 IN A 192.168.1.10
www IN A 192.168.1.20

これで基本的な名前解決が可能になります。

設定確認

設定ミスを防ぐため確認します。

named.confの確認です。

# named-checkconf

正常なら何も表示されません。

ゾーンファイル確認

# named-checkzone example.com  /var/named/example.com.zone
[OK]

ファイアウォール設定

DNSは53番ポートを利用します。

# firewall-cmd --add-service=dns --permanent
# firewall-cmd --reload

忘れやすいポイントです。

SELinuxについて

Rocky LinuxではSELinuxも考慮する必要があります。

通常のディレクトリを利用する場合はコンテキスト設定が必要になる場合があります。

学習段階では標準ディレクトリを利用するのが安全です。

動作確認

digコマンドで確認します。
# dig @127.0.0.1 www.example.com

応答例です。
www.example.com. 3600 IN A 192.168.1.20

IPアドレスが返れば成功です

ログ確認

トラブル時はログを確認します。

# journalctl -u named

起動エラーや設定ミスを確認できます。

よくある構築ミス

SOAレコード不足

ゾーンファイルにSOAレコードが無い場合は起動できません。

末尾ドット忘れ

ns1.example.com.

最後のドット忘れは非常によくあるミスです。

シリアル番号未更新

セカンダリーDNSへ反映されなくなります。

ファイアウォール未設定

外部から問い合わせできません。

実務で覚えておきたいポイント

  • BINDは代表的なDNSサーバソフトウェア
  • named.confが中心設定ファイル
  • ゾーンファイルにDNSレコードを記述する
  • named-checkconfで設定確認する
  • digで動作確認する
  • ファイアウォール設定を忘れない

まとめ

BINDは現在でも広く利用されているDNSサーバソフトウェアです。

DNSサーバ構築では、named.confによるゾーン定義とゾーンファイルによるレコード管理が基本となります。

また、named-checkconfやnamed-checkzoneを利用することで設定ミスを事前に発見できます。

DNSは多くのシステムの基盤となる重要なサービスです。

まずはBINDの基本構成を理解し、実際に構築しながら学習を進めることがDNS技術習得への近道と言えるでしょう。