[Windows Server] DHCP 서버에서 기간 만료된 클라이언트 IP가 남아있을 떄?

DHCP IP 정리 : 요약

기본적으로 4시간에 한번씩 IP를 정리하므로, lease time이 지난 후 최악의 케이스로 4시간 후 IP 정리될 수 있음. 레지스트리 수정으로 IP 정리 주기를 빠르게(예를 들어 30분) 하면 빨리 정리됨. 너무 빨리하면 ip duplicated발생할 수 있으므로 10분 정도는 여유를 주자.

(근데 수동으로 all range에 대해 expired clients를 날리는 명령은 못찾겠다... 하나하나 지우는건 가능)

현재 임대중인 IP - GUI

윈도우 서버에서 dhcp(GUI)를 실행하보면 통계에 사용가능한 IP와 실제 임대된 IP가 숫자가 안맞는 경우가 있다. 예를 들어 통계에는 전체 10개 중 5개 사용가능이라고 표시되는데, 임대된 IP 목록을 보면 4개만 사용하고 있는 거다. 하나는 어디 갔을까?

stale ip

stale ip를 포함한 전체 임대 IP 목록

파워쉘을 열고 아래 명령을 쳐보자

PS c:\> netsh
dhcp
server
scope <0 ip of your scope e.g. 10.200.1.0>
show clients

여기서 목록을 보면 임대 기간이 지난 IP(stale ip)까지 모두 표시가 된다.

수동 삭제

수동으로 날릴 ip를 확인하고 아래 명령을 입력하면 해당 IP가 정리되어 신규 client에게 할당 가능한 상태가 된다.

delete lease <client ip>

주기 변경

expired ip를 정리하는 시간(grace period)가 4시간이므로 레지스트리를 수정하여 정리 주기를 짧게하면 4시간 동안 기간이 만료된 IP가 dhcp server에 짐이되는, 그리고 IP가 다 차서 고통받는! 현상을 줄일 수 있다.

정리 주기 설정

HKLM/System/CurrentControlSet/Services/DHCPServer/Parameters 아래에 LeaseExtension (DWORD)를 추가 단위는 초(second)다. 인터넷의 많은 예제들이 분으로 설명이 되어 있는데.. 초로 입력해야 함. 예) 30분마다 한번씩 돌리려면 1800을 입력하자.

DHCP DB cleanup interval

HKLM/System/CurrentControlSet/Services/DHCPServer/Parameters 아래에 DatabaseCleanupInterval(DWORD)를 수정 단위는 분(minute)이다. IP정리 주기를 맞추기 위해서 LeaseExtension과 맞춰주자.

서비스 재시작

당연할수도 있지만... 서비스 재시작을 해야반영된다. 서비스 재시작 후 주기만큼 기다렸다가 (ㅜㅜ) event viewer에서 제대로 도는지 확인하고 작업을 끝내자.

참고

  1. https://social.technet.microsoft.com/Forums/windows/en-US/43c2bcc9-4c4e-420d-96db-11f05843859c/dhcp-leases-vs-dhcp-statistics?forum=winservergen
  2. https://social.technet.microsoft.com/wiki/contents/articles/25089.dhcp-on-windows-servers-why-are-the-expired-ip-addresses-not-getting-re-assigned.aspx