LoginSignup
39
38

More than 5 years have passed since last update.

Consulの名前解決にDNS Forwardingを使う方法

Last updated at Posted at 2014-06-18

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 は通信が出来ないので注意してください。

以下は変更例です:

named.conf
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 を編集します。

/etc/named/ocnsul.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

参考

39
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
38