CentOS7でBINDのDNSサーバを構築する実例をメモします。
CentOS7のネットワーク設定方法はこちら
環境・構成
OS: CentOS 7
BIND 9.9.4
ネットワーク: 10.0.0.0/16
マスターサーバ: 10.0.1.2
スレーブサーバ: 10.0.1.3
インストール
# yum install bind
重要ファイル/ディレクトリ
- /etc/named.conf
- DNSの全般設定ファイル
- /var/named/
- デフォルトのゾーンファイル格納ディレクトリ
重要ユーティリティ
- /sbin/named
- BINDデーモン本体
- /sbin/rndc
- BINDデーモンを制御するツール
- /sbin/dnssec-keygen
- 鍵を作成するツール
- /sbin/dnssec-sigzone
- ゾーンファイルを署名するツール
- /sbin/named-checkconf
- named.confの構文チェックツール
- /sbin/named-checkzone
- ゾーンファイルの構文チェックツール
named.confの設定
必要最低限の設定例です。
- マスターサーバ
-
; 全般設定 options { directory "/var/named"; ゾーンファイルの格納ディレクトリ version "TEST"; 任意のバージョン情報 notify yes; スレーブサーバにゾーンの更新情報を伝える allow-transfer { 10.0.1.3; 10.0.0.1; }; ゾーン転送を許可するホスト allow-query { 10.0.0.0/16; }; 問い合わせを許可するホスト recursion no; 再起問い合わせを許可しない }; ;ゾーンごとの設定 zone "labo.lab" IN { ゾーン名 type master; マスターであることを明示 file "labo.lab.zone"; ゾーンファイル名 };
- スレーブサーバ
-
options { version "TEST"; allow-query { 10.0.0.0/16; }; recursion no; }; zone "labo.lab" IN { type slave; masters { 10.0.1.2; }; };
named.confを編集した場合は次のコマンドでデーモンを再起動します。
# systemctl restart named.service
ゾーンファイルの例
/var/named/labo.lab.zone
$ORIGIN labo.lab. $TTL 86400 labo.lab. IN SOA ns.labo.lab. root.labo.lab ( 2015040501; Serial 10800; Refresh 600; Retry 86400; Expire 86400 ); Negative TTL labo.lab. IN NS ns.labo.lab. labo.lab. IN MX 10 mx.labo.lab. ns.labo.lab. IN A 10.0.1.2 desk.labo.lab. IN A 10.0.0.1 note.labo.lab. IN A 10.0.0.2 www.labo.lab. IN A 10.0.1.1 ftp.labo.lab. IN CNAME www.labo.lab. mx.labo.lab. IN CNAME www.labo.lab.
$ORIGINを略すとnamed.confからゾーン名を引っ張ってくるようになります。以下は略して書く例です。
$TTL 86400 @ IN SOA ns root ( 2015040501; Serial 10800; Refresh 600; Retry 86400; Expire 86400 ); Negative TTL IN NS ns IN MX 10 mx ns IN A 10.0.1.2 desk IN A 10.0.0.1 note IN A 10.0.0.2 www IN A 10.0.1.1 ftp IN CNAME www mx IN CNAME www
ゾーンファイルを編集した場合は以下のコマンドを実行して適用させます。
# rndc reload labo.lab
検証
10.0.0.1のWindowsで検証してみました。
「ls -d ゾーン名」でゾーン転送の検証ができます。
DNSSECの設定
DNSSECはゾーン情報に公開鍵暗号方式の署名を行い、ゾーン情報の正当性を保障する仕組みです。
ゾーン情報に署名を行う鍵をZSK(Zone Signing Key)、ZSKに署名を行う鍵をKSK(Key Signing Key)といいます。
ZSKペアを作成します
# cd /var/named
# dnssec-keygen -r /dev/urandom -a RSASHA256 -b 1024 -n zone labo.lab
Klabo.lab.+008+46503.{private|key}の二つのファイルが作成されます。
次にKSKペアを作成します。
# dnssec-keygen -r /dev/urandom -f KSK -a RSASHA256 -b 1024 -n zone labo.lab
Klabo.lab.+008+35839.{private|key}の二つのファイルが作成されます。
両方の.key(公開鍵)をゾーンファイルに追加します。
# cat Klabo+lab.+008*.key >> /var/named/labo.lab.zone
dnssec-signzoneでゾーンファイルを署名します。
-k KSK秘密鍵 -o ゾーン名 ゾーンファイル
# dnssec-signzone -k Klabo.lab.+008+35839.private -o labo.lab labo.lab.zone Klabo.lab.+008+46503.private
labo.lab.zone.signedという署名済みのファイルが作成されます。
これを未署名のゾーンファイルと置き換えます。
# mv labo.lab.zone _labo.lab.zone
# mv labo.lab.zone.signed labo.lab.zone
リロードして適用
# rndc reload
WindowsのnslookupではDNSSEC非対応なのでdigで確認してみます。
# dig @10.0.1.2 ns.labo.lab any
TSIGの設定
マスターとスレーブ間ではゾーン転送でゾーン情報が同期されているため、改ざんされる危険性があります。そこで共有秘密鍵を使用してお互いを認証する仕組みがTSIG(Transaction Signatures)です。
HMAC-MD5の128bitで所有者タイプ:HOSTの鍵を作成します。
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST labo.lab
.privateと.keyが作成されますが使用するのは.privateです。
.privateのKEYの部分をコピーし、named.confに記述します。
;鍵を定義 key "labo.lab.key" { algorithm hmac-md5; secret "1nNUjIZDVnge9dd2LoZliA=="; }; ;マスターならスレーブサーバ、スレーブならマスターサーバのIPアドレスと鍵名を指定 servers 10.0.1.3 { keys { labo.lab.key; }; }; :
デーモンの再起動で適用
# service named restart
- 関連記事
-
-
Apache2 バーチャルホストの設定 2015/04/09
-
Apache2 Webサーバを構築してみる 2015/04/06
-
BINDでDNSサーバを構築してみる 2015/04/05
-
CentOS7にdig,nslookup,hostをインストール 2015/04/02
-
wgetでサイトをまるごと落とす方法 2015/03/20
-