Dynamic Host Configuration Protocol (DHCP) はそれぞれのコンピュータに対して個別の設定を行うことなく、ネットワークの設定を集中管理するための仕組みです。 DHCP を使用するように設定したコンピュータは、自分自身のアドレスを固定で持つことはなく、サーバからの指示に従って自動的に設定することができます。また、クライアント側で NetworkManager を使用している場合は、クライアント側の設定を行う必要はありません。この仕組みは、特に 1 つのインターフェイスで複数のネットワークに接続するような場合に有用です。なお、 DHCP サーバを動作させているマシンでは、 NetworkManager を使用してはなりません。
DHCP サーバを使用するもう 1 つの用途としては、ネットワークカードのハードウエアアドレス (通常は固定のアドレスが割り当てられています) を利用して各クライアントを識別し、常に同じアドレスを割り当てたり、動的にアドレスを割り当てたりすることがあげられます。動的にアドレスを割り当てる場合でも、 DHCP サーバ側では貸与期限を越えて同じアドレスを割り当てようとします。この方式は、クライアント数よりもアドレス数のほうが多い場合にのみ成立します。
DHCP はシステム管理者にとっても利点があります。アドレスやネットワークの設定変更は面倒な作業になりがちですが、サーバの設定ファイルだけで集中管理すれば、クライアント側の設定を一斉に変えることができますので、クライアントの台数が多くなればなるほどメリットとなります。また、新しいマシンのネットワークへの接続に際しても、プールから IP アドレスを取るだけの簡単な話になってしまいます。 DHCP サーバ側で適切な設定を提供することで、様々なネットワークに接続するラップトップに対しても、非常に便利な機能となります。
本章では、 DHCP サーバとクライアントは同じサブネット (192.168.2.0/24
) 内で動作するものとし、ルータが 192.168.2.1
にあるものとします。また、 DHCP サーバの IP アドレスは 192.168.2.254
で、それぞれ 192.168.2.10
から 192.168.2.20
までと、 192.168.2.100
から 192.168.2.200
までのアドレス範囲を提供するものとします。
DHCP サーバは IP アドレスとネットマスクの情報を提供するだけではありません。ホスト名やドメイン名、デフォルトゲートウエイやネームサーバのアドレスなどをクライアントに提供して、設定させることができます。また、これに加えて、 DHCP サーバではクライアントが現在時刻を問い合わせるためのタイムサーバや、印刷サーバなどの情報を集中管理して提供することもできます。
DHCP サーバをインストールするには、 YaST を起動して
› を選択します。その後 › を選択して を選択します。あとは を押して必要なパッケージをインストールします。YaST DHCP モジュールでは、サーバの設定をローカル (DHCP サーバを動作させるマシン自身) に保存することができるほか、 LDAP サーバで設定データを管理させることもできます。 LDAP を使用するには、 DHCP サーバを設定する前に LDAP の環境を設定してください。
LDAP について、詳しくは 第5章 「389 Directory Server を利用した LDAP サービス」 をお読みください。
YaST の DHCP モジュール ( yast2-dhcp-server
) では、ローカルネットワークに対する DHCP サーバの設定を行うことができます。このモジュールは、ウイザードモードのほか、熟練者向けの設定モードで動作させることができます。
このモジュールを初めて起動した場合は、ウイザードが表示されます。ここでは、サーバの管理に関わるいくつかの基本的な決定を行います。この初期設定を完了することで、サーバの基本設定を作成することができます。また、熟練者モードを使用することで、より高度な設定作業を行うこともできます。具体的には下記のように進めていきます:
まずは DHCP サーバが待ち受けるべきネットワークインターフェイスを一覧から選択し、 図20.1「DHCP サーバ: カードの選択」 をご覧ください。
を押します。詳しくはfirewalld
についてopenSUSE Leap 15.7 では、 のオプションが正しく動作しない問題が確認されています。手作業で DHCP のポートを開くには、下記のように実行します:
>
sudo
firewall-cmd --zone=public --permanent --add-service=dhcp
>
sudo
firewall-cmd --reload
まずは LDAP サーバ内に DHCP の設定を保存するかどうかを、チェックボックスで選択します。テキストボックスは、 DHCP サーバが管理する全てのクライアントに対する情報を設定します。ドメイン名やタイムサーバのアドレス、プライマリおよびセカンダリのネームサーバ、印刷 (プリント) サーバや WINS サーバ (Windows と Linux のクライアントが共存している場合) やゲートウエイ、貸与時間を設定します。詳しくは 図20.2「DHCP サーバ: グローバル設定」 をご覧ください。
ここでは、動的な IP アドレスをどのようにしてクライアントに配布するかを設定します。まずはサーバがクライアントに対して配布する IP アドレスの範囲を指定します。配布するアドレスは、同じネットマスク内のものに限られることに注意してください。また、クライアント側から再貸与を送信させるまでの貸与時間を設定することもできます。必要であれば、サーバ側で IP アドレスを予約しておく最大の貸与時間を設定することもできます。詳しくは 図20.3「DHCP サーバ: 動的 DHCP」 をご覧ください。
ここでは DHCP サーバの開始方法を設定します。システムの起動時に DHCP サーバを自動的に開始するか、もしくは必要に応じて開始する (テスト用途など) かを選択することができます。サーバの設定が終わったら、 図20.4「DHCP サーバ: 起動」 をご覧ください。
を押してください。詳しくは上述の手順で動的なアドレス割り当てを設定するだけでなく、サーバに対してほぼ固定のアドレスを割り当てさせる方法があります。下半分に表示されたテキストボックスを利用して、固定のアドレスを割り当てるべきクライアントを指定していってください。具体的には、図20.5「DHCP サーバ: ホスト管理」 をご覧ください。
と がクライアントに対して割り当てる名前とアドレスを、 と (トークンリングもしくはイーサネット) がそのクライアントを識別するための情報になっています。上半分に表示されているクライアントの設定には、 を押すことで追加することができます。追加済みの設定を編集したり削除したりするには、対象を上半分で選択して編集を行い、 もしくは を押します。詳しくは上記までの設定方法に加えて、 YaST ではより詳しい設定を行うことのできる熟練者モードが用意されています。熟練者モードを起動するには、 図20.4「DHCP サーバ: 起動」 をご覧ください) 。
ダイアログ内にある ボタンを押してください (詳しくは最初に表示されたダイアログでは、 図20.6「DHCP サーバ: chroot jail と宣言」 をご覧ください。なお、 を押した場合は、追加する宣言の種類を選択することになります。また、 ボタンを押すと、サーバのログファイルを表示したり、 TSIG 鍵の管理を行ったり、 DHCP サーバの設定にあわせてファイアウオールの設定を調整したりすることもできます。
を押すことで、既存の設定ファイルを編集できるようにすることができます。また、このモードではさらに詳しい設定である chroot 環境 (chroot jail とも呼びます) の使用可否を選択することができるようになっています。これは DHCP サーバのコンピュータを保護するための仕組みで、外部から DHCP サーバが脆弱性に対する攻撃を受けても、システム全体には被害が及ばないように緩和するためのものです。ダイアログの下半分には、宣言に関するツリービューが表示されています。それぞれ , , でツリーを操作することができます。詳しくはDHCP サーバの 図20.7「DHCP サーバ: 宣言の種類の選択」 をご覧ください) 。
には、いくつかの宣言を追加することができます。このダイアログでは、 , , , , , , のいずれかを追加することができます。この例ではサブネットを選択しています (このダイアログでは、 IP アドレスとネットマスクからなる新しいサブネットを宣言することができます。ダイアログの中央部では、
, , の各ボタンを利用して、サブネットに対するオプションを指定することができます。また、サブネットに対してダイナミック DNS を設定するには、 を押します。以前のダイアログでダイナミック DNS を設定するように選択している場合は、ここでゾーン転送の機密を保持するための鍵を管理することができます。ここで 図20.10「DHCP サーバ: ダイナミック DNS のためのインターフェイス設定」 をご覧ください) 。
を押すと次のダイアログが表示され、ダイナミック DNS を利用するインターフェイスを設定することができるようになります (詳しくはここでは 図20.8「DHCP サーバ: サブネットの設定」) に戻ることができます。再度 を押すと、熟練者向け設定ダイアログに戻ることができます。
を選択することで、動的な DNS の更新を行うことができるようになります。選択を行ったら、正引きと逆引きの各ゾーンに対して使用する TSIG 鍵をドロップダウンから選択します。なお、 DNS サーバと DHCP サーバとの間で、同じ鍵を設定しなければならないことに注意してください。また、 を選択することで、ダイナミック DNS の環境に合わせて、グローバルな DHCP サーバの設定を自動調整することもできます。さらに、更新すべきダイナミック DNS の正引きおよび逆引きのゾーンを指定したあと、 を押してください。これにより、サブネットの設定ダイアログ (ignore client-updates
オプションについてゾーンに対してダイナミック DNS を有効化している場合、 YaST ではクライアントの互換性問題を改善するため、自動的に ignore client-updates
オプションを設定します。このオプションは不要であれば無効化できます。
DHCP サーバが待ち受けるべきネットワークインターフェイスの選択と、ファイアウオールの設定調整を行うには、熟練者向け設定ダイアログ内の
で行います。表示されたインターフェイスの一覧から、 DHCP サービスへのアクセスを許可するインターフェイスを 1 つまたは複数選択します。全てのサブネット内のクライアントがサーバと通信できるようにするには、サーバ側のファイアウオールも調整する必要があります。firewalld
についてopenSUSE Leap 15.7 では、 のオプションが正しく動作しない問題が確認されています。手作業で DHCP のポートを開くには、下記のように実行します:
>
sudo
firewall-cmd --zone=public --permanent --add-service=dhcp
>
sudo
firewall-cmd --reload
全ての設定手順が完了したら、
を押してダイアログを閉じてください。新しい設定が書き込まれ、サーバが再起動されます。openSUSE Leap では、 DHCP サーバと DHCP クライアントの両方が提供されています。提供されている DHCP サーバは dhcpd
(Internet Systems Consortium 提供) で、 DHCP クライアントは dhcp-client
(こちらも Internet Systems Consortium 提供) というパッケージ名になっています。また、ネットワークを設定するためのツールとして wicked
が用意されています。
既定では、 wicked
ツールと wickedd-dhcp4
および wickedd-dhcp6
の各サービスがインストールされています。各システムでは、 DHCP サーバの監視を行う目的で、自動的にどのシステムでも動作するようになっています。これらのサービスを利用するにあたっては、ほとんどの環境で設定ファイルを用意する必要がなく、そのままの状態で問題なく動作するようになっています。より複雑な環境の場合は、 /etc/dhclient.conf
や/etc/dhclient6.conf
などの設定ファイルで制御できる ISC dhcp-client
をお使いください。
DHCP システムの中枢は Dynamic Host Configuration Protocol (DHCP) デーモンと呼ばれるものです。このサーバは設定ファイル /etc/dhcpd.conf
の設定に従って、アドレスを 貸し出し たあと、それがどのように使用されているのかを監視します。このファイルのパラメータや値を変更することで、システム管理者が様々な方法でプログラムの動作を変更することができます。まずは 例20.1「設定ファイル /etc/dhcpd.conf」 にある /etc/dhcpd.conf
の設定例をご覧ください。
default-lease-time 600; # 10 分 max-lease-time 7200; # 2 時間 option domain-name "example.com"; option domain-name-servers 192.168.1.116; option broadcast-address 192.168.2.255; option routers 192.168.2.1; option subnet-mask 255.255.255.0; subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.20; range 192.168.2.100 192.168.2.200; }
これは DHCP サーバからネットワークに対して、 IP アドレスを割り当てるための必要十分な設定ファイルです。なお、各行の末尾にはセミコロンを忘れずに付けてください。正しく付けておかないと、 dhcpd が起動しなくなってしまいます。
このサンプルファイルは、大きく分けて 3 つのセクションに分割することができます。最初のセクションは、 IP アドレスを貸し出してから、クライアント側から更新要求を受け取るまでの既定の貸与時間を秒単位で指定しています ( default-lease-time
) 。また、このセクションでは、 DHCP サーバが更新を受け取るまでに IP アドレスを予約しておくべき最大の時間も指定しています ( max-lease-time
) 。
2 番目のセクションでは、グローバルな範囲でいくつかのネットワークパラメータを定義しています。
option domain-name
の行では、ネットワーク内で使用すべき既定のドメイン名を指定しています。
option domain-name-servers
の行では、最大 3 つまで、ホスト名から IP アドレスを、もしくは IP アドレスからホスト名を解決することのできる DNS サーバを指定することができます。実際には、お使いのマシンにあるネームサーバと DHCP を設定する前から使用していたネットワーク内の DNS サーバを指定するのが一般的です。またネームサーバは、ホスト名と動的なアドレスとの間での解決を行うこともできます。ネームサーバの構築について、詳しくは 第19章 「ドメインネームシステム」 をお読みください。
option broadcast-address
の行では、クライアント側で使用すべきブロードキャストアドレスを指定しています。
option routers
の行では、設定された自分のアドレスとサブネットマスクと、宛先のアドレスとを比較した結果、ローカルネットワーク内に存在していない宛先にデータパケットを送信する際、経由すべきゲートウエイ (ルータ) を指定しています。小さなネットワーク環境の場合、このゲートウエイはインターネットに接続しているルータのアドレスになります。
option subnet-mask
の行では、クライアントに対して割り当てるネットマスクを指定しています。
ファイル内の最後のセクションはネットワークとサブネットマスクを定義しているものです。この定義の中には、 DHCP サーバがクライアントに対して割り当てるアドレスの範囲を指定する必要があります。 例20.1「設定ファイル /etc/dhcpd.conf」 の例では、192.168.2.10
から 192.168.2.20
まで、および 192.168.2.100
から 192.168.2.200
までが割り当ての範囲になっています。
必要に応じていくつかの行を変更したら、あとは systemctl start dhcpd
コマンドを実行して DHCP デーモンを起動するだけです。このコマンドを実行すると、即時にサービスが開始されます。なお、 rcdhcpd
check-syntax
を実行することで、簡単な文法チェックを行うこともできます。設定内に何らかの問題があって起動時にエラーメッセージが表示された場合は、 journalctl
コマンドを利用することで、メインのシステムログを表示させて、原因を探ることができます (詳しくは 第11章 「journalctl
: systemd
ジャーナルへの問い合わせコマンド」 をお読みください) 。
なお、既定の openSUSE Leap システムでは、セキュリティ上の理由から、 DHCP デーモンが chroot 環境で実行されます。設定ファイルは、 chroot 環境から読み込むことができるようにするため、あらかじめコピーしておかなければなりません。ただし、通常は systemctl start dhcpd
を実行することで、設定ファイルが自動的にコピーされますので、特に気にする必要はありません。
DHCP では、特定のクライアントに対して固定のアドレスを定義して、割り当てることができます。ただし、アドレスはプール内で事前に明示的に割り当てておかなければなりません。動的なアドレスとは異なり、固定のアドレスでは有効期限が切れることはありません。
クライアントに対して固定のアドレスを割り当てるにあたって、クライアントの識別はハードウエアアドレスを使用します (ハードウエアアドレスはグローバルにユニークなアドレスで、 6 バイトの値から構成されています。たとえば 00:30:6E:08:EC:80
のように表記します) 。固定のアドレスを割り当てるには、 例20.2「設定ファイルへの追加」 のような内容を 例20.1「設定ファイル /etc/dhcpd.conf」 にある設定ファイルに追加する必要があります。 DHCP サーバ側では、このクライアントからアクセスがあると、常に同じデータを返すようになります。
host jupiter { hardware ethernet 00:30:6E:08:EC:80; fixed-address 192.168.2.100; }
最初の行にはクライアントの名前 (( host
ホスト名 、ここでは jupiter
) が記述され、 2 行目には MAC アドレスが記述されています。 Linux コンピュータであれば、 MAC アドレスは ip
link show
に続いて、インターフェイス名 (例: eth0
) を指定することで、表示することができます。このコマンドを実行すると、下記のような内容が出力されます:
link/ether 00:30:6E:08:EC:80
上記の例では、 MAC アドレスが 00:30:6E:08:EC:80
のクライアントに対して、 IP アドレス 192.168.2.100
とホスト名 jupiter
を自動的に割り当てる設定になります。なお、 hardware
の後ろはほぼ全ての場合において ethernet
になりますが、 IBM システムなどでは token-ring
を指定する必要がある場合もあります。
セキュリティを向上させる理由から、 ISC 提供の DHCP サーバの openSUSE Leap 版では、 Ari Edelkind 氏による non-root/chroot (root 以外のユーザで動作させ、かつ chroot 環境を使用する) 修正が適用されています。これにより、 dhcpd は nobody
というユーザ権限で、かつ chroot 環境内 ( /var/lib/dhcp
) で動作するように設定されています。また、この構成を利用するため、設定ファイルである dhcpd.conf
は、 /var/lib/dhcp/etc
内に配置しなければならなくなっています。通常は、サービスの起動時にスクリプト側で自動的にコピーするように設計されているため、特に特殊な作業を行う必要はありません。
この機能に関するサーバ側の動作を制御したい場合は、 /etc/sysconfig/dhcpd
ファイルを編集してください。 chroot 環境を利用したくない場合は、 /etc/sysconfig/dhcpd
ファイル内の DHCPD_RUN_CHROOTED
の変数を、 「no」 に設定してください。
また、 chroot 環境下で dhcpd がホスト名を解決できるようにするため、下記の設定ファイルも chroot 環境内にコピーされるようになっています:
/etc/localtime
/etc/host.conf
/etc/hosts
/var/run/netconfig/resolv.conf
これらのファイルは、起動スクリプト内で /var/lib/dhcp/etc/
内にコピーされるようになっています。 /etc/ppp/ip-up
のようなスクリプトでこれらのファイルを動的に変更するような場合は、それらが反映されなくなってしまいますが、設定ファイル内では IP アドレスのみを指定していることから、ほとんど影響はありません。
また、 chroot 環境内にコピーすべき追加のファイルが存在する場合は、それらのファイルを /etc/sysconfig/dhcpd
内の DHCPD_CONF_INCLUDE_FILES
内で指定してください。また、 DHCP のログ機構に対して、 syslog デーモンの再起動後も正しく動作するようにするには、 /etc/sysconfig/syslog
内の SYSLOGD_ADDITIONAL_SOCKET_DHCP
を設定してください。
DHCP に関する詳しい情報は、 Internet Systems Consortium ( https://www.isc.org/dhcp/ ) で提供されています。ここには dhcpd
, dhcpd.conf
, dhcpd.leases
, dhcp-options
の各マニュアルページも用意されています。