2026年7月20日
2026年7月20日
DHCPサーバーの設定方法(isc-dhcp-serverの基本設定と固定割り当て)
isc-dhcp-server は、設定ファイル /etc/dhcp/dhcpd.conf にサブネットと配布するアドレス範囲を書き、待ち受けるインターフェースを指定すれば動きます。この記事では、Ubuntu / Debian を例に、インストールから基本設定、特定の機器への固定割り当て、動作確認とつまずきやすい点までを説明します。あわせて、ISC DHCP がすでに保守終了していることと、これから構築する場合の選択肢にも触れます。
先に知っておきたいこと:ISC DHCPは保守終了している
ISC(Internet Systems Consortium)は、ISC DHCP の保守を2022年末で終了し、後継として Kea DHCP を案内しています。Debian や Ubuntu などのディストリビューションでは引き続きパッケージが提供されていますが、提供の扱い(サポート対象のリポジトリかどうか)はリリースごとに変わっています(2026年10月現在)。
既存環境の保守や、小規模な検証用LANで使う分には今でも十分に役立ちますが、新しく長期運用するDHCPサーバーを建てるなら、Kea や dnsmasq、ルーター内蔵のDHCP機能も比較してください。この記事の考え方(サブネット・範囲・オプション・固定割り当て)は、どのソフトでもほぼ共通です。
DHCPサーバーを置く場所を決める
DHCPはブロードキャストで動くため、DHCPサーバーは「アドレスを配りたい機器と同じネットワーク(L2セグメント)」に置きます。別のセグメントへ配る場合は、ルーター側でDHCPリレーの設定が必要です。
VPSやクラウドの公開ネットワークでDHCPサーバーを動かすのは避けてください。事業者側のDHCPと衝突して他の利用者に影響したり、規約違反になったりするおそれがあります。使うのは、社内LANや、事業者が提供するプライベートネットワーク(ローカル接続)など、自分が管理する範囲に限ります。プライベートネットワークでも事業者がDHCPを提供している場合があるため、仕様を確認してから進めます。
同じセグメントにDHCPサーバーが2台あると、どちらの応答を受け取るかで機器の設定がばらつきます。家庭用ルーターや既存のサーバーでDHCPが有効になっていないか、事前に確認しておきます。
インストールとサーバー自身の固定IP
sudo apt update
sudo apt install isc-dhcp-server
インストール直後は設定が空のため、サービスの起動に失敗したというメッセージが出ることがありますが、設定前なので問題ありません。
DHCPサーバー自身のIPアドレスは、DHCPで取得せず固定にします。配布するサブネットに属するアドレスをインターフェースに設定しておかないと、後述の「No subnet declaration」エラーで起動しません。Ubuntu では netplan、Debian では /etc/network/interfaces など、環境に合った方法で設定してください。以下の例では、サーバーの LAN 側インターフェースを eth1、アドレスを 192.168.10.2/24 とします。
待ち受けるインターフェースを指定する
Debian / Ubuntu では /etc/default/isc-dhcp-server で、どのインターフェースでDHCPを提供するかを指定します。
# /etc/default/isc-dhcp-server
INTERFACESv4="eth1"
INTERFACESv6=""
ここを空のままにしたり、インターネット側のインターフェースを指定したりしないよう注意します。インターフェース名は ip -br addr で確認できます。
dhcpd.confの基本設定
編集前に元のファイルを残しておきます。
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.orig
最小限の設定例です。
# /etc/dhcp/dhcpd.conf
authoritative;
default-lease-time 3600;
max-lease-time 86400;
option domain-name "office.example.internal";
option domain-name-servers 192.168.10.1, 1.1.1.1;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.199;
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
}
各設定の意味は次のとおりです。
authoritative;:このサーバーがこのネットワークの正式なDHCPサーバーであることを示します。別のネットワークで取得したアドレスを持ち込んだ機器に、すばやく「そのアドレスは使えない」と返せるようになります。同じセグメントに別の正式なサーバーがある場合は書きません。default-lease-time/max-lease-time:貸し出し期間(秒)です。機器の入れ替わりが多いネットワークでは短め、固定的な環境では長めにします。range:自動で配るアドレスの範囲です。サーバーやルーター、プリンターなど手動で固定IPを振る機器のアドレスと重ならないようにします。option routers:デフォルトゲートウェイ、option domain-name-servers:DNSサーバーです。
範囲を決めるときは、固定IP用の帯(例: .1〜.99)とDHCP用の帯(例: .100〜.199)を分けて、社内の資料に残しておくと後で混乱しません。
特定の機器に決まったアドレスを配る
サーバーやプリンターなど、アドレスが変わると困る機器には、MACアドレスを指定して決まったアドレスを配れます。
host printer-1f {
hardware ethernet 52:54:00:12:34:56;
fixed-address 192.168.10.50;
}
fixed-address には range の外のアドレスを指定します。範囲内にすると、他の機器に同じアドレスが配られて衝突することがあります。
なお、最近のスマートフォンやPCは、Wi-Fiごとにランダムな MAC アドレスを使う機能が標準で有効になっていることが多く、MACアドレスでの固定割り当てが効かない場合があります。その場合は機器側でそのネットワークのランダム化を無効にします。
構文チェックと起動
設定を変えたら、反映する前に構文を確認します。
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
sudo systemctl restart isc-dhcp-server
sudo systemctl enable isc-dhcp-server
sudo systemctl status isc-dhcp-server
-t は設定を読み込んで構文だけを調べるオプションです。エラーがあると行番号付きで表示されるので、セミコロンの付け忘れや波かっこの対応を確認します。
ファイアウォールを使っている場合は、DHCPの通信(UDP 67番:サーバー側、68番:クライアント側)を LAN 側インターフェースで許可します。ufw なら次のように書けます。
sudo ufw allow in on eth1 to any port 67 proto udp
動作確認:ログとリース情報を読む
クライアントを接続したら、サーバーのログを確認します。
sudo journalctl -u isc-dhcp-server -f
正常な流れでは、DHCPDISCOVER(クライアントの探索)→ DHCPOFFER(サーバーの提示)→ DHCPREQUEST(クライアントの要求)→ DHCPACK(承認)の順に記録されます。DISCOVER が届いていなければネットワークかファイアウォール、OFFER のあとに REQUEST が来なければ別のDHCPサーバーの応答が採用された可能性を疑います。
貸し出し中のアドレスは、リースファイルで確認できます。
sudo cat /var/lib/dhcp/dhcpd.leases
パケットが届いているかどうか自体を確かめたいときは、tcpdump が役立ちます。
sudo tcpdump -ni eth1 port 67 or port 68
よくあるつまずき
「No subnet declaration for eth1」で起動しない
指定したインターフェースのアドレスが、dhcpd.conf のどの subnet にも属していないときに出ます。インターフェースに固定IPが付いているか、/etc/default/isc-dhcp-server のインターフェース名が正しいか、subnet と netmask の値がサーバーのアドレスと合っているかを順に確認します。
起動はするが、クライアントにアドレスが来ない
可能性が高い順に、ファイアウォールでUDP 67番が閉じている、サーバーとクライアントが別のセグメントにいる(VLANやWi-Fiの分離)、既存のルーターなど別のDHCPサーバーが先に応答している、の3点を確認します。tcpdump で DISCOVER が見えるかどうかで、ネットワーク側かサーバー側かを切り分けられます。
アドレスが足りなくなる
ログに「no free leases」と出る場合は、range が狭いか、リース期間が長すぎて使われなくなった機器のアドレスが解放されていません。範囲を広げるか、リース期間を短くします。
まとめ
- ISC DHCP は2022年末で保守終了しており、新規の長期運用なら Kea などの後継も検討します。
- DHCPサーバーは配布先と同じセグメントに置き、公開ネットワークでは動かしません。サーバー自身は固定IPにします。
/etc/default/isc-dhcp-serverでインターフェースを指定し、dhcpd.confにサブネット・範囲・オプションを書きます。固定割り当てはhost宣言で範囲外のアドレスを指定します。- 反映前に
dhcpd -tで構文を確認し、DISCOVER〜ACK のログとリースファイルで動作を確かめます。