Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3037479
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2010-07-16 04:41:28

1.到
下载dhcp-3.0.5, 解压后生成dhcp-3.0.5目录,
进入该目录执行./configure,该命令生成work.linux-2.2目录。
进入这个work.linux-2.2目录后,在编译时指定我们的交叉编译器,
make "CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc -static"
注:如果编译器是2.95.3会出现一大堆的重定义,所以建议用3.3.2版本的编译器。-static是把dhclient编译器成静态的。
由于我们不想生成的dhclient太大,所以修改work.linux-2.2中,每一个子目录下的Makefile,把其中的DEBUG -g注释掉,
执行编译通过后,在work.linux-2.2/client中,生成的dhclient就是我们想要的了。
[root@localhost client]# file dhclient
dhclient: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, statically linked, not stripped
2.把dhclient 放在/sbin这个目录
(1)dhclient.conf这个文件在只有一个网卡的情况下,可以为空,但在2410上有两个网卡(10M,100M),所以必须指定网卡。其内容如下所示:
#Defaults
timeout 60;
reboot 10;
retry 60;
select-timeout 5;
initial-interval 2;
script "/etc/dhclient-script";
interface "eth0" {
request subnet-mask,
broadcast-address,
routers,
domain-name-servers,
domain-name,
host-name;
require domain-name-servers;
}
(2)dhclient-script  放在 /etc下  chmod +x /etc/dhclient-script
(3)
#/var/state/dhcp/dhclient.lease 上有dhcp服务器反馈的信息.2410上没有这个目录,所以要新建这个目录

设置好这4个文件好,执行
# ./dhclient eth0
Internet Systems Consortium DHCP Client V3.0.5
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit
Listening on LPF/eth0/00:01:5d:68:7a:0f
Sending on   LPF/eth0/00:01:5d:68:7a:0f
Sending on   Socket/fallback
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.127 -- renewal in 2982 seconds.
成功地绑定到192.168.1.127
# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:01:5D:68:7A:0F
          inet addr:192.168.1.127  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4712 (4.6 kb)  TX bytes:0 (0.0 b)
          Interrupt:37 Base address:0x300

3.dhclient自生成的另外一些相关信息
(1)/var/run/dhclient.pid
dhclinet 的id号
# cat /var/run/dhclient.pid
234
(2) /etc/resolv.conf
dhclient 获得的DNS
# cat /etc/resolv.conf
search domain
nameserver 210.34.0.14
nameserver 210.34.0.18
(3)var/state/dhcp/dhclient.leases
dhclient从DHCP服务器中获得的全部相关信息
#cat /var/state/dhcp/dhclient.leases
lease {
  interface "eth0";
  fixed-address 192.168.1.127;
  option subnet-mask 255.255.255.0;
  option dhcp-lease-time 7200;
  option routers 192.168.1.1;
  option dhcp-option-overload 3;
  option dhcp-message-type 5;
  option dhcp-server-identifier 192.168.1.1;
  option domain-name-servers 210.34.0.14,210.34.0.18;
  option domain-name "domain";
  renew 5 2003/6/13 17:24:26;
  rebind 5 2003/6/13 18:15:14;
  expire 5 2003/6/13 18:30:14;
}
lease {
  interface "eth0";
  fixed-address 192.168.1.127;
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.1;
  option dhcp-lease-time 7200;
  option dhcp-option-overload 3;
  option dhcp-message-type 5;
  option domain-name-servers 210.34.0.14,210.34.0.18;
  option dhcp-server-identifier 192.168.1.1;
  option domain-name "domain";
  renew 5 2003/6/13 17:58:58;
  rebind 5 2003/6/13 18:54:16;
  expire 5 2003/6/13 19:09:16;
}
在编译内核时候要注意选中:
     内核必须支持
CONFIG_PACKET (packet socket)
CONFIG_FILTER  (socket filtering)
在编译内核时,在network option中选择。
补充:
在FreeBSD的Packages Collection中,有两个不同的DHCP客户机和服务器软件,一个为ISC-DHCP,另一个为WIDE-DHCP,两个软件都包括了DHCP客户软件和服务器软件,其中ISC-DHCP 更为常用一些,这里就以ISC-DHCP为例介绍在FreeBSD上安装和设置DHCP。
  为了支持DHCP,首先要确认系统内核支持伪设备bpfilter,如果没有,就需要重新编译内核。伪设备bpfilter 是一个允许应用程序接收网络的原始数据包的界面,这样应用程序就能接收目的地址非本机IP地址的数据包了。DHCP使用bpfilter的原因是在DHCP设置好计算机的TCP/IP 之前,由于计算机本身没有定义IP地址,而TCP/IP堆栈本身不会接收不具备本机IP地址的数据包。要接收DHCP服务器发送回客户的数据包,就需要绕过TCP/IP堆栈,而必须使用伪设备bpfilter。
