Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
14.2. DHCP サーバーの設定
dhcp パッケージには、Internet Systems Consortium (ISC)
DHCP
サーバーが含まれています。root
で パッケージをインストールします。
~]# yum install dhcp
dhcp パッケージをインストールすると、
/etc/dhcp/dhcpd.conf
が作成されます。これは単に空の設定ファイルです。root
で以下のコマンドを実行します。
~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
設定ファイルの例は、
/usr/share/doc/dhcp-version;/dhcpd.conf.example
にあります。このファイルは、/etc/dhcp/dhcpd.conf
を設定するのに役立ちます。これについては、以下で説明します。
14.2.1. 設定ファイル
DHCP
サーバーを設定するには、最初にクライアントのネットワーク情報を保存する設定ファイルを作成します。このファイルを使用して、クライアントシステムに対するオプションを宣言します。
設定ファイルには追加のタブや空白行が含まれているため、簡単に書式を整えることができます。キーワードは大文字と小文字を区別しないため、ハッシュ記号(
#
)で始まる行はコメントと見なされます。
設定ファイルのステートメントには、次のような 2 つのタイプがあります。
- パラメーター: タスクの実行方法、タスクを実行するかどうか、クライアントに送信するネットワーク設定のオプションを規定します。
- 宣言 - ネットワークトポロジーの記述、クライアントの記述、クライアントのアドレス指定、宣言グループへのパラメーターグループの適用を行います。
キーワードオプションから始まるパラメーターは、オプション と呼ばれます。これらのオプションは
DHCP
オプションを制御します。一方、パラメーターはオプションでない値や、DHCP
サーバーの動作を制御する値を設定します。
中括弧(
{ }
)で囲まれたセクションの前に宣言されたパラメーター(オプションを含む)はグローバルパラメーターとみなされます。グローバルパラメーターは、これ以降のすべてのセクションに適用されます。
重要
設定ファイルが変更された場合、systemctl restart dhcpd コマンドを使用して
DHCP
デーモンが再起動するまで変更は反映されません。
注記
毎回
DHCP
設定ファイルを変更してサービスを再起動する代わりに、omshell コマンドを使用すると、DHCP
サーバーへの接続、クエリー、変更のインタラクティブな方法が提供されます。omshell を使用すると、サーバーの実行中にすべての変更を加えることができます。omshell の詳細は、omshell の man ページを参照してください。
例14.1「サブネットの宣言」 では、ルーター、subnet-mask、domain-search、domain-name-servers、および time-offset オプションは、その下で宣言された ホスト ステートメントに使用されます。
提供されるサブネットごとに、
DHCP
サーバーが接続するサブネットごとに、subnet 宣言が 1 つ必要になります。これは、アドレスがその サブネット にあることを認識する方法を DHCP
デーモンに指示します。サブネット に動的に割り当てられるアドレスはない場合でも、subnet 宣言は各サブネットに必要です。
この例では、サブネット内のすべての
DHCP
クライアントにグローバルオプションと、宣言された 範囲 があります。クライアントには、範囲 内の IP
アドレスが割り当てられます。
例14.1 サブネットの宣言
subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-search "example.com"; option domain-name-servers 192.168.1.1; option time-offset -18000; # Eastern Standard Time range 192.168.1.10 192.168.1.100; }
サブネット内のシステムに動的
IP
アドレスをリースする DHCP
サーバーを設定するには、例14.2「Range パラメーター」 の例の値を変更します。これにより、クライアントのデフォルトのリース時間、最大リース時間、ネットワークの設定値を宣言します。この例では、192 .
168.1.10 から 192. 168
.1.100 の 範囲 の IP
アドレスをクライアントシステムに割り当てます。
例14.2 Range パラメーター
default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.254; option domain-name-servers 192.168.1.1, 192.168.1.2; option domain-search "example.com"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; }
ネットワークインターフェイスカードの MAC アドレスに基づいてクライアントに
IP
アドレスを割り当てるには、host 宣言内で hardware ethernet パラメーターを使用します。例14.3「DHCP を使用した静的 IP アドレス」 に示すように、host apex 宣言は、MAC アドレス 00:A0:78:8E:9E:AA
を持つネットワークインターフェイスカードが常に IP
アドレス 192.168.1.4
を受け取ることを指定します。
オプションのパラメーターである
host-name
を使用すると、クライアントにホスト名を割り当てることができる点にも注目して下さい。
例14.3 DHCP を使用した静的 IP アドレス
host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; }
Red Hat Enterprise Linux 7 は、InfiniBand IPoIB インターフェイスへの静的
IP
アドレスの割り当てをサポートします。ただし、これらのインターフェイスには通常のハードウェアイーサネットアドレスがないため、IPoIB インターフェイスに一意の ID を指定する別の方法を使用する必要があります。標準は、dhcp-client-identifier=
construct オプションを使用して IPoIB インターフェイスの dhcp-client-identifier
フィールドを指定することです。DHCP
サーバーホストコンストラクトは、最大 1 つのハードウェアイーサネットと、host スタンザごとに 1 つの dhcp-client-identifier
エントリーをサポートします。ただし、複数の固定アドレスエントリーが存在する可能性があり、DHCP
サーバーは、DHCP
要求が受信されたネットワークに適したアドレスに自動的に応答します。
例14.4 複数インターフェイスにおける DHCP を使用した静的 IP アドレス
たとえば、2 つの InfiniBand インターフェイスと各物理インターフェイスの
P_Key
インターフェイスやイーサネット接続など、マシンの設定が複雑な場合は、以下の静的 IP
コンストラクトを使用してこの設定を行うことができます。
Host apex.0 { option host-name “apex.example.com”; hardware ethernet 00:A0:78:8E:9E:AA; option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:11; fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50; } host apex.1 { option host-name “apex.example.com”; hardware ethernet 00:A0:78:8E:9E:AB; option dhcp-client-identifier=ff:00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:03:00:31:7b:12; fixed-address 172.31.0.50,172.31.2.50,172.31.1.50,172.31.3.50; }
デバイスに適した
dhcp-client-identifier
を見つけるには、通常、接頭辞 ff:00:00:00:00:00:02:00:00:02:c9
:00 を使用して、IPoIB インターフェイスの最後の 8 バイトを追加します(これは、IPoIB インターフェイスが存在する InfiniBand ポートの 8 バイトの GUID でもあります)。旧式のコントローラーのなかには、この接頭辞が適切でないものもあります。その場合は、DHCP
サーバーで tcpdump を使用して受信 IPoIB DHCP
要求を取得し、そのキャプチャーから適切な dhcp-client-identifier
を収集することが推奨されます。以下に例を示します。
]$ tcpdump -vv -i mlx4_ib0
tcpdump: listening on mlx4_ib0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
23:42:44.131447 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request, length 300, htype 32, hlen 0, xid 0x975cb024, Flags [Broadcast] (0x8000)
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Discover
Hostname Option 12, length 10: "rdma-qe-03"
Parameter-Request Option 55, length 18:
Subnet-Mask, BR, Time-Zone, Classless-Static-Route
Domain-Name, Domain-Name-Server, Hostname, YD
YS, NTP, MTU, Option 119
Default-Gateway, Classless-Static-Route, Classless-Static-Route-Microsoft, Static-Route
Option 252, NTP
Client-ID Option 61, length 20: hardware-type 255, 00:00:00:00:00:02:00:00:02:c9:00:00:02:c9:02:00:21:ac:c1
上記のダンプでは、Client-ID フィールドが表示されています。hardware-type 255
は ID の初期 ff:
に対応します。ID の残りの部分は、DHCP
設定ファイルに表示する必要があるのと同じように引用符で囲まれます。
同じ物理ネットワークを共有するすべてのサブネットは、例14.5「Shared-network 宣言」 のように shared-network 宣言内で宣言する必要があります。共有ネットワーク 内のパラメーターは、囲まれた subnet 宣言以外のパラメーターはグローバルパラメーターとみなされます。shared-network に割り当てられる名前は、テストラボ環境のすべてのサブネットを記述するため、「test-lab」 というタイトルを使用するなど、ネットワークの説明的なタイトルでなければなりません。
例14.5 Shared-network 宣言
shared-network name { option domain-search "test.redhat.com"; option domain-name-servers ns1.redhat.com, ns2.redhat.com; option routers 192.168.0.254; #more parameters for EXAMPLE shared-network subnet 192.168.1.0 netmask 255.255.252.0 { #parameters for subnet range 192.168.1.1 192.168.1.254; } subnet 192.168.2.0 netmask 255.255.252.0 { #parameters for subnet range 192.168.2.1 192.168.2.254; } }
例14.6「Group 宣言」 に示すように、group 宣言は、宣言のグループにグローバルパラメーターを適用するために使用されます。たとえば、共有ネットワーク、サブネット、ホストをグループ化することができます。
例14.6 Group 宣言
group { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-search "example.com"; option domain-name-servers 192.168.1.1; option time-offset -18000; # Eastern Standard Time host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; } host raleigh { option host-name "raleigh.example.com"; hardware ethernet 00:A1:DD:74:C3:F2; fixed-address 192.168.1.6; } }
注記
提供されている設定ファイルのサンプルをベースとして使用し、それにカスタムの設定オプションを追加できます。このファイルを適切な場所にコピーするには、
root
で以下のコマンドを実行します。
~]# cp /usr/share/doc/dhcp-version_number/dhcpd.conf.example /etc/dhcp/dhcpd.conf
ここでの version_number は、
DHCP
のバージョン番号になります。
オプションステートメントの完全なリストとその機能については、
dhcp-options (5)
の man ページを参照してください。
14.2.2. リースデータベース
DHCP
サーバーでは、/var/lib/dhcpd/dhcpd.leases
ファイルは DHCP
クライアントのリースデータベースを保存します。このファイルは変更しないでください。最近割り当てられた各 IP
アドレスの DHCP
リース情報は、自動的にリースデータベースに保存されます。この情報には、リースの長さ、IP
アドレスの割り当て先、リースの開始日と終了日、リースの取得に使用されたネットワークインターフェイスカードの MAC アドレスが含まれます。
リースデータベースの時刻はすべて、現地時間でなく協定世界時 (UTC) を使用します。
リースデータベースは、サイズが大きくなり過ぎるのを避けるために適宜再作成されます。最初に、すべての既知のリースは一時的なリースデータベースに保存されます。
dhcpd.leases
ファイルの名前が dhcpd.leases~
に変更され、一時的なリースデータベースが dhcpd.leases
に書き込まれます。
リースデータベースの名前がバックアップファイルに変更された後、新しいファイルが書き込まれる前に、
DHCP
デーモンが強制終了したり、システムがクラッシュする可能性がありました。この場合は、dhcpd.leases
ファイルは存在しませんが、サービスを起動する必要があります。この際、新規のリースファイルを作成しないでください。作成すると、それまでのリースはすべて失われ、多くの問題が発生します。正しい解決策は、dhcpd.leases~
バックアップファイルの名前を dhcpd.leases
に変更し、デーモンを起動することです。
14.2.3. サーバーの起動と停止
重要
DHCP
サーバーを初めて起動すると、dhcpd.leases
ファイルが存在しない限り失敗します。ファイルが存在しない場合には、touch /var/lib/dhcpd/dhcpd.leases コマンドを使用してファイルを作成できます。同じサーバーが DNS
サーバーとして BIND も実行している場合は、named サービスを開始すると dhcpd.leases
ファイルを自動的にチェックするため、この手順は必要ありません。
これまで稼働していたシステムで、新規のリースファイルを作成しないでください。作成すると、それまでのリースはすべて失われ、多くの問題が発生します。正しい解決策は、
dhcpd.leases~
バックアップファイルの名前を dhcpd.leases
に変更し、デーモンを起動することです。
DHCP
サービスを起動するには、次のコマンドを使用します。
systemctl start dhcpd.service
DHCP
サーバーを停止するには、以下を入力します。
systemctl stop dhcpd.service
デフォルトでは、
DHCP
サービスは起動時に開始されません。ブート時にデーモンが自動的に起動するように設定する方法については、『Red Hat Enterprise Linux システム管理者のガイド』 を参照してください。
複数のネットワークインターフェイスがシステムに接続されているが、
DHCP
サーバーがいずれかのインターフェイスで DHCP
要求のみをリッスンする必要がある場合は、DHCP
サーバーがそのデバイスでのみリッスンするように設定します。DHCP
デーモンは、/etc/dhcp/dhcpd.conf
ファイルで subnet 宣言を見つけるインターフェイスでのみリッスンします。
これは、ネットワークカードが 2 つあるファイアウォールマシンで役立ちます。1 つのネットワークカードを
DHCP
クライアントとして設定し、インターネットへの IP
アドレスを取得できます。他のネットワークカードは、ファイアウォールの背後にある内部ネットワークの DHCP
サーバーとして使用できます。内部ネットワークに接続されたネットワークカードのみを指定するとユーザーはインターネット経由でデーモンに接続できないため、システムをよりセキュアにすることができます。
コマンドラインオプションを指定するには、
root
ユーザーとして dhcpd.service
ファイルをコピーして編集します。例を示します。
~]# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/ ~]# vi /etc/systemd/system/dhcpd.serviceセクション [Service]:
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid your_interface_name(s)の行を編集します。次に、
root
ユーザーとしてサービスを再起動します。
~]# systemctl --system daemon-reload ~]# systemctl restart dhcpd
/etc/systemd/system /dhcpd.service ユニットファイルの [Service] セクションの ExecStart=/usr/sbin
/dhcpd にコマンドラインオプションを追加できます。使用可能なオプションには、以下のものがあります。
- -p portnum - dhcpd がリッスンする UDP ポート番号を指定します。デフォルト値はポート 67 です。
DHCP
サーバーは、指定された UDP ポートよりも大きいポート番号のDHCP
クライアントに応答を送信します。たとえば、デフォルトのポート 67 を使用する場合、サーバーはポート 67 でリクエストをリッスンし、ポート 68 にあるクライアントに応答します。ポートが指定され、DHCP
リレーエージェントが使用される場合は、DHCP
リレーエージェントがリッスンするポートと同じポートを指定する必要があります。詳細は、「DHCP リレーエージェント」を参照してください。 - -f - フォアグラウンドプロセスとしてデーモンを実行します。これは主にデバッグ用に使用されます。
- -d:
DHCP
サーバーデーモンを標準エラー記述子に記録します。これは主にデバッグ用に使用されます。これが指定されていない場合、ログは/var/log/messages
に書き込まれます。 - -cf filename : 設定ファイルの場所を指定します。デフォルトの場所は
/etc/dhcp/dhcpd.conf
です。 - -LF filename : リースデータベースファイルの場所を指定します。リースデータベースファイルがすでに存在する場合は、
DHCP
サーバーが起動するたびに同じファイルを使用することが重要です。このオプションは、実稼働環境以外のマシンでデバッグする目的にのみ使用することが強く推奨されます。デフォルトの場所は/var/lib/dhcpd/dhcpd.leases
です。 - -q - デーモンの起動時に著作権メッセージ全体を出力しません。