임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp
- 개발/임베디드 리눅스
- 2020. 4. 9.
임베디드 리눅스 플랫폼에 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 에 포함된 것으로 보인다. 따라서, 타겟 보드의 busybox 를 udhcp 를 지원하도록 설정 후 빌드하면 타겟 보드에서 DHCP 서버와 클라이언트 기능을 사용할 수 있는 것으로 보인다.
하지만 본 글에서는 busybox 를 사용하지 않고 udhcp 를 직접 실행하는 방법을 소개한다.
udhcp 소스코드 다운로드
busybox 를 사용하지 않고 소스코드를 직접 빌드해서 사용하는 방법은 다음과 같다.
위 공식 웹 페이지에서 최신 버전(udhcp-0.9.8.tar.gz)을 다운로드한다. 해당 버전은 2002년 버전으로써, 꽤 오래되었지만 현재까지도 정상 동작한다.
udhcp 빌드
1. Makefile 의 CROSS_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 주소가 할당되는 것을 확인할 수 있다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'개발 > 임베디드 리눅스' 카테고리의 다른 글
SNMP - RowStatus 표준 분석 (rfc 2579) (0) | 2021.03.29 |
---|---|
ffmpeg 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.21 |
JSMN(JSON parse library) 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.15 |
pps-tools 빌드하기 (0) | 2021.02.15 |
OpenSSL 을 임베디드 리눅스용으로 크로스 컴파일하기 (0) | 2020.01.31 |
임베디드 리눅스 장치에 GPS 모듈을 USB 로 연결하기 (0) | 2020.01.30 |
dfu-util을 임베디드 리눅스용으로 크로스 컴파일하기 (1) | 2020.01.30 |
GPS 모듈을 이용하여 시스템시각을 UTC 시간에 동기화하는 임베디드 장치 구성하기 (0) | 2020.01.30 |