DHCP

1 개요

Dynamic Host Configuration Protocol
간단하게 해석하자면 '동적 호스트 설정 프로토콜'이다.

IP 라우터는 인터페이스 및 호스트에 IP 주소를 할당해 줄 수 있다. 예전에는 각 PC마다 고정 IP 설정[1]으로 입력해 주었지만 너무 번거롭다는 불편함이 있다. 무엇보다도 IP 설정에 실수가 있는 경우 인터넷이 안된다. 예를 들어 실수로 오타가 날 경우(예를들어 IP 주소가 10.10.10.2인데 오타가 나서 10.10.1.2라고 입력 된다거나)도 있고, 실수로 다른 컴퓨터와 동일한 IP 를 할당하여 충돌나는 경우도 존재한다. 그외에도 사용하지 않고 꺼놓은 컴퓨터에도 모두 IP 를 하나씩 할당해야 하다 보니 IP 가 모자라는 문제도 발생한다.

이런 문제를 해결하기 위해서 IP 를 필요로 하는 컴퓨터에게 자동으로 할당해서 사용할 수 있도록 해주고, 사용하지 않으면 반환받아 다른 컴퓨터가 사용할 수 있도록 해주는 것이 DHCP 이다. 이는 보통 라우터 장비에 해당 기능이 탑재되지만, 별도의 서버에 DHCP 서비스를 설정하여 사용할 수도 있다. 라우터는 단지 게이트웨이 역할만 하고, DHCP 서버는 별도로 두는 구성도 많이 사용된다.

2 임대(Lease), 갱신(Renewal), 반환(Release)

DHCP 서버의 임대, 갱신, 반환 과정에 대해 서술되었다.

2.1 임대(Lease)

DHCP의 경우 IP를 할당해 주는 것을 임대(Lease)라고 한다. 이 임대에는 임대 기간이 있는데, 말 그대로 해당 IP 주소를 사용할 수 있는 기간을 말한다. 즉, 임대 기간이 끝나면 해당 IP 주소는 DHCP 주소 풀로 반환이 된다는 것이다. 임대 기간은 기본적으로 8일이다. 쉽게 말해 자동차 리스한 다음 재계약 안 해서 도로 차 뺏기는(...) 상황이라고 생각하면 된다. 임대 기간은 기본적으로 8일이며, 장소에 따라서 적당한 값을 찾아서 설정하면 된다. 유동인구가 많은 가게 등지에서 임대 기간을 8일로 두게 된다면 순식간에 주소 풀이 동날 것이고, 더 이상 IP 주소를 할당할 수 없게 되어버린다. 이런 유동인구가 많은 지역에서는 임대 기간을 2~3시간 정도로 짧게 설정하는 편이 좋다. 아니면 사설 IP 대역을 10.0.0.0/8 대역으로 바꿔버리던지. 가정이나 기업 등에서는 기본값 8일~30일 등으로 길게 잡는다. 아이피타임 공유기의 경우 기본적으로 임대 기간이 7200초(2시간)이다.

2.1.1 임대의 상세한 동작

DHCP로 임대를 생성할 경우 4가지 과정을 통해서 IP 주소를 할당하게 된다.
1. DHCP Discover.

IP 주소가 할당되지 않은 클라이언트는 MAC 주소를 기반으로 IP 주소를 받아오기 위해 로컬 네트워크에 Discover 패킷을 Broadcast 한다. 이 때, Broadcast로 뿌려진 패킷은 해당 네트워크 내의 모든 호스트에게 날아가게 된다. 이 Discover 패킷에는 IP 주소가 필요한 호스트의 MAC 주소가 담겨져 있어서 DHCP 서버가 응답할 때 패킷을 수신할 수 있게 된다. 호스트들이 패킷을 받고 나서, DHCP 서버가 Discover 패킷을 받게 되면 2단계로 넘어간다. 물론 이 때, 다른 호스트들은 어? 내 패킷이 아니네? 하고 패킷을 폐기한다.

2. DHCP Offer.

