Unbound、知ってる? この先10年を見据えたDNS

第3回Unboundの導入(乗り換え編)

前回はUnboundを新規導入する方法について紹介しました。今回は他のDNSサーバからUnboundに乗り換える方法を紹介します。

なお、本記事ではLinuxディストリビューションの1つであるCentOS 5.2での導入手順を紹介します。他の場合には適宜読み替えてください。

Unboundのインストール

インストール

Unboundのインストール方法については前回の記事をご覧ください。

動作確認

すでにBINDなどの他のDNSサーバーが動いている場合にはポート番号が衝突するため、そのままでは動作確認を行うことが出来ません。そのため、Unboundの設定ファイルunbound.confに次のように通常のポート番号と異なる番号を設定します。

port: 10053

unboundを起動させてみましょう。

# /etc/init.d/unbound start

次のようにdrillに-pオプションでポート番号を指定して、gihyo.jp.の正引きをしています。Aレコードが正しく取得できれば成功です。

$ drill -p 10053 gihyo.jp. @127.0.0.1 A

動作確認ができたのでunboundを停止します。

# /etc/init.d/unbound stop

設定ファイルunbound.confに先ほど追加したportの設定を削除します。

乗り換え設定を行うにあたっての注意点

乗り換え方法の本題に入る前に、注意点および共通な設定など先に説明します。

リゾルバの設定

ホスト自身のリゾルバとしてUnboundを利用する場合には、リゾルバの設定ファイル/etc/resolv.confのnameserver欄に127.0.0.1を記述してください。

nameserver 127.0.0.1

アクセス制御

アクセス制御を移行するのを忘れないようにしてください。

たとえば、BINDの設定ファイルnamed.confに次のような記述があったとします。

options {
    allow-recursion { 127.0.0.1; 192.168.0.0/24; };
};

この場合には、Unboundの設定ファイルunbound.confには次のような記述を行います。

access-control: 192.168.0.0/24 allow

BINDの再帰問い合わせを止める方法

キャッシュサーバとしてのサービスをUnboundに任せ、BINDはコンテンツサーバとしてのサービスのみを行う場合には、BINDの再帰問い合わせを禁止させます。BINDの再帰問い合わせを禁止するためには、BINDの設定ファイルnamed.confのoptionsあるいはviewに次のような記述を行います。

recursion no;
allow-recursion { none; };

フォワード

フォワードについてはUnboundではフォワードゾーン「forward-zone」という機能があります。この機能については次回紹介します。

スタブ

スタブについてはUnboundではスタブゾーン「stub-zone」という機能があります。この機能については次回紹介します。

既存のDNSサーバからの乗り換え方法

既存のDNSサーバからUnboundに乗り換える方法を紹介します。なお、既存のDNSサーバとしてBINDを前提として説明しますが、他のDNSサーバの場合には適宜読み替えて作業をしてください。

なお、それぞれの設定が終わったら、drillコマンドなどで動作確認を行ってください。

既存のDNSサーバがキャッシュサーバのサービスのみを提供している場合

既存のDNSサーバがキャッシュサーバの機能のみを使用している場合の乗り換え方法は単純です。既存のDNSサーバのサービスを停止してunboundのサービスを起動すれば良いだけです。

注意事項の確認をした後に、BINDを停止し、Unboundを起動してください。

# /etc/init.d/named stop
# /etc/init.d/unbound start

OSのブート時にBINDが起動しないようにし、Unboundが起動するようにします。

# /sbin/chkconfig named off
# /sbin/chkconfig unbound on

既存のDNSサーバがコンテンツサーバのサービスのみを提供している場合

Unboundはコンテンツサーバではないので、基本的に乗り換えできません。しかし、ホスト自身のリゾルバとしてUnboundを導入することが出来るため、その方法について紹介します。

既存のDNSサーバがバインドするインターフェースアドレスからループバックアドレス(127.0.0.1や::1)を除外するようにしてください。そうすれば、Unboundをループバックアドレスにバインドさせて動かすだけで良いです。

