DHCPなどの動的IP割り当て環境でこそ、Dynamic DNSの本領が発揮される。Dynamic DNSを前提としたDHCPサーバの設定方法や、DHCPサーバの設定を変更せずに動的IP割り当てと連携させるためのスクリプトを紹介する。(編集局)
前回はDNSの更新手順を理解するために、nsupdateで各更新ステップを確認しました。しかし、こうした手続きは人の手で行うより、自動化するべきです。それが動的IP割り当てサービスであればなおさらです。Dynamic DNSは、こうした環境でこそ本領が発揮されるのです。
今回は、ISC DHCPを利用して割り当てられたIPアドレスをDNSに登録する方法と、前回予告した「プロバイダのDHCPを利用しているため、DHCPサーバそのものに手を入れることができない」といった場合の対処法を紹介します。
ISC DHCPはBIND 9と同様、Internet Software Consortium社により提供されており、2003年6月末時点のバージョンは3.0p2です。Red Hat LinuxやTurbolinuxをはじめとするディストリビューションでパッケージが提供されているため、ソースからインストールする必要はほとんどありません。
DHCPの詳細については、「ネットワーク・コマンドでトラブル解決」を参照してください。ここでは、インストールや設定の方法を紹介します。
まずは、RPMでインストールする場合を見ていきましょう。
# rpm -qa | grep -i dhcp |
DHCPがインストールされている場合(Turbolinux 8 Workstation) |
# wget ftp://anonymous:shin@ftp.turbolinux.co.jp/pub/TurboLinux/workstation |
Turbolinux 8 Workstationでのインストール例 |
# wget http://ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedHat/RPMS/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 |
以上で、/usr/sbin/dhcpd、/var/dhcp/dhclient.leasesなどのファイルが用意されます(パスは環境によって異なります)。
次にdhcpd.confファイルを用意して必要な設定を行います。まずはDHCPが動作することを確認し、その後Dynamic DNSに必要な設定を追加することにします。以下の解説では、図1のようなネットワーク環境を想定しています。サンプルではプライベートIPアドレスやダミードメインを使用しています。皆さんの環境に合わせて適宜修正を加えてください。
# Sample configuration file for ISC dhcpd |
/etc/dhcpd.conf |
/etc/dhcpd.confファイルの詳細は、dhcpd.conf.sample(注)やマニュアル($ man 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機能を付加します。まず、updateが実施されるDNSサーバ側が正しく設定されていることを確認しましょう。BIND 9の設定については、第7回を参照してください。
zone "example.jp" { |
マスター・ゾーンサーバのnamed.conf(第7回より) 注:そのほかのファイルも同じように用意します。 |
設定したら、nsupdateコマンドで確認します。実行はDHCPサーバ上で行います。前回は正引きに対する登録のみ紹介しましたが、今回は逆引きupdateも実施します。逆引きの場合も方法は正引きとほぼ同じで、update時にAレコードではなくPTRレコードを指定するだけです。
$nsupdate -d |
BIND 9の設定が終わったら、DHCPサーバ側にDynamic DNSのための追加設定を行います。
# Sample configuration file for ISC dhcpd |
/etc/dhcpd.conf追加分 |
各ゾーンのマスター・ゾーンサーバを指定するセクションはnamed.confの記述に似ていますが、「"」でドメイン名をくくっていなかったり、「.」でドメインの終端を記述するなどの点が異なっているので注意が必要です。
準備ができたらdhcpdを再起動します。クライアントにIPが正常に割り当てられているようなら、digやhostコマンドを使用して割り当てられたIPアドレスに対する 正引き/逆引きレコードがDNSに登録されていることを確認しましょう。
ここで正引きに登録されるクライアントのホスト名は、DHCPの処理の際にクライアントからサーバに送られるホスト名が利用されます。詳細については後述します。
/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) |
正常に動作している/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) |
正常に動作している/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.」を削除
Copyright © ITmedia, Inc. All Rights Reserved.