3 DHCPサービスの構成
動的ホスト構成プロトコル(DHCP)により、クライアント・システムは、ネットワークに接続するたびにDHCPサーバーからネットワーク構成情報を取得できます。DHCPサーバーは、IPアドレスの範囲、およびクライアントで必要なその他のネットワーク構成パラメータを使用して構成されます。
Oracle LinuxシステムをDHCPクライアントとして構成すると、クライアント・デーモンdhclient
で、DHCPサーバーに接続してネットワーキング・パラメータが取得されます。DHCPはブロードキャストベースであるため、クライアントはサーバーまたはリレー・エージェントと同じサブネット上に存在する必要があります。クライアントをサーバーと同じサブネットに配置できない場合は、DHCPリレー・エージェントを使用して、サブネット間でDHCPメッセージを渡すことができます。
このサーバーは、クライアントに割り当てるIPアドレスのリースを行います。クライアントは、リースに関する特定条件(期間など)をリクエストできます。DHCPサーバーは、リースに関して付与できる条件を制限するように構成できます。クライアントが継続的にネットワークに接続している場合は、リースが期限切れになる前に、dhclient
でリースが自動的に更新されます。DHCPサーバーは、ネットワーク・インタフェースのMACアドレスに基づいて同じIPアドレスをクライアントに割り当てるように構成できます。
DHCPを使用する利点は、次のとおりです。
-
IPアドレスの集中管理
-
新規クライアントをネットワークに簡単に追加可能
-
IPアドレスの再利用により、必要なIPアドレスの合計数を削減
-
DHCPサーバー上のIPアドレス空間を再構成でき、各クライアントの再構成は不要
DHCPの詳細は、RFC 2131を参照してください。同様に、次のマニュアル・ページを参照してください。
-
dhcpd(8)
-
dhcp-options(5)
サーバーのネットワーク・インタフェースの設定
デフォルトでは、dhcpd
サービスは、ネットワーク・インタフェース上でリクエストを処理して、DHCP構成ファイルにおいて定義されているサブネットにそれらを接続します。
DHCPサーバーに複数のインタフェースがあるとします。そのインタフェースenp0s1
を介して、サーバーが、そのサーバーでサービス提供先として構成されている、クライアントと同じサブネットに接続されます。この場合、そのサーバーがそのインタフェースで着信リクエストをモニターし処理できるようにするには、DHCPサービスでenp0s1
を設定する必要があります。
次のいずれかの手順に進む前に、次の要件を満たしていることを確認してください。
- DHCPを構成するための適切な管理権限がある。
dhcp-server
パッケージをインストールしてある。していない場合は、次のコマンドを使用してそのパッケージをインストールします。
sudo dnf install dhcp-server
次のように、ネットワーク・インタフェースを構成します。
- IPv4ネットワークの場合:
/usr/lib/systemd/system/dhcpd.service
ファイルを/etc/systemd/system/
ディレクトリにコピーします。sudo cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
/etc/systemd/system/dhcpd.service
を編集します。このためには、ExecStart
パラメータを定義する行を見つけます。-
dhcpd
サービスでリスニングするインタフェースの名前を追加します。入力例を太字で示します。
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS int1-name int2-name
systemd
マネージャ構成をリロードします。sudo systemctl daemon-reload
dhcpd
サービス構成を再起動します。sudo systemctl restart dhcpd.service
または、次のように入力することもできます。
sudo systemctl restart dhcpd
- IPv6ネットワークの場合:
/usr/lib/systemd/system/dhcpd6.service
ファイルを/etc/systemd/system/
ディレクトリにコピーします。sudo cp /usr/lib/systemd/system/dhcpd6.service /etc/systemd/system/
/etc/systemd/system/dhcpd6.service
ファイルを編集します。このためには、ExecStart
パラメータを定義する行を見つけます。-
dhcpd6
サービスでリスニングする必要があるインタフェースの名前を追加します。入力例を太字で示します。
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd6.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS int1-name int2-name
systemd
マネージャ構成をリロードします。sudo systemctl daemon-reload
dhcpd
サービス構成を再起動します。sudo systemctl restart dhcpd6.service
または、次のように入力することもできます。
sudo systemctl restart dhcpd6
DHCP宣言について
DHCPでそのクライアントにサービスを提供する方法は、IPv4ネットワークの場合は/etc/dhcp/dhcpd.conf
ファイル内、IPv6ネットワークの場合は/etc/dhcp/dhcpd6.conf
ファイル内のパラメータと宣言で定義します。このファイルには、クライアント・ネットワーク、アドレス・リース、IPアドレス・プールなどの詳細が含まれています。
注意:
新しくインストールされたOracle Linuxシステムでは、dhcpd.conf
ファイルとdhcpd6.conf
ファイルは両方とも空になっています。DHCPに関してサーバーを初めて構成する場合は、テンプレートを使用すると、それらのファイルを構成しやすくなります。次のコマンドのどちらかを入力します。
- IPv4の場合
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
- IPv6の場合
cp /usr/share/doc/dhcp-server/dhcpd6.conf.example /etc/dhcp/dhcpd6.conf
その後、どちらかのファイルを開くと、参考のために例と説明が示されます。
構成ファイル内の情報は、次の宣言の組合せからなります。
グローバル設定
グローバル・パラメータにより、DHCPサーバーによるサポート対象またはサービス提供対象となるすべてのネットワークに適用する設定を定義します。
次のような設定をネットワーク全体にグローバルに適用する場合について考えてみましょう。
- 企業ネットワークのドメイン名:
example.com
.d - ネットワークのDNSサーバー:
dn1.example.com
およびdns2.example.com
- すべてのクライアントに割り当てられたリース時間: 12時間(43200秒)
- 割当て可能な最大リース時間: 24時間(86400秒)
この場合は、次のように、構成ファイル内のグローバル設定を構成します。
option domain-name "example.com";
default-lease-time 43200;
max-lease-time 86400;
authoritative;
authoritative
パラメータにより、そのサーバーをDHCPサービス用の公式またはプライマリ・サーバーとして特定します。このパラメータは、通常は、複数のDHCPサーバーがある設定において使用します。authoritative
パラメータが指定されているサーバーでは、そのパラメータが指定されていないサーバーよりも、優先的にリクエストが処理されます。
サブネット宣言
subnet
宣言により、DHCPサーバーを直接接続するサブネット、およびそのサブネット内のシステムがクライアントとして機能を果たす場所について、詳細を提供します。
次のような、DHCPサーバーの構成について考えてみましょう。
- サーバーの
enp0s1
インタフェースが192.0.2.0/24ネットワークに直接接続されます。 - 192.0.2.0/24ネットワーク内のシステムはDHCPクライアントです。
- このクライアント・サブネットのトポロジは次のとおりです。
- サブネットのDNSサーバー: 192.0.2.1
- サブネットのゲートウェイ: 192.0.2.1
- ブロードキャスト・アドレス: 192.0.2.255
- クライアントのアドレス範囲: 192.0.2.10から192.0.2.100
- 各クライアントの最大リース時間: 86,400秒(1日)
dhcp.conf
に次の宣言を入力します。
subnet 192.0.2.0 netmask 255.255.255.0 {
range 192.0.2.10 192.0.2.100;
option domain-name-servers 192.0.2.1;
option routers 192.0.2.1;
option broadcast-address 192.0.2.255;
max-lease-time 86400;
}
IPv6ネットワーク環境では、dhcpd6.conf
ファイル内のsubnet
宣言は次の例のようになります。
subnet6 2001:db8:0:1::/64 {
range6 2001:db8:0:1::20 2001:db8:0:1::100;
option dhcp6.name-servers 2001:db8:0:1::1;
max-lease-time 172800;
}
共有ネットワーク宣言
DHCPサーバーで、サーバーを、そのサーバーに直接接続されていない他のサブネット内のクライアントに提供する必要がある場合は、shared-network
宣言を定義します。
次の例を考えてみましょう。この例では、前のセクションのシナリオを少し発展させています。
- DHCPサーバーは192.0.2.0/24ネットワークに属していますが、このネットワーク内のシステムにサービスを提供しません。
- このサーバーは、次のリモート・サブネット内のクライアントからのリクエストを処理します。
- 192.168.5.0/24.
- 198.51.100.0/24.
- 複数のリモート・サブネットで同じDNSサーバーが共有されますが、各サブネットにそれ固有のルーターとIPアドレス範囲があります。
この場合は、dhcp.conf
に次の宣言を入力します。
shared-network example {
option domain-name-servers 192.168.2.1;
...
subnet 192.168.5.0 netmask 255.255.255.0 {
range 192.168.5.10 192.168.5.100;
option routers 192.168.5.1;
}
subnet 198.51.100.0 netmask 255.255.255.0 {
range 198.51.100.10 198.51.100.100;
option routers 198.51.100.1;
}
...
}
subnet 192.0.2.0 netmask 255.255.255.0 {
}
前述の例では、最後のsubnet
宣言は、このサーバーの固有のネットワークを示しており、shared-network
スコープの範囲外です。この宣言は、空宣言と呼ばれます。これは、それがこのサーバーのサブネットを定義しているためです。このサーバーはこのサブネットにサービスを提供しないため、リース、アドレス範囲、DNS情報などのその他のエントリは追加されていません。この宣言は、空ですが必要なものであり、これがないとdhcpd
サービスが開始されません。
IPv6ネットワーク環境では、dhcpd6.conf
ファイル内のshared-network
宣言は次の例のようになります。
shared-network example {
option domain-name-servers 2001:db8:0:1::1:1
...
subnet6 2001:db8:0:1::1:0/120 {
range6 2001:db8:0:1::1:20 2001:db8:0:1::1:100
}
subnet6 2001:db8:0:1::2:0/120 {
range6 2001:db8:0:1::2:20 2001:db8:0:1::2:100
}
...
}
subnet6 2001:db8:0:1::50:0/120 {
}
ホスト宣言
クライアントに静的IPアドレスが必要な場合は、host
宣言を定義します。
- プリンタのMACアドレス: 52:54:00:72:2f:6e
- プリンタのIPアドレス: 192.0.2.130
重要:
クライアントの固定IPアドレスは、他のクライアントに分散される動的IPアドレスのプール外にある必要があります。そうでないと、アドレスの競合が発生する可能性があります。
dhcp.conf
に次の宣言を入力します。host printer.example.com {
hardware ethernet 52:54:00:72:2f:6e;
fixed-address 192.0.2.130;
}
システムは、host
宣言における名前ではなく、ハードウェア・イーサネット・アドレスによって特定されます。したがって、ホスト名は変わる可能性がありますが、クライアントはそのイーサネット・アドレスを介して継続的にサービスを提供されます。
IPv6ネットワーク環境では、dhcpd6.conf
ファイル内のhost
宣言は次の例のようになります。
host server.example.com {
hardware ethernet 52:54:00:72:2f:6e;
fixed-address6 2001:db8:0:1::200;
}
グループ宣言
group
宣言を定義して、同じパラメータを同時に複数の共有ネットワーク、サブネットおよびホストに適用します。
- DHCPサーバーは、サブネット192.0.2.0/24に属しており、そのサブネットにサービスを提供します。
- 1つのクライアントに固定アドレスが必要となり、残りのクライアントにはそのサーバーからの動的IPアドレスが使用されます。
- すべてのクライアントで、同じDNSサーバーが使用されます。
この場合は、dhcp.conf
に次の宣言を入力します。
group {
option domain-name-servers 192.0.2.1;
host server1.example.com {
hardware ethernet 52:54:00:72:2f:6e;
fixed-address 192.0.2.130;
}
subnet 192.0.2.0 netmask 255.255.255.0 {
range 192.0.2.10 192.0.2.100;
option routers 192.0.2.1;
option broadcast-address 192.0.2.255;
max-lease-time 86400;
}
}
IPv6ネットワーク環境では、dhcpd6.conf
ファイル内のgroup
宣言は次の例のようになります。
group {
option dhcp6.domain-search "example.com";
host server1.example.com {
hardware ethernet 52:54:00:72:2f:6e;
fixed-address 2001:db8:0:1::200;
}
host server2.example.com {
hardware ethernet 52:54:00:1b:f3:cf;
fixed-address 2001:db8:0:1::ba3;
}
}
subnet6 2001:db8:0:1::/64 {
range6 2001:db8:0:1::20 2001:db8:0:1::100;
option dhcp6.name-servers 2001:db8:0:1::1;
max-lease-time 172800;
}
DHCPサービスのアクティブ化
すべてのDHCPサービスは、サーバーの/etc/DHCP/dhcpd.conf
ファイル内または/etc/DHCP/dhcpd6.conf
ファイル内で定義されます。サービスを構成してからその構成済サービスをアクティブ化するには、次の手順に従います。
- IPv4ネットワークの場合:
/etc/dhcp/dhcpd.conf
ファイルを開きます。- そのファイルにパラメータと宣言を追加します。
指針として、「DHCP宣言について」、または
/usr/share/doc/DHCP-server/dhcpd.conf.example
テンプレート内のコメントとノートを参照してください。 - オプションで、サーバーの再起動時に自動的に起動されるように、
dhcpd
サービスを設定します。sudo systemctl enable dhcpd
dhcpd
サービスを起動または再起動します。sudo systemctl start dhcpd
- IPv6ネットワークの場合:
/etc/dhcp/dhcpd6.conf
ファイルを開きます。- そのファイルにパラメータと宣言を追加します。
指針として、「DHCP宣言について」、または
/usr/share/doc/dhcp-server/dhcpd6.conf.example
テンプレート内のコメントとノートを参照してください。 - オプションで、サーバーが再起動された場合に自動的に起動されるように、
dhcpd6
サービスを設定します。sudo systemctl enable dhcpd6
dhcpd
サービスを起動または再起動します。sudo systemctl start dhcpd6
破損したリース・データベースからのリカバリ
dhcpd
サービスにより、次のフラットファイル・データベース内の、IPアドレス、MACアドレス、リース有効期限などのリース情報をメンテナンスします。
- DHCPv4の場合:
/var/lib/dhcpd/dhcpd.leases
- DHCPv6の場合:
/var/lib/dhcpd/dhcpd6.leases
dhcpd
サービスによって、次のメカニズムでそれらのファイルが定期的に再生成されます。
- このサービスでは、次のように、既存のリース・ファイルの名前が変更されます。
/var/lib/dhcpd/dhcpd.leases
という名前が/var/lib/dhcpd/dhcpd.leases~
に変更されます/var/lib/dhcpd/dhcpd6.leases
という名前が/var/lib/dhcpd/dhcpd6.leases~
に変更されます
- このサービスにより、新しい
dhcpd.leases
ファイルおよびdhcpd6.leases
ファイルが再作成されます。
リース・データベース・ファイルが破損した場合は、そのリース・データベースを、そのデータベースの最新の既知のバックアップからリストアする必要があります。
通常、リース・データベースの最新のバックアップはfilename.leases~
ファイルです。
注意:
バックアップ・インスタンスは、特定の時点で取得されたスナップショットであるため、システムの最新の状態が反映されていない場合があります。- DHCPv4の場合
-
次のように、
dhcpd
サービスを停止します。sudo systemctl stop dhcpd
-
次のように、破損したリース・データベースの名前を変更します。
sudo mv /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd.leases.corrupt
-
そのリース・データベースを、それに対応する
filename.leases~
バックアップ・ファイルからリストアします。sudo cp -p /var/lib/dhcpd/dhcpd.leases~ /var/lib/dhcpd/dhcpd.leases
-
次のように、
dhcpd
サービスを開始します。sudo systemctl start dhcpd
-
- DHCPv6の場合
-
次のように、
dhcpd
サービスを停止します。sudo systemctl stop dhcpd6
-
次のように、破損したリース・データベースの名前を変更します。
sudo mv /var/lib/dhcpd/dhcpd6.leases /var/lib/dhcpd/dhcpd6.leases.corrupt
-
そのリース・データベースを、それに対応する
filename.leases~
バックアップ・ファイルからリストアします。sudo cp -p /var/lib/dhcpd/dhcpd6.leases~ /var/lib/dhcpd/dhcpd6.leases
-
次のように、
dhcpd6
サービスを開始します。sudo systemctl start dhcpd6
-