PXE ブートでは、DHCP サーバーが IP アドレスだけでなく、TFTP サーバーのアドレスや bootloader のファイル名も通知します。Ubuntu 22.04 で PXE 検証を行う場合、isc-dhcp-server を使うと DHCP の挙動を明示的に確認できます。
この記事では、Ubuntu 22.04 に isc-dhcp-server を導入し、PXE を見据えた subnet、range、next-server、filename、待ち受けインターフェイス、設定検査、ログ確認までを扱います。Ubuntu 22.04 は既存手順の保守対象として扱います。
- PXE 用 DHCP サーバーの役割
isc-dhcp-serverの導入dhcpd.confと待ち受けインターフェイスの設定- next-server と filename の指定
- 設定検査、ログ、lease の確認
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
DHCP サーバーの役割
DHCP はクライアントへ IP アドレス、default gateway、DNS、lease time などを渡します。PXE ではさらに、TFTP サーバーと bootloader のファイル名を通知します。
| 項目 | 役割 |
subnet | 配布対象ネットワークを定義する |
range | 動的に配布するアドレス範囲を定義する |
option routers | default gateway を通知する |
next-server | TFTP サーバーのアドレスを通知する |
filename | PXE で取得する boot file を通知する |
パッケージをインストールする
isc-dhcp-server を導入します。既存ネットワークに DHCP サーバーがある環境では、誤って同じセグメントで起動しないように注意します。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y isc-dhcp-server
systemctl status isc-dhcp-server --no-pager || true待ち受けインターフェイスを確認する
DHCP サーバーを待ち受けるインターフェイスを決めます。PXE 用の検証ネットワークだけで待ち受けるのが基本です。
ip -br addr
ip route
networkctl status --no-pager || true待ち受けインターフェイスを指定する
/etc/default/isc-dhcp-server に IPv4 側の待ち受けインターフェイスを指定します。ここでは例として ens33 を使います。
sudo cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.orig
sudo tee /etc/default/isc-dhcp-server >/dev/null <<'EOF'
INTERFACESv4="ens33"
INTERFACESv6=""
EOF
cat /etc/default/isc-dhcp-server基本の dhcpd.conf を作成する
まず PXE なしの基本 DHCP 設定を作成します。アドレス範囲、gateway、DNS は実際の検証ネットワークに合わせます。
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<'EOF'
option domain-name-servers 192.0.2.1;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.0.2.0 netmask 255.255.255.0 {
option routers 192.0.2.1;
range 192.0.2.100 192.0.2.150;
}
EOF
sudo dhcpd -t -cf /etc/dhcp/dhcpd.confPXE 用の指定を追加する
PXE 用には next-server と filename を追加します。next-server は TFTP サーバーのアドレス、filename は TFTP root から見た bootloader 名です。
sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<'EOF'
option domain-name-servers 192.0.2.1;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
next-server 192.0.2.10;
filename "grubx64.efi";
subnet 192.0.2.0 netmask 255.255.255.0 {
option routers 192.0.2.1;
range 192.0.2.100 192.0.2.150;
}
EOF
sudo dhcpd -t -cf /etc/dhcp/dhcpd.confUEFI と BIOS を分ける場合
UEFI と Legacy BIOS で boot file を分ける場合は、architecture option を見て条件分岐します。検証ではまず単一の boot file で動作確認してから分岐を追加します。
sudo tee /etc/dhcp/dhcpd.conf >/dev/null <<'EOF'
option domain-name-servers 192.0.2.1;
option arch code 93 = unsigned integer 16;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.0.2.0 netmask 255.255.255.0 {
option routers 192.0.2.1;
range 192.0.2.100 192.0.2.150;
next-server 192.0.2.10;
if option arch = 00:07 {
filename "grubx64.efi";
} else {
filename "pxelinux.0";
}
}
EOF
sudo dhcpd -t -cf /etc/dhcp/dhcpd.confサービスを起動する
設定検査が通ったらサービスを起動します。既存ネットワークで誤配布しないよう、待ち受けインターフェイスを再確認してから起動します。
sudo systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server --no-pager
sudo ss -lunp | grep ':67' || truelease を確認する
クライアントにアドレスが配布されると lease ファイルに記録されます。PXE 端末が DHCP まで到達しているかを見る入口になります。
sudo tail -n 80 /var/lib/dhcp/dhcpd.leases
journalctl -u isc-dhcp-server -n 100 --no-pagerパケットを確認する
クライアントが DHCP Discover を出しているか、サーバーが Offer を返しているかを確認します。
sudo tcpdump -ni ens33 port 67 or port 68TFTP 側との対応を見る
DHCP が返す next-server と filename は、TFTP サーバー側の実ファイルと対応している必要があります。
grep -E 'next-server|filename' /etc/dhcp/dhcpd.conf
ls -l /srv/tftp/grubx64.efi 2>/dev/null || true
tftp 192.0.2.10 -m binary -c get grubx64.efifirewall を確認する
DHCP は UDP 67/68 を使います。PXE 検証ネットワークの中で DHCP と TFTP が通ることを確認します。
sudo ufw status verbose
sudo iptables -S | grep -E '67|68|69' || true
sudo nft list ruleset | grep -E '67|68|69' || true不要になった場合は停止する
検証が終わった DHCP サーバーを残すと、意図しないアドレス配布の原因になります。使わない場合は停止して無効化します。
sudo systemctl disable --now isc-dhcp-server
systemctl status isc-dhcp-server --no-pager || trueよくある失敗
PXE 用 DHCP では、待ち受けインターフェイス、subnet、next-server、filename、TFTP 側ファイル名のずれで止まりやすいです。
- 既存 LAN 側で DHCP サーバーを起動してしまう
INTERFACESv4が空のままになっている- subnet 定義がインターフェイスのアドレスと合っていない
filenameと TFTP root のファイル名が違う- DHCP は通るが TFTP の UDP 69 番が通らない
まとめ
Ubuntu 22.04 の isc-dhcp-server は、PXE 検証用に DHCP 配布内容を明示したい場合に使えます。INTERFACESv4、dhcpd.conf、next-server、filename、lease、ログを順番に確認すると切り分けしやすくなります。
PXE / Autoinstall では、DHCP、TFTP、HTTP の役割を分けて確認することが重要です。DHCP で boot file の場所を通知し、TFTP で bootloader を取得できることを確認してから Autoinstall の HTTP 配布へ進みます。

