手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 DHCP server の基本設定 – isc-dhcp-server で IPv4 を配布する

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 配布ではなく、ネットワーク参加時の初期設定を配る仕組みです。

項目役割
subnetDHCP server が扱う network segment を定義する
range動的に払い出す IP address の範囲を定義する
option routersclient に default gateway を通知する
option domain-name-serversclient に DNS resolver を通知する
host / fixed-addressMAC address に対して固定 IP address を割り当てる
next-server / filenamePXE 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-pager

IPv4 だけを使う場合、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=""
EOF

INTERFACESv4 には 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;
}
EOF

PXE 用の 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-pager

dhcpd -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 68

tcpdump では 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-serverfilename、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 による確認を必ず行います。

参考書籍
参考書籍
Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

次に読む記事

Ubuntu 26.04 サーバー管理ガイド
Ubuntu 26.04 DHCP server の基本設定 – isc-dhcp-server で IPv4 を配布する

コメントを残す

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

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

トップへ戻る