Ubuntu 26.04 で DHCP server を構成する場合、単に package を入れて起動するだけでは足りません。どの interface で待ち受けるのか、どの subnet に対して払い出すのか、固定払い出しをどこまで管理するのかを明確にする必要があります。
この記事では、isc-dhcp-server を使って DHCPv4 の server を構成する手順を整理します。DHCPv6 は使用しない前提で停止し、IPv4 の待ち受け interface と dhcpd.conf を明示的に管理します。
- Ubuntu 26.04 で
isc-dhcp-serverを使う構成 - DHCPv4 と DHCPv6 service を分けて扱う理由
/etc/default/isc-dhcp-serverで待ち受け interface を限定する/etc/dhcp/dhcpd.confに subnet、router、DNS、固定払い出しを書くdhcpd -t、systemd、journal による確認手順
DHCP server の役割を固定する
DHCP server は、端末へ IP address、default gateway、DNS resolver などを配布します。PXE boot を組み合わせる場合は、boot server や boot file も DHCP で渡します。つまり DHCP は単なる IP 配布ではなく、ネットワーク参加時の初期設定を配る仕組みです。
| 項目 | 役割 |
|---|---|
| subnet | DHCP server が扱う network segment を定義する |
| range | 動的に払い出す IP address の範囲を定義する |
| option routers | client に default gateway を通知する |
| option domain-name-servers | client に DNS resolver を通知する |
| host / fixed-address | MAC address に対して固定 IP address を割り当てる |
| next-server / filename | PXE boot で TFTP server と boot file を通知する |
isc-dhcp-server をインストールする
Ubuntu 26.04 では、ここでは isc-dhcp-server を使います。Kea ではなく従来の dhcpd.conf を前提にした構成です。
sudo apt update
sudo apt install -y isc-dhcp-server
systemctl status isc-dhcp-server.service --no-pager
systemctl status isc-dhcp-server6.service --no-pagerIPv4 だけを使う場合、isc-dhcp-server.service が対象です。DHCPv6 を使わない構成では、isc-dhcp-server6.service は停止して無効化します。
sudo systemctl disable --now isc-dhcp-server6.service
systemctl is-enabled isc-dhcp-server6.service || true
systemctl status isc-dhcp-server6.service --no-pager || true待ち受け interface を指定する
isc-dhcp-server は、どの interface で DHCP request を受けるかを /etc/default/isc-dhcp-server で指定します。複数 NIC のサーバーでは、ここを曖昧にすると意図しない segment で DHCP が応答する危険があります。
sudo tee /etc/default/isc-dhcp-server >/dev/null <<'EOF'
INTERFACESv4="enp3s0 enp4s0"
INTERFACESv6=""
EOFINTERFACESv4 には DHCP server として応答する interface だけを書きます。管理用 interface、外部接続 interface、DHCP を出してはいけない VLAN を混ぜないことが重要です。
dhcpd.conf の基本形を作る
/etc/dhcp/dhcpd.conf には、authoritative、subnet、router、DNS、固定払い出しを書きます。router と DNS は client の通信に直結するため、network segment ごとに正しい値を指定します。
sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<'EOF'
authoritative;
subnet 172.17.16.0 netmask 255.255.255.0 {
option domain-name-servers 10.1.0.53, 10.1.0.54;
option routers 172.17.16.1;
}
subnet 172.17.32.0 netmask 255.255.255.0 {
option domain-name-servers 10.1.0.53, 10.1.0.54;
option routers 172.17.32.1;
}
host k8s-cp-g01-n001-v.mgmt.example.internal {
hardware ethernet 52:54:00:12:34:56;
fixed-address 172.17.16.21;
}
host k8s-worker-g01-n001-v.mgmt.example.internal {
hardware ethernet 52:54:00:12:34:57;
fixed-address 172.17.16.31;
}
EOFこの例では動的 range を書かず、固定払い出しを中心にしています。サーバー、Kubernetes node、基盤 VM などは、DHCP であっても MAC address と IP address を対応させて管理した方が運用しやすい場合があります。
PXE boot を使う場合の追加設定
PXE boot を使う場合は、DHCP で boot server と boot file を通知します。TFTP と組み合わせることで、物理サーバーや VM の自動インストールの入口になります。
sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<'EOF'
authoritative;
option arch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier,0,9) = "PXEClient";
next-server 10.1.0.89;
filename "grubnetx64.efi";
}
subnet 10.1.0.0 netmask 255.255.255.0 {
}
subnet 172.17.0.0 netmask 255.255.255.0 {
option domain-name-servers 10.1.0.53, 10.1.0.54;
option routers 172.17.0.1;
}
EOFPXE 用の DHCP 設定は、通常の IP 配布と混ぜて考えると分かりにくくなります。DHCP、TFTP、HTTP、autoinstall の役割を分けておくと、boot が止まった時に切り分けやすくなります。
設定を検証して service を起動する
設定ファイルを変更したら、service を再起動する前に dhcpd -t で構文を確認します。DHCP は network に影響するため、壊れた設定をそのまま投入しないことが重要です。
sudo /usr/sbin/dhcpd -t -cf /etc/dhcp/dhcpd.conf
sudo systemctl restart isc-dhcp-server.service
sudo systemctl enable isc-dhcp-server.service
systemctl status isc-dhcp-server.service --no-pagerdhcpd -t が失敗する場合は、subnet、brace、semicolon、MAC address、option の書式を確認します。特に ; の抜けはよくある原因です。
待ち受け状態とログを確認する
DHCP は UDP 67 で待ち受けます。service が起動していても、interface 指定や firewall の影響で期待通り応答できないことがあります。
ss -lunp | grep ':67'
journalctl -u isc-dhcp-server.service --no-pager -n 100
sudo tcpdump -ni enp3s0 port 67 or port 68tcpdump では DHCP discover / offer / request / ack の流れを確認できます。client から discover が来ていないのか、server が offer を返していないのかで、見るべき場所が変わります。
よくある確認ポイント
| 症状 | 確認する場所 |
|---|---|
| service が起動しない | dhcpd -t -cf /etc/dhcp/dhcpd.conf の結果、journal、semicolon の抜け |
| client が IP address を取得できない | server の待ち受け interface、client と同一 L2 か、DHCP relay の有無 |
| 別 segment に応答してしまう | INTERFACESv4 に不要な interface が入っていないか |
| 固定払い出しされない | MAC address、host 定義、subnet 定義、既存 lease を確認する |
| PXE boot が進まない | next-server、filename、TFTP、boot file の存在を確認する |
まとめ
Ubuntu 26.04 で isc-dhcp-server を使う場合、重要なのは package の導入ではなく、どの interface で、どの subnet に、どの情報を配るかを明確にすることです。
/etc/default/isc-dhcp-server で待ち受け interface を限定し、/etc/dhcp/dhcpd.conf で subnet、router、DNS、fixed-address、PXE boot の情報を整理します。DHCP はネットワーク全体に影響するため、設定反映前の dhcpd -t と、反映後の journal / tcpdump による確認を必ず行います。
Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。