pseudo-device    bpfilter    4 
 
  定制内核之后,还要保证/dev/目录下具有对应bpfilter的设备文件。
# cd /dev# sh MAKEDEV bpf0 bpf1 bpf2 bpf3
 
  从Packages Collecion中安装DHCP软件,这将DHCP软件中的dhcpd,dhclient和dhcprelay 安装到/usr/local/sbin目录下。
$ ls /usr/local/sbin/dhc*/usr/local/sbin/dhclient   /usr/local/sbin/dhcpd/usr/local/sbin/dhcrelay
 
 
 
设置服务器
 
 
  为了设置DHCP服务器dhcpd,首先就要设置其配置文件/etc/dhcpd.conf。这个配置文件语法简单,比较容易理解。
server-identifier 192.168.3.1;subnet 192.168.3.0 netmask 255.255.255.0 {        range 192.168.3.10 192.168.3.20;        default-lease-time 600;        max-lease-time 7200;        option subnet-mask 255.255.255.0;        option broadcast-address 192.168.3.255;        option routers 192.168.3.1;        option domain-name-servers 192.168.3.1;        option domain-name "exampleorg.org.cn";}host a1 {        hardware ethernet 00:90:27:4e:92:09;        fixed-address 192.168.3.32;        option subnet-mask 255.255.255.0;        option broadcast-address 192.168.3.255;        option routers 192.168.3.1;        option domain-name-servers 192.168.3.1;        option domain-name "exampleorg.org.cn";}
 
  基本的dhcpd.conf首先使用server-identifier定义了本服务器的IP地址,这对于有多个IP地址的服务器系统十分重要,一般不必设置这个参数,dhcpd能自动侦测。然后定义要分配IP地址的客户机组,每组拥有一个可用的IP地址范围。有两种客户机组的划分方式,一种为指定子网段来区分,一种为指定主机来区分。
  这个例子中的第一组定义了一个子网192.168.3.0/24,这个子网段内,可供DHCP服务器分配的I P地址范围为192.168.3.10到192.168.3.20,这个地址范围也可以不是连续的,不连续的地址可以使用多个range设置参数来设置。此外,还设置了这一组内分配的IP地址的租期限制default-lease-time 和max-lease-time,可以使用缺省值,而不必改动。后面的option参数设置DHCP的附加功能,例如设置DHCP客户的网络掩码、广播地址、DNS服务器、域名等等。事实上这些option设置选项也可以被用作全局选项设置,即放置在server-identifier之后,对所有的客户机组起作用。
  例子的第二组是针对某个特定主机a1进行的设置,这个主机被限定为以太网地址为hardware ethernet 参数值的计算机,将给这个计算机分配一个固定地址。这种分配方式实际等价于固定地址分配方式,唯一的好处就是能够对IP地址进行集中管理,不必每个计算机分别设置了。这里同样也可以使用option参数,设置TCP/IP的参数。
  dhcpd.conf中还能有更多的组,包括对非本网段的子网上的客户机指定的组。
  当设置了dhcpd.conf之后,就能启动dhcpd守护进程了,由于计算机会有多个网络界面,需要指定dhcpd 服务器的网络界面,以便回应相应界面上的DHCP请求。
# /usr/local/sbin/dhcpd fxp0
 
  在调试阶段,可以使用-d参数,这样dhcpd就不会进入后台运行,而一直保留在前台,并显示各个与客户计算机通信的过程。当一切都调试完毕之后,就能去除-d参数,并将执行命令放入rc.local启动脚本中,以便系统能够自动执行。
  此后,dhcpd正常运行的时候,会将每一次客户请求及其回应的IP地址分配的记录,都记录在/var/run/dhcpd.leases 文件中。为了使dhcpd能正常进行日志记录,应该在启动dhcpd之前使用touch 命令,生成一个新的日志文件。以后就可以查看这个日志文件的内容,以得到当前DHCP服务器的状态和客户机IP地址分配的情况。以下是一个日志文件的部分内容。
       lease 192.168.3.11 {          starts 3 1998/11/26 05:46:28;          ends 4 1998/11/27 05:46:28;          hardware ethernet 0:80:c2:12:fd:d;          uid 1:0:80:c2:12:fd:d;       }
 
  touch命令的优点是在存在相关的文件时,不删除或更改文件内容,只更新其访问时间设置,只有在文件不存在时才生成新文件。
  然后就能设置网络中的客户计算机使用DHCP协议,获取合法的IP地址了。通常Windows计算机的TCP/IP设置中能直接设置支持DHCP协议,如果为Unix(包括FreeBSD)设置DHCP客户软件,就需要dhclient的支持。
 
 
