今回は、名前解決を行うサービスであるBINDをUbuntu Server 22.04にインストールし、実際に名前解決ができるように設定する手順を記載します。
期待する目標
本手順で期待する目標は以下の通りです。
- Ubuntu Server 22.04にBINDをインストールできる
- BINDの基本的な構成ファイルを理解できる
- ゾーンの理解ができる
- BINDの基本的な設定ができる
- BINDで名前解決ができる
前提条件
今回使用する仮想マシンは以下の通りです。
- CPU : 2vCPU
- MEM : 4GB
- DISK : 60GB
- OS : Ubuntu 22.04 Server
- IP : 192.168.100.177
- Hostname : dev-bind
- ドメイン : willserver.asia
また、DNSサーバに名前解決をさせても良いのですが、今回は別のクライアントを用意しそこから名前解決を行って正常に名前解決ができるか、確認したいと思います。
BINDインストール
Ubuntu 22.04 ServerにSSH等で接続または、ターミナルを起動し、コマンドが入力可能な状態にしておきます。
以下のコマンドを実行し、BINDをインストールします。
$ sudo apt install bind9 bind9utils
BINDがインストールできたら、以下のコマンドを実行しBINDが実行状態となっていることを確認します。
なお、Ubuntu 22.04では、BINDのサービスがnamedという名前で動いています。
$ systemctl status named
● named.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-06-07 14:42:52 UTC; 2min 47s ago
Docs: man:named(8)
Process: 24733 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 24734 (named)
Tasks: 4 (limit: 4538)
Memory: 7.3M
CPU: 35ms
CGroup: /system.slice/named.service
mq24734 /usr/sbin/named -u bind
named.serviceのActiveが[active (running)]となっていることを確認します。
以上で、BINDのインストールは完了です。
BINDの構成を理解する
BINDの基本ファイルは5つとなります。
サービスのルートは[/etc/bind/]となります。
配下の[named.conf]ファイルは、BIND設定ファイルの場所を定義する基本的な設定ファイルとなります。
ここに記載するのは、BINDゾーン情報ファイルのフィアルパスとなります。
[named.conf.options]ファイルは、BINDのオプションを定義するファイルとなります。
オプションには、ACL(Access Control List)やDNSサーバが受け持つ名前解決の範囲等を指定します。
[named.conf.xxxx-zones]ファイルは、IPとホスト名を紐付けるゾーンファイルのパスを定義するファイルとなります。
ファイル名は[named.conf]にパスを記載するため、任意の名前で問題ありません。
また、このゾーン情報ファイルには、IP→ホスト名情報を定義した[BIND正引きゾーンファイル]とホスト名→IP情報を記載した[BIND逆引きゾーンファイル]のパスとゾーンを定義します。
ゾーンの理解
DNSサーバにはゾーンと言う概念が存在します。
ゾーンというのは、名前解決を行う範囲のようなもので、正引きのゾーンと逆引きのゾーンが存在します。
正引きのゾーンは、基本的にはドメイン単位でゾーニングを行います。
hogehoge.localというドメインがあり、これが1つの正引きゾーンとなります。
hogehoge.localに存在するサブドメイン等はすべてこのゾーンで名前解決を行います。
例えば、fugafuga.hogehoge.localというFQDNをDNSサーバで名前解決をする場合、以下の手順で名前解決がされます。
- fugafuga.hogehoge.localをDNSサーバに問い合わせする
- hogehoge.localは自DNSサーバのゾーンなので、ゾーンファイルを参照する
- ゾーンファイル内にfugafugaのIPアドレスが定義されていればIPアドレスを返答する
- 定義されていなければ、他のDNSサーバに問い合わせを行う(フォワーダー)
このように、自DNSサーバがゾーンファイルを持っているかで自DNSサーバが応答するか、別の外部のDNSサーバが応答するかが変わります。
BIND正引きゾーンファイルは、任意の名前のファイル名で構成します。
慣習的に、名前解決を行うゾーンのFQDN名をファイル名とすることが多いです。
ここには、ホスト名とIPアドレスを紐付ける情報を記載します。
BIND逆引きゾーンファイルには、IPアドレスからホスト名を解決する際に使用し、IPアドレスとホスト名などの情報を記載します。
慣習的にIPのゾーンを逆に入れ替えた名前を使用するのが一般的です。
例えば、[192.168.100.0/24]のネットワーク内のホスト名を検索する場合は、[100.168.192.db]のように、アドレスの第4オクテットを抜いた形で逆から記載します。
BINDの設定
BINDの構成とゾーンが理解できたところでBINDの設定を行っていきます。
はじめに設定するのは、BIND設定ファイルとなります。
以下のコマンドを使用して設定してきます。
$ sudo vi /etc/bind/named.conf
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
//以下にBINDゾーン設定ファイルのパスを追記。
//ファイル名については、任意の名前で問題ありません。
include "/etc/bind/namd.conf.local-zones";
BIND設定ファイルの設定が完了したら、BIND設定オプションファイルを設定していきます。
$ sudo vi /etc/bind/named.conf.options
// ACLを追記します。
// acl [任意のACL名] {
// アクセスを許可するネットワークアドレス/プレフィックス;で定義します。
//
//};
acl local-network{
192.168.100.0/24;
};
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
//フォワーダーブロックのコメントアウトを外します。
//フォワーダーのDNSサーバを設定します。
//フォワーダーは自DNSサーバが名前解決できない場合に問い合わせを行うDNSサーバです。
//
forwarders {
192.168.100.15;
};
//クエリを受け付ける範囲を指定します。
//基本的には、自分自身とACLで定義したACL名を追記します。
allow-query{
localhost;
local-network;
};
//ドメインの再起問い合わせを実行する場合は、以下の設定を追記します。
recursion yes;
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
};
BIND設定オプションファイルの設定が完了したら、BINDゾーン情報ファイルを設定していきます。
BINDゾーン情報ファイルには、ゾーンとBIND正引きゾーンファイル・BIND逆引きゾーンファイルを定義します。
ここで作成するファイルは、BIND設定ファイルでincludeしたファイルパスのファイルとなります。
設定フォーマットは以下になります。
zone "[ドメイン名]" IN {
type master;
file "/etc/bind/[ドメイン名]";
allow-update { none; };
};
zone "[IPレンジ].in-addr.arpa" IN {
type master;
file "/etc/bind/[IPレンジ].db";
allow-update { none; };
};
実際に定義したファイルは以下の通りとなります。
$ sudo vi /etc/bind/named.conf.xxxxx-zones
// willserver.asiaに対応するゾーンを定義
zone "willserver.asia" IN {
type master;
file "/etc/bind/willserver.asia"; //BIND正引きゾーンファイルのパスを定義(後に作成)
allow-update { none; };
};
// 192.168.100に対応する逆引きゾーンを定義
zone "100.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/100.168.192.db"; //BIND逆引きゾーンファイルのパスを定義(後に作成)
allow-update { none; };
};
BINDゾーン情報ファイルの設定が完了したら、BIND正引きゾーンファイルを作成していきます。
このBIND正引きゾーンファイルは、[BINDゾーン情報ファイル]に記載したパスで作成してください。
また、このファイルがホスト名→IPを紐付けるものとなるため、BIND正引きゾーンファイルに存在しないホスト名は名前解決ができないため、ゾーン内で名前解決を行いたいホストとIPアドレスはすべて記載してください。
BIND正引きゾーンファイルは以下のフォーマットで記載します。
$TTL 86400
@ IN SOA [DNSサーバのFQDN]. [管理者のメールアドレス(@を.に変えて記載)]. (
[年月日任意の番号2桁で記載] ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS [DNSサーバのホスト名を記載].
IN A [DNSサーバのIPアドレスを記載]
[名前解決をするホスト名を記載] IN A [ホスト名に対応するIPアドレスを記載]
上部のSOAレコードについては、おまじない部分がありますが、実際に名前解決をしてほしいものを下の段に記載します。
ベースは [(ホスト名) IN (レコード種別) IPアドレス]のように記載します。
今回設定したコンフィグファイルは以下のようになります。
$ sudo vi /etc/bind/willserver.asia
$TTL 86400
@ IN SOA dev-bind.willserver.asia. root.willserver.asia. (
2022060801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dev-bind.willserver.asia.
IN A 192.168.100.177
dev-bind IN A 192.168.100.177
dev-win11 IN A 192.168.100.178
BIND正引きゾーンファイルの設定が完了したら、最後にBIND逆引きゾーンファイルを設定していきます。
逆引きゾーンファイルも正引きゾーンファイルと同様の設定を行います。
設定のフォーマットは以下の通りです。
$TTL 86400
@ IN SOA [DNSサーバのFQDN]. [管理者のメールアドレス(@を.に変えて記載)]. (
[年月日任意の番号2桁で記載] ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS [DNSサーバのホスト名を記載].
# IP アドレスに関連付けるホスト名を定義
[ホストの第4オクテット] IN PTR [FQDN].
上段のSOSレコードについては、おまじない部分がありますが、正引きと同じように下段に名前解決を行い設定を記載します。ベースは [(解決させたいホストの第4オクテット) IN PRT (FQDN).]のように記載します。
今回設定したコンフィグファイルは以下のようになります。
$ sudo vi /etc/bind/100.168.192.db
$TTL 86400
@ IN SOA dev-bind.willserver.asia. root.willserver.asia. (
2022060801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
IN NS dev-bind.willserver.asia.
177 IN PTR dev-bind.willserver.asia.
178 IN PTR dev-win11.willserver.asia.
以上で、BINDの設定は完了です。
設定完了後、以下のコマンドを使用してnamedのサービスを再起動します。
再起動時に起動しない場合は、コンフィグが間違っている可能性があるので、設定をよく確認しましょう。
$ sudo systemctl restart named
補足ですが、BINDの設定ファイルは、FQDNの後ろにドット[.]を入れる必要があるため、そこの抜けがないことを十分に確認してください。
また、設定ファイルの後ろにセミコロン[;]をつける必要があるので、合わせて確認します。
結構この手のミスでサービスが起動できない場合が多いです。
BIND稼働確認
BINDの設定が完了し、DNSサーバが起動することができたら、名前解決を行っていきます。
今回名前解決に使用するOSはWindowsです。
コマンドプロンプトを起動して名前解決を行ってみます。
nslookupコマンドで対話モードに入り、参照するDNSサーバを変更することで、既定以外のDNSサーバを参照して名前解決をすることができます。
こちらは正常に名前解決ができていそうです。
正引きの確認ができたら、逆引きの確認もしてみます。
こちらは、タイムアウトしましたが、一応正常に逆引きできていそうです。
DNSサーバの名前が前回検証したIPアドレスを使用しているため、他のホスト名が表示されていますが、ご愛嬌。
以上で、Ubuntu 22.04でBINDを使用したDNSサーバの構築手順は完了です。
まとめ
今回は、Ubuntu 22.04 Serverを使用して、BINDをインストールし、DNSサーバを構築しました。
Windows ServerのDNSサーバと違い、ゾーンの理解やファイルによるレコードの追加があるため、少し敷居は上がります。自宅にDNSサーバがない場合はこの機会に構築して運用してみてはいかがでしょうか?
内部にDNSサーバを持っていると、名前解決を捻じ曲げられるので、嫌なドメインや名前解決をあえてさせないようにすることで、DNSベースのアドブロック等が作成できます。
また、ネットワークとサーバの間を見ることができるので、意外と面白いです。
おまけ
本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
willserverのnoteも開設したのでフォローお願いします。
コメント