内容
今回は、Linuxサーバー構築標準教科書(Ver.3.0.2) を参照し構築。
資料と異なり、Oracle Linuxを使用。
今回はコンテンツサーバーの構築。
キャッシュサーバーの構築は、以前の記事に記載
参考資料
検証環境
- VMware Workstation 16 Player
- Oracle Linux 8.7.0
- bind9.16-chroot.x86_64
- bind9.16.x86_64
インストール
bind-chrootはbindを実行したとき、/var/named/chrootディレクトリをルートディレクトリとして動作させるためのもの。
また、動作確認用にbind-utilsもインストールする。
バージョンもキャッシュサーバーと同じものを使用
[root@ContentsServerB dnsuser]# dnf list | grep bind9
bind9.16.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-chroot.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-libs.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-license.noarch 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-utils.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16.src 32:9.16.23-0.9.el8.1 ol8_appstream 32:9.16.23-0.9
[root@ContentsServerB dnsuser]# dnf installed bind9.16-utils.x86_64 bind9.16-chroot.x86_64 bind9.16.x86_64
正常にインストールされていることを確認
[root@ContentsServerB dnsuser]# dnf list installed | grep bind
bind9.16.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-chroot.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-libs.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-license.noarch 32:9.16.23-0.9.el8.1 @ol8_appstream
bind9.16-utils.x86_64 32:9.16.23-0.9.el8.1 @ol8_appstream
[root@ContentsServerB dnsuser]#
ContentsB、ContentsCの両方で正常にインストールされていることを確認する。
設定
コンテンツサーバーは、キャッシュサーバーへ追加するためのゾーンを設定する必用がある。
ゾーンを追加するためには、
- name.conf(bindの基本設定ファイル)へゾーンを追加
- ゾーンファイルを記述
を実施する必用がある。
1. named.confへZoneの設定の追加
以下の状態へ変更。
options {
listen-on port 53 { 127.0.0.1; 192.168.10.3; }; →有効化するインターフェースの情報を記載。
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 { any; }; →localhostからanyへ修正しlocalhost以外にもこのサーバーへDNS問い合わせができるようにする。
recursion no; →yesの場合、リゾルバー(キャッシュサーバーのように名前解決を行う)動作をする。今回はNo
zone "beta.jp" IN { →beta.jpとなっているが、それぞれのZone名を記載する。正引き用のゾーン設定
type master;
file "beta.jp.zone";
allow-update { none;};
};
2. ゾーンファイルの作成
/etc/named.conf
で設定したゾーン用のゾーンファイルを作成する。
/var/named/
へ移動。
[root@localhost ~]# cd /var/named/
/var/named/named.empty
を/etc/named.conf
のゾーン設定時に指定した名前に合わせてコピーする。
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]# cp -p named.empty beta.jp.zone
[root@localhost named]# ls
beta.jp.zone chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
コピーが完了したら、ゾーンファイルの編集を行う。
$TTL 3H
$ORIGIN beta.jp.
@ IN SOA @ rname.invalid. (
20230323 ; serial →日付
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS host1.beta.jp.→サーバーのドメイン名を記載
MX 10 mail.beta.jp. →メール用のドメインを記載
host1 A 192.168.10.3
www A 192.168.10.3
mail A 192.168.10.3
vhost1 A 192.168.10.3
vhost2 A 192.168.10.3
→いくつかホストを追加
いくつかのDNSレコードの簡単な説明は以下。
他にもレコードはあるので気になる方は調べてみてください。
レコード | 説明 |
---|---|
SOA | ゾーンに関する情報が書かれている。リトライ間隔等 |
A | ドメイン名に対応するIPv4アドレスが書かれたレコード |
AAAA | ドメイン名に対応するIPv6アドレスが書かれたレコード |
MX | 対象のメールの配送先のホスト名を定義するレコード |
NS | ゾーン情報を管理するネームサーバーのサーバー名を定義するレコード |
3.ゾーンファイルの構文チェック
作成したゾーンファイルとnamed.confの構文チェックを行う。
問題がなければ以下の状態となる。
[root@localhost named]# named-checkzone beta.jp. /var/named/beta.jp.zone
zone beta.jp/IN: loaded serial 20230323
OK
[root@localhost named]# named-checkconf
named.confの構文チェックでは、間違いがあると以下のような出力がされる。
[root@localhost named]# named-checkconf
/etc/named.conf:11: missing ';' before '}'
3.ファイアウォール設定
ファイアウォールへDNSを追加し、リロードする。
DNSが追加されていることを確認する。
[root@localhost named]# firewall-cmd --add-service=dns --permanent
success
[root@localhost named]# firewall-cmd --reload
success
[root@localhost named]#
[root@localhost named]#
[root@localhost named]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160 ens224
sources:
services: cockpit dhcpv6-client dns ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4.起動
起動して、正常に稼働していることを確認する。
[root@localhost named]# systemctl start named-chroot
[root@localhost named]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2023-03-22 15:02:07 EDT; 9s ago
Process: 84458 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=>
Process: 84456 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/na>
Main PID: 84460 (named)
Tasks: 4 (limit: 5725)
Memory: 16.3M
CGroup: /system.slice/named-chroot.service
mq84460 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot
[root@localhost named]# systemctl enable named-chroot.service
Created symlink /etc/systemd/system/multi-user.target.wants/named-chroot.service → /usr/lib/systemd/system/named-chroot.service.
検証
各コンテンツサーバーから、それぞれのゾーンの情報が得られか確認する。
ホスト名 | IPアドレス | ゾーン |
---|---|---|
Cache searver | 192.168.10.1 | |
ContentsB | 192.168.10.2 | alpha.jp |
ContentsC | 192.168.10.3 | beta.jp |
ContentsBから、ContentsCのbeta.jpの情報が取得できていることを確認できた。
[root@ContentsServerB named]# host -v beta.jp
Trying "beta.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53925
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;beta.jp. IN A
;; AUTHORITY SECTION:
beta.jp. 2542 IN SOA beta.jp. rname.invalid. 20230323 86400 3600 604800 10800
Received 74 bytes from 192.168.10.1#53 in 1 ms
Trying "beta.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25168
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;beta.jp. IN AAAA
;; AUTHORITY SECTION:
beta.jp. 2542 IN SOA beta.jp. rname.invalid. 20230323 86400 3600 604800 10800
Received 74 bytes from 192.168.10.1#53 in 5 ms
Trying "beta.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25451
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;beta.jp. IN MX
ContentsCから、ContentsCのalpha.jpの情報が取得できていることを確認できた。
[root@ContentsServerC ~]# host -v alpha.jp
Trying "alpha.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62792
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;alpha.jp. IN A
;; AUTHORITY SECTION:
alpha.jp. 3441 IN SOA alpha.jp. rname.invalid. 20230323 86400 3600 604800 10800
Received 75 bytes from 192.168.10.1#53 in 1 ms
Trying "alpha.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13386
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;alpha.jp. IN AAAA
;; AUTHORITY SECTION:
alpha.jp. 3441 IN SOA alpha.jp. rname.invalid. 20230323 86400 3600 604800 10800
Received 75 bytes from 192.168.10.1#53 in 0 ms
Trying "alpha.jp"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4646
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;alpha.jp. IN MX
;; ANSWER SECTION:
alpha.jp. 10232 IN MX 10 mail.alpha.jp.
Received 47 bytes from 192.168.10.1#53 in 1 ms
最後に
今回は、二回にわたりDNSサーバーを一通り構築してみました。
普段Ciscoばかりを触っているせいか、うまくいかないことが多く、
自分の知識・実力不足を感じた時間となりました。
こうして投稿という形でアウトプットしながら一つ一つ身に着けていきたいと思います。
ありがとうございました。