内部向けDNSサーバの構築
この記事では、内部向けDNSサーバの構築を紹介します。
LAN環境で各種サービスを複数公開していると、どのサーバで何のサービスを公開しているか分からなくなるので、サービスに対してipアドレス指定ではなく、ドメイン名指定でアクセスしたくなります。また、サービスを別サーバへ移行する場合も、ipアドレス指定ではなく、ドメイン名指定にしておけばブックマーク等の修正を最小限にすることが可能です。
そこで、今回は内部向けのDNSサーバを1台構築し、内部向けドメイン名の名前解決を行います。
DNSサーバ機能の有名所としては、bindがありますが、今回はnsd(DNSコンテンツサーバ機能)とunbound(DNSキャッシュサーバ機能)で構築していきます。
なお、今回はArchLinuxにおけるnsd及びunboundの設定になります。
nsd(DNSコンテンツサーバ機能)の構築
まずは、内部ドメインの情報(権威情報)を定義・公開するコンテンツサーバを構築するために、nsdを構築します。
nsdのインストール
サーバにて以下のコマンドでnsdをインストールします。
sudo pacman -S nsd
nsdの初期設定
/etc/nsd/nsd.confを以下のように編集します。
なお、今回nsd はunboundと組み合わせて使用しますので、ポートの衝突を防ぐために、nsdで使用するポートを 53530 に設定します。
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: "mako-note.com" # ゾーン名。環境にあわせて適宜する。ここでは例としてmako-note.com
zonefile: "mako-note.com.zone" # zoneファイルの保存場所。zonesdir配下の場所を記述。
zoneファイルの設定
/etc/nsd/nsd.confで指定したzonefile(例 mako-note.com.zone)を以下のように編集します。
$TTL 86400
@ IN SOA ns.mako-note.com. postmaster.mako-note.com. (
2018071301 ; Serial(更新日が分かりやすいように日付+連番)
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
@ IN NS ns.mako-note.jp.
ns IN A 192.168.10.10 ; DNSキャシュサーバのIPアドレスを指定。例として、192.168.10.10を設定
nsdサービスの起動と有効化
以下のコマンドで nsdサービスを起動します。
sudo systemctl start nsd.service
さらに、以下のコマンドで nsdサービスを起動時に有効します。
sudo systemctl enable nsd.service
nsdの動作確認
以下のコマンドで先ほど登録した内部ドメイン(ここでは、ns.mako-note.com)が名前解決できることを確認します。
drill @127.0.0.1 -p 53530 ns.mako-note.com
unbound(DNSキャッシュサーバ機能)の構築
次に、内部向けのDNSキャッシュサーバを構築するために、unboundを構築します。
unboundのインストール
サーバにて以下のコマンドでunboundをインストールします。
sudo pacman -S unbound
unboundの初期設定
/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: "mako-note.com"
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サービスを起動します。
sudo systemctl start unbound.service
さらに、以下のコマンドで unboundサービスを起動時に有効します。
$ sudo systemctl enable unbound.service
unboundの動作確認
以下のコマンドでunboundにて外部のドメインと登録した内部ドメインが名前解決できることを確認します。
drill @127.0.0.1 -p 53 www.google.co.jp # 外部のドメイン
drill @127.0.0.1 -p 53 ns.mako-note.com # 登録した内部ドメイン
iptablesの設定
内部向けDNSサーバとしてunboundをLAN内に公開しますので、iptablesで53番ポートへアクセスを許可します。
iptablesの具体的な設定方法は、iptablesの設定を参照ください。
# tcp/udpの53番ポートへのアクセス許可
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
終わりに
今回は内部向けdnsサーバの構築を紹介しました。
今後は、他のサーバやクライアントPCのDNSサーバを今回設定したDNSサーバを指定することで、内部向けのドメインを名前解決できるようになります。