メインコンテンツへスキップ

NSDとUnboundによる内部向けDNSサーバの構築

··2 分·
Unbound Nsd Linux
Makoto Morinaga
著者
Makoto Morinaga
技術メモ、コーディング、環境構築のための個人ノート。
目次

LAN環境で各種サービスを複数公開していると、どのサーバで何のサービスを公開しているか分からなくなります。そのため、サービスに対してipアドレス指定ではなく、ドメイン名指定でアクセスしたくなります。 また、サービスを別サーバへ移行する場合も、ipアドレス指定ではなく、ドメイン名指定にしておけばブックマーク等の修正を最小限にでき便利です。

そこで内部向けのDNSサーバを1台構築し、内部向けドメイン名の名前解決を行います。

DNSサーバ機能の有名所としては、bindがありますが、今回はNSD(DNSコンテンツサーバ機能)とUnbound(DNSキャッシュサーバ機能)で構築します。

NSD (Authoritative DNS Server) Setup
#

まずは、内部ドメインの情報(権威情報)を定義・公開するコンテンツサーバを構築するために、NSDを構築します。

Installing NSD
#

サーバにて以下のコマンドでNSDをインストールします。

Terminal
# arch linux の場合
sudo pacman -S nsd

NSDの初期設定
#

/etc/nsd/nsd.confを以下のように編集します。

なお、今回NSDはunboundと組み合わせて使用しますので、ポートの衝突を防ぐために、NSDで使用するポートを 53530 に設定します。

/etc/nsd/nsd.conf
server:
    ip-address: 127.0.0.1                      # ListenするIPアドレス
    do-ip6: no                                 # IPv6は使用しない
    port: 53530                                # 使用するPort番号
    zonesdir: "/etc/nsd/zone"                  # zoneファイルの保存場所
    hide-version: yes                          # バージョンの問い合わせには応答しない
    identity: "Home network authoritative DNS" # CH TXT ID.SERVERの問い合わせに対する応答
zone:
    name: "mkt3.dev"                      # ゾーン名。環境にあわせて適宜する。ここでは例としてmkt3.dev
    zonefile: "mkt3.dev.zone"             # zoneファイルの保存場所。zonesdir配下の場所を記述。

zoneファイルの設定
#

/etc/nsd/nsd.confで指定したzonefile(例 mkt3.dev.zone)を以下のように編集します。

/etc/nsd/zone/mkt3.dev.zone
$TTL 86400
@ IN SOA ns.mkt3.dev. postmaster.mkt3.dev. (
        2018071301 ; Serial(更新日が分かりやすいように日付+連番)
        28800 ; Refresh
        14400 ; Retry
        3600000 ; Expire
        86400 ) ; Minimum
@  IN NS ns.mkt3.dev.
ns IN A  192.168.10.10 ; DNSキャシュサーバのIPアドレスを指定。例として、192.168.10.10を設定

NSDサービスの起動と有効化
#

以下のコマンドで nsdサービスを起動します:

Terminal
sudo systemctl start nsd.service

さらに、以下のコマンドで nsdサービスを起動時に有効にします:

Terminal
sudo systemctl enable nsd.service

NSDの動作確認
#

以下のコマンドで先ほど登録した内部ドメイン(ここでは、ns.mkt3.dev)が名前解決できることを確認します:

Terminal
drill @127.0.0.1 -p 53530 ns.mkt3.dev

Unbound(DNSキャッシュサーバ機能)の構築
#

次に、内部向けのDNSキャッシュサーバを構築するために、Unboundを構築します。

Unboundのインストール
#

サーバにて以下のコマンドでunboundをインストールします:

Terminal
# arch linux の場合
sudo pacman -S unbound

Unboundの初期設定
#

/etc/unbound/unbound.confを以下のように編集します。

/etc/unbound/unbound.conf
server:
  interface: 0.0.0.0 # 全てのインターフェイスで listen
  use-syslog: yes
  username: "unbound"
  directory: "/etc/unbound"
  access-control: 192.168.10.0/24 allow # 内部ネットワークからの問い合わせを許可。ここでは、例として192.168.10.0/24
  do-ip6: no
  do-not-query-localhost: no

# stub-zoneを定義して内部ドメインへの問い合わせはnsdへ問い合わせるようにする
stub-zone:
  name: "mkt3.dev"
  stub-addr: 127.0.0.1@53530

# 内部ドメイン以外の問い合わせは、googleのパブリックDNSサービス(8.8.8.8)へfoward
forward-zone:
  name: "."
  forward-addr: 8.8.8.8

Unboundサービスの起動と有効化
#

以下のコマンドで unboundサービスを起動します:

Terminal
sudo systemctl start unbound.service

さらに、以下のコマンドで unboundサービスを起動時に有効します:

Terminal
sudo systemctl enable unbound.service

Unboundの動作確認
#

以下のコマンドでunboundにて外部のドメインと登録した内部ドメインが名前解決できることを確認します:

Terminal
drill @127.0.0.1 -p 53 www.google.co.jp # 外部のドメイン
drill @127.0.0.1 -p 53 ns.mkt3.dev # 登録した内部ドメイン

iptablesの設定
#

内部向けDNSサーバとしてUnboundをLAN内に公開しますので、iptablesで53番ポートへアクセスを許可します。

Terminal
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

iptablesの具体的な設定方法は、iptablesの設定をご参照ください。

関連記事

iptablesの設定
··2 分
Linux Firewall Iptables
ntpd を用いたNTPサーバの構築
··1 分
Linux Ntp
Arch Linuxの初期設定
··1 分
Arch-Linux