##目標
BINDを利用してDNSキャッシュサーバを構築すること(AWS環境を利用)。
##BIND、及びDNSキャッシュサーバ基礎情報
BINDとは多くのLinuxディストリビューションで標準的に利用されているDNSサーバソフトウェアです。
BINDのサーバデーモンはnamedとして動作します。
DNSキャッシュサーバに関しては、以下参考サイト掲載致します。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典(DNSキャッシュサーバ)
##前提
・同一VPC内にAWS EC2インスタンス2台(本記事ではAmazon Linux 2 AMI (HVM), SSD Volume Type利用)(※)が構築済みであること。
※DNSサーバとして利用するインスタンスに関しては、53番UDPポート(DNS)を開けておくこと。
##作業の流れ
項番 | タイトル |
---|---|
1 | DNSキャッシュサーバの構築 |
2 | 名前解決確認 |
##手順
###1.DNSキャッシュサーバの構築
①必要パッケージのインストール
DNSサーバとして利用するEC2インスタンスにOSログイン後、ルートスイッチ。
その後DNSサーバソフトのBINDをインストールします。
yum -y install bind
②BINDのメイン設定ファイル編集
BINDのメイン設定ファイルである、/etc/named.conf
の編集を開始します。
コメントの記載しているパラメータが、デフォルトから編集した部分、もしくはDNSキャッシュサーバの設定として重要な設定箇所となります。
DNSサーバのプライベートIPアドレス
とVPCのネットワークアドレス
は書き換えを行ってください。
options {
# プライベートIPアドレスで待ち受け
listen-on port 53 { DNSサーバのプライベートIPアドレス; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
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";
# クエリ、及び再帰問い合わせはVPC内ホストに限定し、セキュリティ強化
allow-query { VPCのネットワークアドレス; };
allow-recursion { VPCのネットワークアドレス; };
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
# 再帰問い合わせは許可(デフォルト)
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
# ルートDNSサーバの指定
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
named-checkconfコマンド
を利用して、namd.confの書式が正しいかチェックします。
# エラー出力がないこと
named-checkconf
③namedデーモンの起動⇒自動起動⇒状態確認
systemctl start named
systemctl enable named
systemctl status named
一応プライベートIPアドレスでUDPの53番ポートを待ち受けているかも確認
# DNSサーバのプライベートIPアドレス:53というレコードが出力されること
[root@ip-172-31-34-5 ~]# netstat -aun | grep 53
udp 0 0 172.31.34.5:53 0.0.0.0:*
udp6 0 0 ::1:53 :::*
###2.名前解決確認
事前同一VPC内に用意したEC2インスタンスにOSログインし、nslookupコマンド
を利用したDNSキャッシュサーバの機能確認を行います。
DNSサーバのIPアドレス部分を詰め替えて、以下コマンドを実行します。
nslookup google.com DNSサーバのプライベートIPアドレス
以下のようにサンプルとして利用したgoogleサイトのIPアドレスがNon-authoritative answer:以下に出力されればOKです。
[root@ip-172-31-42-71 ~]# nslookup google.com 172.31.34.5
Server: 172.31.34.5
Address: 172.31.34.5#53
Non-authoritative answer:
Name: google.com
Address: 172.217.175.110
Name: google.com
Address: 2404:6800:4004:81f::200e
/etc/resolv.conf
内に構築したDNSキャッシュサーバを登録し、リゾルバがデフォルトで利用するサーバとしてしまいます。
nameserverセクションに構築したDNSサーバのプライベートIPアドレスを記載
nameserver DNSサーバのプライベートIPアドレス
今度は第二引数にDNSサーバのIPを指定しなくても名前解決できるようになります。
[root@ip-172-31-42-71 ~]# nslookup google.com
Server: 172.31.34.5
Address: 172.31.34.5#53
Non-authoritative answer:
Name: google.com
Address: 172.217.175.110
Name: google.com
Address: 2404:6800:4004:81f::200e
##参考
権威DNSサーバの構築もしてみました。
【BIND】権威DNSサーバの構築