CentOS8でDNSサーバーをインストール・構築・名前解決の動作確認を実施したので手順をまとめました。
CentOS8のバージョンは以下となります。
$ cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
今回構築するDNSサーバーのホスト名は以下とします。
$ hostname dns.test.local
ドメインは「test.local」とします。
CentOS8「DNSサーバー(BIND)」インストール手順
CentOS8でDNSサーバーはdnfコマンドでインストールするので事前にアップデートを実施します。
$ dnf -y update
アップデート完了後以下コマンドで「BIND」をインストールします。
$ dnf -y install bind bind-utils
BINDインストール後、サービスの状態を確認します。
$ systemctl status named.service ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled) Active: inactive (dead) $
サービスはまだ立ち上がっていないことが分かります。
namedバックアップ
named.confを編集する前にバックアップをとっておきます。
$ cp -p /etc/named.conf /etc/named.conf_old $ ll /etc/named.* -rw-r-----. 1 root named 1991 11月 6 07:31 /etc/named.conf -rw-r-----. 1 root named 1984 11月 6 06:55 /etc/named.conf.rpmsave -rw-r-----. 1 root named 1984 11月 6 06:55 /etc/named.conf_old -rw-r-----. 1 root named 1029 9月 9 12:48 /etc/named.rfc1912.zones -rw-r--r--. 1 root named 1070 9月 9 12:48 /etc/named.root.key $
「named.conf」編集
「named.conf」を編集します。
今回は内部DNSサーバーを構築するため以下の設定をしました。
- 11-13行目:ローカルネットワークを定義(192.168.0.0/24)
- 16行目:IPv4での問い合わせ(リッスン)をすべて受け付ける
- 17行目:IPv6の問い合わせ(リッスン)を受け付けない
- 24行目:名前解決の問い合わせを受け付ける範囲を指定(自薦に設定したローカルネットワークを指名)
- 66-75行目:正引き、逆引きのゾーン定義を設定
$ vim /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. // acl network { 192.168.0.0/24; }; options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; 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; network; }; /* - 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; 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 "test.local" IN { type master; file "test.local"; allow-update { none; }; }; zone "196.180.10.in-addr.arpa" IN { type master; file "196.180.10.in-addr.arpa.rev"; allow-update { none; }; }; $
今回の設定はIPv6を使用していないため、以下コンフィグで不要なIPv6のログを抑制します。
※IPv4のみを使用します。
$ vim /etc/sysconfig/named # 最終行に追記 OPTIONS="-4"
設定後、以下コマンドでエラーが出ないことを確認します。
$ named-checkconf
正引きゾーンファイル作成
上記、「named.conf」で定義したゾーンから設定ファイルを作成します。
ホスト名からIPアドレスを名前解決するために「正引きゾーンファイル」を作成します。
ドメイン名は「test.local」でローカルネットワーク「192.168.0.0/24」の環境を作成します。
ゾーンファイルの作成は以下のフォルダで作成します。
$ cd /var/named/
$ vim test.local
「test.local」の設定内容は以下となります。
$TTL 86400 @ IN SOA dns.test.local. root.test.local. ( 2020110601 ; serial 3600 ; refresh 1hr 1800 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS dns.test.local. dns IN A 192.168.0.100 ntp IN A 192.168.0.101 dhcp IN A 192.168.0.102
逆引きゾーンファイル作成
逆引きゾーンファイルも正引きゾーンファイルと同じフォルダ内で作成します。
$ vim 0.168.192.in-addr.arpa.rev
逆引きゾーンファイルの設定内容は以下となります。
$TTL 86400 @ IN SOA dns.test.local. root.test.local. ( 2020110601 ; serial 3600 ; refresh 1hr 1800 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr ) IN NS dns.test.local. 100 IN PTR dns.test.local. 101 IN PTR ntp.test.local. 102 IN PTR dhcp.test.local.
作成したゾーンファイルをチェック
上記でゾーンファイルを作成したら、設定内容が間違っていないか、以下コマンドで確認をします。
$ named-checkconf -z 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 test.local/IN: loaded serial 2020110601 zone 0.168.192.in-addr.arpa/IN: loaded serial 2020110601
上記のように「error」、「fail」などの文字列がなければ成功です。
「firewall」でDNSの通信を許可する
次に「firewall」でDNSの通信を許可します。
事前にfirewallで現状の通信確認をします。
「services」でdnsが許可されていません。
$ firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
以下コマンドでdnsを許可します。
$ firewall-cmd --add-service=dns --permanent success
上記設定後、「firewall」を再起動します。
$ firewall-cmd --reload success
再起動後、再度firewallの内容を確認し、「services」でdnsが許可されていることが確認できます。
$ firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client dns ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules: $
DNS(BIND)サービス起動
上記確認後、DNSサービスを起動します。
$ systemctl start named $ systemctl enable named
サービスを確認し、DNSが起動していることを確認します。
$ systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2020-11-06 07:34:54 EST; 16min ago Main PID: 1823 (named) Tasks: 4 (limit: 11327) Memory: 88.1M CGroup: /system.slice/named.service mq1823 /usr/sbin/named -u named -c /etc/named.conf 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2620:1ec:8ec::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/A/IN': 2620:1ec:bda::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/AAAA/IN': 2620:1ec:bda::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/A/IN': 2620:1ec:bda::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2620:1ec:bda::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/A/IN': 2a01:111:4000::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm2.dns-tm.com/AAAA/IN': 2a01:111:4000::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/A/IN': 2a01:111:4000::9#53 11月 06 07:40:32 dns.test.local named[1823]: network unreachable resolving 'tm1.dns-tm.com/AAAA/IN': 2a01:111:4000::9#53 11月 06 07:49:06 dns.test.local named[1823]: network unreachable resolving 'a767.dscg3.akamai.net/A/IN': 2600:1480:1::c1#53 $
動作確認(名前解決)
DNSサーバーが正常に起動できたら、実際に名前解決ができるか確認をします。
「nslookup」コマンドでDNSサーバーを指名して名前解決を実施します。
正引き
$ nslookup dns.test.local 192.168.0.100 Server: 192.168.0.100 Address: 192.168.0.100#53 Name: dns.test.local Address: 192.168.0.100
逆引き
$ nslookup 192.168.0.100 10.192.168.0.100 100.0.168.192.in-addr.arpa name = dns.test.local.
上記のようにうまく名前解決ができれば完成です。
以上がCentOS8のDNSサーバー構築手順となります。
サーバーを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す