連載
» 2003年08月05日 00時00分 UPDATE

実用 BIND 9で作るDNSサーバ(8):DHCPとDynamic DNSの連携システム (1/2)

DHCPなどの動的IP割り当て環境でこそ、Dynamic DNSの本領が発揮される。Dynamic DNSを前提としたDHCPサーバの設定方法や、DHCPサーバの設定を変更せずに動的IP割り当てと連携させるためのスクリプトを紹介する。(編集局)

[鶴長鎮一,@IT]

 前回はDNSの更新手順を理解するために、nsupdateで各更新ステップを確認しました。しかし、こうした手続きは人の手で行うより、自動化するべきです。それが動的IP割り当てサービスであればなおさらです。Dynamic DNSは、こうした環境でこそ本領が発揮されるのです。

 今回は、ISC DHCPを利用して割り当てられたIPアドレスをDNSに登録する方法と、前回予告した「プロバイダのDHCPを利用しているため、DHCPサーバそのものに手を入れることができない」といった場合の対処法を紹介します。

DHCPサーバの構築

 ISC DHCPはBIND 9と同様、Internet Software Consortium社により提供されており、2003年6月末時点のバージョンは3.0p2です。Red Hat LinuxやTurbolinuxをはじめとするディストリビューションでパッケージが提供されているため、ソースからインストールする必要はほとんどありません。

 DHCPの詳細については、「ネットワーク・コマンドでトラブル解決」を参照してください。ここでは、インストールや設定の方法を紹介します。

DHCPサーバのインストール

 まずは、RPMでインストールする場合を見ていきましょう。

# rpm -qa | grep -i dhcp
dhcp-clientXX-3.0pl2-3
dhcp-3.0pl2-3 ←必要
dhcp-devel-3.0pl2-3
DHCPがインストールされている場合(Turbolinux 8 Workstation)

# wget ftp://anonymous:shin@ftp.turbolinux.co.jp/pub/TurboLinux/workstation
/updates/current/RPMS/dhcp-3.0pl2-3.i586.rpm
# rpm -ivh dhcp-3.0pl2-3.i586.rpm
Turbolinux 8 Workstationでのインストール例

# wget http://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/dhcp-3.0pl1-23.i386.rpm
# rpm -ivh dhcp-3.0pl1-23.i386.rpm
Red Hat Linux 9でのインストール例

 ソースからインストールする場合は、ftp://ftp.isc.org/isc/dhcp/dhcp-latest.tar.gzをダウンロードして作業します。

# tar xvfz dhcp-latest.tar.gz
# cd dhcp-3.0pl2/
# ./configure
# make
# make install
# touch /var/dhcp/dhclient.leases

 以上で、/usr/sbin/dhcpd、/var/dhcp/dhclient.leasesなどのファイルが用意されます(パスは環境によって異なります)。

 次にdhcpd.confファイルを用意して必要な設定を行います。まずはDHCPが動作することを確認し、その後Dynamic DNSに必要な設定を追加することにします。以下の解説では、図1のようなネットワーク環境を想定しています。サンプルではプライベートIPアドレスやダミードメインを使用しています。皆さんの環境に合わせて適宜修正を加えてください。

図1 想定環境例 図1 想定環境例
# Sample configuration file for ISC dhcpd
#

default-lease-time 600; #クライアントIPアドレスのデフォルトリース時間
max-lease-time 7200;    #クライアントIPアドレスの最大リース時間

log-facility local7;    #ログ出力の指定

option domain-name "example.jp";        #クライアントに付与するドメイン
option domain-name-servers 10.0.0.10;   #クライアントに付与するDNSサーバ

subnet 192.168.1.0 netmask 255.255.255.0 {  #DHCPを動作させるネットワークインターフェイスの情報
  range 192.168.1.100 192.168.1.200;    #クライアントに付与するIPアドレス
  option routers 192.168.1.254;         #クライアントに付与するデフォルトルータのアドレス
}
/etc/dhcpd.conf

 /etc/dhcpd.confファイルの詳細は、dhcpd.conf.sample()やマニュアル($ man dhcpd.conf)などを参考にしてください。

注:ソースからインストールしている場合はアーカイブ中の/server/dhcpd.conf。

 以上の設定で、DHCPサーバを動作させることができます。起動スクリプトなどを利用してDHCPサービスを開始し、クライアントでIPアドレスが割り当てられることを確認しましょう。

