BIND の DNS Forward で名前解決
概要
BIND の設定を変更し、特定ゾーン (.consul) に対しての問い合わせを Consul に対しておこなえるように変更します。通常の名前解決と Consul の名前解決を同時に行う事ができるため、アプリケーションやインフラ環境に加える必要はありません。また、dnsmasq を併用する手法が使えない環境でも、容易に名前解決が可能です。
Consul の名前解決と課題
Consul には名前解決をおこなうために、DNS インターフェースを備えています。しかし、通常の Consul が提供するインターフェースは、Port 8600 です。そのため、dig やアプリケーション側ではポート番号を明示する必要があります。
$ dig @sakura1.pocketstudio.net -p 8600 web.service.sakura.consul
(略)
;; QUESTION SECTION:
;web.service.sakura.consul. IN A
;; ANSWER SECTION:
web.service.sakura.consul. 30 IN A 192.168.39.11
web.service.sakura.consul. 30 IN A 192.168.39.13
しかし、アプリケーションで Consul の名前解決をおこなうためには、ポート番号を明示するようプログラム側の追加が必要です。また、通常の名前解決とはわける必要があるため、環境依存の問題が発生してしまう懸念もあります。
そこで、既存の名前解決と Consul の名前解決を BIND の DNS Forward 機能を使って解決します。通常の名前解決は BIND がおこないますが、Consul の管理するドメイン(トップレベルドメイン .consul. )に対してのみ、Consul のインターフェースに問い合わせます。
この方法であれば、既存の名前解決環境に変更を加える必要がなく、利用者にとっては Consul の存在を気にする必要はありません。また、dnsmasq を使えないようなグローバルなネットワークでも、名前解決が利用出来ます。
準備
Consul 側の設定変更はありません。デフォルトの DNS ポート ( 8600 ) をインターフェースとで用いているものとします。
BIND の設定
まずはじめに /etc/named.conf を開き、DNSSEC を無効にし、consul 用の config ファイルを読み込む (inlcude) 設定を追加します。DNSSEC を無効にしないと、BIND と Consul は通信が出来ないので注意してください。
以下は変更例です:
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-transfer { 153.121.46.159; };
allow-query { localhost; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
};
include "/etc/named/consul.conf";
dnssec-enable
と、dnssec-validation
を、どちらも no
にします。また include "/etc/named/consul.conf"
追記します。
次に、consul.conf を編集します。
zone "consul" IN {
type forward;
forward only;
forwarders { 127.0.0.1 port 8600; };
};
ここではローカルで動作する Consul を想定しているため、127.0.0.1
と書きましたが、任意の IP アドレスを指定できます。
最後に、named の 再起動をおこないます。rndc reload
または service rndc reload
を実行します。
実行後に dig
で動作確認をおこなうと、Consul の DNS インターフェースを指定しなくても、名前解決が出来る事がわかります。
$ dig @127.0.0.1 web.service.sakura.consul
(略)
;; QUESTION SECTION:
;web.service.sakura.consul. IN A
;; ANSWER SECTION:
web.service.sakura.consul. 30 IN A 192.168.39.11
web.service.sakura.consul. 30 IN A 192.168.39.13
参考
- Forwarding - Consul
- http://www.consul.io/docs/guides/forwarding.html
- 実用 BIND 9で作るDNSサーバ(最終回):BIND 9を徹底活用するためのTips集 (2/2) - @IT
- http://www.atmarkit.co.jp/ait/articles/0405/15/news015_2.html