手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 isc-dhcp-server DHCP サーバー構築

目次に戻る

Overview

isc-dhcp-server を使用して DHCP サーバーを構築します。

DHCP (Dynamic Host Configuration Protocol) サーバーは、ネットワーク内のデバイスに自動的に IP アドレスやその他のネットワーク設定を割り当てる機能を提供します。RFC 2131 で定義されています。

ネットワークプロトコル

DHCP は UDP (User Datagram Protocol) を使用します。ポート番号はサーバー側が 67 (dhcps) 、クライアント側は 68 (dhcpc) を使用します。

主な機能

DHCP の主な機能は次のとおりです。

  1. IP アドレスの割り当て
  2. サブネットマスク、デフォルトゲートウェイ、DNS サーバーなどのネットワーク設定の提供
  3. アドレスの再利用
  4. IP アドレスの管理
  5. PXE boot における ブートローダーの情報提供

注意事項

DHCP を使用する際に注意すべき点は次のとおりです。

  1. DHCP サーバーの適切な設定とセキュリティ確保が重要です。不正な DHCP サーバーがネットワークに接続されると、ネットワークのセキュリティに影響を与える可能性があります。
  2. 原則として同一セグメント内に複数の DHCP サーバーを設置することはできないとされていますが、冗長化の目的で、DHCP サーバーが割り当てるレンジを分けて複数の DHCP サーバーを設置するケースもあります。専用アプライアンスによっては HA 機能を持つ場合もあります。
  3. DHCP は IPv4 限定のプロトコルです。IPv6 で使用するには、DHCPv6 が必要となりますが、DHCPv6 はデフォルトゲートウェイの割り当て機能がありません。なお、IPv6 でのIPアドレスの自動割り当て機能は RA (Router Advertisement) が使われるケースが多く、デフォルトゲートウェイを割り当てる機能がないことからも、DHCPv6 はあまり積極的に使われないと思います。

前提条件

  • こちらを参考に基本設定が完了していること。

インストール

isc-dhcp-server をインストールします。

myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install isc-dhcp-server

/etc/dhcp/dhcpd.conf

isc-dhcp-server の設定ファイルは /etc/dhcp/dhcpd.conf です。

デフォルト値

デフォルト値は下記の通りです。

myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /etc/dhcp/dhcpd.conf | expand | tr -s [:space:] | sed 's/^ /    /g'
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;

設定値

設定例は下記の通りです。一般的な環境では十分な設定内容となっています。domain-name はホスト名を FQDN に補完するための設定ですが、これは便利なようであまり効果的ではない設定だと思っています。つまり、FQDN でなくてもホスト名のみでアクセス可能となる点が便利なのですが、運用的には同一ホストに対して複数のアクセス先が存在すると無用な混乱を招きますし、情報量もそれに応じて増えます。このため、個人的にはあえて設定しないことを推奨していますが、もちろん、それを必要とする環境であれば設定してください。本稿の環境では不要なため削除しています。

myadmin@ubuntu:~$ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
myadmin@ubuntu:~$ sudo tee /etc/dhcp/dhcpd.conf <<"EOF"
option domain-name-servers 10.0.51.71;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 10.0.33.0 netmask 255.255.255.0 {
    option routers 10.0.33.1;
    range dynamic-bootp 10.0.33.128 10.0.33.159;
}
EOF

/etc/default/isc-dhcp-server

IP アドレスが有効な複数のインターフェイスが存在している場合、dhcpd.conf にそれに対応する設定が無いと起動時にエラーが出力されます。以下の設定で DHCP サーバーが有効となるインターフェイスを限定することでこのエラーを回避できます。この設定は環境により不要です。

デフォルト値

デフォルト値は下記の通りです。

myadmin@ubuntu:~$ grep -v -e '^\s*#' -e '^\s*$' /etc/default/isc-dhcp-server | expand | tr -s [:space:] | sed 's/^ /    /g'
INTERFACESv4=""
INTERFACESv6=""

設定値

設定例は下記の通りです。

myadmin@ubuntu:~$ sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.orig
myadmin@ubuntu:~$ sudo tee /etc/default/isc-dhcp-server <<"EOF"
INTERFACESv4="ens33"
INTERFACESv6=""
EOF

設定の有効化

設定を有効化します。

myadmin@ubuntu:~$ sudo systemctl restart isc-dhcp-server.service && systemctl status isc-dhcp-server.service

Appendix

PXE boot 用の設定

PXE boot 用の設定は下記の通りです。PXE boot を必要とする環境は非常に限られていると思いますが、Ubuntu において Autoinstall などを組み合わせてインストールプロセスを自動化したい場合は必須です。

この設定フィルには以下も含まれます。

  • 自ネットワーク以外に DHCP を提供しています。この DHCP サーバーは 10.1.0.0/24 に属しますが、PXE boot 対象となるサーバーは 172.17.0.0/24 に属しています。自ネットワークを DHCP に含めないと DHCP は起動することができません。異なるネットワークへ DHCP を提供するため、上位の L3SW で DHCP リレーを設定しています。
  • MAC アドレスをベースとし、ubuntu.s1230.com に固定 IP アドレスを設定しています。PXE boot 完了後の対象ホストへのアクセスをスムーズにするためです。
myadmin@ubuntu:~$ sudo tee /etc/dhcp/dhcpd.conf <<"EOF"
option domain-name-servers 10.1.0.53;
option arch code 93 = unsigned integer 16;
class "pxeclients"{
    match if substring (option vendor-class-identifier,0,9) = "PXEClient";
    next-server 10.1.0.69;
    filename grubnetx64.efi.signed;
}
subnet 10.1.0.0 netmask 255.255.255.0 {
}
subnet 172.17.0.0 netmask 255.255.255.0 {
    option routers 172.17.0.1;
    range dynamic-bootp 172.17.0.224 172.17.0.239;
}
host ubuntu.s1230.com {
    hardware ethernet 80:ee:73:e2:2c:a3;
    fixed-address 172.17.0.23;
}
EOF

以下は PXE boot 用設定の説明です。

設定説明
option arch code 93 = unsigned integer 16;クライアントのアーキテクチャ情報を定義するオプションを設定しています。アーキテクチャ情報は PXE ブート時に特定のブートローダーを提供するために使用されます。
match if substring (option vendor-class-identifier,0,9) = “PXEClient”;class-identifier オプションが PXEClient で始まるクライアントを対象としています。これに一致するクライアントに対して、次の設定が適用されます。
next-server 10.1.0.69;PXE クライアントの次のサーバーとして 10.1.0.69 (TFTP) を指定しています。
filename grubnetx64.efi.signed;PXE クライアントに提供するブートローダーのファイル名を指定しています。
PXE boot 用の設定

目次に戻る

Ubuntu 22.04 isc-dhcp-server DHCP サーバー構築

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る