BINDの設定ファイルnamed.confに127.0.0.1を除外したIPアドレスのみを次のように「listen-on」に記述してください。IPv6を使用している場合には「listen-on-v6」についても同様に行ってください。

options {
    listen-on port 53 { 192.168.0.1; };
}

Unboundはデフォルトではループバックアドレスのみにバインドするため、とくに何もする必要はありません。

以上の設定が終わったら、注意事項の確認をした後に、BINDを再起動し、Unboundを起動してください。

# /etc/init.d/named restart
# /etc/init.d/unbound start

OSのブート時にUnboundが起動するようにします。

# /sbin/chkconfig unbound on

既存のDNSサーバがパブリックなコンテンツサーバとキャッシュサーバのサービスを提供している場合

Unboundはコンテンツサーバではないので、そのままでは基本的に乗り換えできません。そのため、既存のDNSサーバをコンテンツサーバとして残しつつ、次のような方法を検討する必要があります。

  • IPエイリアスの機能によりIPアドレスを増やして、そこでサービスを提供する
  • キャッシュサーバのサービスをプライベートネットワーク上のホストに置き直す

1つ目の方法は、既存のDNSサーバとUnboundを同じIPアドレスではサービスを提供できないため、サービスを提供するIPアドレスを増やすということです。

2つ目の方法は、そもそもキャッシュサーバのサービスをパブリックなところに置くのが望ましくないため、プライベートネットワークに置き直した方がよいということです。この場合はプライベートネットワーク内のホストに新規にUnboundを導入し、既存のDNSサーバのキャッシュサーバとしてのサービスを停止あるいはループバックアドレスのみにアクセス制御をすればよいです。

ここでは、1つ目の方法について具体例を示して紹介します。ただし、IPエイリアスでIPアドレスを増やす方法については環境によって異なるため省略します。DNSサーバのホストがIPアドレスとして192.168.0.1と192.168.0.2の2つを持ち、前者のアドレスにBINDが、後者のアドレスにUnboundがバインドすることにします。 BINDの設定ファイルnamed.confには次のように記述します。

options {
    listen-on port 53 { 192.168.0.1; };
}

Unboundの設定ファイルunbound.confには次のように記述します。

interface: 127.0.0.1
interface: 192.168.0.2

さらに、ネットワークセグメント192.168.0.0/24に対して再帰問い合わせを許可をする場合には、Unboundの設定ファイルunbound.confには次のように記述します。

access-control: 192.168.0.0/24 allow

以上の設定が終わったら、注意事項の確認をした後に、BINDを再起動し、Unboundを起動してください。

# /etc/init.d/named restart
# /etc/init.d/unbound start

OSのブート時にUnboundが起動するようにします。

# /sbin/chkconfig unbound on

既存のDNSサーバがプライベートなコンテンツサーバとキャッシュサーバのサービスを提供している場合

Unboundはコンテンツサーバではないので、そのままでは基本的に乗り換えできません。そのため、次のような方法を検討する必要があります。

  • 既存のDNSサーバをコンテンツサーバとして残しつつ、IPエイリアスの機能によりIPアドレスを増やして、そこでサービスを提供する
  • Unboundの簡易的なコンテンツサーバとしての機能を利用する

1つ目の方法は、既存のDNSサーバとUnboundを同じIPアドレスではサービスを提供できないため、サービスを提供するIPアドレスを増やすということです。詳しくは前節を参照してください。

2つ目の方法は、Unboundにはローカルデータ「local-data」という簡易的なコンテンツサーバとしての機能があるため、ゾーン転送などを行う必要がなければ利用できます。設定例を次の示します。

local-data: "example.org.              NS  ns.example.org."
local-data: "ns.example.org.           A   192.168.0.1"
local-data: "1.0.168.192.in-addr.arpa. PTR ns.example.org."
local-data: "hogohoge.example.org.     A   192.168.0.9"
local-data: "9.0.168.192.in-addr.arpa. PTR hogohoge.example.org."

ローカルデータの設定方法については前回の記事を参照してください。

まとめ

今回は乗り換え編として紹介しました。コンテンツサーバとキャッシュサーバが連携するような設定については次回紹介します。

おすすめ記事

記事・ニュース一覧