文章目录
- DHCP服务器
- DHCP的工作原理
- DHCP服务器的用途
- DHCP协议的工作方式
- DHCP服务器给予客户端固定或动态的IP参数
- 关于租约所造成的问题与租约期限
- 多台DHCP服务器在同一物理网段的情况
- 何时需要架设DHCP服务器
- 使用DHCP的时机
- 不建议使用DHCP主机的时机
- DHCP服务器端的配置
- 所需软件与文件结构
- 主要配置文件/etc/dhcp/dhcpd.conf的语法
- 全局设置
- IP分配设置(动态或固定)
- VMware DHCP服务器案例
- 要求
- 配置DHCP服务器
- 配置其他客户端
- 检查租约文件
- 总结
DHCP服务器
DHCP的工作原理
DHCP服务器的用途
要说明DHCP之前要先配置好一个网络环境,是减速机可以顺利连上Internet,那么计算机里面就一定要有IP 地址、子网掩码、广播地址、默认网关地址、DNS 服务器地址 等网络参数才行。
其中IP 地址、子网掩码、广播地址、默认网关地址都可以在 /etc/sysconfig/network-scriptes/ifcfg-eth[0-n]
这个文件里面定义,DNS服务器的地址则在 /etc/resolv.conf 文件中定义。配置好以后,那么连接计算机Internet就没有问题了。如果你家里面有3-4台计算机,你都可以手动来配置好所需要的网络参数,然后利用NAT服务器的功能,就可以连上Internet了。
那么假设你是网络管理员,所管理的计算机大概有100多台,那么怎么设置好100多台计算机呢?
(1)手动配置(累死你)
(2)叫一群人来帮你配置(去哪里找人?)
(3)利用一台主机来自动分配所有的网络参数给任何一台主机(省时省力)
很明显我们要选择第三种省时省力的方法。
DHCP(Dynamic Host Configuration Protocol)服务器最主要的工作,就算实现上面第三种方案,也就是自动地将网络参数正确地分配给网络中的每台计算机,让客户端的计算机可以在开机的时候就立即自动设置好参数值,这些参数可以包括(IP 地址、子网掩码、广播地址、默认网关地址、DNS 服务器地址)如此一来,身为管理员的你,只要注意这一台提供网络参数的主机是否出故障就可以了,其他计算机,DHCP就帮你搞定了。
DHCP协议的工作方式
DHCP通常是用于局域网内的一个通信协议,它主要是通过客户端发送广播数据包给整个物理网段内的所有主机,若局域网内有DHCP服务器时,才会响应客户端的IP参数要求,所以DHCP服务器与客户端是应该在同一个物理网段内的。
整个DHCP数据包在服务器与客户端的交互情况如下
客户端取得IP参数的程序可以简化如下:
(1)客户端:利用广播数据包发送搜索DHCP服务器的数据包
若客户端网络设置使用DHCP协议取得IP(在Windows内为“自动获取IP”),则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP服务器的UDP数据包给所有物理网段内的计算机。此数据包的目标IP会是255.255.255.255,所以一般主机接收到这个数据包后会直接给予丢弃,但若局域网内有DHCP服务器时,则会开始进行后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择
DHCP服务器在接收到客户端的要求后,会针对这个客户端的硬件地址(MAC)与本身的设置数据来进行下列工作
到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端
若配置文件针对该MAC地址提供特定的固定IP(Static IP)时,则提供固定IP给客户端
若不符合上述两个条件,则随机选取当前没有被使用的IP参数给客户端,并记录下来。
服务器端会针对客户端的要求提供一组网络参数租约给客户端选择,由于此时客户端尚未有IP,因此在服务器端响应的数据信息中,主要是针对客户端的MAC来给予回应的。此时服务器端会保留这个租约然后开始等待客户端的回应
(3)客户端:决定选择DHCP服务器提供的网络参数租约并向服务器确认
在局域网内可能有多个DHCP服务器,但是客户端只能选择一组网络参数租约。客户端需要决定是否接受该服务器提供的网络参数。如果决定使用此服务器的网络参数租约,客户端将开始使用这组网络参数来配置自己的网络环境。此外,客户端还会发送一个广播数据包给局域网内的所有主机,告知它们已经接受了该服务器的租约。如果有两个以上的DHCP服务器提供租约,那么没有被接受的服务器会回收该IP租约。被接受的DHCP服务器会继续进行下一步操作。
(4)服务器端:记录该次租约行为并向客户端发送响应数据包信息以确认客户端的使用
当服务器端收到客户端确认的选择后,服务器会回送确认的响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约?有下面几种情况
- 客户端脱机:关闭网络接口(ifdown)、重新启动(reboot)、关机(shutdown)等行为,皆算是脱机状态,这个时候Server会将该IP收回,并放到Server的备用区中,以便日后使用
- 客户端租约到期:DHCP Server 端发放的IP有使用的期限,客户端使用这个IP到达期限规定的时间,而且没有重新提出DHCP的申请时,Server端会将该IP收回,这个时候就会造成断线。但用户也可以向DHCP服务器再次要求分配IP。
DHCP服务器给予客户端固定或动态的IP参数
上面第二部操作中,服务器会取比较客户端的MAC硬件地址,并判断该MAC是否需要给予一个固定的IP。
- 固定(Static)IP
只要客户端计算机网卡不换掉,那么MAC肯定就不会改变,由于DHCP可以根据MAC来给予固定的IP参数租约,所以该计算机每次都能以一个固定的IP连上Internet。这种情况比较适合当这台客户端计算机需要用作网络内的一些服务器主机的情况(所以IP要固定)。
- 动态(Dynamic)IP
Client端每次连上DHCP服务器所取得的IP都不是固定的,都是由DHCP服务器在未被使用的IP地址池中随机选中并提供的。
除非局域网内的计算有可能用来作为主机之用,必须设置未固定IP,否则使用动态IP的设置比较简单,而且在使用上具有很好的弹性。
关于租约所造成的问题与租约期限
观察完上面的DHCP工作模式后,会发现最后DHCP服务器还会给予几个租约期限,为什么需要这样的一个期限呢?其实设定期限还是有必要的,最大的好处就算可以避免IP被某些客户端一直占用着,但该客户端却是闲置的状态。
举例来说,我有150个IP,但是偏偏有200个用户,我们以餐馆为例,假设每个用户都着急吃饭,也就是说200个人同时干饭,有可能吗?当然不可能。肯定会有50个人无法干饭,只能等待别人吃完饭。
那怎么办?租约到期的方式就凸显出来了。那些已经占着位置吃完饭不走的,就会强迫它们离开,从而这个位置就被空了出来就可以提高等待的人使用。
DHCP协议为客户端分配的IP地址是有租约期限的,但这并不意味着你必须在到期前手动去重新申请新的IP地址。现在的DHCP客户端程序通常会根据租约时间自动重新申请更新租约时间,因此在租约到期之前,DHCP客户端程序已经自动更新了租约时间,所以你可以一直使用这个IP地址,除非DHCP服务器崩溃。
多台DHCP服务器在同一物理网段的情况
当你网络中又两台以上的DHCP服务器时,到底哪一台服务器会响应客户端计算机所发出的DHCP请求呢?因为网络上面,很多适合都是抢先得的,DHCP的响应也是如此。当Server1先响应,你使用的就算Server1所提供的网络参数,如果是Server2先响应,你就是使用Server2的参数来配置客户端PC。不过,前提是这些计算机被物理连接在一个物理网段中。
何时需要架设DHCP服务器
既然DHCP的好处是自动配置客户端,而且在移动设备的上网上面非常方便,那么是否代表你就一定要搭建一台DHCP呢?那也不一定。
使用DHCP的时机
- 具有相当多移动设备的场合
例如公司内部很多笔记本电脑使用的场合。因为笔记本电脑本身就是移动性的设备如果每到一个地方都要去问别人这边的网络参数是什么,并且还需要担心是否会跟别人IP相冲突,这时DHCP就可以派上用场了。
- 局域网内计算机的数量相当多的时候
当网络内的计算机的数量十分庞大,大到一个一个地单独知道它们配置网络参数,这时候为了避免麻烦,就需要搭建DHCP了。
不建议使用DHCP主机的时机
- 在网络中的计算机,有很多机器其实是作为主机的用途,很少有用户需求,那么就没有必要架设DHCP
- 像一般在家里,只有3~4台计算机时,架设DHCP只能拿来练习练习,没有多大效益
- 当管理的网络当中,大多网卡都属于老旧型号不支持DHCP协议
- 用户的计算机水平都很高时,那么也没有必要架设DHCP
上面提供的方案仅供参考,一件事有很多解决的方案,没有所谓的完全正确的方案
DHCP服务器端的配置
所需软件与文件结构
比较重要的配置文件如下:
- /etc/dhcp/dhcpd.conf
这个就是DHCP服务器的主要配置文件,在某些Linux版本中这个文件不能不存在,所以如果确定已经安装了DHCP软件却找不到这个文件时,请手动自行创建它即可
- /usr/sbin/dhcpd
这是启动整个dhcp daemon
的脚本文件。其实最详细的执行方式应该要使用man dhcpd
来查阅
- /var/lib/dhcp/dhcpd.leases
这个文件就算前面原理部分提到的租约,DHCP服务器端与客户端租约建立的其实与到期日就算记录在这个文件当中的。
主要配置文件/etc/dhcp/dhcpd.conf的语法
-
"#"为注释符号
-
配置项目的语法形式主要是 " <参数代号> <配置内容>"
例如:
default-lease-time 259200;
- 某些配置项目必须以option来定义,基本形式为 " option <参数代码> <配置内容> "
例如:
option domain-name "your.domain.name";
DHCP的IP分配方式可分为动态IP与固定IP,其中需要了解的是,如果需要分配固定IP的话,那么就必须要知道要设置成固定IP的那台计算机的硬件地址(MAC),可以使用arp、ifconfig、ip a来查看你网络接口的MAC。好了,那么需要设置的项目有哪些呢?其实dhcpd.conf 中的配置主要分为两大项目,一个是服务器允许的全局设置,一个是IP分配设置(动态或固定)
全局设置
每个项目的设置值大概有以下几项:
default-lease-time 时间:默认的租约时间
用户的计算机也能要求一段特定长度的租约时间,但若用户没有特别要求租约时间的话,那么就以此默认的租约时间。后面的时间参数默认为秒
max-lease-time 时间:最大租约时间
与上面的默认租约时间类似,不过,这个设置值是在规范用户所能要求的最大租约时间。也就是说,用户要求的租约时间若超过此设置值,则以此值为准
option domain-name-servers IP1、IP2
这个设置参数可以修改客户端的/etc/resolv.conf文件,即nameserver 后面接的DNS IP。特别注意设置参数最末尾为 servers (有s)
option routers 路由器的地址
设置 DHCP 服务器为客户端分配的默认网关(路由器)的 IP 地址。routers记得加上s
IP分配设置(动态或固定)
由于dhcpd主要是针对局域网分配IP参数的,因此在设置IP之前,我们需要指定一个局域网(即DHCP待分配地址的区域)才行。局域网的方式使用如下的参数
subnet NETWORK_IP netmask NETMASK_IP { .... }
我们知道局域网明确 network / netmask IP 这两个参数才行,例如之前谈过的 192.168.100.0 / 255.255.255.0 这样的设置值。上面设置值当中,subnet 与 netmask 是关键词,而大写部分就填上局域网参数。那再括号内还有什么参数需要设置呢?那就是到底IP是固定还动态的
range IP1 IP2
这个局域网当中,给予一个连续的IP地址段用来发放给客户端使用,IP1 IP2 指的是分配给客户端使用的 IP范围。例如:我想要分配 192.168.100.101到192.168.100.200 这个100个IP用来作为动态分配。那就是 range 192.168.100.101 192.168.100.200
host 主机名 { .... }
这个host就算指固定IP对应到固定MAC的设置值,主机名可以自己给予。不过再大括号内就需要指定MAC与固定的IP了。那这两个设置怎么设置呢?如下
-
hardware ethernet 硬件地址
利用网卡上面的固定硬件地址来设置,就是该设置仅针对这个硬件地址有效的意思
-
fixed-address IP地址
给予一个固定的IP地址
VMware DHCP服务器案例
要求
- Linux 主机对内的eth34 IP设置为 192.168.200.254
- 内部网段设置为192.168.200.0/24 ,且内部计算机的router为192.168.200.254,此外,DNS主机的IP为114.114.114.114和8.8.8.8
- 每个用户默认租约为 3 天,最长为 6 天
- 要分配的IP只有192.168.200.101到192.168.200.200 这几个,其他IP则保留下来
- 设置DHCP客户端为固定IP地址,其MAC是00:0c:29:54:81:64,设置其主机名为csq,且IP为 192.168.200.50
使用软件:VMware
配置DHCP服务器
- 防火墙放行规则(centos 7 以下使用iptable)
[root@localhost ~]# firewall-cmd --add-service=dhcpv6-client --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
- 安装 DHCP 服务器软件
没有DHCP服务的话就需要你需要下载
[root@localhost ~]# yum install -y dhcp
- 修改配置文件 /etc/dhcp/dhcpd.con
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
# 1.整体环境设定
default-lease-time 259200; # 默认租约为3天
max-lease-time 518400; # 最大租约为6天
option routers 192.168.200.2; # 设置网关地址
option domain-name "user.csq"; # 给予一个域名
option domain-name-servers 114.114.114.114,8.8.8.8;
# DNS的IP设置,这个设置值会修改客户端的/etc/resolv.conf 文件内容
# 2.关于动态分配的IP
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.101 192.168.200.200; # 分配的IP地址范围
# 3.关于固定的IP
host csq {
hardware ethernet 00:0c:29:54:81:64; # 客户端网卡MAC地址
fixed-address 192.168.200.50; # 给予固定的IP地址
}
}
# 相关的设置参数的意义,man dhcpd
- 重启DHCP
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl enable dhcpd
- 查看端口
配置其他客户端
和dhcp服务器使用同一个虚拟网卡,
设置网卡将获取IP地址的方式设置为dhcp
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens34
# 每个人的网卡不一样,按照自己的网卡名字来
# 将里面的
# BOOTPROTO的值改为dhcp 去掉IPADDR、NETWORK网络参数等
重启
[root@localhost ~]# systemctl restart network
查看端口
- 查看IP
如果再配置一个客户端的话,还是上述的做法,只需重启network
检查租约文件
服务器端是记录在 /var/lib/dhcpd/dhcpd.leases
[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases
lease 192.168.200.101 {
starts 5 2023/06/16 15:37:58; # 租约开始的时间
ends 1 2023/06/19 15:37:58; # 租约结束的时间
tstp 1 2023/06/19 15:37:58;
cltt 5 2023/06/16 15:37:58;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:79:5e:45;
# 客户端网卡 固定IP网卡并不会显示只会显示动态IP的网卡信息
}
总结
- DHCP可以为客户端计算机提供网络参数,使其他主机自动设置网络的功能
- 通过DHCP的统一管理,在同一网络中很少出现IP冲突的情况
- DHCP可以通过MAC的比对来提供 static IP(固定IP),一般通常向客户端分配动态IP
- 除了静态动态IP之外,还可以提供租约行为的设置
- 在租约期到期之前,客户端dhcp软件即会主动要求更新(越0.5、0.85倍租约时间左右)
- DHCP可以提供MAC比对、动态IP的范围以及租约期限等,都是在dhcpd.conf这个文件当中设置
- 租约信息 服务器端是记录在 /var/lib/dhcpd/dhcpd.leases