読者です 読者をやめる 読者になる 読者になる

私をペロペロするがよい

lazy_dog のブログです。

Arch Linux + NSD で仮想マシン用の DNS サーバを作った

Linux

Ansible で名前で指定して管理したかったので、DNS の勉強がてら作った。とりあえず今回は、内向き DNS のサービスとして動くまでが目標。

環境 + 環境作り

いつも通り、Arch Linux をインストールし、"pacman -Syu" した。

今回は、本来の名前 (表ホスト名) と裏の名前で、正引き・逆引きができるようにした。裏の名前も DNS のゾーンに書いていいかは、マナーとか RFC 的に良いか悪いかは不明。

NSD について

NSD (Name Server Daemon) は高性能で簡単なオープンソースの権威ネームサーバです。

http://unbound.jp/nsd4/

ということなので、シンプルな DNS サーバだった。NLnet Labs という研究所が作っているらしい。

一般的な、というより BIND と違い、DNS 情報をキャッシュするキャッシュサーバ機能が存在しない。NSD は「コンテンツサーバ」としての機能だけを持つ。詳しくは、下記がとても参考させて頂いた。

@IT:DNS Tips:ネームサーバの3つの働きとは
http://www.atmarkit.co.jp/fnetwork/dnstips/005.html

上記で言う、キャッシュサーバー機能こと「フルサービスリゾルバ」と、他のサーバから DNS 情報を教えてもらいに行く「スタブリゾルバ」は、同研究所の Unbound が担う。

NSD インストール

Arch Linux なら pacman で一発です。そう pacman ならね。

[root@bag-dns-01 ~]# pacman -S nsd
resolving dependencies...
looking for inter-conflicts...

Packages (1): nsd-4.0.3-1

...

いつもながら、華麗なお点前でした。ワザマエ!

nsd.conf を編集

/etc/nsd の配下に nsd.conf.sample がデフォルトで配置されているので、cp とかで nsd.conf にする。

nsd.conf の中身

nsd.conf は 3 つのセクションに分かれている。

  • server:
    • NSD の基本的な設定。グローバルオプション。
  • remote-control:
    • NSD をリモート管理する場合の設定。デフォルト無効。
  • zone:
    • DNS のゾーンの設定。ゾーンの数分、セクションが増えることになる。

他に、patternkey があるが、今回は解説しない。多分、使わないから。。。

コメントは "#" を先頭に指定。

server:

server: のセクションは、デフォルトで設定がされているため、ほぼ弄ることはない。おいらは、IPv6 を無効にするのと、zone ファイルの格納先を変更する設定のみを行った。

# listen on IPv6 connections
        do-ip6: no

# The directory for zonefile: files.  The daemon chdirs here.
# zonesdir: "//etc/nsd"
        zonesdir: "/etc/nsd/zones"

remote-control:

nsd-control コマンドから NSD を操作したい場合、このセクションの設定をする必要がある。おいらは使わなかったのでデフォルト。。。

zone:

ゾーン名とゾーンファイルの指定を行う。複数のセクションにすることで、ゾーンを複数指定することが可能。

# zone-1 192.168.0/24 - Front Network

 zone:
        name: example-zone.local
        zonefile: example-zone.local.zone

 zone:
        name: 0.168.192.in-addr.arpa
        zonefile: 0.168.192.in-addr.arpa.zone


# zone-2 192.168.1/24 - Backend Network

 zone:
        name: b1.example-zone.local
        zonefile: b1.example-zone.local.zone

 zone:
        name: 1.168.192.in-addr.arpa
        zonefile: 1.168.192.in-addr.arpa.zone

ゾーンファイルの作成

デフォルトでは /etc/nsd、ないし "zonesdir:" で指定したディレクトリにゾーンファイルを設置する。この DNS ゾーンファイルは、RFC で書式が決められているので、BIND でも NSD でも共通になる。

RFC 1035 - Domain names - implementation and specification
http://tools.ietf.org/html/rfc1035

ゾーンファイルは RHEL のウェブサイトなどを参考に、がんばって作った。見よう見真似で。

14.2.2. ゾーンファイルの編集
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-bind-zone.html

NSD の起動・停止・再起動

systemctl から行える。

  • 起動: systemctl start nsd
  • 停止: systemctl stop nsd
  • 再起動: systemclt restart nsd
    • ゾーンファイルの編集を行った際などは、再起動が必要

まとめ

とりあえず、必要最低限の DNS サーバは立てられたので、今後はもっと便利に活用できるよう勉強したい。