文章目录
一、DHCP工作原理
1.1 了解DHCP服务
- DHCP(Dynamic Host Configguration Protocol,动态主机配置协议)
- 由Internet工作任务小组设计开发
- 专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议
使用DHCP的好处
- 减少管理员的工作量
- 避免输入错误的可能
- 避免IP地址冲突
- 当更改IP地址段时,不需要重新配置每个用户的IP地址
- 提高了IP地址的利用率
- 方便客户端的配置
DHCP的分配方式
- 自动分配:分配到一个IP地址后永久使用
- 手动分配:由DHCP服务器管理员专门指定IP地址
- 动态分配:使用完后释放该IP,供其它客户机使用
1.2 DHCP的租约过程
- 客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程
- 分为四个步骤
1.客户端在网络中发送discover广播,以此来搜索DHCP服务器
2.DHCP服务器接收到广播后,因不知道客户端的IP地址,所以同样以广播的形式将offer发送,来响应主机
3.客户机收到offer后,开始发出request广播
4.DHCP收到广播后,依旧不知道客户机IP地址,发送回复request的ACK确认广播
租约过程详解
1、客户机请求IP地址:发送DHCP discover广播
-
当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址
-
此时DHCP客户机以广播方式发送DHCP discover发现信息来寻找DHCP服务器
-
因为自己没有IP地址,所以源IP地址为:0.0.0.0
同时也不知道DHCP服务器地址,所以发送广播255.255.255.255
2、服务器响应: -
当DHCP服务器接收到来自客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机,
-
如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP offer的消息中,然后DHCP服务器就广播一则DHCP offer消息
-
客户机仍没有IP地址,所以发送广播
3、客户机选择IP地址: -
DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机
第一个DHCP offer表示:若局域网中同时存在两个DHCP,- - 那么客户机根据收到DHCP offer的顺序来确定使用哪个DHCP服务器的地址 -
客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天)
4、服务器确定租约 -
DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息
-
当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化
-
此时服务器发出的仍旧是广播,因为客户机还没有IP地址
5、重新登录 -
DHCP客户机每次重新登录网络时,不需要在发送DHCP的discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息
-
DHCP服务器收到请求后,检查IP地址资源池
1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机
2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。
6、更新租约 -
当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约
-
客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约
-
若DHCP服务器宕机,客户机租约到期后,会自动释放地址,然后使用169.254.0.0–169.254.255.255网段的地址
二、DHCP服务器的配置
2.1 使用DHCP动态配置主机地址
DHCP服务
- 为大量客户机自动分配地址,提供集中管理
- 减轻管理和维护成本,提高网络配置效率
可分配的地址信息主要包括
- 网卡的IP地址,子网掩码
- 对应的网络地址,广播地址
- 默认网关地址
- DNS服务器地址
2.2 安装DHCP服务器
DHCP服务器软件
- CentOS光盘中的dhcp-4.2.5-47.el7.centos.x86_64.rpm
- dhcp软件包的主要文件
- 主配置文件:/etc/dhcpd.conf(或者是.cfg文件)
- 执行程序:/usr/sbin/dhcpd(命令)、/usr/sbin/dhcrelay(启动)
- 执行参数配置:/etc/sysconfig/dhcpd
2.3 主配置文件
dhcp.conf的内容构成
ddns-update-style interim; '全局配置参数,针对所有子网段'
...省略内容
subnet 10.152.187.0 netmask 255.255.255.0 {'网段声明'
option routers 10.5.5.1; '配置选项,网关'
...
default-lease-time 600; '配置参数,租约'
...
host ns{
...
fixed-address 207.175.42.254; '主机声明,固定的主机地址,(如:网络打印机)基于MAC地址绑定,一定要绑定MAC'
}
}
全局设置,作用于整个DHCP服务器
- ddns-update-style none; 禁止dns动态更新
- default-lease-time 21600; 默认租约期限
- max-lease-time 43200; 最大租约期限
- option domain-name"domain.org"; 指定域名
- option domain-name-servers 202.106.0.20; 指定分配dns地址
subnet网段声明,作用于整个子网段
-
range参数:设置用于分配的IP地址池(地址池定义了可分配地址的范围)
-
option subnet-mask 参数: 设置客户机的子网掩码
-
option routers 参数: 设置客户机的默认网关地址
[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}
host主机声明,作用于单个主机
- hardware ethernet 参数:指定对应主机的MAC地址
- fixed-address参数:指定为该主机保留的IP地址
2.4 启动DHCP服务
启动DHCP服务
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# netstat -anpu | grep ":67"
udp 0 0 0.0.0.0:67 0.0.0.0:* 5684/dhcpd
查看租约文件 /var/lib/dhcpd/dhcpd.lease
[root@localhost ~]# vim /var/lib/dhcpd/dhcpd.leases
或者
[root@localhost ~]# less /var/lib/dhcpd/dhcpd.leases
或者其他的
服务器 UDP协议的67端口
客户端 UDP协议68端口
三、DHCP服务器配置实验
3.1 实验环境
一台CnetOS 7(作为DHCP服务器)
两台windows 10(作为DHCP客户机)
两台都设置成仅主机模式(相当于都绑定在VMnet 1网卡上)
3.2 需求分析
两台win10可以通过DHCP服务器获取到IP地址
将win10 跟 CentOS 7.6 都设置成仅主机模式
3.3 实验步骤
1、dhcp固定IP地址
2、安装dhcp包
3、修改配置文件(根据模板复制)
设置subnet{地址池、子网掩码、网关、dns地址}
4、启动服务
客户端:
ipconfig /release
ipconfig /renew
3.4 实验过程
1、配置CnetOS 7
[root@localhost ~]# setenforce 0 '关闭核心防护'
[root@localhost ~]# iptables -F '清空防火墙规则'
[root@localhost ~]# systemctl status firewalld '查看防火墙状态'
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2020-07-05 20:48:40 CST; 2h 5min ago
Docs: man:firewalld(1)
Main PID: 8988 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─8988 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
7月 05 20:48:39 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
7月 05 20:48:40 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld.service '关闭防火墙'
[root@localhost ~]# yum -y install dhcp* '安装所有dhcp相关的软件包'
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.bfsu.edu.cn
* updates: mirror.bit.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 dhcp.x86_64.12.4.2.5-79.el7.centos 将被 安装
--> 正在处理依赖关系 libisc-export.so.169()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要
--> 正在处理依赖关系 libdns-export.so.1102()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要
---> 软件包 dhcp-common.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
--> 正在处理依赖关系 dhcp-common = 12:4.2.5-68.el7.centos.1,它被软件包 12:dhclient-4.2.5-68.el7.centos.1.x86_64 需要
---> 软件包 dhcp-common.x86_64.12.4.2.5-79.el7.centos 将被 更新
---> 软件包 dhcp-devel.x86_64.12.4.2.5-79.el7.centos 将被 安装
---> 软件包 dhcp-libs.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
---> 软件包 dhcp-libs.x86_64.12.4.2.5-79.el7.centos 将被 更新
--> 正在检查事务
---> 软件包 bind-export-libs.x86_64.32.9.11.4-16.P2.el7_8.6 将被 安装
---> 软件包 dhclient.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
---> 软件包 dhclient.x86_64.12.4.2.5-79.el7.centos 将被 更新
--> 解决依赖关系完成
依赖关系解决
=======================================================================================
Package 架构 版本 源 大小
=======================================================================================
正在安装:
dhcp x86_64 12:4.2.5-79.el7.centos base 515 k
dhcp-devel x86_64 12:4.2.5-79.el7.centos base 108 k
正在更新:
dhcp-common x86_64 12:4.2.5-79.el7.centos base 176 k
dhcp-libs x86_64 12:4.2.5-79.el7.centos base 133 k
为依赖而安装:
bind-export-libs x86_64 32:9.11.4-16.P2.el7_8.6 updates 1.1 M
为依赖而更新:
dhclient x86_64 12:4.2.5-79.el7.centos base 286 k
事务概要
=======================================================================================
安装 2 软件包 (+1 依赖软件包)
升级 2 软件包 (+1 依赖软件包)
总计:2.3 M
总下载量:622 k
Downloading packages:
No Presto metadata available for base
(1/2): dhcp-devel-4.2.5-79.el7.centos.x86_64.rpm | 108 kB 00:00:00
(2/2): dhcp-4.2.5-79.el7.centos.x86_64.rpm | 515 kB 00:00:01
---------------------------------------------------------------------------------------
总计 413 kB/s | 622 kB 00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : 12:dhcp-libs-4.2.5-79.el7.centos.x86_64 1/9
正在更新 : 12:dhcp-common-4.2.5-79.el7.centos.x86_64 2/9
正在安装 : 32:bind-export-libs-9.11.4-16.P2.el7_8.6.x86_64 3/9
正在更新 : 12:dhclient-4.2.5-79.el7.centos.x86_64 4/9
正在安装 : 12:dhcp-4.2.5-79.el7.centos.x86_64 5/9
正在安装 : 12:dhcp-devel-4.2.5-79.el7.centos.x86_64 6/9
清理 : 12:dhclient-4.2.5-68.el7.centos.1.x86_64 7/9
清理 : 12:dhcp-common-4.2.5-68.el7.centos.1.x86_64 8/9
清理 : 12:dhcp-libs-4.2.5-68.el7.centos.1.x86_64 9/9
验证中 : 12:dhcp-libs-4.2.5-79.el7.centos.x86_64 1/9
验证中 : 12:dhclient-4.2.5-79.el7.centos.x86_64 2/9
验证中 : 12:dhcp-4.2.5-79.el7.centos.x86_64 3/9
验证中 : 12:dhcp-devel-4.2.5-79.el7.centos.x86_64 4/9
验证中 : 32:bind-export-libs-9.11.4-16.P2.el7_8.6.x86_64 5/9
验证中 : 12:dhcp-common-4.2.5-79.el7.centos.x86_64 6/9
验证中 : 12:dhcp-common-4.2.5-68.el7.centos.1.x86_64 7/9
验证中 : 12:dhclient-4.2.5-68.el7.centos.1.x86_64 8/9
验证中 : 12:dhcp-libs-4.2.5-68.el7.centos.1.x86_64 9/9
已安装:
dhcp.x86_64 12:4.2.5-79.el7.centos dhcp-devel.x86_64 12:4.2.5-79.el7.centos
作为依赖被安装:
bind-export-libs.x86_64 32:9.11.4-16.P2.el7_8.6
更新完毕:
dhcp-common.x86_64 12:4.2.5-79.el7.centos dhcp-libs.x86_64 12:4.2.5-79.el7.centos
作为依赖被升级:
dhclient.x86_64 12:4.2.5-79.el7.centos
完毕!
2、centos 7 和win 10 都设置为仅 主机模式
进入网络编辑器,取消掉使用本地DHCP服务IP地址分配给虚拟机,否则下面做出来还是192.168.100.1,不是自己配置的8.8.8.8
3、修改配置文件
[root@localhost ~]# rpm -q dhcp '查看dhcp安装包是否安装'
dhcp-4.2.5-79.el7.centos.x86_64
[root@localhost ~]# rpm -qc dhcp '查看dhcp安装包所在路径'
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
[root@localhost ~]# cd /etc/dhcp '进入/etc/dhcp目录'
[root@localhost dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf scripts
[root@localhost dhcp]# vim 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'
[root@localhost dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf '把/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example文件复制到/etc/dhcp/dhcpd.conf中,覆盖原有文件'
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
[root@localhost dhcp]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 '修改网卡信息'
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPRO=static '原有dhcp改为static'
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3cae1424-fc31-4f04-874b-e2bb66dfc8c1
DEVICE=ens33
ONBOOT=yes '改为yes'
IPADDR=192.168.100.100 '添加IP地址,子网掩码,网关'
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
':wq保存退出'
[root@localhost dhcp]# service network restart '重启网络服务'
Restarting network (via systemctl): [ 确定 ]
[root@localhost dhcp]# ifconfig '查看网卡信息'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255 '已经修改成功'
inet6 fe80::d80b:cb4a:4fe5:254b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f4:24:29 txqueuelen 1000 (Ethernet)
RX packets 548 bytes 678169 (662.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 588 bytes 49787 (48.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf '进入/etc/dhcp/dhcpd.conf配置'
':set nu标注行号'
......
8 option domain-name-servers 8.8.8.8; 'DNS设置为8.8.8.8'
......
27 subnet 192.168.1000 netmask 255.255.255.0 {
28 range 192.168.100.128 192.168.100.200; '插入这两行:配置地址池子网段'
29 option routers 192.168.100.1; '配置网关'
':wq保存退出'
[root@localhost dhcp]# systemctl start dhcpd '启动dhcp服务'
[root@localhost dhcp]# systemctl start dhcpd '启动dhcp服务'
[root@localhost dhcp]# netstat -naup '查看dhcp状态'
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:973 0.0.0.0:* 8859/rpcbind
udp 0 0 0.0.0.0:5353 0.0.0.0:* 8917/avahi-daemon:
udp 0 0 192.168.122.1:53 0.0.0.0:* 9954/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 13316/dhcpd '有这个服务了'
udp 0 0 0.0.0.0:67 0.0.0.0:* 9954/dnsmasq
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp 0 0 127.0.0.1:323 0.0.0.0:* 8887/chronyd
udp 0 0 0.0.0.0:47906 0.0.0.0:* 8917/avahi-daemon:
udp6 0 0 :::973 :::* 8859/rpcbind
udp6 0 0 :::111 :::* 1/systemd
udp6 0 0 ::1:323 :::* 8887/chronyd
4、启动服务
进入win10虚拟机,改为自动获取网络服务
进入命令提示符页面
pconfig /release释放IP地址
ipconfig /renew 重新获取IP地址
再开一台win7虚拟机
分配到的地址是192.168.100.129
5、下面在子网段配置DNS服务,看子网段优先级与全局配置优先级哪个高
[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.128 192.168.100.200;
option routers 192.168.100.1;
option domain-name-servers 9.9.9.9; '插入这一行'
[root@localhost dhcp]# systemctl restart dhcpd '重启dhcp'
进入win10
ipconfig /release
ipconfig /renew
ipconfig /all
此时DNS服务器变成了9.9.9.9
- 结论:子网段配置的优先级高于全局配置
6、固定分配IP地址
进入win 10,复制物理地址:00-0C-29-53-74-FC
[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
‘/fixed 查找’
......
host yang { 'host后面名称可以改'
hardware ethernet 00:0C:29:53:74:FC; '粘贴00-0C-29-53-74-FC,并将 - 改为 :'
fixed-address 192.168.100.88; 'fixed-address 后可以改成想给WIN 10 配置的IP地址'
......
':wq 保存退出'
[root@localhost dhcp]# systemctl restart dhcpd '重启dhcpd'
进入win10
ipconfig /release
ipconfig /renew
此时,win 10 获取到的IP地址为192.168.100.88