分类: BSD
2008-07-22 11:29:45
DHCP 术语和介绍
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是用于对多个客户计算机集中分配IP地址以及IP地址相关的信息的协议,这样就能将IP地址和TCP/IP的设置统一管理起来,而避免不必要的地址冲突的问题,因此常常用在网络中对众多DOS/Windows计算机的管理方面,节省了网络管理员手工设置和分配地址的麻烦。DHCP还能略微达到节省IP地址的目的。假设网络中有50个计算机,但只有40个 IP地址,但是这50台计算机不会同时启动,IP地址应该满足要求。如果使用静态IP地址的设置方式,还是会遇到分配地址的困难,因为计算机的使用是随机的,无论怎样分配地址都无法避免出现冲突现象,而使用DHCP就能避免这个问题。 DHCP也能用于统一设置其它的一些IP设置,如缺省路由、DNS服务器等等,使用它能减少一个大型网络的管理任务。
DHCP(Dynamic Host Configuration Protoct),具有以下特点:(使用 DHCP 的好处及原理 )
统一管理 ip 地址和 tcp/ip,可有效避免 ip 地址冲突,简化网络管理人员设定 ip 时的困扰,易于维护,易于安装新客户机,易于旅行者使用,节约ip
节省实际使用的 ip,如分配到 8 个 ip ,但有 10 台计算机,但不会同时使用,如此则可使用 DHCP 来设定,节省 ip 使用数量,如 isp 大多使用这种方式
由于需使用广播,故服务器端及客户端需位于同一个网段内
DHCP 是由 BootP 协议发展而来的,原先是使用在无磁盘工作站分配 ip 时使用,其详细原理及过程如下:
● ip 租用申请
当客户端计算机首次启动 tcp/ip 时,透过广播(使用 udp port 67 及 68)的方式发送 DHCP 请求封包,此封包含发送计算机之网络适配卡硬件地址及计算机名称,以便和 DHCP 服务器沟通。
● ip 租用提供
DHCP 服务器收到请求后,会将 ip 地址、netmask、租用时间等信息,传送给客户端(请求端)。
● ip 租用选择
可能在一网络中,有多台 DHCP 服务器,同时向客户端发送租用提供信息,因此客户端会选择一个 ip 地址,拒绝其它服务器提供的地址,而后客户端会向选择的 DHCP 服务器发出租用地址信息。
● ip 租用确认
DHCP 服务器收到客户端请求信息后,如无意外发生,则会响应一个确认信息,并将 ip 地址分配给客户端,如此客户端就能使用这个 ip 了。
● 租期更新
经由 DHCP 分配的 ip,有一定的使用使时间,称为租用时间(如一小时、一天..)。若租期已到,则 DHCP 服务器会将此 ip 分配给其它客户端使用。为免除这种情况,一般客户端会提前(约是租用时间的 50%)向服务器提出申请续租。
● 释放 ip 租用地址
客户端提出续租申请时,如成功则可继续使用这个 ip,否则可自动释放自己的 ip 地址请求,亦可等到租期满再释放掉。
DHCP 安装
在 FreeBSD 有二个 DHCP 软件,isc-dhcp 及 wide-dhcp,不过 isc-dhcp 较为常用,因此在此以 isc-dhcp 为例。
安装 isc-dhcp 有两种方式,FreeBSD 安装光盘及使用 ports。不过由于网络速度的问题,所以由安装光盘安装较快,请照以下 step :
方式一:
使用 /stand/sysinstall 来安装
# /stand/sysinstall
Configure -> Packages -> CD/DVD -> net -> isc-dhcp3-3.0.r11
/usr/local/sbin/dhcpd 可执行档,详细 dhcpd 的用法,
man dhcpd可参考 ,其中最重要的就是 dhcpd <网络卡代号-对内的那一片>,如小弟是使用螃蟹卡,rl1 是对内的网络卡,语法则是 dhcpd rl1
方式二:
安装 isc-dhcp3
cd /usr/ports/net/isc-dhcp3-server
make install clean
或者
pkg_add /tmp/isc-dhcp3-3.0.1.r12.tgz #确定安装文件的目录
dhcpd.conf配置文件
配置方法一:手动配置
ee /etc/rc.conf
ifconfig_ed0="DHCP" #重启生效,红色替换成实际网卡的名称
配置方法二:使用dhcpconf程序(推荐)
一. dhcpconf程序
二. 固定主机配置选项
选项 |
描述 |
New entry hostname |
这是正为静态ip而配置的系统的主机名。在此你应只提供主机名,而不是域名,因为域信息是在COMMON选项中提供的 |
New entry HW address |
在这里,输入正在配置静态ip而配置的主机上网卡的硬件地址 |
New entry IP address |
这是正在为静态ip地址而配置的主机将使用的静态ip地址 |
三.子网范围选现
选项 |
描述 |
New range subnet |
这是该范围的ip地址将影响到的子网 |
New range start IP |
这是对该子网上接受动态ip地址的dhcp客户机可用的第一个ip地址 |
New range end IP |
这是对该子网上接受动态ip地址的dhcp客户机可用的最后一个ip地址 |
配置dhcp的配置文件
# cd /usr/local/etc
# ee dhcpd.conf
server-identifier 192.168.1.3; -> nat 对内网络卡ip,也就是 rl1
subnet 192.
default-lease-time 21600; -> 租期时间,以秒为单位
max-lease-time 86400; -> 最大租期时间最大的租期
option domain-name-servers 202.96.69.38; -> dns 服务器 ip (依需要更改)
option domain-name "chu888.com"; -> 网域名称
option routers 192.168.4.1; -> 内部计算机使的 gateway 也就是 rl1
option broadcast-address 192.168.4.255; -> 广播封包 ip
option perform-mask-discovery on; -> 主动发现方式,可不写
option mask-supplier on;
ddns-update-style none;
group
{ subnet 192.168.4.0 netmask 255.255.255.0
{range dynamic-bootp 192.168.4.2 192.168.4.200;
}
host printer
{
hardware ethernet 00:00:80:f8:07:10;
fixed-address 192.168.4.202 ; ####print server
option host-name "printer servers";
}
解释:
“server-identifierl 192.168.3.1”为本机服务器IP地址。一般不必设置这个参数,dhcpd能自动侦测。
“Subnet”字段项设定了一个子网段。即可供DHCP服务器分配的Il P地址范围为192.168.3.10到192.168.3.20,这个地址范围也可以不是连续的,不连续的地址可以使用多个range设置参数来设置。此外,还设置了这一组内分配的IP地址的租期限制default-lease-time 和max-lease-time,使用其缺省值600和7200即可。后面的option参数设置是DHCP的附加功能,例如本例中设置DHCP客户的子网掩码为255.255.255.0、广播地址为192.168.3.1、DNS服务器地址为192.168.3.1、域名为exampleorg.org.cn。
“host a1”l 字段项针对某个特定主机a1进行的设置。这个主机被绑定为所使用网卡的MAC地址的计算机,将给其分配一个固定地址。这种分配方式实际等价于固定地址分配方式,唯一的好处就是能够对IP地址进行集中管理,不必每个计算机分别设置了。这里同样也可以使用option参数,设置上一字段所述的子网掩码等参数。
第五步:当配置了dhcpd.conf文件后,就能启动dhcpd守护进程了。由于计算机会有多个网络界面,故需要指定dhcpd 服务器的网络界面,以便回应相应界面上的DHCP请求。
dhcp服务器守护进程
dhcpd.conf 的其它设定,请参考 man dhcpd.conf,或是 /usr/local/etc/dhcpd.conf.sample
在启动dhcpd之前使用touch 命令,生成一个新的日志文件;以便日后查看这个日志文件的内容,得到当前DHCP服务器的状态和客户机IP地址分配的情况。
cd /usr/local/sbin
dhcpd -cf /usr/local/etc/dhcpd.conf lnc0
cd /var/log
echo "">messages #清空message 信息
/usr/local/etc/rc.d/dhcpd start/stop/restart#启动/停止/重起dhcp服务器进程
/var/db(run)/dhcpd.leases #记录每一次客户请求及其回应的IP地址记录
cd /usr/local/etc/rc.d/ #开机时能自动执行 dhcpd
mv isc-dhcpd.sh.sample isc-dhcpd.sh
cd /usr/local/etc/ #是否存在dhcpd.conf.sample
mv dhcpd.conf.sample dhcpd.conf或者/etc/dhcpd.conf
客户端的配置:
一. windows 工作站设置
只要将 tcp/ip 设定成 "自动取得 ip 地址" ,
以及设定 dns 服务器,如将 dns 服务器设为 168.95.1.1
二. linux工作站设置(dhclient程序)
配置成使用dhcp的网络接口,则在每次系统启动时该程序会自动运行
如果你不需要修改dhclient的默认行为,应在/etc/rc.conf中配置dhcp接口的ifconfig行的下方添加行:dhcp_flags=“flag”flag是dhclient的一列选项。
下列有用的有效dhclient选项
选项 |
动作 |
-d |
这将强迫在获得它的配置信息之后停留在前台,而不是移动到后台。这应只用于调试目的,并且可能永远不应从/etc/rc.conf中使用它 |
-cf filename |
默认情况下,dhclient从sbin/dhclient-script中读取它的针对某种操作系统的配置信息。-cf选项可以用来告诉dhclient从另外一个配置文件读取信息,此处filename是该文件的名称和路径 |
-lf filename |
默认情况下,dhclient将它的租用的信息存储在文件/var/db/dhclient.leases中。-lf选项可用来告诉dhclient使用另外一个文件,此处filename是该信息应该存储的文件的名称和路径 |
-pf filename |
默认情况下,dhclient将它的process ID(进程标识符,pid)信息存储在/var/run/dhclient.pid中。pf部分可用来更改这一点。filename是应用来存储该信息的文件名称机器路径 |
-q |
该选项要求dhclient在它运行时保持安静。换句话说,dhclient将不会详细给出它打印的消息 |
-l |
这导致dhclient在获取一个ip地址上的租用时只尝试一次。如果这失败了,则dhclient将带者状态2而存在 |
/etc/dhclient.conf 控制关于它的行为不同选项
选项 |
动作 |
timeout n |
此处n是client在尝试连接一台dhclient时,在放弃并断定该服务器不可用之前应等待响用的秒数。默认情况下,这为60秒 |
retry n |
此处n是dhclient在第一次请求超时的情况下,在再次尝试连接dhcp服务器子前应等待的秒数。默认情况下,它将等待5分钟。 |
select-timeout n |
一些网络可能有一个以上的dhcp服务器。在此情况下,该客户机或许会接收到提供(offer)的多个配置信息。所接收到的第一个提供并不总是最好的(例如,如果接收到的第二个提供包含该客户机所拥有的相同ip地址,它就优于ip地址不同的提供)。在此n是dhclient在接收到第一个提供之后查看是否有其他服务器相应提供所等待的秒数 |
reboot n |
在dhclient启动时,它尝试获得它上一次拥有的相同的ip地址。如果它不能获取该ip地址,它将接收一个不同的ip地址。此处n是client在放弃并断定它不能获的上一次所使用的同一ip地址之前应等待的秒数 |
request option |
客户机将从dhcp服务器中指定选项请求信息。有关可用选项的信息,请参见dhcp-option man页 |
require option |
客户机将从dhcp服务器为指定选项要求信息。如果没有提供所需要信息,则客户机将拒绝此项提供。有关可用选项的信息,请参见dhcp-option man页 |
default option vlaue |
如果dhcp服务器不能为指定选项提供信息,则value将用于该选项。有关可用选项的信息,请参见dhcp-option man页 |
supersede option value |
指定选项将使用value,即便dhcp服务器为该选项发送另外一个值也是如此。有关可用选项的信息,请参见dhcp-option man页 |
reject address |
任何来自使用address所示的ip地址的dhcp发送的提供将被拒绝 |
/sbin/dhclient-script #用于dhclient的操作系统专用的配置文件。
/etc/dhclient.conf
dhcp-options man页
检测安装成功:
/usr/local/sbin/dhcpd
Listening on BPF/vr0/00:50:ba:cd:08:5e/192.168.1.0
Sending on BPF/vr0/00:50:ba:cd:08:5e/192.168.1.0
Sending on Socket/fallback/fallback-net