「SAVACAN」担当のMKです。
本ブログでは、BINDを用いたDNSサーバーの構築手順について解説いたします。
はじめに、BINDに馴染みのない方にもご理解いただけるよう、BINDの概要および代表的なDNSレコードについて整理します。その後、実際の設定手順を段階的にご紹介します。
なお、本記事ではDNSの基本的な仕組みそのものについての解説は行っておりません。あらかじめDNSの基礎知識をお持ちで、実際にDNSサーバーの構築を検討されている方を対象としています。
BINDとは何か
BINDは、「Berkeley Internet Name Domain」の略でDNSサーバーとして動作するソフトウェアになります。
その歴史は古く、1980年代に始まったDNSの設計と同時期に開発が始まったとされています。インターネットの始まりとともに生まれ、現在でも広く利用されている偉大なソフトウェアの一つです。
まずBINDでできることと、特徴について解説いたします。
主な機能(この他多数の機能あり)
- ドメイン名からIPアドレスを調べる(正引き)
- IPアドレスからドメイン名を調べる(逆引き)
- 自分が管理するドメイン情報を保持・提供する
- マスター/スレーブ構成
特徴
- 1986年にBIND4としてリリース(最新版はBIND9)
- 多くの権威DNSサーバーで利用されている
- オープンソースソフトウェア(無料、自己管理)
- 多くのディストリビューションに標準パッケージとして搭載
- ファイルベース、コマンドベース管理
正引きと逆引きについて
正引きとは、
ドメイン名から対応するIPアドレスを取得する仕組みを指します。
このプロセスは、Webサイトの閲覧やメールの送受信をはじめ、ドメイン名を利用する現在のインターネットの基盤となる重要な役割を担っています。
逆引きとは、
IPアドレスから対応するドメイン名を特定する仕組みを指します。
メールにおけるスパム判定にも活用されており、正当な送信元かどうかを判別し、不一致または偽装の可能性がある場合にスパム判定の1要素として加味する仕組みが一般的に採用されています。
DNSレコードについて
主要なDNSレコードについて説明します。
A
IPv4でホスト名とIPアドレスの関連を登録
yourdomain.com. IN A XXX.XXX.XXX.XXXAAAA
IPv6でホスト名とIPアドレスの関連を登録
yourdomain.com. IN AAAA XXXX:XXXX:XCNAME
あるドメインまたはサブドメインの別名を登録
以下の設定では www.yourdomain.com にアクセスしたとき yourdomain.com のIPを返します。
www.yourdomain.com. IN CNAME yourdomain.com.MX
メールサーバーのホスト名を登録
10と20は優先順位で数値が小さいほど優先順位が高くなります。
慣習として10~100まで10単位とする場合が多いですが、 0~65535(16ビット整数)で指定可能です。
yourdomain.com. IN MX 10 mail1.yourdomain.com.
yourdomain.com. IN MX 20 mail2.yourdomain.com.TXT
任意のテキスト情報を登録
現在はspf、DKIM、DMARCなどメール送信元認証用の設定や、DNS認証に活用される場面が非常に多いです。
yourdomain.com. IN TXT "v=spf1 +ip4:XXX.XXX.XXX.0/24 ~all"
default._domainkey.yourdomain.com. IN TXT "v=DKIM1; k=rsa; p=DKIM設定値"
_dmarc.yourdomain.com. IN TXT "v=DMARC1; p=none; rua=mailto:admin@yourdomain.com; ruf=mailto:admin@yourdomain.com;"NS
そのドメインの情報をどのDNSサーバーに問い合わせるか指定
yourdomain.com. IN NS ns1.yourdomain.com.PTR
リバースルックアップ(逆引き)でドメイン名を提供
XXX.XXX.XXX.XXX.in-addr.arpa. IN PTR yourdomain.com.SOA
ゾーン管理のための情報や設定
yourdomain.com. IN SOA dns1.yourdomain.com. root.yourdomain.com. (
2020011201 ; Serial(更新の度に大きい数値に変更します)
10800 ; Refresh
3600 ; Retry
604800 ; Expire
43200 ) ; Minimum TTL
・dns1.yourdomain.com
このゾーンの“権威DNSサーバー(プライマリDNS)
・root.yourdomain.com
DNS管理者のメールアドレスBINDのインストール
BINDを設定する上で前提となる基礎知識を簡単に振り返ったところで、ここからはインストールおよび設定手順について解説していきます。
なお、BINDで実現可能な機能は多岐にわたりますが、本記事では基本となる「正引き」と「逆引き」の設定に焦点を当ててご紹介します。
まずはBINDをインストールします。
dnf install bindインストール時に以下の設定ファイルが作成されます。
ls -al /var/named/
drwxrwx--- 2 named named 6 11月 6 16:45 data
drwxrwx--- 2 named named 6 11月 6 16:45 dynamic
-rw-r----- 1 root named 2112 11月 6 16:45 named.ca
-rw-r----- 1 root named 152 11月 6 16:45 named.empty
-rw-r----- 1 root named 152 11月 6 16:45 named.localhost
-rw-r----- 1 root named 168 11月 6 16:45 named.loopback
drwxrwx--- 2 named named 6 11月 6 16:45 slaves
・ファイル
named.ca
ルートDNSサーバーの一覧です。
BINDサーバー自身に設定していないため答えられないDNS情報を問い合わせにいきます。
最新の設定内容は以下にありますのでコピーして使います。
https://www.internic.net/domain/named.cache
named.localhost
localhostの正引きゾーン
named.loopback
127.0.0.1の逆引きゾーン
named.empty
プライベートIPの逆引きを外部に出さない設定
・ディレクトリ
/var/named/data
BINDの作業用ディレクトリ
/var/named/dynamic
動的更新(Dynamic DNS)用のゾーン保存場所
/var/named/slaves
マスターDNSから転送(AXFR/IXFR)されたゾーンデータls -al /etc/named*
-rw-r----- 1 root named 1705 11月 6 16:45 /etc/named.conf
-rw-r----- 1 root named 1029 11月 6 16:45 /etc/named.rfc1912.zones
-rw-r--r-- 1 root named 1070 11月 6 16:45 /etc/named.root.key
named.conf
BINDの設定ファイル
named.rfc1912.zones
localhostの名前解決、127.0.0.1・プライベートIPアドレスの逆引き設定
named.root.key
DNSSEC用のルート公開鍵/etc/named.conf で正引きと逆引きの設定をします。
以下の設定はデフォルト設定から見直した箇所と、再起問い合わせの注意点になります。
options
{
# 外部にポート公開
listen-on port 53 { any; };
# 指定されたIPアドレスゾーン情報の転送を許可
allow-transfer {
XXX.XXX.XXX.0/24 ;
};
# 再帰問い合わせを有効
# bindサーバー自身で答えれないときはルートDNS → TLD → 権威DNSへ順に問い合わせ
recursion yes ;
# DNSクエリ(名前解決)を許可するIPアドレス
allow-query {
XXX.XXX.XXX.0/24 ;
127.0.0.1 ;
};
};
# ルートDNSサーバの情報を参照するためのヒントファイル
zone "." IN {
type hint;
file "named.ca";
};
# ローカルホスト(localhost)に関する名前解決を行うためのゾーン
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
# ループバックアドレス(127.0.0.1)の逆引き設定(IPアドレスからホスト名を解決)
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
# yourdomain.comの正引き
zone "yourdomain.com" {
type master;
file "db.yourdomain.com";
allow-query { any; };
};
# IPは左から右へ書き、逆引きのゾーン名にはin-addr.arpaを末尾に付けます
# 111.222.333.x のIPアドレス帯に対する逆引き設定
zone "333.222.111.in-addr.arpa" {
type master;
file "db.111.222.333.0";
allow-query { any; };
};正引き用のゾーン設定ファイルを作成します。
配置先は、named.conf 内の directory “/var/named” で指定されたディレクトリとなります。
また、ファイル名はゾーン定義における file “db.yourdomain.com” の指定に従います。
vi /var/named/db.yourdomain.com
$TTL 1200
@ IN SOA dns1.yourdomain.com. root.yourdomain.com. ( 2020011201 10800 3600 604800 43200 )
IN NS dns1.yourdomain.com.
IN NS dns2.yourdomain.com.
@ IN A XXX.XXX.XXX.XXX
dns1 IN A XXX.XXX.XXX.101
dns2 IN A XXX.XXX.XXX.102
SOAレコードの @ はyourdomain.comを省略して書く記号です。逆引き用のゾーン設定ファイルを作成します。
vi /var/named/db.111.222.333.0
$TTL 1200
@ IN SOA dns1.yourdomain.com. root.yourdomain.com. ( 2026042301 3600 900 604800 86400 )
IN NS dns1.yourdomain.com.
IN NS dns2.yourdomain.com.
101 IN PTR dns1.yourdomain.com.
102 IN PTR dns2.yourdomain.com.ここまでで設定できましたので、起動設定をします。
systemctl start named
systemctl enable namedfirewallを開放します。
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload設定したDNSサーバーの動作確認
構築したbindサーバーとは別のAlmalinux8サーバーからdigコマンドを使って動作確認をしてみます。
問い合わせ結果が何も返ってこないときはbindサーバーでdnsのfirewallが解放されているか、bindのポート53が外部に開放されているかを確認してください。
(結果内容は実行アプリケーション、環境により異なる場合があります)
正引き
dns1.yourdomain.com のIPアドレスを構築したbindサーバーに問い合わせます。
dig dns1.yourdomain.com @bindサーバーのIPアドレス
;; ANSWER SECTION:
dns1.yourdomain.com. 1200 IN A XXX.XXX.XXX.101
;; AUTHORITY SECTION:
yourdomain.com. 1200 IN NS dns1.yourdomain.com.
yourdomain.com. 1200 IN NS dns2.yourdomain.com.
;; ADDITIONAL SECTION:
dns2.yourdomain.com. 1200 IN A XXX.XXX.XXX.102
逆引き
dig -x 111.222.333.101 @bindサーバーのIPアドレス
;; ANSWER SECTION:
101.333.222.111.in-addr.arpa. 1200 IN PTR dns1.yourdomain.com.
;; AUTHORITY SECTION:
333.222.111.in-addr.arpa. 1200 IN NS dns1.yourdomain.com.
333.222.111.in-addr.arpa. 1200 IN NS dns2.yourdomain.com.
;; ADDITIONAL SECTION:
dns1.yourdomain.com. 1200 IN A XXX.XXX.XXX.101
dns2.yourdomain.com. 1200 IN A XXX.XXX.XXX.102設定した通りの問い合わせ結果が返ってきたらbindによるDNSサーバーの構築が完了です!
最後に
当社では、BINDを利用したDNSサーバーの15年以上の公開・運用実績がございます。ドメイン提供元のDNSサービスや、クラウドサービス提供のマネジメントサービスを利用する事例も増えてきましたが、カスタマイズ性や即時性を重視する際には独自管理有利な場面も多いです。
DNSに関するお悩みやご相談はお気軽にスペース・アイまでお問い合わせ下さい。
BINDは多機能が故にソースコード量も多く、脆弱性が発見される事も多くありました。またシェアが高く攻撃効率が良い為、攻撃対象とされる場合も多いです。そこで、当社ではよりスリムかつ権威DNSと再帰DNSを分離可能なPowerDNSの導入・運用にも力を入れております。いずれこの辺りもブログ化したいですね。
