DHCPNAK (DHCP negative acknowledgment) is a standard DHCP message type defined in RFC 2131 that a server sends to reject a client's DHCPREQUEST when the requested address is invalid, already allocated, or unavailable on the client's current network, forcing the client to restart the discovery process. The rejection mechanism prevents clients from using stale or incorrect addresses, particularly when devices roam between subnets, and is essential for maintaining proper DHCP operation across complex network environments including relay agents and failover pairs. Monitoring DHCPNAK rates provides operational visibility into network problems such as misconfigurations, lease database synchronization issues, or rogue servers, while high sustained rejection rates indicate configuration errors rather than normal server behavior.
DHCPNAKの仕組み
サーバーは、DHCPREQUESTに応答できない場合にDHCPNAKを送信します。このメッセージは、クライアントが要求したアドレスまたはパラメータが、現在のネットワークでは使用できないことをクライアントに通知するものです。
- クライアントによるリクエストの送信:クライアントは、オファーを受け入れるため、再起動後に記憶しているアドレスを確認するため、または既存のリースを更新または再バインドするために、DHCPREQUEST を送信します。
- サーバーによるリクエストの確認:サーバーは、要求されたアドレスを自身の設定およびリースレコードと比較します。そのアドレスがクライアントのサブネットに対して無効である場合、すでに別のクライアントに割り当てられている場合、またはその他の理由で利用できない場合は、リクエストは失敗します。
- サーバーが DHCPNAK を送信する場合:サーバーは DHCPACK の代わりに DHCPNAK を返します。リレーエージェントが関与している場合、このメッセージはリレーを経由してクライアントに返されます。
- クライアントの再起動:DHCPNAKを受信すると、クライアントはそのアドレスの使用を停止し、初期状態に戻ります。そこで、有効な設定を取得するために新しいDHCPDISCOVERを送信します。
DHCPNAKには、拒否の理由を説明するメッセージオプションが含まれる場合がありますが、アドレスやリースは含まれません。クライアントは、そのリクエストについてはこれを最終的な結果として扱い、拒否されたアドレスを使い続けてはなりません。
DHCPNAKに関する一般的な問題
クライアントが繰り返し DHCPNAK を受信し、リースを取得できないままディスカバリを再開します。これは、リレーパス上のスコープが欠落している、または誤っているなど、サーバーとクライアントのサブネットが一致しない場合に頻繁に発生します。
セグメント上に存在する不正なDHCPサーバーは、正規のクライアントからの要求に対してDHCPNAKを返すことがあります。その結果、クライアントは有効なリースの更新に失敗しますが、パケットキャプチャで予期しないサーバー識別子が確認されるまでは、原因の特定が困難です。
リースデータの同期が行われていない状態でサーバーの再構築やフェイルオーバーが行われた後、サーバーはクライアントが依然として保持しているアドレスを認識できない場合があります。それらのリースを更新しようとするクライアントは、NAKを連続して受信することになり、これが拒否件数の急増として現れます。
リレーエージェントが誤ったゲートウェイアドレスを設定すると、サーバーはクライアントの実際のサブネットと一致しないスコープを選択してしまいます。その結果、クライアントが保持するアドレスへの要求を拒否し、そのVLAN上のクライアントは接続を失ってしまいます。
連携が取れていない 2 台のサーバーは、同じアドレスを割り当てたり、一方のサーバーが発行したリース要求をもう一方のサーバーが拒否したりする可能性があります。その結果、クライアントは断続的な NAK やアドレスの競合に直面します。