DHCP 서버가 Discover 패킷을 받게 되면, DHCP 서버는 Offer 패킷을 Broadcast한다. 이 때, MAC 주소에 아까 Discover 패킷을 보낸 호스트의 MAC 주소를 적어서 보낸다. 마찬가지로 Broadcast이기 때문에 해당 네트워크의 호스트 전체에 패킷이 날아가지만 역시 Discover를 보낸 호스트 이외의 다른 호스트는 패킷을 전부 폐기한다. Discover를 보낸 호스트가 Offer 패킷을 받으면 3단계로 넘어간다.

3. DHCP Request.

해당 호스트는 Offer를 받았으면 해당 네트워크에는 DHCP 서버가 있다고 판단, Request 패킷을 Broadcast한다. Request 패킷은 말 그대로 IP 내놔. 이 역시 Broadcast이기 때문에 해당 네트워크의 호스트 전체에게 날아가고, DHCP 서버 이외의 다른 호스트는 패킷을 폐기한다. DHCP 서버가 Request 패킷을 받으면 4단계로 진행한다.

4. DHCP ACK.

DHCP 서버는 Request 패킷을 받으면 자신의 IP 임대 풀에서 할당 가능한 IP 주소를 찾는다.[2] 예를 들어 게이트웨이와 DHCP가 모두 192.168.0.1일 경우 192.168.0.1을 제외한 0.2~0.254까지의 임대 풀을 가지고 있다. 이 임대 풀에서 가장 앞에 있는 IP 주소부터 할당하게 되는데, 사용중이 아닌 경우엔 해당 IP 주소를 할당을 하게 된다. 여기서는 192.168.0.2를 할당한다고 가정 하면, "Your (Client) IP Address: 192.168.0.2 (192.168.0.2)" 이런 패킷을 날리게 된다. 역시 Broadcast로 전송되며, 호스트가 이 패킷을 정상적으로 받았다면 IP 주소가 할당된다.

이 과정을 줄여서 흔히 DORA라고 부른다.

참고로 이렇게 4단계로 되어 있는 이유는, 클라이언트에 연결된 네트워크에 DHCP 서버가 여러개 일수도 있기 때문이다. 즉, 디스커버를 한번만 날려도, 오퍼는 여러개 날라 올 수 있다. 그중에 하나를 골라서 정확히 리퀘스트를 던지면, 그제서야 최종적으로 Ack 처리하며 IP 를 사용 할 수 있게 되는 것이다.

이 편리해 보이는 DHCP 서버에도 약간의 문제가 있는데, DHCP 옵션을 설정하지 않을 경우 IP 주소와 서브넷 마스크만 할당하게 된다. 이러면 당연히 통신이 안되는게 당연지사. 그래서 DHCP 옵션에는 기본 게이트웨이 주소, DNS 서버 주소 등이 들어가게 된다.

하지만 위의 문제보다 약간 심각한(...) 문제가 하나 더 있다. 바로 고정 IP 주소도 사용하는 네트워크일 경우이다. DHCP 서버는 단지 자신의 임대 가능한 IP 주소 풀에서 안 쓰는 IP를 하나 주는 것이지, 그 IP가 실제 사용중인지는 모른다. 물론 자신이 할당했다면 기억하지만. 즉, 게이트웨이이자 DHCP 서버가 192.168.0.1이고, 192.168.0.2부터 192.168.0.10까지는 고정 IP로 사용중인데 주소 풀이 192.168.0.2부터 시작한다면 DHCP 서버가 있어도 IP 주소가 충돌하기 때문에 클라이언트에 IP가 할당되지 않는다. 이런 경우, 주소 풀을 옮겨 주면 해결이 된다. 또는 DHCP 예약 기능을 이용하여 DHCP를 쓰면서도 고정 IP 효과를 낼 수도 있고.

2.2 갱신(Renewal)