设置客户软件
 
 
  ISC-DHCP中同样也提供了一个客户程序dhclient,用于FreeBSD系统从DHCP服务器上动态获取一个IP地址。这个程序同样也要求内核支持bpfilter伪设备。
  dhclient使用的配置文件为/etc/dhclient.conf,然而最一般的情况下可以不使用它,软件本身的缺省配置就满足一般情况下请求IP地址的需要了。缺省设置下dhclient在获得了IP地址之后,会自动执行/etc/dhclient-script 这个脚本程序,以针对刚获取的动态IP地址进行必要的设置。很多依赖于IP地址的网络服务,就可以在这个脚本中启动,或者针对重新分配的动态IP地址对已有的网络服务进行修正。虽然使用者也许不希望使用这个脚本设置网络,但如果不存在这个脚本程序,或者这个程序不可执行,那么dhclient就不能正常执行。
   因此对于最一般的客户机,一般只连接到一个网络上,仅具备一个网络界面,可以使用一个空的dhclient.conf 和空的declient-script文件,就能完成设置IP地址和其他TCP/IP参数的任务了。 # touch /etc/dhclient.conf# touch /etc/dhclient-script# chmod +x /etc/dhclient-script# /usr/local/sbin/dhclient fxp0Listening on BPF/fxp0/00:90:27:4e:92:09/unattachedSending on   BPF/fxp0/00:90:27:4e:92:09/unattachedSending on   Socket/fallback/fallback-netDHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 22DHCPOFFER from 192.168.3.1DHCPREQUEST on fxp0 to 255.255.255.255 port 67DHCPACK from 192.168.3.1bound to 192.168.3.32 -- renewal in 3600 seconds.
 
  在更复杂的情况下,就要指定更多的内容,例如当系统有多个网卡时,要指定dhclient应该从哪个子网中获得IP地址设置,就需要使用设置文件dhclient.conf。一般除非有多个局域网网络界面,都应该使用空设置文件,避免产生配置错误。以下为一个简单的dhclient.conf的例子,可以用于多网络界面的情况:
# Defaults timeout 60; reboot 10; retry 60; select-timeout 5; initial-interval 2; script "/etc/dhclient-script"; interface "fxp0" {  request subnet-mask, broadcast-address, routers, domain-name-servers,          domain-name, host-name;  require domain-name-servers; } 
 
  这个设置文件主要用于重新定义一些参数,比较容易理解,更改也比较容易。
  成功的手工执行dhclient之后,就可以考虑将其和系统启动文件相结合了。因为很多网络服务是依赖于网络配置的,应该在启动这些网络服务之前使用DHCP配置好TCP/IP。使用dhclient-script启动服务的想法虽然也能解决问题,然而这就不能使用系统的启动rc文件中的相关设置启动网络服务,而在这个dhclient-script 中重新启动,因此比较麻烦。更简便的做法是仅仅在dhclient-script中设置hostname,而让系统启动文件完成其他网络服务的启动。这样就要求将dhclient与系统rc文件结合起来。
#hostname="my.domain.name" network_interfaces="fxp0 lo0"     # List of network interfaces (lo0 isloopback). ifconfig_lo0="inet 127.0.0.1"   # default loopback device configuration. #ifconfig_fxp0="inet 192.168.3.12   netmask 255.255.255.0" defaultrouter="NO"              # Set to default gateway (or NO).
 
这样就需要更改rc.conf文件,更改一些设置语句。首先要注释hostname设置,而在dhclient.script中进行设置,也不必设置 defaultrouter,它通过DHCP协议自动设置。同时要保证network_interfaces参数中,设置了要通过dhclient来获取 IP地址的网络界面fxp0,以允许rc系统文件能启动该与该界面相关的设置文件,然而却必须注释设置该界面的参数ifconfig_fxp0,因为这个设置参数是用于设置静态IP地址的选项,因此要屏蔽它,而使用start_if.fxp0配置脚本来设置网络界面。
缺省情况下,不存在start_if.fxp0等start_if设置网络脚本,但是这些脚本在rc.network已经做好了设置,针对每个网络界面启动,而不需要在rc.conf中做特别设定。对于dhclient,可以创建一个简单的启动脚本start_if.fxp0为:
#! /bin/sh/usr/local/sbin/dhclient fxp0
 
  这样,dhclient就和系统启动文件结合起来了,在系统启动的时候会自动设置好TCP/IP,此后再启动相关的网络服务。此时需要注意的是删除原来可能在rc.local或者在/usr/local/etc/rc.d目录中的dhclient启动命令,以避免冲突。
  在FreeBSD系统上不推荐使用动态IP地址,因为FreeBSD能提供大量有用的网络服务,都会与IP地址或域名有关,不适合使用动态IP地址。如果必须要作为DHCP客户以保持IP地址的统一管理,建议使用dhcpd针对硬件地址的设置方式,在DHCP服务器上为FreeBSD系统设定一个固定IP地址。
 
 
