1. 程式人生 > >嵌入式linux中的dhcp伺服器

嵌入式linux中的dhcp伺服器


1.重新編譯核心,新增對dhcp的支援
2.busybox是否帶有dhcp的應用,如無,則需要重新編譯busybox,或者直接下一個獨立的也可。
3.dhcp伺服器在etc目錄下的配置檔案,udhcpd.conf 需要配置這個檔案,包括分配的ip,dns等。

我的檔案系統中直接具有dhcp的軟體,分別為udhcpd和udhcpc,前者是伺服器端的,後者是用作客戶端的,這樣就可以直接配置udhcpd.conf了。參考busybox中的examples,配置好udhcpd.conf,然後執行

udhcpd -fS /etc/udhcpd.conf

就可以啟動dhcp伺服器了,當然,中間也碰到了一個小問題,這時udhcpd在執行的時候提示沒有一個叫做udhcpd.leases的檔案,這個只要在相應的資料夾下直接建立以下即可。

一切順利的話,就可以看到開發板為pc分配ip,gw和dns了!

///////////////////////////////////

**************dhcp
開發板上使用的udhcpc udhcpd兩個工具都可以從busybox裡面直接編譯得來
PC上使用的dhcp工具可以使用 sudo  apt-get install udhcpc
                                                 sudo apt-get install udhcpd

用PC做udhcpd伺服器,開發板從PC獲取ip(反過來是一樣的)
PC上: sudo vi /etc/udhcpd.conf
udhcpd.conf在busybox裡面有一個原型: busybox-1.14.2/examples/udhcp/udhcpd.conf
修改三個地方:start/end/option dns

start   192.168.4.200   #default: 192.168.0.20
end     192.168.4.254   #default: 192.168.0.254
//分配ip的區間
#Examles
opt dns 192.168.1.2 192.168.1.10
option  subnet  255.255.255.0
opt router  192.168.1.2
opt wins    192.168.1.10
option  dns 192.168.4.127   # appened to above DNS servers for a total of 3
option  domain  local
option  lease   864000
//option  dns 192.168.4.127做伺服器的機器的ip地址

用網線把PC和開發板連線起來。
好了之後  sudo udhcpd
開發板上執行    udhcpc  這樣就可以從PC獲取ip

/////////////////////////////////

由於要使用網路通訊,所以不可避免的要用到dhcp。理想的網路通訊方式是下面3種都要支援:

  1,接入已有網路。這便要求可以作為dhcp客戶端。

  2,作為DHCP伺服器,動態分配IP。

  3,指定固定IP

  第3種情況沒有什麼好說的,簡單說下前2種情況。

  使用步驟:

  (1)在核心的網路項裡面把DHCP配置上;

  (2)在busybox裡面把

udhcp server(udhcpd)

  udhcp client(udhcpc)都選上。

  udhcpd就是終端裝置作為DHCP伺服器

  udhcpc就是終端裝置作為DHCP客戶端

  busybox裡面對dhcp都已經給出例子了,

  [
[email protected]
 busybox-1.14.1]$ ls ./examples/udhcp/

  sample.bound  sample.deconfig  sample.nak  sample.renew  sample.script  simple.script  udhcpd.conf

  比如使用udhcpc時

  就可以直接把simple.script拿來使用,改不改名字都可以,busybox裡面預設的目錄檔案是/usr/share/udhcpc/default.script

  可以檢視下幫助

  # udhcpc --help

  BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary

  Usage: udhcpc [-Cfbnqtvo] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]

  [-p pidfile] [-r IP] [-s script] [-O dhcp-option]... [-P N]

  -V CLASSID      Vendor class identifier

  -i INTERFACE    Interface to use (default: eth0)

  -H,-h HOSTNAME  Client hostname

  -c CLIENTID     Client identifier

  -C              Suppress default client identifier

  -p file         Create pidfile

  -r IP           IP address to request

  -s file         Run file at DHCP events (default /usr/share/udhcpc/default.script)

  -t N            Send up to N request packets

  -T N            Try to get a lease for N seconds (default 3)

  -A N            Wait N seconds (default 20) after failure

  -O OPT          Request DHCP option OPT (cumulative)

  -o              Do not request any options (unless -O is also given)

  -f              Run in foreground

  -b              Background if lease is not immediately obtained

  -S              Log to syslog too

  -n              Exit with failure if lease is not immediately obtained

  -q              Quit after obtaining lease

  -R              Release IP on quit

  -P N            Use port N instead of default 68

  -a              Use arping to validate offered address

  #

  這樣就很好理解了。

  下面就說說使用udhcpd,同樣可以直接把busybox自帶的udhcpd.conf作為參考,怎麼設定該檔案就不詳述了,去參考相關文件即可。看看udhcpd怎麼使用

  # udhcpd --help

  BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary

  Usage: udhcpd [-fS] [-P N] [configfile]

  DHCP server

  -f      Run in foreground

  -S      Log to syslog too

  -P N    Use port N instead of default 67

  幫助一目瞭然。

  我使用的時候直接

  #udhcpd /etc/udhcpd.conf

  即可。

  還有一個租約檔案要簡要說說,使用udhcpd時會要求建立一個租約檔案,按照提示建立一個就行了,它起什麼作用呢?就是為了記錄客戶端所獲得的IP,如果沒有租約檔案,則會重新給客戶端分配一個新IP,如果有,則使用原先分配的IP。