# /etc/init.d/dhcpd start
RPMなどパッケージでインストールした場合

# /usr/sbin/dhcpd
ソースからインストールした場合

 この時点で動作しない場合は、設定を見直しましょう。解決に際しては、/var/log/messagesのメッセージが参考になります。また、複数のネットワークカードを備えている場合は、

# /usr/sbin/dhcpd eth0

のように、インターフェイスを指定する必要があります。-dオプションを指定してデバッグモードを利用することもできます。

DHCPサーバのDynamic DNS対応化

 DHCPが正しく機能していることが確認できたら、Dynamic DNS機能を付加します。まず、updateが実施されるDNSサーバ側が正しく設定されていることを確認しましょう。BIND 9の設定については、第7回を参照してください。

zone "example.jp" {
        type master;
        file "example.zone";
        allow-update{
                192.168.1.1;    #DHCPサーバのアドレスを指定
        };
};

zone "1.168.192.in-addr.arpa" {
        type master;
        file "example.rev";
        allow-update{
                192.168.1.1;    #DHCPサーバのアドレスを指定
        };
};
マスター・ゾーンサーバのnamed.conf(第7回より)
注:そのほかのファイルも同じように用意します。

 設定したら、nsupdateコマンドで確認します。実行はDHCPサーバ上で行います。前回は正引きに対する登録のみ紹介しましたが、今回は逆引きupdateも実施します。逆引きの場合も方法は正引きとほぼ同じで、update時にAレコードではなくPTRレコードを指定するだけです。

$nsupdate -d
> server 10.0.0.10 ←マスター・ゾーンサーバを指定
> update add clientC.example.jp. 3600 IN A 192.168.1.100(example.jpゾーンに対して登録できることを確認)
> update add 192.168.1.100 3600 IN PTR clientC.example.jp.(1.168.192.in-addr.arpaゾーンに対して登録できることを確認)
> send ←updateクエリ送信

 BIND 9の設定が終わったら、DHCPサーバ側にDynamic DNSのための追加設定を行います。

# Sample configuration file for ISC dhcpd
#

ddns-update-style interim;  #「interim」を指定。旧来の「ad-hoc」は使用しない

zone example.jp. {  #正引きexample.jpのマスター・ゾーンサーバを指定
        primary 10.0.0.10;
}

zone 1.168.192.in-addr.arpa. {  #逆引き1.168.192.in-addr.arpaのマスター・ゾーンサーバを指定
        primary 10.0.0.10;
}
/etc/dhcpd.conf追加分

 各ゾーンのマスター・ゾーンサーバを指定するセクションはnamed.confの記述に似ていますが、「"」でドメイン名をくくっていなかったり、「.」でドメインの終端を記述するなどの点が異なっているので注意が必要です。

 準備ができたらdhcpdを再起動します。クライアントにIPが正常に割り当てられているようなら、digやhostコマンドを使用して割り当てられたIPアドレスに対する 正引き/逆引きレコードがDNSに登録されていることを確認しましょう。

 ここで正引きに登録されるクライアントのホスト名は、DHCPの処理の際にクライアントからサーバに送られるホスト名が利用されます。詳細については後述します。

/var/log/messagesの確認

 /var/log/messagesでも動作確認が可能です。ゾーン情報中のSOAによるマスター・ゾーンサーバの指定が不適切であったり、マスター・ゾーンサーバのAレコードが見つからないなどが原因で「timed out」が発生していたり、dhcpd.conf中にzoneの指定がないために「refused」「not a zone」が起きていたりする状況を確認できます。dhcpdとnamedの出力ログを時間の経過に合わせて並べた/var/log/messagesファイルを見てみましょう。その際、図2も併せて見るとよいでしょう。