임대 기간이 끝나면 IP 주소를 반환하게 된다. 반환에 대한 자세한 정보는 아래 반환에서 확인하자. 만약 임대 기간이 1시간이라면, 1시간마다 IP 주소를 반환하고 다시 임대하면 불필요한 브로드캐스트 트래픽을 발생시키게 된다. 전혀 효율적이지 않기 때문에 DHCP에는 임대 갱신(Lease Renewal)이라는 것이 있다. 쉽게 말해, 자동차 리스한 다음 임대 기간이 끝나기 전에 재계약해서 차 안 뺏기게(...) 하는 것이다. 이 임대 갱신은 두 차례 시도를 하게 되는데, 첫 시도는 임대 기간이 50% 남았을 때 시도된다. 이 때, 갱신에 성공하면 갱신된 시간으로 부터 임대 기간이 다시 차게 된다. 하지만 클라이언트의 전원이 꺼져 있다던가, 아니면 모종의 이유(DHCP 서버가 점검 중이었다거나)로 갱신에 실패하게 된다면, 한번의 기회를 더 준다. 87.5%의 시간이 지났을 때 다시 갱신을 시도한다. 이 때, 갱신에 성공한다면 그 시점으로부터 임대 기간이 다시 차게 된다. 간단하계 예시를 들어보자면, 임대 기간이 10시간이라면, 임대가 생성된 시간으로 부터 50%가 지난 시점인 5시간 뒤에 1차적으로 갱신을 시도하게 되고, 이때 성공한다면 처음 생성된 시간으로 부터 15시간 뒤가 임대가 종료되는 시간이다. 1차 갱신에 실패한다면, 임대가 생성된 시간으로 부터 87.5%가 지난 시점인 8시간 45분 뒤에 2차 갱신을 시도한다. 이때 성공한다면, 임대 생성시간으로부터 18시간 45분 뒤가 임대 종료 시점이 되는 것이다. 만약, 2차 마저 실패했다면, 임대 기간이 끝나는 시점에 주소를 반환하고 임대 생성부터 다시 하게 된다. 즉, 클라이언트가 IP 주소를 계속 사용중이라면, 해당 IP 주소를 계속 사용할 수 있도록 임대 기간을 계속 늘려 주고, 사용하지 않는다면 주소를 반환하여 다른 클라이언트가 사용할 수 있도록 해 주는 것이 바로 임대와 갱신이다.

2.2.1 갱신의 상세한 동작

임대 갱신의 경우 Discover, Offer 과정을 제외한 Request, ACK 과정만을 DHCP 서버와 1:1로 Unicast 통신한다. 이미 IP 주소가 있는데다가, DHCP 서버 주소를 알고 있기 때문에 굳이 Broadcast로 네트워크 상에 쓸데없는 트래픽을 보낼 이유가 없기 때문.
갱신 과정은 다음과 같다.

1. DHCP Request

DHCP 서버에 갱신을 요청하는 Request 패킷을 Unicast로 보낸다. DHCP 서버가 이 패킷을 받으면, 2단계로 넘어간다.

2. DHCP ACK

DHCP 서버에서 Request를 요청한 클라이언트에게 ACK 패킷을 Unicast로 보낸다. 이 패킷에는 갱신에 대한 정보가 담겨 있다.

갱신 과정은 임대 생성에 비해서 간단하다. 그냥 말 그대로 기간만 좀 늘려달라고 부탁하는 것이기 때문.

2.3 반환(Release)

임대 기간이 끝났거나, IP 주소를 더 이상 사용하지 않는다면 DHCP 서버에 IP 주소를 반환하게 되는데, 이것을 반환(Release)이라고 한다. DHCP 서버와 클라이언트 모두 임대 기간에 대한 정보를 가지고 있기 때문에, 임대 기간이 끝났는데 클라이언트가 연결되지 않았더라도 해당 주소를 사용 가능하도록 주소 풀로 보낸다. 흔히 인터넷이 안 된다거나, 랜선이랑 다 제대로 꽂혀 있는데 인터넷이 안 된다거나, ipconfig을 쳤는데 IP 주소가 169.254.x.x, 서브넷 마스크가 255.255.0.0으로 나온다면 가장 먼저 해 보라고 하는 것이 명령 프롬프트에 ipconfig /release를 입력하고, ipconfig /renew를 입력하라고 하는 것인데[3] 이렇게 한다면 다 멀쩡하다는 전제 하에 IP 주소를 다시 할당받을 수 있도록 유도해 주는 것이다. 반환 과정이 없다면, 고정 IP를 사용하는 것보다 단점이 더 많은 망한 프로토콜이 되기 때문에 반환 과정은 DHCP에 있어서 임대 생성/갱신보다 중요하다고 볼 수 있겠다.

