嵌入式Linux使用DHCP

1、首先确认Linux内核编译生成时选择了DHCP

Networking --->
Networking support  
Networking options --->
           Packetsocket                //
添加.配置CONFIG_PACKET
          [ *]     IP: DHCPsupport         //
添加
          [ * ] Network packetfiltering (replaces ipchains) --->    //
添加,后面子选项可不选,配置CONFIG_NETFILTER

说明:若没选 Packet socket, [ * ] Network packet filtering(replaces ipchains) --->选项,在执行udhcpc命令时出现如下错误:
~ # udhcpc
udhcpc (v0.9.9-pre) started
udhcpc[208]: udhcpc (v0.9.9-pre) started
FATAL: couldn't listen on socket, Address family not supported by protocol
udhcpc[208]: FATAL: couldn't listen on socket, Address family not supported byprotocol

2.编译Busybox,使makemenuconfig,添加以下选项:

Networking Utilities--->
udhcp Server/Client --->
       [ ] udhcp Server (udhcpd)      //
在此不作服务端,故不选。生成udhcpd命令
udhcp Client (udhcpc)       //
生成udhcpc命令                               
       [ ] Lease display utility(dumpleases)                        
       [ ] Log udhcp messages to syslog (insteadof stdout)        
       [ ] Compile udhcp with noisy debuggingmessages
busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copyusr/sbin下就可以了。

说明:有种方法说是从网上下的udhcp_0.9.8cvs20050303.orig.tar.gz文件,解压后修改Makefile文件,在19行添加CROSS_COMPILE=arm-linux-  
注释12行的COMBINED_BINARY=1
否则不生成udhcpc命令。

注:使用0.9.8版本的udhcp貌似也不行,重新编译Busybox1.9.2版本。

3、使用Busybox下的simple.script/usr/share/udhcpc/下,并重命名为default.script,修改default.scriptRESOLV_CONF="/etc/resolv.conf"RESOLV_CONF="/tmp/resolv.conf"

说明:从网上下了几个default.script貌似无法使用,提示无法找到default.script文件,使用上面的方法较好。由于使用Cramfs文件系统,etc目录不可写,运行udhcp.c时会提示无法创建resolv.conf

4、将生成的udhcpc复制到开发板/sbin下,在控制台下运行udhcpc即可,很快就可以从DHCP SERVER获得IP地址。但是有个问题,开发板可以获得IP地址,在路由器里也可以看到分配地址了,问题是一使用PING命令,不管是PC PING开发板,还是开发板PING PC 机,就会造成开发板死机。试了好多方法,检查ROUTE,检查ARP,修改Default.script,始终无法解决。

我用的是redhat/fedora5linux

我想要做个DHCP服务,地址范围是10.99.0.0/16

Redhat使用dhcpd进程提供DHCP服务,启动时dhcpd自动读它的配置文件/etc/dhcpd.conf

dhcpd将客户的租用信息保存在/var/lib/dhcp/dhcpd.leases文件中,该文件不断被更新,从这里面可以查到IP地址分配的情况。

  dhcpd为了向一个子网提供服务,需要知道子网的网络地址和网络掩码,并且还要知道地址分配的范围,下面给出一个简单的dhcpd.conf文件:

 subnet 192.168.100.0 netmask 255.255.255.0 {

  range192.168.100.10 192.168.100.253;

  }

  此例中,dhcpd将给192.168.100.0网络分配192.168.100.10192.168.100.253IP地址。

  租期时间可以从0秒到无限长,可以根据需要来定。缺省的租期时间为一天,即86400秒。可以为主机定义两个租期长度:

 default-lease-time 默认租期时间;

  max-lease-time用户可以获得的最长租期时间。

  下面的配置将缺省的租期时间设置为10分钟,最长租用时间为1小时:

 subnet 192.168.100.0 netmask 255.255.255.0 {

  range 192.168.100.10 192.168.100.253;

  default-lease-time 600;

  max-lease-time 3600;

  }

  DHCP还可以向客户提供更多的参数,这些参数可以用option来指定,例如:

  subnet192.168.100.0 netmask 255.255.255.0 {

  range192.168.100.10 192.168.100.253;

  default-lease-time 600;

  max-lease-time 3600;

  option subnet-mask 255.255.255.0;

  option routers 192.168.100.254; 默认路由

  option domain-name-servers 202.102.134.68; DNS服务器

  }

  现在大家对DHCP配置应该有个了解了,其实过程就是这么简单,中间就隔了一层窗户纸。

 

  实际演练

  接下来给大家一个示例,把我的redhat9.0配置成一台DHCP服务器。

  vi/etc/dhcpd.conf

  配置后,我的机器的该文件内容如下(注释的部分都已经删除掉了,至于原文,大家可以对照/usr/share/doc/

 dhcp-3.0pl1/dhcpd.conf.sample文件):

 [root@rh9 test]# more /etc/dhcpd.conf

 ddns-update-style interim;

 ignore client-updates;

 subnet 192.168.0.0 netmask 255.255.255.0 {

  option routers 192.168.0.1;

  option subnet-mask 255.255.255.0;

  option broadcast-address 192.168.0.255;

  option domain-name-servers

 202.96.199.133, 202.96.133.134;

  range dynamic-bootp 192.168.0.1 192.168.0.255;

  default-lease-time 21600;

  max-lease-time 43200;

  }

 这儿我解释一下配置部分,首先subnet定义了网络的地址,然后option routers定义了网关地址;subnet-mask定义子网掩码;broadcast-address定义广播地址;domain-name-servers定义DNSNAMESERVER的地址;dynamic-bootp是给客户端分配的地址,定义的是192.168.0.1-- 192.168.0.255整个网段地址;最后2行是讲分配出的地址的缺省租期时间设置为10分钟,最长租用时间为1小时。这样,一个DHCP服务器就配置好了。

  我们可以测试一下结果:在另外一个redhat linux7.2上,把IP设置成DHCP主机的IP地址,通过netconfig命令配置。

  检查配置:

 [root@rh72 root]# more /etc/sysconfig/ network-scripts/ifcfg-eth0

 DEVICE=eth0

 ONBOOT=yes

 BOOTPROTO=dhcp

 [root@rh72 root]#

  确定网卡已经是DHCP的了。

 [root@rh72 root]# ifconfig

  eth0Link encap:Ethernet HWaddr 00:0C:29:A3:C6:71

   inetaddr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0

  查看地址,发现ETH0已经分配了一个254的地址,说明DHCP服务器配置成功。

  小结

  至此,我们已经完成了一台Linux DHCP服务器的安装和配置工作。在实际的使用过程中,上述操作步骤应该可以满足一般应用的需求,但是我们还需要经常研究具体的命令参数,让DHCP服务器能更好地为我们服务。

 

你可能感兴趣的:(嵌入式Linux使用DHCP)