DHCP的原理
dhcp动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址、子网掩码、默认网关、dns指向等信息,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP服务器有3种为DHCP客户机分配TCP/IP地址的方式
1、manual手工分配:在手工分配中,网络管理员在DHCP服务器通过手工方法配置DHCP客户机的IP地址。当DHCP客户机要求网络服务时,DHCP服务器把手工配置的IP地址传递给DHCP客户机。
2、automatic自动分配:在自动分配中,不需要进行任何的IP地址手工分配。当DHCP客户机第一次向DHCP服务器租用到IP地址后,这个地址就永久地分配给了该DHCP客户机,而不会再分配给其他客户机。
3、dynamic动态分配:当DHCP客户机向DHCP服务器租用IP地址时,DHCP服务器只是暂时分配给客户机一个IP地址。只要租约到期,这个地址就会还给DHCP服务器,以供其他客户机使用。如果DHCP客户机仍需要一个IP地址来完成工作,则可以再要求另外一个IP地址。
dhcp客户端获取地址的过程
1、客户端向网络当中发送一个dhcpdiscover数据广播包,等待网络中的dhcp服务器响应。
2、当网络中的dhcp服务器收到了来自客户端的数据包后,会向客户端回复一个dhcpoffer包,其中就包括了将要分配的IP地址、子网掩码、默认网关、dns指向等信息。
3、客户端收到了来自服务器的数据包之后,会向服务器发送一个dhcprequest的广播包,请求使用此IP地址。
4、服务器收到了来自客户端的请求之后,会向客户端回应一个dhcpack广播包,对客户端的请求加以确认。
客户端ip租约的更新
1、当客户机重启或者达到租期的50%时,客户机会发送dhcprequest请求更新租约,服务器收到请求时,会按照上述过程更新客户端租约;若服务器不在线,或者服务器没有收到更新租约的请求,客户端会继续等待。
2、当租约达到87.5%时,客户端会向网络中发送dhcpdiscover的广播,请求更新租约,如果dhcp服务器收到请求会按照四个步骤更新租约,如果2没有服务器响应,则选择等待,租约到期,服务器收回地址,客户端会获得一个169.254.x.y的地址。
案例一
dhcp服务器的搭建
[root@rain ~]# mkdir /mnt/cdrom
[root@rain ~]# mount /dev/cdrom /mnt/cdrom //挂在光盘
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@rain ~]# cd /mnt/cdrom/Server
[root@rain Server]# rpm -qip dhcp-3.0.5-21.el5.i386.rpm //安装dhcp程序包
[root@rain Server]# setup //配置服务器地址并重启
[root@rain Server]# service network restart
正在关闭接口 eth0: [确定]
正在关闭接口 eth1: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
[root@rain Server]# vim /etc/dhcpd.conf //编辑dhcp配置文件
[root@rain ~]# service dhcpd configtest
Syntax: OK //查看编译的文件是否有错误
[root@rain ~]# service dhcpd restart
启动 dhcpd: [确定] //启动dhcp服务
客户端的测试
案例二
假设我们有一台机器作用很大,我们希望其地址一直为192.168.220.253,我们只需在
dhcp的配置文件中稍做配置
host ns {
next-server marvin.redhat.com;
hardware ethernet 00:0C:29:60:5A:2F; //这台机器的mac地址
fixed-address 192.168.220.128; //dhcp服务器的ip地址
}
}
重新启动dhcp服务器
service dhcpd restart
这样就可以一直获得220.253这个地址了
案例三
如果一家公司有超过200多台的机器需要地址,我们只是用220.0网段的地址是不够分配的,这是我们有两种方法可以解决
(1)给该公司一个B类的地址作为作用域,这个作用域可以分配60000多个客户端,这样就容易造成浪费。
(2)使用超级作用域,绑定多个C类地址就可以了。
这里我们只需要在案例一的编辑dhcp配置文件的步骤中加入多个作用域就可以了
vim /etc/dhcpd.conf
shared-network sun{ ##超级作用域sun
subnet 192.168.220.0 netmask 255.255.255.0 { //作用域1
option routers 192.168.220.254;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "tec.com";
option domain-name-servers 222.88.88.88,222.85.85.85;
//主dns与辅助dns中间用逗号隔开
option time-offset -18000;
range dynamic-bootp 192.168.220.1 192.168.220.253;##地址池范围
default-lease-time 21600;
max-lease-time 43200;
}
subnet 192.168.210.0 netmask 255.255.255.0 { //作用域2
option routers 192.168.210.254;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "mkt.com";
option domain-name-servers 222.88.88.88,222.85.85.85;
range dynamic-bootp 192.168.210.1 192.168.220.253;
default-lease-time 21600;
max-lease-time 43200;
}
}
启动dhcp服务器
service dhcpd restart
这样就可以了!
案例四
dhcp中继
在大型的网络中,可能会存在多个子网。DHCP客户机通过网络广播消息获得DHCP服务器的响应后得到IP地址。但广播消息是不能跨越子网的。因此,如果DHCP客户机和服务器在不同的子网内,客户机还能不能向服务器申请IP地址呢?这就要用到DHCP中继代理。DHCP中继代理实际上是一种软件技术,安装了DHCP中继代理的计算机称为DHCP中继代理服务器,它承担不同子网间的DHCP客户机和服务器的通信任务。
拓扑图
因为疏忽,拓扑图忘了上传,因此把拓扑图补在了文章的最后边。
开启转发路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //路由转发功能(在sysct1.conf 中的第七行)
执行sysctl –p //开启路由功能
[root@rain Server]# rpm -qip dhcp-3.0.5-21.el5.i386.rpm //安装dhcp程序包
编辑dhcp配置文件
[root@rain Server]# vim /etc/dhcpd.conf //编辑dhcp配置文件
5 subnet 192.168.20.0 netmask 255.255.255.0 { //子网1的作用域
6
7 # --- default gateway
8
9 option routers 192.168.20.254;
10 option subnet-mask 255.255.255.0;
11
12 option nis-domain "domain.org";
13 option domain-name "domain.org";
14 option domain-name-servers 222.88.88.88;
15
16
17 range dynamic-bootp 192.168.20.1 192.168.20.253;
18 default-lease-time 21600;
19 max-lease-time 43200;
20
21 # we want the nameserver to appear at a fixed address
22 host ns {
23 next-server marvin.redhat.com;
24 hardware ethernet 12:34:56:78:AB:CD;
25 fixed-address 207.175.42.254;
26 }
27
28 }
subnet 192.168.30.0 netmask 255.255.255.0 { //子网2的作用域
31
32 # --- default gateway
33
34 option routers 192.168.30.254;
35 option subnet-mask 255.255.255.0;
36 option nis-domain "domain.org";
37 option domain-name "domain.org";
38 option domain-name-servers 222.88.88.88;
39
40
41 range dynamic-bootp 192.168.30.1 192.168.30.253;
42 default-lease-time 21600;
43 max-lease-time 43200;
44
45 # we want the nameserver to appear at a fixed address
46 host ms {
47 next-server marvin.redhat.com;
48 hardware ethernet 12:34:56:78:AB:CD;
49 fixed-address 207.175.42.254;
50 }
51 # DHCP Server Configuration file.
52 # see /usr/share/doc/dhcp*/dhcpd.conf.sample
53 #
54 }
55 subnet 192.168.220.0 netmask 255.255.255.0 { //服务器的空作用域
56 }
[root@rain Server]# service dhcpd configtest
Syntax: OK
[root@rain Server]# service dhcpd restart
关闭 dhcpd: [确定]
启动 dhcpd: [确定]
[root@rain Server]#
测试
子网1
子网2