Jul 4 03:28:41 XXserver dhcpd: DHCPDISCOVER from 00:20:e0:8b:XX:XX (clientXX) via eth0 (1)
Jul 4 03:28:42 XXserver dhcpd: DHCPOFFER on 192.168.1.100 to 00:20:e0:8b:XX:XX (clientXX) via eth0 (2)
Jul 4 03:28:42 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone 'example.jp/IN': adding an RR (A)
Jul 4 03:28:42 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone 'example.jp/IN': adding an RR (B)
Jul 4 03:28:42 XXserver dhcpd: if IN A clientXX.example.jp domain doesn't exist add 300 IN A clientXX.example.jp 192.168.1.100 add 300 IN TXT clientXX.example.jp "313ee50e46824fc9320514942a067268e0": success. (3)
Jul 4 03:28:42 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone '1.168.192.in-addr.arpa/IN': deleting an rrset (C)
Jul 4 03:28:42 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone '1.168.192.in-addr.arpa/IN': adding an RR (D)
Jul 4 03:28:42 XXserver dhcpd: delete IN PTR 100.1.168.192.in-addr.arpa. add 300 IN PTR 100.1.168.192.in-addr.arpa. clientXX.example.jp: success. (4)
Jul 4 03:28:42 XXserver dhcpd: DHCPREQUEST for 192.168.1.100 (192.168.1.1) from 00:20:e0:8b:XX:XX (clientXX) via eth0 (5)
Jul 4 03:28:42 XXserver dhcpd: DHCPACK on 192.168.1.100 to 00:20:e0:8b:XX:XX (clientXX) via eth0 (6)
正常に動作している/var/log/messages(割当時)

dhcpdのログ
(1)クライアントからのDHCPDISCOVER。この際クライアントのホスト名も渡される
(2)DHCPサーバからクライアントへのIPアドレスOFFER
(3)マスター・ゾーンサーバに正引きのA/TXTレコードの登録
(4)マスター・ゾーンサーバに逆引きPTRレコードの登録
(5)クライアントからのDHCPREQUEST
(6)DHCPサーバからクライアントへのDHCPACK
namedのログ
(A)example.jpゾーンに対し「clientXX.example.jp. 300 IN A 192.168.1.100」の登録
(B)example.jpゾーンに対し「clientXX.example.jp. 300 IN TXT "313ee50e46824fc9320514942a067268e0"」の登録
(C)1.168.192.in-addr.arpaゾーン中の192.168.1.100に対するレコードの削除
(D)1.168.192.in-addr.arpaゾーンに対し「100.1.168.192.in-addr.arpa. 300 IN PTR clientXX.example.jp.」の登録

Jul 4 03:29:35 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone 'example.jp/IN': deleting an RR (A)
Jul 4 03:29:35 XXserver dhcpd: if IN TXT clientXX.example.jp "313ee50e46824fc9320514942a067268e0" rrset exists and IN A clientXX.example.jp 192.168.1.100 rrset exists delete IN A clientXX.example.jp 192.168.1.100: success. (1)
Jul 4 03:29:35 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone 'example.jp/IN': deleting an RR (B)
Jul 4 03:29:35 XXserver dhcpd: if IN A clientXX.example.jp rrset doesn't exist delete IN TXT clientXX.example.jp "313ee50e46824fc9320514942a067268e0": success. (2)
Jul 4 03:29:35 XXserver named[7057]: clientXX 192.168.1.1#32820: updating zone '1.168.192.in-addr.arpa/IN': deleting an rrset (C)
Jul 4 03:29:35 XXserver dhcpd: delete IN PTR 100.1.168.192.in-addr.arpa.: success. (3)
Jul 4 03:29:35 XXserver dhcpd: DHCPRELEASE of 192.168.1.2100 from 00:20:e0:8b:XX:XX (clientXX) via eth0 (found) (4)
Jul 4 03:29:36 XXserver dhcpd: DHCPRELEASE of 0.0.0.0 from 00:20:e0:8b:XX:XX via eth0 (not found) (5)
正常に動作している/var/log/messages(リリース時)

dhcpdのログ
(1)マスター・ゾーンサーバから正引きAレコードを削除
(2)マスター・ゾーンサーバから正引きTXTレコードを削除
(3)マスター・ゾーンサーバから逆引きPTRレコードを削除
(4)(5)クライアントからDHCPRELEASE
namedのログ
(A)example.jpゾーンから「clientXX.example.jp. 300 IN A 192.168.1.100」を削除。その際TXTレコードに埋め込まれたハッシュ値の確認が行われる
(B)example.jpゾーンから「clientXX.example.jp. 300 IN TXT "313ee50e46824fc9320514942a067268e0"」を削除
(C)1.168.192.in-addr.arpaゾーンから「100.1.168.192.in-addr.arpa. 300 IN PTR clientXX.example.jp.」を削除

図2 DHCPとDyanmic DNSのシーケンス 図2 DHCPとDyanmic DNSのシーケンス
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。