要说明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服务器时,才会响应客户端的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)服务器端:记录该次租约行为并向客户端发送响应数据包信息以确认客户端的使用
当服务器端收到客户端确认的选择后,服务器会回送确认的响应数据包,并且告知客户端这个网络参数租约的期限,并且开始租约计时。那么该次租约何时会到期而被解约?有下面几种情况
上面第二部操作中,服务器会取比较客户端的MAC硬件地址,并判断该MAC是否需要给予一个固定的IP。
只要客户端计算机网卡不换掉,那么MAC肯定就不会改变,由于DHCP可以根据MAC来给予固定的IP参数租约,所以该计算机每次都能以一个固定的IP连上Internet。这种情况比较适合当这台客户端计算机需要用作网络内的一些服务器主机的情况(所以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的响应也是如此。当Server1先响应,你使用的就算Server1所提供的网络参数,如果是Server2先响应,你就是使用Server2的参数来配置客户端PC。不过,前提是这些计算机被物理连接在一个物理网段中。
既然DHCP的好处是自动配置客户端,而且在移动设备的上网上面非常方便,那么是否代表你就一定要搭建一台DHCP呢?那也不一定。
例如公司内部很多笔记本电脑使用的场合。因为笔记本电脑本身就是移动性的设备如果每到一个地方都要去问别人这边的网络参数是什么,并且还需要担心是否会跟别人IP相冲突,这时DHCP就可以派上用场了。
当网络内的计算机的数量十分庞大,大到一个一个地单独知道它们配置网络参数,这时候为了避免麻烦,就需要搭建DHCP了。
上面提供的方案仅供参考,一件事有很多解决的方案,没有所谓的完全正确的方案
比较重要的配置文件如下:
这个就是DHCP服务器的主要配置文件,在某些Linux版本中这个文件不能不存在,所以如果确定已经安装了DHCP软件却找不到这个文件时,请手动自行创建它即可
这是启动整个dhcp daemon
的脚本文件。其实最详细的执行方式应该要使用man dhcpd
来查阅
这个文件就算前面原理部分提到的租约,DHCP服务器端与客户端租约建立的其实与到期日就算记录在这个文件当中的。
"#"为注释符号
配置项目的语法形式主要是 " <参数代号> <配置内容>"
例如:
default-lease-time 259200;
例如:
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
由于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
[root@localhost ~]# firewall-cmd --add-service=dhcpv6-client --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
没有DHCP服务的话就需要你需要下载
[root@localhost ~]# yum install -y dhcp
[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
[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
查看端口
如果再配置一个客户端的话,还是上述的做法,只需重启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的网卡信息
}