3 역할별 분류

3.1 DHCP Server

IP 를 보유하고, 원하는 가입자에게 IP 를 분배해주는 역할을 한다.

KT 나 LGU+ 같은 경우 중앙집중형 관리 정책을 사용하며, 다수의 가입자에 대해서 인증 기능을 처리함과 동시에 IP 를 할당하는 크고 아름다운 DHCP server 를 운용하고 있다.

인터넷 공유기에도 DHCP 서버가 탑재되어 있으며, 각각의 PC 에 사설 IP 를 할당한다.

일반 기업의 경우 인터넷 회선이 연결된 게이트웨이 장비에 DHCP server 를 활성화 시켜서, 각 업무용 PC에 IP 를 받을 수 있도록 세팅하여 사용한다. 만약 해당기업에서 공인 IP 를 다수 보유하고 있는 경우라면, 공인 IP 만을 이용해서 DHCP 서버를 세팅할 수 있다. 그렇지 않은 경우라면, 인터넷 공유기와 동일하게 사설 IP 를 할당하고 NAT 기능을 이용해서 외부로 연결하게 된다. 이런 경우 NAT 내부의 개인 PC 는 외부에서 보이지 않지만, 웹 서버나 메일 서버등은 외부에서 접속할 수 있도록 해야 하므로, 회사 네트워크 구성을 신경써서 만들어줘야 한다.

3.2 DHCP Client

PC, 스마트폰, 스마트패드 등 강종 최종 단말 장치들은 모두 DHCP client 가 탑재되어 있어서, 서버로 부터 IP 를 할당받아 사용한다.
인터넷 공유기에도 DHCP client 가 탑재되어 있는데, 자신이 마치 PC 인것 처럼 동작하여 공인 IP 를 할당받는 용도로 사용한다.

3.3 DHCP Relay Agent

DHCP Relay Agent라는것이 있는데, 브로드캐스트 패킷은 라우터, 즉 게이트웨이를 넘어가지 못한다. 대부분의 가정의 경우 그냥 공유기 아래에 물려 있으니 상관이 없지만, 기업 레벨에서는 DHCP 서버가 라우터 너머에 있는 경우가 종종 있다. 하지만 브로드캐스트 패킷은 라우터를 넘어가지 못하는데 위에서 봤다시피 IP 할당 과정 4단계가 전부 브로드캐스트로 이루어진다. 이런 경우 라우터 단에서 DHCP Relay Agent를 설정해서 DHCP 요청이 라우터로 들어오면, 라우터에서 유니캐스트로 변환하여 DHCP서버로 패킷을 보낸다. DHCP 서버에선 역시 유니캐스트로 라우터에게 보내고 라우터는 브로드캐스트로 뿌린다.

대한민국의 ISP 인 KT, LGU+, SKBB 등은 모두 DHCP 처리를 가입자 인증 문제와 연동해서 사용하기에, 모두 중앙집중식 DHCP 서버를 사용하는 구조로 되어 있다. 사용자가 돈을 안내면 회선을 잘라버리는게 아니라, DHCP 서버에서 IP 를 안주는 구조도 동작한다. 그래서, 중간에 모두 DHCP relay 기능이 탑재된 장비가 포함된다.

3.4 DHCP snooping

DHCP snooping 을 네트워크 스위치에 지나다니는 DHCP 패킷을 감시해서, 어느 가입자가 어느 IP 를 할당받았는지에 대한 binding table 을 관리하는 기능이다. DHCP 서버가 아는 개발 네트워크 장비 입장에서 동작하며, 일반적으로 DHCP relay 와 연동되어 동작한다.

