目的

MacPCでDNSサーバを構築するメモです。
MacOSサーバではありませんので、サーバの場合、同じ手順でできるかは不明です。

かなり試行錯誤で設定したので、作業手順に抜けがあるかもしれません。

いきさつ

tmpserverというホスト名がローカルネットワーク上にあります。
スマフォからそのサーバにIPではなく、ホスト名でアクセスするという仕様があり、その名前解決を行うために
MacでDNSサーバをたてて、今回の設定を行いました。

環境

  • Mac OS Catalina 10.15.2

参照ページ

Qiita macOS Server用 BIND(DNSサーバ)のセットアップ
Qiita macでnslookupできるけどpingできない時の対処法
Mazn.net nslookupでホスト名引けるのにpingに失敗する@Windows
Aterm 詳細設定-DNSルーティング設定
日本ネットワークインフォメーションセンター ドットレスドメイン名(Dotless Domain Names)とは

実装手順

MacでDNSサーバを構築する場合は、BINDというライブラリ・サービスが必要なようです。

で、こちらMac OS Catalinaでは標準でインストールされていません。
昔のMacOSには、インストールされていたようで、BINDを使ったDNS設定ファイルも一通り揃っていて、構築楽だったよう。
…にネット上調べて見受けられました。

ただMac OS Catalinaですと、インストールされていないので、導入します。
以降Macのターミナルアプリでの操作となります。

まず、以下コマンドで、BINDをインストールします。特に問題なくインストールできると思います。

BINDインストール
$ brew install bind

以下コマンドでBINDサービス起動します。

BINDサービス起動
$ sudo brew services start bind

以下コマンドでサービスの起動確認をします。

起動確認
$ ps awux | grep -v grep | grep named

->root  XXX .... /usr/local/opt/bind/sbin/named -f -c /usr/local/etc/named.conf

上記コマンドの出力結果の最後に/usr/local/etc/named.confと出力されると思いますが、こちらがBIND(DNS)の設定ファイルになると思いました。
ということで、次に設定ファイルを修正します。(事前にバックアップを取っておいた方がよいです。)

BIND設定ファイル
vi /usr/local/etc/named.conf

ここでチェック&修正する項目は以下です。

  • options項目のdirectory値をチェック
  • DNSに設定するサーバ値を記入する

options項目のdirectory値をチェック

設定ファイルの20行目ほどに directory "/usr/local/var/named";とあり、このパスがこの後設定するzoneファイルのパス元になるので、メモって置きます。

DNSに設定するサーバ値を記入する

設定ファイルにzoneファイルの参照設定を行います。
すでにlocalhostzoneファイルの記述があるので、その下に以下を追記しました。

zoneファイルの参照設定
zone "tmpserver" IN {
    type master;
    file "tmpserver.zone";
    allow-update { none; };
};

zoneファイルを設定する

次に上で少し書いたzoneファイルというものを設定します。
簡単に書くと、IPとドメインの対応や応答処理について書かれたファイルというものだと私は認識しています。
options項目のdirectory値をチェック項目でメモしたパスに遷移します。

zoneファイル
cd /usr/local/var/named

遷移後、ディレクトリ内を見ると、localhost.zoneなどのファイルの存在が確認できると思います。
このディレクトリにtmpserver用のzoneファイルを新しく作成します。

zoneファイル
vi tmpserver.zone
もしくは
localhost.zoneをコピーして作成も良いかもしれません。

tmpserver.zoneの中身は以下としました。

tmpserver.zoneの中身
$TTL 86400
@ IN SOA @ root.tmpserver. (
    50 ; serial (d. adams)
    3H ; refresh
    15M ; retry
    1W ; expiry
    1D ; minimum
    )

@   IN NS @
@   IN A  192.168.1.11
ファイル内の設定値について少し書くと、
私は基本localhostのコピーとしました。
ファイル全体とおして出てくる@は自分自信tmpserverのことのようです。
2行目のroot.tmpserver.はメアドのことのようで適切に設定。
最後の行の192.168.1.11はtmpserverのIPアドレスです。
重要かもzoneファイル変更する事にserial値を変更(増やしていく)必要があるとの記載がありました。それを信じて、一応変更毎に1ずつ増やして行きました。  

作成したzoneファイルの記載が正しいか以下コマンドで確認できます。

zoneファイルの記載チェック
/usr/local/sbin/named-checkzone tmpserver /usr/local/var/named/tmpserver.zone

以下コマンドでBINDサービス再起動します。

BINDサービス再起動
$ sudo brew services restart bind

最後にMacのネットワークのDNS設定を変更します。
DNSは通常ルーターなどに設定されていることが多いですが、今回は127.0.0.1にします。
設定方法は システム環境設定 → ネットワークから行います。

設定は以上です。
これでDNSサーバを構築できていると思うのですが、冒頭で書いたとおり、かなり試行錯誤したので、不足があるかもしれません。

以下コマンドでうまく名前解決ができているか確認できます。

名前解決チェック
$ dig tmpserver

->
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
...

;tmpserver.			IN	A

;; ANSWER SECTION:
tmpserver.		86400	IN	A	192.168.1.11
ANSWER: 1となっていれば成功です。0だとどこか記載ミスがあります。

ドットレスドメインのpingについて

名前解決できたので、pingコマンドを実行したのですが、うまく通信できませんでした。 今回tmpserverというホスト名に.comなどが付かないドットレスドメインというものなのですが、、 特にWindowsだと、そのまんまの名前では通信確認できないようです。

Mac OS からのpingについて

参照サイトのように以下コマンドにて、サービス再起動で通信できるようになりました。

pingサービス再起動
sudo killall -HUP mDNSResponder

Windows からのpingについて

知らなかったのですが、ドットレスドメインは以下のやり方のように最後に.を付けないとpingが通らないようです。

Windowsでのping
ping tmpserver.

ことの発端

そもそもtmpserverというサーバにドットレスドメインを付けたから上記のような作業を行う必要があると思っています!

  • ドットレスドメインですと、ルーターのルーティング設定に設定できませんでした!
  • ルーターのDNSで設定できないから、DNSサーバを立てようということになりました!
  • zone設定もネット上でのサンプルはドットありの書き方がほとんどでめちゃくちゃ苦労しました!
  • tmpserverのドメインは他でも使っていて、今更変更できないようです!
  • 参照にもあるとおりドットレスドメインは推奨されないよう!
  • 今後ドットレスドメインを付けているエンジニアがいたら、ちょっと見損ないそう!!!!!!!

    この知識が間違っていたら申し訳ない