🎉

BINDによるDNS キャッシュサーバーの構築

2024/07/22に公開

はじめに

こんにちは!今回は、Linuc202の試験に向けて理解を深めるために、DNS キャッシュサーバーを AWS EC2 上で構築しました。実際に環境を構築しながら学習することで、試験対策と実務でのスキルアップを目指のが今回の目的です。

前提知識

DNS とは

インターネット上でWebサイトにアクセスする際、通常ドメイン名(例:google.co.jp)を使いますが、実際に通信を行うためにはIPアドレスが必要です。DNS(Domain Name System)は、このドメイン名とIPアドレスを関連付けるシステムです。簡単に言えば、DNSはドメイン名とIPアドレスを紐付ける電話帳のようなものです。
例えば、google.co.jpというドメイン名は、実際には172.217.175.46というIPアドレスに対応しています。ブラウザに172.217.175.46を入力すると、Googleの検索画面が表示されます。このように、DNSのおかげで、私たちは覚えやすいドメイン名を使ってWebサイトにアクセスすることができます。

BIND とは

BIND(Berkeley Internet Name Domain)は、最も広く使用されているDNSサーバーソフトウェアです。BINDは、DNSリクエストを受け取り、対応するIPアドレスを返す役割を果たします。キャッシュサーバーとしても、権威サーバーとしても使用できる高機能なソフトウェアであり、DNSの管理や運用において重要な役割を担っています。多くの企業や組織で採用されており、その信頼性と機能の豊富さから広く利用されています。

DNS キャッシュサーバーとは

DNS キャッシュサーバーは、DNS クエリの結果を一時的に保存しておき、次回同じクエリがあった際に高速に応答できるようにするサーバーです。これにより、インターネットの閲覧が速くなります。キャッシュサーバーを使うと、同じドメイン名に対するリクエストが繰り返し行われる場合でも、外部の DNS サーバーに問い合わせる必要がなくなります。

手順

1. BIND パッケージのインストール

まず、BIND および bind-utils パッケージをインストールします。

sudo yum install bind bind-utils

2. 設定ファイルの編集

BIND の設定ファイル /etc/named.conf を編集します。

sudo vi /etc/named.conf

設定ファイルの内容を以下のように編集します。

options {
    listen-on port 53 { any; };  # BINDがすべてのネットワークインターフェースでポート53のリクエストを受け付けます。
    directory       "/var/named";  # BINDの作業ディレクトリです。
    dump-file       "/var/named/data/cache_dump.db";  # キャッシュのダンプファイルです。
    statistics-file "/var/named/data/named_stats.txt";  # 統計情報のファイルです。
    memstatistics-file "/var/named/data/named_mem_stats.txt";  # メモリ統計情報のファイルです。
    recursing-file  "/var/named/data/named.recursing";  # 再帰クエリのファイルです。
    secroots-file   "/var/named/data/named.secroots";  # セキュリティルートファイルです。
    allow-query     { xx.xx.xx.xx; };  # クライアントPCのIPアドレスからのクエリを許可します。
    allow-recursion { xx.xx.xx.xx; };  # クライアントPCのIPアドレスからの再帰クエリを許可します。
        ※クエリ、及び再帰問い合わせはクライアントPCからのみに設定
    forwarders { 8.8.8.8; 8.8.4.4; };  # GoogleのDNSサーバーをフォワーダーとして設定します。

    recursion yes;  # 再帰クエリを許可します。

    dnssec-enable yes;  # DNSSECを有効にします。
    dnssec-validation yes;  # DNSSECの検証を有効にします。

    bindkeys-file "/etc/named.root.key";  # DNSSEC用のキーのファイルです。
    managed-keys-directory "/var/named/dynamic";  # 動的なキーのディレクトリです。
    pid-file "/run/named/named.pid";  # プロセスIDファイルです。
    session-keyfile "/run/named/session.key";  # セッションキーのファイルです。
};

logging {
    channel default_debug {
        file "data/named.run";  # デバッグ情報のファイルです。
        severity dynamic;  # ログの詳細レベルを動的に変更します。
    };
};

zone "." IN {
    type hint;  # ヒントゾーン(ルートサーバーの情報)です。
    file "named.ca";  # ルートサーバーの情報を含むファイルです。
};

include "/etc/named.rfc1912.zones";  # 標準的なゾーンファイルのインクルードです。
include "/etc/named.root.key";  # ルートキーのインクルードです。

3. BIND サービスの起動と有効化

BIND サービスを起動して有効化します。

sudo systemctl start named
sudo systemctl enable named

4. セキュリティグループの設定確認

AWS マネジメントコンソールで該当の EC2 インスタンスのセキュリティグループを確認し、ポート 53 へのアクセスが許可されていることを確認します。

5. クライアントPCからのDNSクエリのテスト

クライアントPCからDNSクエリを実行して、設定が正しく機能していることを確認します。

dig @キャッシュDNSのIP google.com

まとめ

AWS EC2上でBINDを使ったDNSキャッシュサーバーの設定手順を説明しました。次のステップとして、マスターDNS、スレーブDNSの設定、DNSSEC、TSIGなども実際に構築して学習を進めていきます。これにより、より高度なDNS管理のスキルを身につけ、Linuc 202試験の合格を目指したいと思います。

Discussion