DHCPサーバーの設定

DHCPサーバーを設定するには、設定ファイル/etc/dhcpd.confを使用します。

また、DHCPはファイル/var/lib/dhcp/dhcpd.leasesを使用してクライアントのリースデータベースを保存します。詳細についてはリースデータベースを参照してください。

設定ファイル

DHCPサーバーを設定するには、まずクライアントのネットワーク情報を保存する設定ファイルを作成します。すべてのクライアントに対するグローバルオプションを宣言することも、クライアントシステムごとにオプションを宣言することもできます。

設定ファイルには、任意のタブや空白行を使用して書式をわかりやすく整えることができます。キーワードには大文字小文字の区別があり、先頭がシャープ記号(#)の行はコメントとみなされます。

設定ファイルのステートメントには、次の2種類があります。

一部のパラメータは、optionキーワードで開始する必要があります。オプションは、DHCPオプションを設定するものです。一方、パラメータは、オプションでない値を設定したり、DHCPサーバーの動作を制御したりするものです。

重要項目重要
 

設定ファイルを変更した場合、service dhcpd restartコマンドで DHCPデーモンを再起動するまでは変更内容は反映されません。

中かっこ({ })で囲まれたセクションの前に宣言されたパラメータとオプションは、グローバルパラメータとみなされます。グローバルパラメータは、以降のすべてのセクションに適用されます。

例12-1では、routerssubnet-maskdomain-namedomain-name-serverstime-offsetオプションは、apexとraleighの両方のhostステートメントに使用されます。

例12-1に示すように、subnetの宣言が可能です。subnet宣言は、ネットワークのすべてのサブネットに対して記述する必要があります。宣言されていない場合、DHCPサーバーは起動できません。

この例では、サブネット内のすべてのDHCPクライアントに対するグローバルオプションが存在し、rangeが宣言されています。クライアントには、rangeの範囲内のIPアドレスが割り当てられます。

同じ物理ネットワークを共有するすべてのサブネットは、例12-2に示すようにshared-network内に宣言する必要があります。shared-network内のパラメータでsubnet宣言の外にあるものは、グローバルパラメータとみなされます。shared-networkの名前は、たとえばテストラボ環境のすべてのサブネットを記述するtest-labのように、ネットワークの記述名とします。

例12-3に示すように、group宣言を使用して宣言のグループにグローバルパラメータを適用できます。共有ネットワーク、サブネット、ホストやその他のグループをグループ化することができます。

サブネット内のシステムに動的IPアドレスをリースするDHCPサーバーを設定するには、例12-4を修正し、実際に使用する値を記述します。これにより、クライアントのデフォルトのリース期間、最大リース期間、ネットワークの設定値を宣言します。この例では、range192.168.1.10〜192.168.1.100の範囲内のIPアドレスがクライアントシステムに割り当てられます。

ネットワークインターフェイスカードのMACアドレスに応じてクライアントにIPアドレス を割り当てるには、host宣言内のhardware ethernetパラメータを使用します。例12-5host apex宣言では、MACアドレスが00:A0:78:8E:9E:AAのネットワークインターフェイスカードは常にIPアドレス192.168.1.4を受け取るように指定 しています。

オプションパラメータhost-nameを使用してクライアントにホスト 名を割り当てることも可能です。

ティップヒント
 

Red Hat Linux 7.3のサンプル設定ファイルを使用して、自らのカスタム設定オプションを追加できます。次のコマンドを使用してサンプルファイルを適当な場所にコピーします。
cp /usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample /etc/dhcpd.conf
<version-number>には使用しているDHCPのバージョンが入ります)

オプションのステートメントの一覧とその機能については、dhcp-optionsのmanページを 参照してください。

リースデータベース

DHCPサーバーでは、ファイル/var/lib/dhcp/dhcpd.leasesを使用 してクライアントのリースデータベースを保存します。このファイルは、手動で変更することはできません。リースデータベースには、最近割り当てられた各IPアドレスのDHCP リース情報が自動的に保存されます。この情報には、リース期間、IPアドレスの割り当て先、リースの開始/終了日、リースの取得に使用されたネットワークインターフェイスカードのMACアドレスが含まれます。

リースデータベースにおける時刻はすべて、ローカル時でなくグリニッジ標準時(GMT)を使用します。

リースデータベースは、サイズが大きくなり過ぎるのを避けるために、適宜再作成されます。最初に、すべての既知のリースが一時リースデータベースに保存されます。dhcpd.leasesファイルの名前がdhcpd.leases~に変更され、一時リースデータベースがdhcpd.leasesに書き込まれます。

リースデータベースの名前がバックアップファイルの名前に変更され、新規ファイルが書き込まれる前に、DHCPデーモンがkillされたりシステムがクラッシュしたりすることも考えられます。この場合、サービスの起動に必要なdhcpd.leasesファイルは存在しません。その際に新しいリースファイルを作成しないようにしてください。新しいファイルを作成すると、それまでのリースはすべて失われ、問題が発生します。これを解決するには、dhcpd.leases~バックアップファイルの名前をdhcpd.leasesに変更して、デーモンを起動してください。

サーバーの起動と停止

重要項目重要
 

DHCPサーバーを初めて起動するとき、dhcpd.leasesファイルがなければサーバーは起動できません。このファイルが存在しない場合は、コマンドtouch /var/lib/dhcp/dhcpd.leasesを使用して作成してください。

DHCPサービスを起動するには、/sbin/service dhcpd startコマンドを使用します。DHCPサーバーを停止するには、/sbin/service dhcpd stopコマンドを使用します。ブート時にデーモンを自動的に起動する必要がある場合は、第8章で説明しているサービスの管理方法に関する情報を参照してください。

システムに複数のネットワークインターフェイスを組み込む場合、そのうちの1つのインターフェイスだけでDHCPサーバーを起動するには、そのデバイスだけでサービスを起動するようにDHCPサーバーを設定します。/etc/sysconfig/dhcpdにあるDHCPDARGSのリストに次のインターフェイス名を追加します。

# Command line options here
DHCPDARGS=eth0

これは、ファイアウォールマシンにネットワークカードが2つある場合に便利な機能です。一方のネットワークカードをDHCPクライアントとして設定してインターネット用のIPアドレスを取得します。もう一方のネットワークカードは、ファイアウォール内の内部ネットワーク用のDHCPサーバーとして使用できます。内部ネットワークに接続されたネットワークカードだけを指定することにより、ユーザーがインターネット経由でデーモンに接続できなくなるので、システムがより安全になります。

/etc/sysconfig/dhcpdで指定できるその他のコマンドラインオプションには次のようなものがあります。

DHCPリレーエージェント

DHCPリレーエージェント(dhcrelay)により、DHCPやBOOTPの要求 を、DHCPサーバーを持たないサブネットからほかのサブネットのDHCPサーバーへと中継することができます。

DHCPクライアントが情報を要求すると、DHCPリレーエージェントは自身の起動時に指定された一覧に含まれるDHCPサーバーに要求を転送します。DHCPサーバーのいずれかから応答が返されると、その応答はオリジナルの要求を送信したネットワークにブロードキャストされたりユニキャストされたりします。

DHCPリレーエージェントは、引数-iで監視の対象となるインターフェイスが指定されている場合を除き、すべてのインターフェイスでDHCP要求を監視します。

DHCPリレーエージェントを開始するには、dhcrelayコマンドに続けて、要求のリレー先となるDHCPサーバー名を少なくとも1つ指定して実行します。起動には次のオプションを使用できます。