一.dhcp服务简介:
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP 是 Dynamic Host Configuration Protocol(动态主机配置协议)缩写,它的前身是 BOOTP。BOOTP 原本是用于无磁盘主机连接的网络上面的:网络主机使用 BOOT ROM 而不是磁盘启动并连接上网络,BOOTP则可以自动地为那些主机设定 TCP/IP 环境。但 BOOTP 有一个缺点:您在设定前须事先获得客户端的硬件地址,而且,与 IP 的对应是静态的。换而言之,BOOTP 非常缺乏 "动态性" ,若在有限的 IP 资源环境中,BOOTP 的一对一对应会造成非常严重的资源浪费。DHCP 可以说是 BOOTP 的增强版本,它分为两个部份:一个是服务器端,而另一个是客户端。所有的 IP 网络设定数据都由 DHCP 服务器集中管理,并负责处理客户端的 DHCP 要求;而客户端则会使用从服务器分配下来的IP环境数据。比较起 BOOTP ,DHCP 透过 "租约" 的概念,有效且动态的分配客户端的 TCP/IP 设定,而且,作为兼容考虑,DHCP 也完全照顾了 BOOTP Client 的需求。DHCP 的分配形式 首先,必须至少有一台 DHCP 工作在网络上面,它会监听网络的 DHCP 请求,并与客户端磋商 TCP/IP的设定环境。
二.Dhcp提供服务的过程
假设多部计算机在同一个网络当中,也就是说,DHCP Server 与他的 Clients 都在同一个网段之内,可以透过某些的方式来达到相互沟通的状态。那么Client 从 DHCP Server 得到 IP及相关参数信息的程序为:
①若 Client 端计算机设定使用 DHCP 协议以取得网络参数时,则Client 端计算机在开机的时候,或者是重新启动网络卡的时候,会自动的发出 DHCPClient 的需求给网域内的每部计算机(名为dhcpdiscover的广播数据包):这个时候,由于发出的讯息希望每部计算机都可以接受,所以该讯息除了网络卡的硬件地址(MAC)无法改变外,需要将该讯息的来源软件地址设定为0.0.0.0 ,而目的地址则为 255.255.255.255 ( Linux 会自动设定,无须考虑这个问题!)。网域内的其它没有提供DHCP 服务的计算机,收到这个封包之后会自动的将该封包丢弃而不回应;
②DHCP 主机响应讯息:如果是 DHCP 主机收到这个Client 的 DHCP 需求时,那么 DHCP 主机首先会针对该次需求的讯息所携带的 MAC与 DHCP 主机本身的设定值去比对,如果 DHCP 主机的设定有针对该 MAC 做静态IP (每次都给予一个固定的 IP )的提供时,则提供 Client 端相关的固定 IP 与相关的网络参数;而如果该讯息的MAC 并不在 DHCP 主机的设定之内时,则 DHCP 主机会选取目前网络内没有使用的IP (这个 IP 与设定值有关) 来发放给 client 端使用!服务器通过广播形式向客户端提供名为dhcpoffer的数据包。其中包含提供给请求主机的ip地址及相关参数。此外,需要特别留意的是,在DHCP 主机发放给 Client 端的讯息当中,会附带一个『租约期限』的讯息,以告诉Client 端,IP 可以使用的期限有多长!
③Client 端接受来自 DHCP 主机的网络参数,并设定 Client自己的网络环境:当 Client 端接受响应的讯息之后,首先会以 ARP 封包在网域内发出讯息,以确定来自DHCP 主机发放的 IP 并没有被占用!如果该 IP 已经被占用了,那么 Client 对于这次的DHCP 信息将不接受,而将再次向网域内发出 DHCP 的需求广播封包(名为:dhcpdiscover);若该 IP 没有被占用,则client 可以接受 DHCP 主机所给的网络的参数,那么这些参数将会被使用于 client端的网络设定当中,同时, Client 端也会以广播方式对 DHCP 主机发出名为dhcpquest确认封包,告诉 Server这次的需求已经确认!而 Server 也会比对该确认包中的ip地址及相关参数如果正确则将该信息记录下来。并向客户端发送dhcpack的确认封包;如果ip地址及参数不正确则放弃该确认包!
④Client 端结束该 IP 的使用权:当 Client 开始使用这个DHCP 发放的 IP 之后,有几个情况下他可能会失去这个 IP 的使用权: Client 端离线:不论是关闭网络接口( ifdown)、重新开机 ( reboot )、关机 ( shutdown ) 等行为,皆算是离线状态,这个时候Server 端就会将该 IP 回收,并放到 Server 自己的备用区中,等待未来的使用; Client 端租约到期:前面提到 DHCP server 端发放的IP 有使用的期限, Client 使用这个 IP 到达期限规定的时间,就需要将 IP 缴回去!这个时候就会造成断线,而Client 也可以再向 DHCP 主机要求再次分配 IP! 以上就是 DHCP 这个协议在 Server 端与 Client 端的运作状态,由上面这个运作状态来看,可以明白,只要Server 端设定没有问题,加上 Server 与 Client 在硬件联机上面确定是 OK 的,那么Client 就可以直接从 Server 来取得上网的网络参数,当然啦,只要我们这些管理员能够好好的、正确的管理好我们的DHCP 。
三.Dhcp实例
1.实例1 配置超级作用域的dhcp服务器
(1.实验原理:
在一个超级作域中添加多个子作用域,可以同时为上千台主机提供dhcp服务。
(2.实验拓扑图
(3.实验环境简介
本实验使用linux 配置dhcp服务器。
(4.实验步骤
①.安装dhcp服务
[root@donghao244 ~]# mount /dev/cdrom /mnt/cdrom/ //光盘进行挂载
mount: block device /dev/cdrom is write-protected, mounting read-only
//以只读模式挂载
[root@donghao244 ~]# cd /mnt/cdrom/Server/ //进入软件包所在的创库目录
[root@donghao244Server]# rpm -ivh dhcp-3.0.5-21.el5.i386.rpm
Preparing... ############################[100%]
package dhcp-3.0.5-21.el5.i386 is already installed //已经安装过了
②.修改dhcp服务器的配置文件(/etc/dhcpd.conf)
6 shared-network dongdong{ //超级作用域
7 subnet 192.168.10.0 netmask 255.255.255.0 { //第一个子域
10 option routers 192.168.10.244; //网关
11 option subnet-mask 255.255.255.0; //掩码
14 option domain-name "domain.org"; //域名
15 option domain-name-servers 192.168.10.244; 23 //dns服务器
24 range dynamic-bootp 192.168.10.242 192.168.10.243; //地址池
25 default-lease-time 21600;
26 max-lease-time 43200
34 }
35 subnet 192.168.11.0 netmask 255.255.255.0 { //第二个子域
36
37 option routers 192.168.11.244;
38 option subnet-mask 255.255.255.0;
40 option domain-name-servers 192.168.11.244;
42 range dynamic-bootp 192.168.11.240 192.168.11.240;
43 default-lease-time 21600;
44 max-lease-time 43200;
45 }
46 } //超级作用域的结束标志
③.启动dhcp服务器,并将dhcp加入开机自启动
[root@donghao244 Server]# service dhcpd restart //重新启动dhcp服务
Shuttingdown dhcpd: [ OK ]
Starting dhcpd: [ OK ]
(5.实验验证
①.修改客户端的mac地址
//此处的mac地址修改适用于主机不足的情况
[root@station98 Server]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
//修改网卡所对应的文件,分别修改并添加如下两行
5 #HWADDR=00:0C:29:FD:45:E3 //禁用此行
6 MACADDR=88:AE:1D:D5:45:00 //添加此行
[root@station98 Server]# service network restart //重新启动网卡
[root@station98 Server]# ifconfige th0
Link encap:Ethernet HWaddr 88:AE:1D:D5:45:00
//mac地址已经成功修改
inet addr:192.168.10.243 Bcast:192.168.10.255 Mask:255.255.255.0
②.使用“dhclient”获得ip地址
直接执行“dhclient”获得ip地址
[root@station98 Server]# ifconfige th0
Link encap:Ethernet HWaddr 88:AE:1D:D5:45:00
//mac地址已经成功修改
inet addr:192.168.10.243 Bcast:192.168.10.255 Mask:255.255.255.0
③.查看dhcp服务器的dhcpd.lease文件中的记录
[root@donghao244 Server]# cat /var/lib/dhcpd/dhcpd.leases
lease 192.168.10.243 { //ip地址的租约文件
starts 2 2012/08/14 12:06:34;
ends 2 2012/08/14 18:06:34;
binding state active;
next binding state free;
hardware ethernet 88:AE:1D:D5:45:00;
}
可以继续修改mac可以获得多个ip。这样可以 延伸出来一个小想法!
编辑一个脚本专门用于攻击网络中的dhcp服务器。使得dhcp服务器瘫痪。没有可分配的ip地址向主机提供。。。小邪恶,呵呵,可以一试,此处未完待续。。。。。。
2.实例2 配置dhcp中继的dhcp服务器
(1.实验原理:
在网络上的设备上配置dhcp中继服务。
(2.实验拓扑图
(3.实验环境简介
此处以redhat 作为路由器。本实验主要在redhat上进行dhcp服务中继的配置。
(4.实验步骤:
①.dhcp服务器上安装dhcp服务
[root@donghao244 ~]# mount /dev/cdrom /mnt/cdrom/ //光盘进行挂载
mount: block device /dev/cdrom is write-protected, mounting read-only
//以只读模式挂载
[root@donghao244 ~]# cd /mnt/cdrom/Server/ //进入软件包所在的创库目录
[root@donghao244Server]# rpm -ivh dhcp-3.0.5-21.el5.i386.rpm
Preparing... ############################[100%]
package dhcp-3.0.5-21.el5.i386 is already installed //已经安装过了
②.修改dhcp服务器的配置文件
[root@donghao244 ~]# vim /etc/dhcpd.conf
6 subnet 192.168.10.0 netmask 255.255.255.0 { //10.x网段的作用域
7 option routers 192.168.10.244;
8 option subnet-mask 255.255.255.0;
9 option domain-name-servers 222.88.88.88;
10 range dynamic-bootp 192.168.10.1 192.168.10.243;
11 default-lease-time 21600;
12 max-lease-time 43200;
13 }
14 subnet 192.168.20.0 netmask 255.255.255.0 { //20.x网段的作用域
15 option routers 192.168.20.244;
16 option subnet-mask 255.255.255.0;
17 option domain-name-servers 222.88.88.88;
18 range dynamic-bootp 192.168.20.1 192.168.20.243;
19 default-lease-time 21600;
20 max-lease-time 43200;
21 }
22 subnet 192.168.30.0 netmask 255.255.255.0 { //30.x网段的作用域
23 option routers 192.168.30.244;
24 option subnet-mask 255.255.255.0;
25 option domain-name-servers 222.88.88.88;
26 range dynamic-bootp 192.168.30.1 192.168.30.243;
27 default-lease-time 21600;
28 max-lease-time 43200;
29 }
③.在路由器上启用dhcrelay 中继服务
[root@station98 ~]# vim /etc/sysctl.conf //开启路由转发
7 net.ipv4.ip_forward = 1 //打开此行
执行 systcl -p //使修改生效
[root@station98 ~]# vim /etc/sysconfig/dhcrelay
//编辑中继服务器的脚本文件
2 INTERFACES="eth0 eth1 eth2" //开启转发的网卡
3 DHCPSERVERS="192.168.10.244"
//dhcp服务器的ip地址
④.启动dhcp服务器,并将dhcp加入开机自启动
[root@donghao244 ~]# service dhcpd restart//重新启动dhcp服务
Shutting down dhcpd [ OK ]
Starting dhcpd: [ OK ]
[root@donghao244 ~]# chkconfig dhcpd on //加入开机自动启动
[root@station98 ~]# service dhcrelay start //重新启动dhcrelay服务
Starting dhcrelay [ OK ]
[root@station98 ~]# chkconfig dhcrelay on //加入开机自动启动
(5.实验验证
①.使用处于多个广播区域中的主机
环境配置为
第一种:
物理机的VMware Virtual Ethernet Adapter for VMnet1 连接“路由器”的eth 1 ,通过使用hostonly方式连接。
“路由器”的eth0与dhcp服务器处于同一个单独的vmnet 2 区域中。
第二种:
物理机的VMware Virtual Ethernet Adapter for VMnet1 连接“路由器”的eth 2 。使用单独的hostonly方式连接。
“路由器”的eth0与dhcp服务器处于同一个单独的vmnet 2 区域中。
②.在client端查看信息如下:
第一种连接:
实际地址: 00-50-56-C0-00-01
IP 地址: 192.168.20.243
子网掩码: 255.255.255.0
默认网关: 192.168.20.244
DHCP 服务器: 192.168.10.244
获得了租约: 2012-8-14 21:03:22
租约过期: 2012-8-15 3:03:22
DNS 服务器: 222.88.88.88
第二种连接:
实际地址: 00-50-56-C0-00-01
IP 地址: 192.168.30.243
子网掩码: 255.255.255.0
默认网关: 192.168.30.244
DHCP 服务器: 192.168.10.244
获得了租约: 2012-8-14 21:13:25
租约过期: 2012-8-15 3:13:25
DNS 服务器: 222.88.88.88
③.查看dhcp服务器的dhcp.lease文件中的记录
lease 192.168.20.243 {
starts 2 2012/08/14 13:03:21;
ends 2 2012/08/14 19:03:21;
binding state active; //binding状态处于激活
next binding state free; //下一个binding状态处于空闲
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
client-hostname "DONGHAODONG";
lease 192.168.20.243 {
starts 2 2012/08/14 13:03:21;
ends 2 2012/08/14 13:13:23;
tstp 2 2012/08/14 13:13:23;
binding state free;
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
}
lease 192.168.30.243 {
starts 2 2012/08/14 13:13:24;
ends 2 2012/08/14 19:13:24;
binding state active; //binding状态处于激活
next binding state free; //下一个binding状态处于空闲
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
client-hostname "DONGHAODONG";
lease 192.168.30.243 {
starts 2 2012/08/14 13:16:33;
ends 2 2012/08/14 13:16:34;
tstp 2 2012/08/14 13:16:34;
binding state free;
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
3.实例3 基于class的dhcp服务
(1.实验原理:
通过类对与客户端进行选择性的配置网络信息
(2.实验拓扑图
(3.实验环境简介
本实验使用linux 配置dhcp服务器。
(4.实验步骤:
①.安装dhcp服务
[root@donghao244 ~]# mount /dev/cdrom /mnt/cdrom/ //光盘进行挂载
mount: block device /dev/cdrom is write-protected, mounting read-only
//以只读模式挂载
[root@donghao244 ~]# cd /mnt/cdrom/Server/ //进入软件包所在的创库目录
[root@donghao244Server]# rpm -ivh dhcp-3.0.5-21.el5.i386.rpm
Preparing... ############################[100%]
package dhcp-3.0.5-21.el5.i386 is already installed //已经安装过了
②.修改dhcp服务器的配置文件,内容如下:
4 ddns-update-style interim;
5 ignore client-updates;
6 subnet 192.168.10.0 netmask 255.255.255.0 {
7 class "microsoft" { //创建针对windows操作系统的主机
8 match if substring (option vendor-class-identifier,0,4) = "MSFT";
9 option routers 192.168.10.254;
10 }
11 class "vm"{ //创建针对虚拟机的主机
12 match if substring (hardware,1,3) = 00:0c:29;
13 option routers 192.168.10.253;
14 }
15 pool { //创建地址池块
16 allow members of "microsoft"; //关联匹配规则类
17 range dynamic-bootp 192.168.10.200 192.168.10.200;
//针对windows操作系统的主机分陪的地址区块
18 }
19 pool { //创建地址池块
20 allow members of "vm"; //关联匹配规则类
21 range dynamic-bootp 192.168.10.1 192.168.10.99;
//针对虚拟主机分配的地址区块
22 }
23 }
③.启动dhcp服务器,并将dhcp加入开机自启动
[root@donghao244 ~]# service dhcpd restart//重新启动dhcp服务
Shutting down dhcpd [ OK ]
Starting dhcpd: [ OK ]
[root@donghao244 ~]# chkconfig dhcpd on //加入开机自动启动
(5.实验验证
将服务器与物理机通过VMware Virtual Ethernet Adapter for VMnet1 与dhcp服务器直接相连。将VMware Virtual Ethernet Adapter for VMnet1 虚拟网卡设为自动获取ip地址。
①.使用“ipconfig /release 与 ipconfig/renew ”重新获得ip地址
实际地址: 00-50-56-C0-00-01
IP 地址: 192.168.10.200
子网掩码: 255.255.255.0
默认网关: 192.168.10.254
DHCP 服务器: 192.168.10.244
获得了租约: 2012-8-14 21:44:16
租约过期: 2012-8-15 9:44:16
②.查看dhcp服务器的dhcp.lease文件中的记录
lease 192.168.10.200 {
starts 2 2012/08/14 14:00:46;
ends 3 2012/08/15 02:00:46;
binding state active;
next binding state free;
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
client-hostname "DONGHAODONG";
}
lease 192.168.10.200 {
starts 2 2012/08/14 14:00:46;
ends 3 2012/08/15 02:00:46;
binding state active;
next binding state free;
hardware ethernet 00:50:56:c0:00:01;
uid "\001\000PV\300\000\001";
client-hostname "DONGHAODONG";
}
测试正常!!!
嗯,韩宇说的对!!!