임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp
- 개발/임베디드 리눅스
- 2020. 4. 9.
임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp
udhcp
임베디드 리눅스 플랫폼에서 구동시킬 수 있는 DHCP 서버로는 udhcp 가 있다.
본 글에서는 udhcp 를 이용하여 임베디드 리눅스 플랫폼 상에 DHCP 서버를 구축하는 방법을 설명한다.
udhcp 는 DHCP 서버와 클라이언트 기능(udhcpd: 서버 데몬, udhcpc: 클라이언트 데몬)을 지원하며 공식 웹페이지는 다음과 같다.
해당 웹페이지의 첫 줄에 보면 다음과 같은 문구가 있다.
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 |