본문 바로가기

Network 모험기

[#1] DHCP 가지고 놀기 3탄

이번에는 원격지가 아닌 L3(혹은 Router)에서 DHCP Pool을 생성해서,

이전처럼 원격지에 있는 DHCP 서버가 아닌 로컬에서 자체적으로 DHCP 요청을 처리하는 방식을 해볼까 합니다. 

 

사실 말만 들어보면 'IP를 요청한 Host에게 NW장비가 IP를 준다'라는 간단한 개념이지만, 

이마저도 파고들자면 또 다른 이야기가 있더라구요. 

 

제가 확인했던 내용들을 한번 소개해드리겠습니다. 

 

언제나 그랬듯, 구성도부터 보겠습니다. 

 

1. 구성도 

 

 

구성도에 대한 간단한 설명을 하자면, 

이중화를 위한 VPN용 라우터 2대, 그리고 사용자(Host)용 L2스위치 1대 그리고 Host로 구성된 환경입니다. 

HSRP는 각 서브넷의 1 번 IP로 돌고있고, 왜 HSRP를 돌렸는지에 대한 내용은 추후 말씀드리겠습니다. 

 

2. Configuration 

 

 

 

Main과 Backup 장비가 라우터라는 가정하에 config를 진행했습니다. 

처음에는 Main의 E0/0 interface에 switchport가 걸려있었는데, 이를 삭제하여 L3포트로 만들어주지않자, 

서브 인터페이스에 IP 자체가 안들어가더라구요 

상단 인터페이스를 L3포트로 만들어주고나자 IP 설정이 가능했습니다. 

 

물론 L2 포트 자체도 서브인터페이스는 만들어지고 VLAN을 정의하여 SVI를 사용하면 되겠지만,, 

사실 그렇게 사용할거면 그냥 L2 port를 Trunk설정하고, VLAN을 정의하는게 가독성이 더 좋겠네요 

 

이번 실습은 라우터라는 가정이 있기에, 위와 같이 진행했습니다. 

그리고 각 VLAN을 위한 DHCP Pool을 만들어줬고, 예외처리도 진행했습니다.

여기서 주의하실 점은  

 

 

예외처리를 진행하는 이유는 고정적으로 사용자에게 할당해야할 IP가 있을수도있고, 특정장비에서 이미 Static하게 설정된 장비가 

Host에게 설정되는것을 방지하기 위함입니다. 

그래서 사전에 DHCP Pool을 설계할때, 일부 IP를 Pool에서 제외해야지만 일부 사용자의 니즈를 만족시킬 수 있습니다. 

 

3. 실습 

 

환경 구성도 완료했겠다, 이제 실습을 진행해보겠습니다. 

일단 SW에서 E0/2 포트를 vlan 10으로 설정해보겠습니다. 

 

일단 Host에서 정상적으로 IP를 받아왔습니다. 

 

자 그럼 어느 라우터가 응답을 했는지, Binding 정보를 보겠습니다. 

 

보시면 Main router가 IP를 준것을 볼 수 있습니다. 

 

Backup 라우터에서는 아무런 정보가 없네요 

 

그런데, main쪽을 보면 2번째 열에 엄청나게 긴 String이 있는것을 보실 수 있습니다. 

 

분명히 IP를 받아오기로 선택한 Interface의 Mac address는 aabb.cc00.4300인데 말이죠. 

 

처음에는 그려려니 했는데, 이러면 어느 사용자가 어떤 IP를 받아서 사용하고있는지 식별이 불가할것으로 보여 찾아봤습니다. 

답은 의외로 간단했습니다. 

아래 링크를 통해 자세히 확인하실 수 있습니다. 

 

출처 : https://community.cisco.com/t5/networking-knowledge-base/dhcp-binding-in-ios-entries-under-dhcp-client-id-hardware/ta-p/3118996

 

간단히 설명드리자면, 보이는 긴 String은 Client-id이며,

cisco-<mac-address>-<interface> 를 ASCII 코드로 변환한것을 의미한다고 합니다. 

그러면 한번 확인해보도록 하겠습니다. 

 

보시면 Host의 Mac address와 어떤 인터페이스를 통해 할당했는지도 보이고 있습니다. 

물론 변환하면 출처 Interface까지 알 수 있겠지만, 단순히 MAC만 보고싶다할때는 방법이 있습니다. 

 

제가 host쪽에 설정했던 ip address dhcp 는 기본적으로 <client-id> 라는 Command가 숨겨져 있습니다. 

따라서 아래처럼 정의를 해보고 DHCP binding 클리어 및 Interface sh/no sh을 진행해보겠습니다. 

 

ip address dhcp client-id ethernet 0/0

 

단순히 Client-id 표현 방식을 바꾸었을뿐인데, 새로운 IP를 자동으로 받아와서, Binding table을 클리어해주지 않아도 되었습니다. 

 

 

뒤에 붙어있는 00 은 인덱스겠거니 하고 넘어가도록 하겠습니다. 

아시는 분 있으면 공유 부탁드립니다. 

 

 

 

 

 

어떻게든 제가 설정한 String을 Clinet-id로 인식하게하려고 찾다가 드디어 발견했습니다. 

 

Host - Interface e0/0 

ip dhcp client client-id ascii dream

 

20분을 찾고 해보고 하다가 드디어 찾았습니다. 상단 Command를 적용해 보면,

 

위와 같이 짧은 ASCII코드가 나오는데, 이를 문자열로 변환해보면 

 

드디어 Dream 이라는 문자열이 Client-id로 보이는것을 보실 수 있습니다. 

Pure한 Text로 보는 방법은 아직 찾질 못했고, 어차피 ASCII로 나오는거면 그냥 MAC address를 식별자로 쓰는게 나아보입니다. 

 

그리고, 지금까지 테스트를 하면서 Binding 내역을 본게 모두 Main 라우터라는것 혹시 아시나요? 

한번도 Backup쪽에서 할당된 적이 없습니다. 

왜일까요? 

 

제 지난 게시물을 보자면 DMAC도 브로드캐스팅이고, DIP도 255.255.255.255인데 말이죠. 

HSRP Active와 관련이 있을까요 ? 

 

정답은 아니요 입니다. 

 

Backup 라우터의 VLAN 10에 대한 Priority값을 120으로 만들어 Active 로 만들어줬음에도, Main 라우터에서 계속 받아오고 있었습니다. 

한쪽에만 DHCP pool을 설정하는것도 이상하니 어떻게든 메인에서만 응답하도록 바꿔보겠습니다. 

 

첫번째 시도는 IP helper address를 활용하여,  VIP로 relay를 하는 방법입니다. 

 

int e0/0.10 

 ip helper-address 10.0.10.1 

 

결과는 실패입니다. Backup 라우터가 메인을 잡고있는데, 여전히 Main에서 IP를 받아옵니다. 

 

 

두번째 시도입니다. 

 

제가 이 글을 쓰게 된 계기인 Config를 사용해보도록 하겠습니다. 

그것은 HSRP에 name을 달고, 해당 Name을 가진 HSRP group 중 Active 장비만 Relay를 하는 Command인데, 

로컬에 DHCP pool이 있을때도 동작하는지 한번 테스트 해보고자 합니다. 

 

Config는 아래와 같습니다. 

 

Main/Backup 라우터 모두 적용 

 

int e0/0.10 

 standby 10 name test 

 ip helper-address 10.0.10.1 redundancy test 

 

결과는 실패입니다. 

제가 아는 짧은 지식으로는 DHCP Offer 중 가장 나은(빠른) Offer를 채택한다고 하는데, 

Relay까지해서 받는 Offer는 기존 Local pool에서 할당하는것보다 응ㅇ답시간이 느린건 당연하죠. 

 

제 의문은 단순히 도착한 순서로만 본다면, Main이나 Backup이나 똑같을 것으로 보이는데, 왜 항상 Main쪽으로 붙냐 이겁니다. 

HSRP도 아니고, 시간 이외에도 Offer를 Request할때의 조건이 있는것으로 보입니다. 

 

전체 장비를 껏다가 다시 HSRP의 Master로 잡는건지 테스트를 해보고 싶으나, 

사실 이 정도로 동일 Subnet의 DHCP를 특정할 수 없다면, 안하는게 맞을거라는 생각도 들었습니다. 

 

IP 충돌등을 막고 싶다면, 차라리 HSRP Master장비와 Standby 장비의 DHCP pool을 달리해서 충돌을 막는게 제일 좋아보입니다. 

예를 들면 Master장비에서는 30 ~ 127 , Standby 장비에서는 128 ~ 254 까지로 Pool을 잡는것이죠. 

 

물론 이 경우, 모든 사용자가 98명 이내여야한다는 가정이 붙죠. 

이것은 구성하기는 편하긴하지만, Standby에 설정해놓은 DHCP Pool이 사용되지못한다는 단점이 있지만요, , 

 

 

4. 맺으며

 

제가 생각할 때 최적의 시나리오는 DHCP서버를 별도로 구성하기가 첫번째고,

두번째는 사용자 대역이 있는 L3 switch가 아닌 Core나 별개의 장비에 DHCP Pool을 잡아 놓는 것입니다. 

그렇게 한다면, Relay의 주체는 조절이 가능하기때문입니다. 

세번째는 마지막에 말씀드린 DHCP Pool의 IP range 자체를 분리해서 사용하는것입니다. 

 

많은 도움이 되었길 바라면서, 이번 포스팅은 마치겠습니다.