设置DHCP中转
 
 
  当网络中存在多个子网的时候,由于客户计算机只能通过广播发送DHCP请求,这些请求一般不能跨越路由器。为了在DHCP服务器存在的子网之外的DHCP客户分配IP地址,可以设置路由器转发DHCP请求,即转发相应的UDP 端口67和68的广播数据包。但这样设置就增加了网络广播,不利于减少网络流量。
  此外,还有另外一种方法来使得DHCP客户计算机能使用子网之外的DHCP服务器来分配IP地址。这就是使用 DHCP中转计算机来转发DHCP的请求。DHCP中转计算机能听取DHCP广播,由于它了解DHCP服务器的IP地址,因此能通过正常的IP数据包将原广播包转发到服务器中,然后再将服务器的回应信息回复客户机。这样DHCP客户机就以为本子网中也存在一个DHCP服务器。
  在ISC-DHCP软件中,提供的中转程序为dhcrelay,这是一个简单的程序,不需要额外的设置。启动 dhcrelay的标准方式为使用命令行指定将DHCP服务请求中转到的目的DHCP服务器,由于DHCP中允许多个 DHCP服务器同时为客户提供地址,而不会产生冲突,就可以使用多个DHCP服务器进行中转。
# dhcrelay dhcpsrv1 dhcpsrv2
 
  如果这台中转服务器为多网络界面计算机,那么dhcrelay将侦听所有网络界面的DHCP请求,有时不希望 dhcrelay中转某些界面上的请求,就可以设置dhcrelay侦听的网络界面,这需要指定-i参数。
# dhcrelay -i xl0 dhcpsrv1
 
 
 
提供备份的DHCP设置
 
 
  在一个具备多个子网的大型网络中,提供冗余是一个非常重要的问题。由于DHCP协议中DHCP服务器负责分配 IP地址,一旦DHCP服务器出现故障,那么所有的客户就无法正确获得IP地址,从而不能访问网络。
  但可以同时设置多个DHCP服务器来提供一个冗余能力。然而DHCP服务器本身是不提供备份能力的,不能互为备份。他们占用的IP地址资源也不能重叠,以免发生客户机IP地址冲突的现象。提供容错能力是通过分割可用的IP地址到不同的DHCP服务器上,通过多个DHCP服务器同时为一个网络服务,从而使得一个服务器发生故障还能正常执行操作。通常为了进一步增强可靠性,还可以将不同的DHCP服务器放置在不同子网中,互相使用中转提供服务。
  例如在两个子网上各自有一个DHCP服务器,标准的做法可以不使用DHCP中转,各个子网上的服务器为各个子网服务就行了。然而为了达到容错的目的,可以互相为另一个子网提供服务,通过设置中转或路由器转发广播以达到互为服务的目的。
  例如位于192.168.3.0网络上的srv1的配置可能为:
subnet 192.168.3.0 netmask 255.255.255.0 {        range 192.168.3.10 192.168.3.199;}subnet 192.168.4.0  netmask 255.255.255.0 {        range 192.168.4.200 192.168.4.220;}
 
  位于192.168.4.0网络上的srv2的配置可能为:
subnet 192.168.4.0 netmask 255.255.255.0 {        range 192.168.4.10 192.168.4.199;}subnet 192.168.3.0 netmask 255.255.255.0 {        range 192.168.3.200 192.168.3.220;}
 
  注意,上述设置都是设置样例,标准情况下还需分别指定各个option,用于设置IP地址及其相关设置。
  可以看出两个服务器都能对两个网络上的客户机分配IP地址,而各自又有一个主要服务的网络。每个网络上的IP 地址主要放在本地的服务器上,但也有少部分地址放在另一个子网中的服务器上(地址资源不能冲突),这样提供了一定的容错能力。
  实际的多子网网络中,并不必要每个子网都设置一个服务器,并使用另外的服务器备份,一般网络中有2-3个DH CP服务器就够用了。其他子网可以通过DHCP中转的方式,给该子网提供DHCP服务。
 
阅读(1344) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~