NATの内側からは直接アクセスしたいという時などに、DNSサーバから内向けと外向けに返すIPアドレスを変えたいときって あるじゃないですか、そんなとき dnsdist が いい仕事して(リクエスト元におおじてフォワードするDNSサーバを切り替えて)くれるんですが、その先の権威サーバをどうするか という話です。
dnsdistのことは うまくいったら 別の記事として 投稿しますね。
unbound をつかうとか dnsmasqで・・・ とか 別のソリューションもありますが、これが ベストプラクティスになるといいなぁと思います。
dnsdistは ポート番号指定で 振り分けられるので 同じサーバ内にNSDを 2つ起動すればいいのではないかということです。
別のサーバで NSDを 起動することでも 実現可能ですが、リソースケチりたいのと DNSに関する処理を1台に集約したいという意図によるものです。
dnsdistのバージョン 1.1.0が 使いたかったので ubuntu17.04 を使います。
NSDのインストールは apt で行います。ついでに systemdにサービス登録もしておきましょう。
$ sudo apt-get install nsd
$ sudo systemctl enable nsd
1つ目のNSDの設定
まずは外向けのサービスの設定を行います。方針は次のとおり
* IPv4だけ(IPv6はサービスしない)
* localhost:8053 で サービスする
* 基本的に default設定で使う
nsd.conf for NSD4
# /etc/nsd/nsd.conf
# Master server
server:
ip-address: 127.0.0.1
port: 8053
do-ip6: no
username: nsd
zonesdir: "/etc/nsd/zones"
remote-control:
control-enable: yes
pattern:
name: master
zonefile: %s.zone
notify: 10.11.7.102@8053 NOKEY
notify-retry: 5
provide-xfr: 10.11.7.102@8053 NOKEY
zone:
name: example.com
include-pattern: master
二つ目のNSDの設定
つぎに内向けのサービスの設定を行います。方針は次のとおり
* IPv4のみ
* localhost:8153で サービスする
* コントロールポートは 18952 にする。
* 競合するファイルは -localをつけて競合を回避する
ubuntuのデフォルトが 標準環境と違っている点に 注意が必要です。起動できなくててこずりました。
そんなときは ログを確認するのがいいですが、それに加えて nsd-configtest -v で デフォルトを含んだ設定が見れるので外向けの設定との差分を 確認すると いいと思います。
# nsd-local.conf for NSD4
# /etc/nsd/nsd-local.conf
# Master server
server:
ip-address: 127.0.0.1
port: 8153
do-ip6: no
username: nsd
logfile: "/var/log/nsd-local.log"
zonesdir: "/etc/nsd/zones-local"
database: "/var/lib/nsd/nsd-local.db"
zonelistfile: "/var/lib/nsd/zone.list-local"
pidfile: "/run/nsd/nsd-local.pid"
xfrdfile: "/var/lib/nsd/xfrd.state-local"
remote-control:
control-port: 18952
control-enable: yes
pattern:
name: master
zonefile: %s.zone
notify: 10.11.7.102@8153 NOKEY
notify-retry: 5
provide-xfr: 10.11.7.102@8153 NOKEY
zone:
name: example.com
include-pattern: master
2つめの サービスを登録する。
systemd に 2つめのNSDサービスを登録します。
/lib/systemd/system/nsd.service のファイルをもとに nsd-local.service を作成します。
修正方針は コマンドに configファイルのターゲットを 先ほど作成した /etc/nsd/nsd-local.conf に することです。
[Unit]
Description=Name Server Daemon
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/sbin/nsd -d -c /etc/nsd/nsd-local.conf
ExecReload=/usr/sbin/nsd-control -c /etc/nsd/nsd-local.conf reload
[Install]
WantedBy=multi-user.target
次に サービスを 登録します。list-unit-files サブコマンドで nsd-local が 登録されていることを 確認したあとで enableにします。
$ sudo systemctl list-unit-files --type=service |grep nsd
nsd-local.service disabled
nsd.service enabled
$ sudo systemctl enable nsd-local
$ sudo systemctl list-unit-files --type=service |grep nsd
nsd-local.service enabled
nsd.service enabled
NSD 起動
systemctl コマンドで start するか OSごと 再起動することで サービスが 起動します。
psコマンド で プロセスを
netstatコマンド で LISTENポートを
ログ で エラーが発生していないことを
確認しましょう。