Bindのインストール
sudo dnf -y install bind bind-chroot
bind-utils は、Linux環境で DNS関連のコマンド を提供するツールセットです。以下のコマンドが使用可能になります。
- dig:DNSサーバーに問い合わせを行い、詳細な情報を取得
- nslookup:ホスト名やIPアドレスの情報を取得
- host:簡単なDNS情報の検索を行う
CentOSやRHEL環境では、デフォルトでこれらのコマンドがインストールされていないことがあります。インストールするには、以下のコマンドを実行します。
// bind-utils がインストールされているか確認
sudo dnf search bind-utils
// bind-utils のインストール
sudo dnf install bind-utils
bind-chroot は、DNSサーバーのセキュリティを強化するための「 chroot環境 」を提供するツールです。
chroot環境を利用すると、BINDの動作範囲を限定されたディレクトリに閉じ込めることができ、BINDが攻撃された場合でも、システム全体への影響を最小限に抑えることが可能になります。
通常の「 / 」ではなく、「 /var/named/chroot 」などの専用ディレクトリ内で動作します。また、DNSサーバーのプロセスを他のシステム領域から分離し、攻撃リスクを低減します。
ファイル
内容 | パス |
---|---|
BINDの全体的な設定ファイル | /etc/named.conf |
ゾーンの定義ファイル | /var/named/myserver.jp.zones |
正引きの定義ファイル | /var/named/myserver.jp.db |
逆引きの定義ファイル | /var/named/11.168.192.in-addr.arpa.db |
「 /etc/named.conf 」の初期内容
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; };
/*
- 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-validation yes;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
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";
それぞれのファイルを以下のようにします。
/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.11/24; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; 192.168.11/24; }; // 修正
forwarders { 192.168.11.1; }; // 追加
/*
- 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-validation yes;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// 以下のように編集
view "internal" {
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/var/named/myserver.jp.zones";
};
include "/etc/named.root.key";
/var/named/myserver.jp.zones
zone "myserver.jp" {
type master;
file "myserver.jp.db";
};
zone "11.168.192.in-addr.arpa" {
type master;
file "11.168.192.in-addr.arpa.db";
};
/var/named/myserver.jp.db
$TTL 86400
@ IN SOA myserver.jp. root.myserver.jp.(
2016030101 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS server.myserver.jp.
IN MX 10 server.myserver.jp.
@ IN A 192.168.11.9
server IN A 192.168.11.9
www IN A 192.168.11.9
ftp IN A 192.168.11.9
mail IN A 192.168.11.9
/var/named/11.168.192.in-addr.arpa.db
$TTL 86400
@ IN SOA myserver.jp. root.myserver.jp.(
2016030101 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS server.myserver.jp.
9 IN PTR server.myserver.jp.
設定
ローカル環境の機器の設定情報は、以下のようにしています。
ドメイン名は、任意で好きなものにしてください。
内容 | IPアドレス |
---|---|
ルーター | 192.168.11.1 |
サーバー | 192.168.11.9 |
LANのサブネット | 192.168.11.0/24 |
DNSサーバー | 192.168.11.9 |
ドメイン名 | myserver.jp |
ゾーンの定義ファイルを作成します。
2つ目以下の部分のzone項目は、IPアドレスからホスト名を求める「逆引き」についての設定ファイルを指定します。
zone "11.168.192.in-addr.arpa" {
type master;
file "11.168.192.in-addr.arpa.db"; // ※1
};
「 zone "11.168.192.in-addr.arpa" 」のzoneの後に続く部分は、LANのサブネットのIPアドレスの最後の部分を除いたものを逆に記載します。
サブネットが「 192.168.11.0 」の場合は、「 11.168.192.in-addr.arpa 」とします。他の例をあげると「 192.168.1.0 」なら「 1.168.192.in-addr.arpa 」とします。
逆引きの定義ファイルのファイル名は、※1で指定したファイル名にします。
/var/named/11.168.192.in-addr.arpa.db
$TTL 86400
@ IN SOA myserver.jp. root.myserver.jp.(
2016030101 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expire
1h ) ; Minimum
IN NS server.myserver.jp.
9 IN PTR server.myserver.jp. // ※2
※2 の最初の「 9 」は、サーバーのIPアドレスの最後の部分を指定します。上記の場合は、IPアドレスが「 192.168.11.9 」の場合です。他の例をあげると、「 192.168.11.4 」なら「 4 」を指定します。
設定ファイルのチェック
named.confの構文チェックを行うには、「 named-checkconf 」コマンドを実行します。
「 named-checkconf ファイル名 」で調べることができますが、ファイル名を省略すると「 /etc/named.conf 」をチェックします。
sudo named-checkconf
named サービスを有効にする
sudo systemctl restart named-chroot
// 自動起動の設定
sudo systemctl enable named-chroot
ファイアウォールの設定
ファイアウォールの設定を変更します。
sudo firewall-cmd --permanent --add-service=dns --zone=public
sudo firewall-cmd --reload
BINDの動作確認
名前解決の確認
dig A server.myserver.jp
逆引きの確認
dig -x 192.168.1.9
外部ホストの名前解決の確認
dig A www.google.co.jp
上記のコマンドを実行し、「 ;; ANSWER SECTION: 」の結果が表示されれば設定は完了です。
サーバーのネットワークの設定
サーバーの nmtui で、IPアドレス、ゲートウェイ、DNS サーバーを手動で設定します。
クライアントの設定変更
クライアントがパソコンだった場合、イーサネットもしくは、Wi-Fi のインターネットプロトコルバージョン4(TCP/IP)の設定を変更します。
「 次のDNSサーバーのアドレスを使う(E) 」を選択し、優先DNSサーバーにBINDを設定したサーバーのIPアドレスを指定します。代替DNSサーバーには、ルーターのIPアドレスを設定します。