본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Dynamic Host Configuration Protocol : 동적 호스트 구성 프로토콜

네트워크에 접속한 호스트에 IP 주소, 서브넷 마스크, 기본 게이트웨이, DNS 서버 주소 같은 설정을 자동으로 나눠 주는 프로토콜이다.

DHCP는 RFC 2131에 정의되어 있으며, 이전의 BOOTP를 확장해 만들었다. 관리자가 호스트마다 주소를 손으로 넣지 않아도 되고, 주소를 일정 기간만 빌려 주었다가 회수할 수 있어 주소를 효율적으로 재사용할 수 있다. 전송 계층으로는 UDP를 쓰며, 서버는 UDP 67번, 클라이언트는 UDP 68번 포트를 사용한다.

동작 과정 (DORA)

편집 원본 편집

처음 주소를 받는 클라이언트는 아직 IP 주소가 없으므로, 첫 메시지는 브로드캐스트로 보낸다.

순서 메시지 보내는 쪽 → 받는 쪽 전달 방식 내용
1 DHCPDISCOVER 클라이언트 → 서버 브로드캐스트 사용 가능한 DHCP 서버를 찾는다.
2 DHCPOFFER 서버 → 클라이언트 클라이언트가 BROADCAST 플래그를 켰으면 브로드캐스트, 아니면 유니캐스트 가능 빌려 줄 수 있는 주소와 설정값을 제안한다.
3 DHCPREQUEST 클라이언트 → 서버 브로드캐스트 여러 제안 가운데 하나를 골라 요청한다. 브로드캐스트이므로 선택받지 못한 서버도 결과를 알게 된다.
4 DHCPACK 서버 → 클라이언트 OFFER와 같은 규칙 주소 할당을 확정하고 임대 기간 등을 알려 준다.
  • 서버가 요청을 받아들일 수 없으면 DHCPACK 대신 DHCPNAK를 보낸다.
  • 클라이언트는 받은 주소가 이미 쓰이고 있음을 알게 되면 DHCPDECLINE을, 주소를 더 쓰지 않으면 DHCPRELEASE를 보낸다.
  • 주소는 이미 있고 다른 설정값만 받고 싶을 때는 DHCPINFORM을 쓴다.
  • 메시지 종류는 옵션 53번(DHCP Message Type)에 담기며, 값 1~8이 DISCOVER, OFFER, REQUEST, DECLINE, ACK, NAK, RELEASE, INFORM 순서다.

DHCP 서버는 주소를 영구히 주지 않고 임대 기간(lease time)을 정해 빌려 준다. 클라이언트는 기간이 끝나기 전에 갱신해야 한다.

시점 기본값 클라이언트 동작
T1 (갱신 시간) 임대 기간의 50% (0.5) 주소를 준 서버에 DHCPREQUEST를 유니캐스트로 보내 연장을 요청한다(RENEWING 상태).
T2 (재바인딩 시간) 임대 기간의 87.5% (0.875) 원래 서버가 응답하지 않으면 DHCPREQUEST를 브로드캐스트해 아무 서버에게나 연장을 요청한다(REBINDING 상태).
임대 만료 100% 연장받지 못하면 주소 사용을 멈추고 처음(DISCOVER)부터 다시 시작한다.

DHCP 릴레이 에이전트

편집 원본 편집
  • DHCPDISCOVER는 브로드캐스트이므로 라우터를 넘지 못한다. 서버가 다른 서브넷에 있으면 클라이언트는 서버를 찾을 수 없다.
  • 릴레이 에이전트는 클라이언트 쪽 서브넷에서 브로드캐스트를 받아 DHCP 서버로 유니캐스트로 전달하고, 서버 응답을 다시 클라이언트에게 돌려준다. RFC 2131은 이 역할을 BOOTP 릴레이 에이전트와 같은 동작으로 정의한다.
  • 릴레이 에이전트는 메시지의 giaddr 필드에 자신의 주소를 넣는다. 서버는 이 값을 보고 어느 서브넷용 범위에서 주소를 줄지 정한다.
  • 라우터 장비에서는 인터페이스에 DHCP 서버 주소를 지정해 브로드캐스트를 전달하게 한다. 시스코 장비의 ip helper-address 명령이 대표적인 예다.
  • 서브넷마다 DHCP 서버를 두지 않고 서버 한 대로 여러 서브넷을 관리할 수 있게 된다.

범위, 제외 범위, 예약

편집 원본 편집
용어 설명
범위(scope) 한 서브넷에서 DHCP로 나눠 줄 주소 구간과 그 서브넷에 적용할 설정값(서브넷 마스크, 게이트웨이, 임대 기간 등)의 묶음이다.
제외 범위(exclusion range) 범위 안에 있지만 나눠 주지 않을 주소 구간이다. 서버, 프린터, 라우터처럼 고정 주소를 수동으로 설정한 장비의 주소를 넣는다.
예약(reservation) 특정 클라이언트(MAC 주소 등으로 식별)에게 항상 같은 주소를 주도록 묶어 두는 설정이다. 마이크로소프트 문서에 따르면 예약 주소는 제외 범위 안에 있어도 지정된 클라이언트에게 임대된다.

DHCP 옵션 번호는 RFC 2132에 정의되어 있다.

번호 이름 내용
1 Subnet Mask 서브넷 마스크
3 Router 기본 게이트웨이(라우터) 주소 목록
6 Domain Name Server DNS 서버 주소 목록
15 Domain Name 클라이언트가 쓸 도메인 이름
50 Requested IP Address 클라이언트가 원하는 주소
51 IP Address Lease Time 임대 기간
53 DHCP Message Type 메시지 종류(DISCOVER, OFFER 등)
54 Server Identifier 응답한 DHCP 서버의 식별 주소
  • DHCP 서버를 찾지 못한 클라이언트는 스스로 169.254.0.0/16 대역의 링크 로컬 주소를 정해 쓸 수 있다. 이 대역과 절차는 RFC 3927에 정의되어 있다.
  • 윈도우에서는 이 기능을 APIPA(Automatic Private IP Addressing)라 부른다.
  • 이 주소로는 같은 링크 안 장비끼리만 통신할 수 있고, 라우터를 넘어 인터넷에 나갈 수 없다.
  • ipconfig 결과에 169.254.x.x 주소가 보이면 DHCP 서버와 통신하지 못했다는 신호로 본다.
  • DHCP 스푸핑: 공격자가 가짜 DHCP 서버를 띄워 잘못된 게이트웨이나 DNS 주소를 나눠 주고 트래픽을 가로챈다.
  • DHCP Starvation 공격: 위조한 MAC 주소로 DISCOVER를 대량으로 보내 주소 풀을 모두 소진시켜 정상 클라이언트가 주소를 받지 못하게 한다.
  • DHCP 메시지에는 기본적으로 인증이 없으므로, 스위치에서 신뢰 포트만 서버 응답을 허용하는 방식(DHCP snooping) 등으로 대응한다.
  • DORA 순서(Discover, Offer, Request, Ack)와 각 메시지의 브로드캐스트 여부를 묻는다.
  • 서버 UDP 67번, 클라이언트 UDP 68번 포트를 구분할 수 있어야 한다.
  • 다른 서브넷의 DHCP 서버를 쓰려면 릴레이 에이전트가 필요하다는 점, T1(50%)·T2(87.5%) 갱신 시점을 묻는다.
  • 169.254.0.0/16 주소가 할당된 원인(DHCP 서버 응답 없음)과 예약·제외 범위의 차이를 묻는다.