임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp

반응형

 

임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp

udhcp

임베디드 리눅스 플랫폼에서 구동시킬 수 있는 DHCP 서버로는 udhcp 가 있다.
본 글에서는 udhcp 를 이용하여 임베디드 리눅스 플랫폼 상에 DHCP 서버를 구축하는 방법을 설명한다.

udhcp 는 DHCP 서버와 클라이언트 기능(udhcpd: 서버 데몬, udhcpc: 클라이언트 데몬)을 지원하며 공식 웹페이지는 다음과 같다.

 

udhcp Server/Client Package

udhcp Server/Client Package The udhcp package is no longer maintained/packaged as a standalone project. It has been fully integrated into busybox. If you want to use only udhcp, you should download the latest version of busybox and disable all other applet

udhcp.busybox.net

해당 웹페이지의 첫 줄에 보면 다음과 같은 문구가 있다.

The udhcp package is no longer maintained/packaged as a standalone project. It has been fully integrated into busybox(http://busybox.net/). If you want to use only udhcp, you should download the latest version of busybox and disable all other applets.

 

즉, udhcp 는 더 이상 자체적으로 개발되지 않고 busybox 에 포함된 것으로 보인다. 따라서, 타겟 보드의 busyboxudhcp 를 지원하도록 설정 후 빌드하면 타겟 보드에서 DHCP 서버와 클라이언트 기능을 사용할 수 있는 것으로 보인다.

 

하지만 본 글에서는 busybox 를 사용하지 않고 udhcp 를 직접 실행하는 방법을 소개한다.

 

 

udhcp 소스코드 다운로드

busybox 를 사용하지 않고 소스코드를 직접 빌드해서 사용하는 방법은 다음과 같다.

위 공식 웹 페이지에서 최신 버전(udhcp-0.9.8.tar.gz)을 다운로드한다. 해당 버전은 2002년 버전으로써, 꽤 오래되었지만 현재까지도 정상 동작한다.

 

udhcp 빌드

1. MakefileCROSS_COMPILE 항목을 타겟보드용 크로스컴파일러로 설정한다. (기본적으로 주석 처리되어 있다.)

$ vi Makefile
...
CROSS_COMPILE=arm-linux-gnueabihf    <= 수정

 

2. dhcpc.c 파일의 135 번 라인에 break; 를 추가한다.
   switch() 문의 case INIT_SELECTING: 구문에 break; 가 누락되어 컴파일 에러가 발생한다.

static void perform_renew(void)
{
  ...
  case INIT_SELECTING:    
    break;      <= 추가(추가하지 않으면 빌드 오류가 발생한다)
}

 

3. 빌드한다.

$ make

 

4. 생성된 udhcpd 파일과 samples/udhcpd.conf 파일을 타겟보드에 다운로드한다.

 

 

타겟보드에서 DHCP 서버 설정

1. udhcpd.conf 파일 내 주요 항목을 수정, 작성한다. 여기서는 기본적인 내용만 다룬다.

  • start : 할당하고자 하는 IP 대역의 시작 주소
  • end : 할당하고자 하는 IP 대역의 끝 주소
  • interface : DHCP 서비스를 제공하는 인터페이스 이름(예: eth0). 다수의 인터페이스를 스페이스로 구분하여 이어서 작성할 수 있다.
  • option : udhcpd.conf 파일의 아랫부분에는 옵션 항목이 예제로 작성되어 있으며, 옵션 항목은 opt 또는 option 프리픽스를 앞에 붙여서 작성한다.
    • subnet : 할당하고자 하는 서브넷 마스크
    • router : 할당하고자 하는 기본 게이트웨이 주소
    • dns : 할당하고자 하는 DNS 주소 (다수의 주소를 스페이스로 구분하여 이어서 작성할 수 있다)
    • domain local : 기본 값인 local 을 그대로 사용한다.
    • lease : 할당된 IP 사용 기간(초 값)
Example
start 192.168.0.10
end 192.168.0.20
interface eth0
option subnet 255.255.255.0
option router 192.168.0.1
option lease 864000	# 10 days
option dns 192.168.1.1
option domain local

 

2. udhcpd.lease 파일을 생성한다.

  • udhcpd 구동 시 /var/lib/misc/udhcpd.leases 파일이 필요하므로, 다음 명령을 통해 빈 파일을 생성한다.
  • udhcpd.leases 파일은 반드시 /var/lib/misc/ 경로에 위치할 필요는 없으며, 다른 경로에 위치할 경우 udhcpd.conf 파일의 lease_file 항목에 해당 경로를 작성해 주면 된다.
# touch /var/lib/misc/udhcpd.leases

 

 

3. 다음 명령을 통해 서버를 구동한다.

  • udhcpd.conf 파일을 기본 경로인 /etc/udhcpd.conf 에 저장해 두면, udhcpd 실행 시 설정 파일을 명시해 줄 필요 없다.
# ./udhcpd ./udhcpd.conf

 

4. 서버 구동 여부를 확인한다.

root@imx6qpdlsolox:~# ps -ef | grep udhcpd
root       618     1  0 09:35 ?        00:00:00 ./udhcpd ./udhcpd.conf
root       629   492  0 10:11 ttymxc0  00:00:00 grep udhcpd
root@imx6qpdlsolox:~#
root@imx6qpdlsolox:~# netstat -anp | grep udhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           618/udhcpd
unix  3      [ ]         STREAM     CONNECTED     8435     618/udhcpd
unix  3      [ ]         STREAM     CONNECTED     8434     618/udhcpd
unix  2      [ ]         DGRAM                    20640    618/udhcpd

 

5. 서버 구동 명령줄을 초기화 스크립트에 추가하여 부팅 시 자동 실행되도록 한다.

 

IP 할당 확인

udhcpd 를 구동시킨 보드에 노트북 등을 연결하고 DHCP를 사용하도록 설정하면, udhcpd.conf 파일에 설정된 내용에 따라 IP 및 기본 게이트웨이, DNS 주소가 할당되는 것을 확인할 수 있다.


 

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글

Designed by JB FACTORY