DNSサーバを立ち上げる(1)
MyDNS.JPのサービスで、DDNSのサブドメインを取得し、そのドメイン名を使ってWebサーバにアクセスするところまで記載しました。
マシン名(ホスト名)に www と付けた立場は…、ということで、DNSサーバの話に移っていきたいと思います。
ローカルネットワーク内で名前を解決する
仮に、IPアドレスの割り振りを下記の通りとします。
マシン名 | IPアドレス | DNSサーバ |
---|---|---|
(ルータ)グローバル側 | 123.456.789.012 | プロバイダのDNS1(プライマリ) プロバイダのDNS2(セカンダリ) |
(ルータ)LAN側 | 192.168.0.1 | |
www(Webサーバ) | 192.168.0.3 | 192.168.0.1 |
MYPC(クライアントWindows PC) | 192.168.0.10 | 192.168.0.1 |
今のところ、DNSサーバはありませんから、MYPCから、www.●●●.live-on.netでhttp接続すると、ホスト名がwwwかどうかなどは関係なく、●●●.live-on.net のサーバが不明なため、DNSサーバに設定した 192.168.0.1 のルータに問い合わせに行きます。
●●●.live-on.netのIPアドレスは、MyDNS.JPに通知したIPアドレスになりますから、MYPCが問い合わせたIPアドレスは123.456.789.012となります。ルータが受ける、ということです。
http://www.●●●.live-on.net ですから、ルータは、httpプロトコル(ポート80)に設定されたアドレス、192.168.0.3のポート80に変換します。
一旦、外(グローバル)に出ないと、名前の解決が出来ません。
そこで、●●●.live-on.net のDNSサーバを立てることになります。
live-on.net のDNSサーバは、MyDNS.JPの管理ですが、そのサブドメインである●●●.live-on.netは、自身で管理することが出来ます。
※以降の記載は、あくまでも仕組みを理解するための試験的な運用です。セキュリティ面に関しては、責任を負いかねます。
DNSサーバを設置する
ESXi7.0上に立てた仮想マシン CentOS 7 へのインストールになります。使用するのは、DNSコンテンツサーバ用のソフトウェア、BINDです。
インストールは、
# yum install bine
dnsサービスへのアクセスを通すようにファイアウォールの設定を変更します。
# firewall-cmd --add-service=dns
success
# firewall-cmd --runtime-to-permanent
success
ゾーンデータファイルの作成
次に、ゾーンデータファイルを作成します。
名前からアドレスを検索するための正引きを行うためのデータファイルです。ファイル名は絶対にこれ、ではなく、後で記載する named.conf に定義しますので、自由です。
/var/named/●●●.live-on.net.zone
$TTL 1D
@ IN SOA ns1.●●●.live-on.net. root.●●●.live-on.net. (
2021031100 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.●●●.live-on.net.
www IN A 192.168.0.3
ns1 IN A 192.168.0.2
ns1 は、DNSサーバのホスト名です。
キャッシュの有効期限が 1D = 1日間
リフレッシュ間隔が 1D = 1日間
リトライ間隔が 1H = 1時間
情報破棄時間が 1W = 1週間
情報有効時間が 3H = 3時間
です。
2行目の root.●●●.live-on.net. は、 root@●●●.live-on.net というメールアドレスを示していますが、特にDNSサーバの運用において通知されることもないようです。
IPv4用逆引きゾーンファイルの作成
次に、IPv4用逆引きゾーンファイルを作成します。こちらのファイル名も決まったルールはありません。
/var/named/●●●.live-on.net.rev
$TTL 1D
@ IN SOA ns1.●●●.live-on.net. root.●●●.live-on.net. (
2021031100; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.●●●.live-on.net.
2 IN PTR ns1.●●●.live-on.net.
3 IN PTR www.●●●.live-on.net.
最後の2行、2 は、 192.168.0.2 の、 3 は、192.168.0.3 の省略形になります。
正確には、 2.0.168.192.in-addr.arpa. の略、3.0.168.192.in-addr.arpa. の略となります。
※ IPv4 のみでの運用を想定しているため、IPv6用逆引きゾーンファイルは作成しません。
named.confファイルの編集
/etc/named.conf
options {
listen-on port 53 { 127.0.0.1;
192.168.0.0/24; };
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 {
127.0.0.1;
192.168.0.0/24;
};
/*
- 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;
allow-recursion { localhost; localnets; };
allow-query-cache { localhost; localnets; };
forwarders{
XXX.XXX.XXX.XXX;
XXX.XXX.XXX.XXX;
};
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 "data/named.run";
severity dynamic;
};
category lame-servers { null; };
};
// 内部向け設定
view "internal" {
match-clients {
localnets;
192.168.0.0/24;
};
#match-destinations { localnets; };
zone "." IN {
type hint;
file "named.ca";
};
zone "●●●.live-on.net" IN {
type master;
file "●●●.live-on.net.zone";
allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "●●●.live-on.net.rev";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
forwarders に記載の XXX.XXX.XXX.XXX は、プロバイダのDNSを設定しておくことで、DNSサーバで解決できない名前をこちらに振ります。ですので、「名前解決できない」という問題を防ぎます。
黄色のファイル名は、先に作成した正引き・逆引きのゾーンファイルの名前です。
編集・作成した3ファイル以外は、BINDインストール時のオリジナルで問題ありません。
DNSサーバを稼働させる
では、BINDのサービスを起動させてみます。
# systemctl start named.service
自動起動の設定もやっておきます。
# systemctl enable named.service
正しく動いているか確認する
hostコマンドで確認します。最後のパラメータはDNSサーバのIPアドレスになります。
■正引きの確認
# host www.●●●.live-on.net 192.168.0.2
Using domain server:
Name: 192.168.0.2
Address: 192.168.0.2#53
Aliases:
www.●●●.live-on.net has address 192.168.0.3
■逆引きの確認
# host 192.168.0.3 192.168.0.2
Using domain server:
Name: 192.168.0.2
Address: 192.168.0.2#53
Aliases:
3.0.168.192.in-addr.arpa domain name pointer www.●●●.live-on.net.
ひとまず、DNSサーバとしては、機能しそうな感じがします。
続きは、DNSサーバを立ち上げる(2)になります。