이렇게 DHCP snooping 이 동작하여 binding table 이 관리되면, 다음과 같은 동작에 이용될 수 있다.

  • 하단에 언급되는 DHCP exhaustion attack를 감지/차단 하는 용도로 쓸 수 있다.
  • 허용되지 않는 가입자가 DHCP 로 IP 를 획득하려 하는 시도를 찾아내어 차단할 수 있다.
  • 가입자가 DHCP 를 쓰지 않고 고정 IP 를 사용하여 인터넷을 사용하는 경우를 감지/차단할 수 있다.

3.5 DHCP proxy agent

실제 IP 를 분배하는 DHCP 서버의 앞단에 설치되며, DHCP relay 와 유사하게 DHCP packet 을 중계한다. 다만, DHCP relay 와는 다르게 DHCP proxy 는 client 가 보기에는 DHCP server 인것 처럼 동작한다.

DHCP proxy 를 설치할 경우 실제 DHCP server 는 가입자에게는 숨겨지는 효과가 나타나기 때문에, DHCP server 를 대상으로 하는 DDoS 공격등으로 부터 안전해 진다는 장점이 있다.

4 DHCP 관련 취약점

4.1 DHCP exhaustion attack

공격자가 계속해서 IP 를 요청하는 형태의 공격이다. MAC 주소를 적당히 위조하여 서로 다른 가입자인 것 처럼 속여서 IP 를 계속 할당 받는 방법으로, DHCP 서버가 관리하는 모든 IP 대역을 공격자가 다 먹어버리는 것이다. 그렇게 되면 다른 가입자들은 IP 를 할당받을수 없으니 인터넷을 사용할 수 없게 된다.
이를 해결하기 위해서 DHCP relay 등과 연동되어 가입자 인증을 처리하고, 추가적인 IP 요구를 차단하는 방식으로 방어한다.

4.2 DHCP man-in-the-middle attack

중간에서 공격자가 사설 DHCP 서버를 설치하고, 자신이 공인된 DHCP 서버인 척하며 가입자에세 IP 를 할당해 준다. IP 부여할 때 DNS 와 default gateway를 공격자가 관리하는 라우터로 지정해 버리면, 피해자의 모든 트래픽은 해당 라우터를 거쳐서 지나가게 된다. 공격자는 이를 분석하여 암호를 비롯하여 가입자의 중요 정보들을 획득할 수 있게 된다. 또는 허위로 DNS 정보를 주어서 실제 사이트가 아닌 피싱 사이트로 연결되도록 하는 것도 가능하다.
이것이 아니더라도, 가입자가 실수로 공유기에 회선을 잘못 꼽을 경우에도 공유기의 사설 DHCP 서버가 동작하여 다른 가입자가 잘못된 IP 를 부여받고 인터넷이 안되는 경우도 발생한다. 정확하게 인터넷 회선은 WAN 포트에 꼽고, 가입자 PC를 LAN 포트에 꼽아야 하는데 잘못 꼽으면 문제가 된다. 이것은 실수한 가입자가 인터넷이 안되는 것뿐만 아니라 거기에 연결된 다른 가입자에게도 피해를 주게 된다.

이를 해결하기 위해서는 가입자 포트로부터 DHCP offer 나 DHCP ack 가 오는 것을 강력하게 차단하여 문제를 해결한다. 또한, DHCP relay 와 연동하여 정상적인 DHCP 서버로만 패킷이 가도록 제어하여, 사설 DHCP 서버를 차단한다.
  1. 대표적으로 학교 네트워크. 이쪽은 교육청과 VPN 등으로 연결되며, DHCP 서버 자체가 없어야 정상이다.
  2. 엄밀히 말해 DHCP 서버는 Discover 메세지를 수신한 시점에서 IP Pool 에서 사용 가능한 IP를 찾는다. Offer 부터 Ack에 이르기까지의 모든 메시지에 할당받을 IP Address가 기록되어 있다.
  3. ipconfig /release는 DHCP 서버에 IP 주소를 반환하는 명령어고, ipconfig /renew는 설정된 IP 주소가 없다면 임대 생성을, 이미 IP 주소가 있다면 임대 갱신을 해 주는 명령어이다. renew는 renewal을 줄인 것이다.