DHCP 全称Dynamic Host configuration protocol, 动态主机配置协议。是一个局域网的网络协议,使用UDP协议工作,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数, 简单来说, 就是在DHCP服务器上有一个数据库, 存放着IP地址、网关、DNS等参数。 当客户端请求使用时, 服务器则负责将相应的参数分配个客户端,避免客户端手动指定IP地址等。特别是在一些大规模的网络中。客户端数目较多,使用DHCP可以方便对这些机器进行管理,为客户机提供TCP/IP参数配置,如IP地址、网关地址和DNS服务器等,不仅效率高,而且不存在IP地址冲突的情况现在的无线路由器默认都带有DHCP功能,也就是说一个无线路由器同时也是一个DHCP服务器。
一、DHCP有三种机制分配IP地址
1.自动分配方式:DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器租用到IP地址,就可以永久使用该地址。
2.动态分配方式:DHCP服务器给主机指定一个有时间限制的IP地址, 时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
3.手工分配方式:客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中, 只有动态分配方式可以重复使用客户端不再需要的地址,下面是DHCP涉及的常见术语:
作用域:一个完整的IP地址段,DHCP协议根据作用域来管理网络的分布、分配IP地址及其他配置参数。
超级作用域:用于管理处于同一个物理网络中的多个逻辑子网段。超级作用域中包含了可以统一管理的作用域列表。
排除范围:把作用域中的某些IP地址排除,确保这些IP地址不会分配给DHCP客户端。
地址池:在定义了DHCP的作用域并应用了排除范围后,剩余的用来动态分配给DHCP客户端的IP地址范围。
租约:DHCP客户端能够使用动态分配的IP地址的时间。
预约:保证网络中的特定设备总是获取到相同的IP地址。
二、DHCP协议的工作过程
1.发现阶段:即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播的方式发送DHCP discover 发现信息来寻找DHCP服务器(因为DHCP服务器的IP地址对客户机来说是未知的),由于客户机不知道DHCP服务器的IP地址,所以它使用0.0.0.0的地址作为源地址,使用UDP68端口作为源端口,使用255.255.255.255作为目标地址,使用UDP67端口作为目的端口来广播请求IP地址信息。广播信息中包含了DHCP客户机的MAC地址和计算机名,以便使DHCP服务器能确定是哪个客户机发送的请求。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会作出响应。
2.提供阶段:即DHCP服务器提供IP地址的阶段。在网络中收到DHCP discover发现信息的DHCP服务器都会作出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置信息,因为DHCP客户机还没有IP地址,所以DHCP服务器使用自己的IP地址作为源地址,使用UDP67端口作为源端口,使用255.255.255.255作为目标地址,使用UDP68端口作为目的端口来广播,通过DHCP offer消息发送给客户端。
3.选择阶段:DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。 如果有多台DHCP服务器向DHCP客户机发来的DHCP offer,客户机只接收第一个收到的DHCP offer,然后它以广播的方式回答一个DHCP request请求信息。该信息中包含它所选定的DHCP服务器请求IP地址的内容。之所以要以广播的方式回答,是为了通知所有的DHCP服务器,它将选择某台DHCP服务器所提供的IP地址。
4.确认阶段:即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP resquest请求后,它便向DHCP客户机发送一个包含它提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,除了DHCP客户机所选择的服务器IP外,其他的DHCP服务器都将收回曾提供的IP地址
5.重新登陆:以后DHCP客户机每次登陆网络时,就不需要再发送DHCP discover发现信息了。而是直接发送包含前一次所分配IP地址的DHCP resquest请求。当DHCP服务器收到这一信息后,它会尝试让客户机继续使用原来的IP并回答一个DHCP ACK确认信息,如果此IP地址无法分配个原来的DHCP客户机时(比如IP分配给其他DHCP客户机使用) ,则DHCP服务器给DHCP客户机回答一个DHCP NACK 否认消息,当原来的DHCP客户机收到此消息后,它就必须重新发送DHCP discover发现信息重新请求新的IP地址。
6.更新租约:DHCP服务器向DHCP客户机出租的IP地址一般都由一个租借期限,期满后DHCP服务器会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送其更新租约的信息。
三、安装DHCP服务软件,Linux用的DHCP软件是Internet系统协会的DHCP服务软件ISC DHCP
--------------------------------------------------------
root@debian:~# apt install isc-dhcp-server
--------------------------------------------------------
四、配置DHCP服务软件
DHCP的主要配置文件有两个,分别位于 /etc/default/isc-dhcp-server 和 /etc/dhcp/dhcpd.conf。下面要做的就是对这两个文件进行配置。
五、查看本机网络信息,主要查看网络接口。
--------------------------------------------------------
root@debian:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:40:99:19 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.11/24 brd 192.168.0.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe40:9919/64 scope link
valid_lft forever preferred_lft forever
--------------------------------------------------------
六、配置/etc/default/isc-dhcp-server文件
--------------------------------------------------------
root@debian:~# vi /etc/default/isc-dhcp-server
....... #上面的内容省略
On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp0s3" #将监听端口INTERFACESv4修改为上面的网络接口enp0s3
#INTERFACESv6="" #屏蔽监听ipv6
--------------------------------------------------------
七、配置/etc/dhcp/dhcpd.conf文件参数说明
DHCP服务器的配置比较简单,所有的配置集中在/etc/dhcp/dhcpd.conf配置文件中,所有的配置语句可以分为3类:一类是参数,用于表明如何执行任务,是否要执行任务。第二类是声明语句,用来描述网络布局、客户、提供ip地址的策略等。还有一类是发送给客户的选项,实际上是加了option关键字的参数。其中每行开头的‘#’表示注释,而每一行配置最后都要以“;”作为结尾,这很重要。
1.DHCP配置文件中的parameters(参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户
ddns-update-style :
该参数用来指定DHCP服务器对DNS服务器进行更新时采用的更新类型。有3个类型分别是ad-hoc、interim、none。ad-hoc方式基本上已经不再采用,interim表示DNS互动更新模式,none表示不支持动态更新,一般设置为none。
default-lease-time :
该参数的作用是定义默认的IP地址租约时间,其单位为秒。
max-lease-time :
该参数用来指定最大租赁时间长度,单位是秒。上面的是默认租约时间,这个是如果客户要求了租约时间,租约时间如果超过这个值,就以这个值为准,不以客户要求的为准。
server-name :
通知DHCP客户服务器名称。
hardware :
指定客户端的硬件接口类型和硬件地址。其格式如下:
hardware ethernet 0:0:c0:5d:bd:95;
fixed-address
指定为客户端分配一个或者多个固定IP地址,该参数只能出现在host声明语句中。如果指定了多个IP地址,那么当客户端启动时,它会被分配到相应子网中的那个IP地址上。
2.DHCP配置文件中的declarations (声明语句):用来描述网络布局、提供客户的IP地址等
subnet 语句
该语句用来定义一个作用域。其格式如下:
subnet 网络 子网掩码 {
[参数]
[选项]
}
range 语句
该语句定义了起始IP和终止IP 提供动态分配IP的范围,如果只指定起始IP地址而没有终止IP地址,则范围只包含一个IP地址,在一个subnet语句中,可以有多个range语句,但是这些range语句所覆盖的IP地址范围不能交叉或者重复。其格式如下:
range 起始IP 终止IP;
host 语句
该语句用来定义用户保留地址,其格式如下:
host 主机名 {
[hardware]
[fixed-address]
}
这里的主机名可以自己定义,[hardware]参数用来指定需要保留IP地址的客户端的MAC地址,[fixed-address]用来指定分配的固定IP地址。
3. DHCP配置文件中的option(选项):用来配置DHCP可选参数,全部用option关键字作为开始
subnet-mask :为客户端设定子网掩码。
domain-name :如果客户端的/etc/resolv.conf里面设置了search参数,这个域名就是对应search参数后面的设置。
domain-name-servers : 为客户端指明DNS服务器IP地址。
host-name :为客户端指定主机名称。
routers :为客户端设定默认网关。:
broadcast-address :为客户端设定广播地址。
ntp-server :为客户端设定网络时间服务器IP地址。
time-offset :为客户端设定和格林威治时间的偏移时间,单位是秒。
注意:如果客户端使用的是视窗操作系统,不要选择"host-name"选项,即不要为其指定主机名称
八、防火墙
DHCP服务器需要开放入UDP67端口,出UDP68端口。客户端正好相反,或者最直接的是关闭防火墙。
九、配置举例
公司员工的笔记本可以获取的IP地址范围是192.168.0.100到192.168.0.200,子网掩码是255.255.255.0,网关是192.168.0.1,DNS为114.114.114.114,客户端的/etc/resolv.conf里面设置的search参数为pipci.com,默认的IP地址租约时间1小时,最大租赁时间为2小时,为硬件MAC地址0:0:c0:5d:bd:95保留IP地址为192.168.0.188 ,主机名为pipci
1、先备份原有的dhcpd.conf文件,因为里面是范例内容很多不方便看。
------------------------------------------------------------
root@debian:/etc/dhcp# mv -v dhcpd.conf dhcpd.conf.backup
------------------------------------------------------------
2、重新创建dhcpd.conf文件并添加下面的内容。
------------------------------------------------------------
root@debian:/etc/dhcp# vi dhcpd.conf
ddns-update-style none;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option domain-name "pipci.com";
option domain-name-servers 114.114.114.114;
default-lease-time 3600;
max-lease-time 7200;
host pipci {
hardware ethernet 00:0c:29:27:c6:12;
fixed-address 192.168.0.188;
}
}
------------------------------------------------------------
3、重启DHCP服务
------------------------------------------------------------
root@debian:/etc/dhcp# systemctl restart isc-dhcp-server.service
------------------------------------------------------------
4、查看DHCP服务
------------------------------------------------------------
root@debian:/etc/dhcp# systemctl status isc-dhcp-server.service
------------------------------------------------------------
十、如果出现问题的可能有以下几种可能:
1. 配置文件有问题。
1.1 内容不符合语法结构,例如,少个分号;
1.2 声明的子网和子网掩码不符合;
2. 主机IP地址和声明的子网不在同一网段。
3. 主机没有配置IP地址。