DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动分配IP地址和其他网络配置信息给连接到网络的设备。DHCP服务是在网络上运行的服务器软件,它负责向客户端设备提供IP地址、子网掩码、默认网关、DNS服务器等网络配置信息。
DHCP服务的工作原理如下:
dhcp 的功能:
dhcp是一种网络协议,它的主要功能是自动为计算机分配IP地址和其他网络配置参数。DHCP服务的功能包括:
- IP地址分配:DHCP服务器可以为连接到网络的设备(客户端)自动分配可用的IP地址,确保网络中的每个设备都有一个唯一的IP地址。
- 子网掩码分配:DHCP服务器还可以分配与IP地址相关联的子网掩码,用于确定设备所在子网的边界。
- 默认网关配置:DHCP服务器可以告知客户端默认网关的IP地址,这是设备用于与其他网络通信的出口。
- DNS服务器设置:DHCP服务器可以为客户端提供DNS(域名系统)服务器的IP地址,这样设备就可以解析域名并进行网络连接。
- 其他网络参数配置:DHCP服务器还可以提供其他网络配置参数,如域名、NTP服务器地址等。
通过使用DHCP,网络管理员可以简化网络管理过程,减少手动配置的工作量,并确保网络中的设备都拥有正确的网络配置。DHCP还支持IP地址租约机制,允许分配的IP地址在一段时间后归还给DHCP服务器,以便重复使用。这使得网络管理员能够更好地管理IP地址资源。
1 dhcp 工作原理
★ 建立租约的过程(广播)
DHCP客户端 | DHCP服务器 |
---|---|
DHCP Discover 发现(广播) ----> 用于:发现 DHCP服务器 | |
<---- DHCP Offer响应(广播) 用于:响应客户端的发现,并提供可用的IP地址 | |
DHCP Request选择(广播) ----> 用于:选择DHCP服务器,并使用所选 DHCP服务器提供IP地址,先到先选 | |
<---- DHCP Ack确认(广播)用于:确认客户端的选择,从而正式建立租约<---- DHCP Nak拒绝(广播)如果地址已经分配完毕,则对后到的客户端发送该报文 |
★续租租约的过程(单播) IP租约期限到达50%的时候,DHCP客户端会请求更新IP地址租约
DHCP Request选择(单播) ----> | <---- DHCP Ack确认(单播) |
---|
DHCP中继的过程(单播+广播)
<DHCP客户端>和<DHCP中继代理>之间<广播>通讯 | <DHCP中继代理>和<上游 DHCP服务器>之间<单播>通讯 |
---|
注意:对于服务端 和 客户端来说都是先到先得,如果ip已经被别客户机抢了,则会分配失败,如果有人设置静态ip和分配的ip一样,先登录的和后登录的会出现冲突。
2 安装 dhcp 服务
安装 dhcp组件
yum install -y dhcp* dhclient
## dhcp* 是涉及:DHCP服务端的服务组件
## dhclient 是用于:DCHP客户端的工具软件
## DCHP客户端依赖dhclient工具软件来动态获取<TCP/IP配置>
## 安装后会出现 /etc/dhcp/dhcpd.conf 文件,对文件进行增加内容则可以手动分配动态 ip 地址
## 注意:服务机 需要设置静态 ip,最好是边缘ip 如xx.254
注意:要对 /etc/dhcp/dhcpd.conf 配置过后才能启动 dhcp服务,配置内容在下方,还有启动该服务时,让客户机被分配ip时候,需要关闭虚拟机默认的dhcp服务自动分配动态ip地址的功能。
启动 dhcp 服务
systemctl enable dhcpd
systemctl start dhcpd
配置防火墙
firewall-cmd --permanent --zone=public --add-port=67/udp
firewall-cmd --reload
注意:如果不会配置可关闭防火墙 systemctl stop firewall
禁用 SELinux 机制 即设置为 disabled ,可以用 getenforce 查看是什么模式
if ! [[ $(getenforce) == "Disabled" ]]; then
sed -r -i '/^[ \t]*SELINUX=/c\SELINUX=disabled' /etc/selinux/config
reboot
fi
或者 vim /etc/selinux/config
修该 SELINUX= 后面的内容
3 实战修改配置文件
1 修改 /etc/dhcp/dhcpd.conf 文件
注意:先把服务机 的 ip 设置 为边缘ip,防止也在被设置 IP 的范围里面
查看 文件:
[root@cl ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
可以去 /usr/share/doc/dhcp*/dhcpd.conf.example 文件 查看格式写入
或者直接 :r /usr/share/doc/dhcp*/dhcpd.conf.example 导入
查看例子文件
cat /usr/share/doc/dhcp*/dhcpd.conf.example
把注释删掉后,剩如下内容,还有很多内容未列出来,以下是简单的一个内容
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.152.187.0 netmask 255.255.255.0 {
}
## 例子:
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
一个完整的分配例子如下
option domain-name "test.com";
option domain-name-servers 192.168.58.2, 114.114.114.114;
default-lease-time 43200;
max-lease-time 86400;
log-facility local7;
subnet 192.168.58.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.58.10 192.168.58.11;
option routers 192.168.58.2;
option broadcast-address 192.168.58.255;
}
主要配置:
(1) 配置:全局性参数
(2) 配置:subnet 本地作用域 (本地和全局都设置的情况下,先生成本地作用域的ip)
本地作用域:
☛ 它是:一个匹配<本机网卡的IP子网>的<动态IP地址分配范围>。
☛ 要求:必须匹配<本机网卡的IP子网>。
☛ 功能:针对<本机网卡>所在的<广播域>,进行<动态IP地址分配>。
☛ 关键字:subnet
主要:本地作用域可写多个,当机器过多时候,不过要写
覆盖和追加都可以 , 原文件只有注释内容,不过注释内容 里面写了 去哪查看如何写入 格式的文件,可以去查看,以下是格式
增加文件内容:
注意:被分配IP 的机器 要关闭 dhcp服务
随机分配 58.10 和 58.11 两个ip地址给同一个网段下的机器,固定分配 192.168.58.200 ip 给物理地址为 00:0c:29:0e:e6:0a 的机器
[root@dj ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
## 定义:全局性参数
## 定义:<客户端主机名>的<DNS域名后缀> 可写可不写,test 可随便修改名称
#option domain-name "test.com";
## 定义:<DNS服务器IP地址> 内网一个写网关
option domain-name-servers 192.168.58.2, 114.114.114.114;
## 定义:<默认租约时限>(最短时限)
default-lease-time 43200;
## 定义:<最大租约时限>
max-lease-time 86400;
## 定义:<DHCP服务>的<日志设施>
log-facility local7;
## 定义:subnet 本地作用域(10.0.0.0/24)
## 注意:必须匹配<本机网卡的IP子网> 能否有空格并未测试
subnet 192.168.58.0 netmask 255.255.255.0 {
## 定义:可分配的<IP地址范围> 给很多机器随机分配 ip 范围的ip
## 这里分配 58.10 和 58.11 两个IP
# dynamic-bootp 可省略
range dynamic-bootp 192.168.58.10 192.168.58.11;
## 定义:<网关IP地址>
option routers 192.168.58.2;
## 定义:<子网广播地址>
option broadcast-address 192.168.58.255;
}
## 以下是固定分配,不需要可不写,一般用于某老板固定ip,上面一般都是随机分配一个范围给多个机器 cl可随便更改,最好与主机名一致方便辨认
host cl{
## 定义:<cl>的<笔记本网卡MAC地址>,从而确保可以识别出<销售经理>的 <笔记本>
## 00:0c:29:0e:e6:0a 为 cl 服务器的物理地址
hardware ethernet 00:0c:29:0e:e6:0a;
## 定义:<fixed 固定IP地址>,使之与<笔记本网卡MAC地址>永久绑定在一起 分配固定的 ip 192.168.58.200
fixed-address 192.168.58.200;
}
## 注意:固定分配不能有空行和空格,否则重启服务会出现 job 显示 配置文件有错,如果还是不行的话建议本地作用域那里也不要用空行
如果不止一个本地作用域的话,应该如下所写,根据ip进行修改
## 定义:shared-network 超级本地作用域
shared-network mynetwork {
## 定义:本地作用域(第1个网段:10.0.0.0/24),
注意:必须有一个<subnet本地作用域>匹配<本机网卡的IP子网>
subnet 10.0.0.0 netmask 255.255.255.0 {
## 排除:<保留的IP地址>和<静态的IP地址>,防止动态分配<重复的IP地址>
range dynamic-bootp 10.0.0.11 10.0.0.100;
range dynamic-bootp 10.0.0.102 10.0.0.250;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
}
## 定义:本地作用域(第2个网段:10.0.1.0/24)
subnet 10.0.1.0 netmask 255.255.255.0 {
range dynamic-bootp 10.0.1.11 10.0.1.250;
option routers 10.0.1.1;
option broadcast-address 10.0.1.255;
}
}
2 重启 dhcp 服务
systemctl restart dhcpd
4 例子1
环境
<办公电脑>总数为240台。
通过<交换机>予以网络互连,没有划分VLAN,因此整个<办公网络>就是一个<广播域>。
公司<办公网络>的<网关出口IP地址>是:192.168.58.2/24
公司<办公网络>的<内网DNS服务器IP地址>是:192.168.58.2/24
工作要求
配置<DHCP服务器>,为所有的<办公电脑>动态分配<TCP/IP配置>,确保<办公电脑>可以访问<互联网>
如果不动态分配,可能有重复的 动态 ip
技术分析 (步骤 6 步)
- 将<DHCP服务器>连接到<交换机>,确保与<办公电脑>处于<相同的广播域>
因为:<DHCP服务>的<基本工作原理>就是:借助<IP广播>来动态分配<TCP/IP配置>
- 为<DHCP服务器>手动配置<静态IP地址>
因为:<DHCP服务器>的<IP地址>不允许是<动态的>
-
安装并启动<DHCP服务> 安装方法 看上面
-
配置</etc/dhcp/dhcpd.conf配置文件>,配置思路如下:
(1) 哪些<配置参数>与<当前IP子网>没有关联性,从而可以<相对通用与稳定>?
<DNS服务器IP地址>:192.168.58.2 和 114.114.114.114 内网一个写网关
<客户端主机名>的<DNS域名后缀>:test.com
● 主要用于:<DNS+DHCP>的<DDNS动态更新>,如果无此工作需要,则可省略
<地址租约>的<默认租约时限>:43200(12小时)
● <地址租约>到期之后,<原客户端>如需继续使用,则会自动执行<续租>操作
<地址租约>的<最大租约时限>:86400秒(24小时)
● 如果<默认租约时限>到期,DHCP会继续保留<租约>,以供<原客户端>续租;
● 如果直至<最大租约时限>到期,<原客户端>仍未执行<续租>操作,DHCP则会回收并释放<租约>
● 注意:<最大租约时限>不另外计时,而是在<默认租约时限>的基础上<顺延计时>。
<DHCP服务>的<日志设施>:默认为local7,从而将<日志信息>保存到</etc/log/boot.log日志文件>中
(2) 哪些<配置参数>与<当前IP子网>息息相关的?
采用<C类网络>,最大可容纳:254台网络设备
<IP子网>的<网络号>为:192.168.58.0/255.255.255.0
<网关IP地址>:192.168.58.2
<子网广播地址>:192.168.58.255
(3) 针对<办公电脑>,确定一个<可分配的IP地址范围>
可分配的<IP地址范围>:192.168.58.10 - 192.168.58.250 服务机静态ip最好边缘化,边缘都被使用了 1 2 255都被使用
不可分配的<IP地址范围>:192.168.58.1 - 192.168.58.9 和 192.168.58.251 - 192.168.58.254 (建议)
-
创建</etc/dhcp/dhcpd.conf配置文件>
一般安装 dhcp服务就存在,格式可根据提示去复制过来
(1) 配置:全局性参数
(2) 配置:subnet 本地作用域 (本地和全局都设置的情况下,先生成本地作用域的ip)
注意:假设里面网关 是 192.168.58.2 网段是 192.168.58.0 子网掩码 24位
vim /etc/dhcp/dhcpd.conf
## 定义:全局性参数
## 定义:<客户端主机名>的<DNS域名后缀> 可不写,test也可以改名
option domain-name "test.com";
## 定义:<DNS服务器IP地址>
option domain-name-servers 192.168.58.2, 114.114.114.114;
## 定义:<默认租约时限> 12小时 单位秒
default-lease-time 43200;
## 定义:<最大租约时限> 24小时
max-lease-time 86400;
## 定义:<DHCP服务>的<日志设施>
log-facility local7;
## 定义:subnet 本地作用域(192.168.58.0/24),◀◀◀ 注意:必须匹配<本机网卡的IP子网>
subnet 192.168.58.0 netmask 255.255.255.0 {
## 定义:可分配的<IP地址范围> dynamic-bootp 可省略
range dynamic-bootp 192.168.58.10 192.168.58.250;
## 定义:<网关IP地址> (路由器ip地址)
option routers 192.168.58.2;
## 定义:<子网广播地址>
option broadcast-address 192.168.58.255;
}
简写就是
option domain-name "test.com";
option domain-name-servers 192.168.58.2, 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.58.0 netmask 255.255.255.0 {
range 192.168.58.180 192.168.58.181;
next-server 192.168.58.100;
}
- 重启dhcpd服务,生效配置
systemctl restart dhcpd
5 例子2
工作要求
公司<销售主管>在工作中,经常在自己的<笔记本>上通过<共享文件夹>的方式,与<同事>交换数据,由于<销售主管>经常出差,待其出差回来之后,就会发现自己<笔记本>的<IP地址>有时改变,从而给<共享访问>带来麻烦,虽然他可以手动设置<静态IP地址>,但是当他回家或别处使用<笔记本>时,又需要更改<笔记本的IP地址>,比较麻烦,现在他希望在公司可以动态获得一个<固定IP地址>。 (简单来说固定 ip 地址)
技术分析 (步骤)
假设下面是 10.0.0.1
有两个网段分别是 10.0.0.0/24 和 10.0.1.0/24 网段
cat > /etc/dhcp/dhcpd.conf <<EOF
##定义全局变量:
option domain-name "test.com";
option domain-name-servers 10.0.0.1, 114.114.114.114;
default-lease-time 43200;
max-lease-time 86400;
log-facility local7;
## 定义:shared-network 超级本地作用域
shared-network mynetwork {
## 定义:本地作用域(第1个网段:10.0.0.0/24),
注意:必须有一个<subnet本地作用域>匹配<本机网卡的IP子网>
subnet 10.0.0.0 netmask 255.255.255.0 {
## 排除:<保留的IP地址>和<静态的IP地址>,防止动态分配<重复的IP地址>
range dynamic-bootp 10.0.0.11 10.0.0.100;
range dynamic-bootp 10.0.0.102 10.0.0.250;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
}
## 定义:本地作用域(第2个网段:10.0.1.0/24)
subnet 10.0.1.0 netmask 255.255.255.0 {
range dynamic-bootp 10.0.1.11 10.0.1.250;
option routers 10.0.1.1;
option broadcast-address 10.0.1.255;
}
}
## 定义:host 主机声明,并赋予一个<fixed 固定IP地址>,即可
host user01 {
## 定义:<销售经理>的<笔记本网卡MAC地址>,从而确保可以识别出<销售经理>的 <笔记本>
hardware ethernet 00:0c:29:39:4e:21;
## 定义:<fixed 固定IP地址>,使之与<笔记本网卡MAC地址>永久绑定在一起
fixed-address 10.0.0.101;
}
EOF
重启dhcpd服务,生效配置
systemctl restart dhcpd
注意:其实 host上方的内容都是类似于 例子 1 的内容,不修改的话 直接在例子1上的文件内容添加 host 那里的内容即可
6 查看 ip地址租约 信息
注意:<fixed 保留IP地址>不计入<租约>
注意:<租约时间>是<格林威治时间>
cat /var/lib/dhcpd/dhcpd.leases
以下是本虚拟机租约情况
[root@dj ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
lease 192.168.58.10 {
starts 6 2023/08/05 15:10:30;
ends 0 2023/08/06 03:10:30;
tstp 0 2023/08/06 03:10:30;
cltt 6 2023/08/05 15:10:30;
binding state free;
hardware ethernet 00:50:56:c0:00:08;
uid "\001\000PV\300\000\010";
}
lease 192.168.58.11 {
starts 0 2023/08/06 05:39:06;
ends 0 2023/08/06 05:41:06;
cltt 0 2023/08/06 05:39:06;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:e6:27:f0;
client-hostname "dj";
}
server-duid "\000\001\000\001,_\327\224\000\014)\346'\346";
7 查看 DHCP 服务的 日志信息
cat /var/log/boot.log