今回は、自宅でローカルのDNSサーバを構築した(正引きのみ)ので備忘録も兼ねて共有します。
ドメイン名の部分を置き換えるだけで動くようになっているので、とりあえず構築をしてから細かな設定をいじっていただければと思います。
この記事ではCentOS8を用いてサーバ構築を行っており、もしCentOS8のインストール方法や初期設定が知りたい方は下の記事もご覧ください!!



今回構築する環境
今回、私が勉強がてら構築したDNSサーバは以下のような構成になっています。(手作りなので見にくいかもです。)
デスクトップPC内のVirtualBox上に仮想サーバを3台立てて、DNSサーバを介してTEST用サーバからWEBサーバの名前解決ができるかを調べます。
※「DNSの有効範囲」でGWと書いているところはDNSの間違いです。。。
構築手順一覧
まずは、DNSサーバ構築に必要なことをリストアップしてみたいと思います。
- Firewallの穴あけ
- BINDのインストール
- IPv6の問い合わせ無効設定
- configファイル修正
- zoneファイル作成
- 構文チェック・サービスの起動設定
だいたいこんな感じです。
事前設定として、DNSサーバ・Webサーバ・TestサーバのIP、ホスト名は設定しておいてください。
1 2 3 4 5 6 7 8 |
ホスト名の変更 # hostnamectl set-hostname <設定したいホスト名> # reboot IPの変更 # vi /etc/sysconfig/network-script/ifcfg-enp0s3 IPADDR="設定したいIPアドレス" # systemctl restart NetworkManager |
1.Firewallの穴あけ
まずは、DNSサーバのファイアーフォールに穴を空けます。ファイアーフォールを元々無効にしている方は必要ありません。
1 2 3 |
Firewallの穴あけ # firewall-cmd --permanent --add-service=dns # firewall-cmd --reload |
firewall-cmdはオプションの“permanent” を付けないと恒久的な設定にならない(再起動などで戻ってしまう)のでを気をつけ下さい。
設定を変更した後は設定の再読み込みも忘れずに!
2.BINDのインストール
次にBIND(DNSサーバにするために必要なアプリケーション)をインストールします。
1 2 |
Bindのインストール # dnf -y install bind bind-utils |
最終的にnslookupで名前解決ができる確認したいので”bind-utils”もインストールしておきました。
3.IPv6問い合わせ無効設定
IPv6での問い合わせを無効化することで名前解決速度が向上するようなので無効化しておきます。
1 2 3 |
IPv6問い合わせ無効 # vi /etc/sysconfig/named OPITONS="-4" #左の文言を追記 |
4.configファイルの編集(/etc/named.conf)
zoneファイルの前に、まずは/etc/named.confを編集します。
とりあえずバックアップをとりましょう。
1 |
cp /etc/named.conf /etc/named.conf.ORG |
コマンド”# vi /etc/named.conf”でファイルを下記のように修正してください。※横にコメントを書いてある部分のみ変更しています!が、コメントごと貼り付けると動かなかったりするのでコメントはファイルに書き込まない方が良いです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
options { listen-on port 53 { 127.0.0.1; 192.168.3.11; }; //修正:自IPアドレス(DNSサーバのIPアドレス)を追加 //listen-on-v6 port 53 { ::1; }; //修正:コメントアウトしてIPv6を無効化する 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; }; //修正:anyにすることでどこからでも問い合わせを受け付ける recursion yes; forward only; //追記:知らないホスト名を自分では解決処理しない forwarders { 192.168.3.1; }; //追記:知らないドメインが来た場合の問い合わせ先を指定(GATEWAY(無線LANルータ)にする) dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; 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"; zone "testdomain.local" { //以下の行全てを追記:後に作るzoneファイルの情報を記す。ドメイン名によって適したものに置き換え type master; //メインのDNSサーバにするのでmasterに指定 file "testdomain.local.zone"; //ドメイン名.zoneという名前にする(ファイルの階層は/var/named/) allow-update {none;} ; allow-transfer { none; }; }; |
コレでnamed.confの設定は完了です。
変更点を確認したい場合はdiffでバックアップファイルと見比べてください。
1 |
diff /etc/named.conf /etc/named.conf.ORG |
5.zoneファイル作成(/var/named/testdomain.local.zone)
設定ファイルを修正できたので、次はzoneファイルを作成します。
今回、私はtestdomain.localというドメインを作成するので、ファイル名はtestdomain.local.zoneにします。それから、ファイルの権限・所属グループの変更も必要です。
1 2 3 4 5 6 |
zoneファイルを作成(自分の作成するドメイン名に合わせて適宜変更が必要) # touch /var/named/testdomain.local.zone zoneファイルの権限を変更する # chgrp named /var/named/testdomain.local.zone # chmod 640 /var/named/testdomain.local.zone |
次にファイルに必要事項を追記して行きますが、この中身も使用するIP・ホスト名に合わせて設定を変えてください。
今回私は以下のように設定します。
- DNSサーバ
- ホスト名:dns.testdomain.local
- IP:192.168.3.11
- WEBサーバ
- ホスト名:www.testdomain.local
- IP:192.168.3.20
- TESTサーバ
- ホスト名:test.testdomain.local
- IP:192.168.3.12
- 管理者用メールアドレス(設定していないのでダミー)
- ホスト名:root.testdomain.local
1 2 3 4 5 6 7 8 9 10 11 12 |
$TTL 86400 @ IN SOA dns.testdomain.local. root.testdomain.local. ( 2020050502 ;Serial 3600 ;Refresh ゾーン転送の間隔 300 ;Retry 転送失敗時リトライの間隔 360000 ;Expire ゾーンファイルの保持時間 86400 ) ;Negative他サーバでキャッシュされる時間 IN NS dns.testdomain.local dns IN A 192.168.3.11 www IN A 192.168.3.20 test IN A 192.168.3.12 |
こんな感じでzoneファイルを書いて行きます。
6.構文チェック・サービスの起動設定
ここまでくれば後はもう少しです。
構文チェック
まず、/etc/named.confと/var/named/****.zoneの2ファイルの構文にエラーがないか確認します。
1 2 |
configファイル,zoneファイルの構文チェック # named-checkconf -z |
named-checkconfコマンドでオプション”z”をつけることでzoneファイルもチェックしてくれます。
以下のように出力されればOK
1 2 3 4 5 6 |
zone localhost.localdomain/IN: loaded serial 0 zone localhost/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone 0.in-addr.arpa/IN: loaded serial 0 zone testdomain.local/IN: loaded serial 2020050502 |
サービス起動設定
サービスを再起動(元々立ち上がっていないが、念のため再起動にして一度サービスを落とす)し、自動起動設定も行っておく。
1 2 3 |
サービスの再起動と自動起動設定 # systemctl restart named # systemctl enable named |
エラーが出ず、再起動が完了したら最後に名前解決ができるか確認しましょう。
もし、エラーがでて再起動できていない場合は、”systemctl status named”を入力すると何かヒントが得られるはずです。
DNSサーバの変更・確認
構築したDNSサーバで名前解決ができるかを確認する前に、まずは、下ネットワーク図の“DNSの有効範囲”にある3サーバ(DNS・WEB・TEST)のネットワーク設定を確認し、DNSサーバの設定を変更しましょう。
(デフォルトでは、GATEWAY/ルータがDNSサーバとして登録されているはず※自分の場合は192.168.3.1)
DNSサーバを変更する方法
下のコマンドを入力しましょう。
1 |
# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 |
すると、↓の様に表示されるはずです。
1 2 3 4 5 6 7 8 9 |
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" ~~~中略~~~ IPADDR="192.168.3.11" PREFIX="24" GATEWAY="192.168.3.1" DNS1="192.168.3.1" //←ここをDNSサーバのIPアドレスに変更(192.168.3.11) |
中にも書いていますが、「DNS1=”xxx.xxx.xxx.xxx”」の部分をDNSサーバのアドレスにしてください。
コレを3台分。。。。
さらに変更した後は“# systemctl restart NetworkManager”コマンドで再起動させる必要があります。
確認する際は
“# cat /etc/resolv.conf”を叩いて、DNSサーバのIPアドレスになっているかを確認しましょう。
コレでやっと名前解決を確認する準備が整いました。
名前解決の確認
では、名前解決ができるかを確認します。
まず、TEST用サーバ/test.testdomain.localにbind-utilsをインストールしていることを確認し(“# dnf -y install bind-utils”)、nslookupコマンドでWEBサーバ/www.testdomain.local確認します。
“# nslookup www.testdomain.local”
1 2 3 4 5 6 |
[root@test ~]# nslookup www.testdomain.local Server: 192.168.3.11 Address: 192.168.3.11#53 Name: www.testdomain.local Address: 192.168.3.20 |
上のように、Address欄にWEBサーバのIPアドレスが表示できましたので、名前解決ができることが確認できました。
というわけで今回は、CentOS8でDNSサーバを構築する手順をお知らせしました!
ここで悩んでいる、や、その他わからないことはコメントにてお願いします。
では〜〜〜〜
コメント
[…] 【BIND】(自宅用)DNSサーバをCentOS8で構築する方法・手順を公開 […]