OracleVM VirtualBox_Bind設定方法

# 1.事前準備

・ルートユーザになる。
```
$ su -
```
・下記コマンドでSELinuxの動作モードを変更する。
SELinuxはLinux上のアクセス制御をつかさどっている。
※「getenforce」はSELinuxの動作モードを表示するコマンド、「setenforce」はSELinuxの動作モードを一時的に変更するコマンド。setenforceでの変更はリアルタイムで一時的なものである、再起動すると初期化されてしまう。
```
一時的にSELinuxをOFF
# setenforce 0

SELinuxの状態を確認
# getenforce 
Permissive　　→状態OFFになっている
```

・/etc/named.confファイルのバックアップを作成する。
※/etc/named. conf ファイルは、マスター、スレーブ、キャッシュ専用のネームサーバーを確立し、サーバーが権限を持つゾーンと、初期データを取得するために読み取るデータファイルを指定する
```rub
# cp -p /etc/named.conf /etc/named.conf.bak
# ls -l /etc/named.conf*
-rw-r-----. 1 root named 1806  2月 24 02:17 /etc/named.conf
-rw-r-----. 1 root named 1806  2月 24 02:17 /etc/named.conf.bak
```

# 2.設定変更
/etc/named.confファイルをviで編集する。
編集箇所はdiffで表示されている箇所。

今回設定した/var/log/named/debug.logはログの出力先。
```ruby
# vi /etc/named.conf
# diff /etc/named.conf /etc/named.conf.bak
49,52c49,50
<                 file "/var/log/named/debug.log";
<                 severity debug;
< 		　　　　　print-time yes;
< 		　　　　　print-severity yes;
---
>                 file "data/named.run";
>                 severity dynamic;
59,63d56
< 
< zone "testlinux.com" IN {
<         type master;
<         file "testlinux.com.zone";
< };
```
変更後の状態は下記になる。
```ruby
# cat /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.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	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-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 "/var/log/named/debug.log"; //ログ出力先
                severity debug; //重要度
		        print-time yes; //
		        print-severity yes;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

zone "testlinux.com" IN {
        type master;
        file "testlinux.com.zone";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
```

設定したnamed.confの通りにフォルダとファイルを準備する。
その後、権限の変更も行う。
```ruby
# mkdir /var/log/named
# touch /var/log/named/debug.log
# ls -l /var/log/named/debug.log
-rw-r--r--. 1 root root 0  3月  8 16:58 /var/log/named/debug.log

# chmod 766 /var/log/named/debug.log
# ls -l /var/log/named/debug.log
-rwxrw-rw-. 1 root root 0  3月  8 16:58 /var/log/named/debug.log
```

下記コマンドでzoneファイルを作成、編集する。
作成した内容に問題がなければ、ゾーン・ファイルの構文と整合性チェックを行う。
最終的にOKが表示されること。
```ruby
# vi /var/named/testlinux.com.zone
# cat /var/named/testlinux.com.zone
$TTL 3600
@	IN	SOA	test.testlinux.com. root.testlinux.com. (
			20210731 ; serial
			3600     ; refresh 1hr
			900      ; retry 15min
			604800   ; expire 1w
			86400 )  ; min 24hr
		IN		NS		test.testlinux.com.
test		IN		A		10.0.2.15

# named-checkzone testlinux.com /var/named/testlinux.com.zone
zone testlinux.com/IN: loaded serial 20210731
OK
```

Bindの起動をする。status確認で結果がActivieであること。
```ruby
# systemctl start named
# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: active (running) since 火 2022-03-08 17:26:55 JST; 17s ago
  Process: 2885 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 2883 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 2887 (named)
    Tasks: 4
   CGroup: /system.slice/named.service
           mq2887 /usr/sbin/named -u named -c /etc/named.conf

～
```
> 2023.02.16追記
久しぶりにやり直したらErrorになった。
いろいろ試してたら、下記打ってないからだった。
ネットワークか何か制限かかってたのかな。
>```
> #setenforce 0
>```

最後にログの出力確認と正引きをして設定作業は完了。
127.0.0.1は自身を表すループバックアドレス。
```ruby
# cat /var/log/named/debug.log 
# nslookup test.testlinux.com 127.0.0.1
→ nslookup [ドメイン名またはIPアドレス] [DNSサーバ]
Server:		127.0.0.1
Address:	127.0.0.1#53

Name:	test.testlinux.com
Address: 10.0.2.15
```

# メモ
◆named.confについて
・opions
BIND全体にかかわる設定項目を定義する。optionsステートメントで設定した一部内容はzoneステートメントにも反映される。

・logging
DNSサーバーのログ出力に関する設定項目を定義する。

・zone
ゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。