1.简介
DHCP服务器又叫动态主机协议,由服务器划分一段地址池,客户端地址池中获取IP地址及掩码等信息
端口:UDP 67/68
主配置文件:/etc/dhcp/dhcpd.conf
租约时间文件:/etc/sysconfig/dhcpd
2.简单搭建DHCP服务
PS:实验开始前记得先关闭VMware的DHCP功能

安装DHCP服务器:yum -y install dhcp
查询是否安装;rpm -q dhcp
dhcp-4.2.5-83.el7.centos.1.x86_64
进入配置文件
vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
安装之后我们发现配置文件里只有这几条内容,但是给了我们提示dhcp配置文件在 /usr/share/doc/dhcp*/dhcpd.conf.example下
查看模板文件
[root@localhost network-scripts]# rpm -ql dhcp-4.2.5 | more | grep dhcpd.conf.example;
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
将模板文件的内容重定向到主配置文件中,也可直接在配置文件内写入内容
cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf
自身的习惯问题(坏习惯哦!!!),所以就直接在配置文件里写入了
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style interim; //全局配置参数
subnet 192.168.100.0 netmask 255.255.255.0{ //子网网段声明
range 192.168.100.101 192.168.100.200; //地址池
option routers 192.168.100.100; //网关
}
PS: 一个标准的配置文件应该包括全局配置参数、子网网段声明、地址配置选项以及地址配置参数。其中,全局配置参数用于定义 dhcpd 服务程序的整体运行参数;子网网段声明用于配置整个子网段的地址属性。
[root@localhost ~]# systemctl restart dhcpd

3.MAC地址绑定
因为老板要求需要一个拉风装*的IP地址,而且每次电脑一上线就是固定的IP地址,所有我们这里可以使用MAC地址绑定
但是老板的电脑我们又不能随便看,不知道MAC地址是多少我们可以先给老板的电脑分配一个DHCP地址,然后可以使用arp -a 查看MAC地址,任何我们知道了老板的MAC地址是00:0c:29:2a:05:**
[root@localhost ~]# arp -a | grep ens36
? (192.168.100.101) at 00:0c:29:9a:87:** [ether] on ens36
? (192.168.100.102) at 00:0c:29:2a:05:** [ether] on ens36
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style interim;
subnet 192.168.100.0 netmask 255.255.255.0{
range 192.168.100.101 192.168.100.200;
option routers 192.168.100.100;
host fantasia {
hardware ethernet 00:0c:29:2a:05:21; //客户端网卡MAC地址,注意的是windows的MAC地址表示形式是-,而linux是:
fixed-address 192.168.100.188; //给予绑定的IP地址
}
}
[root@localhost ~]# systemctl restart dhcpd
记不住配置的模板文件里面有详细的配置模板

ipconfig /renew

4.DHCP中继服务
如果 DHCP客户机 与 DHCP服务器 在同一个物理 网段 ,则客户机可以正确地获得动态分配的ip地址。如果不在同一个物理网段,则需要DHCP Relay Agent(中继代理)。
环境:
DHCP服务器(centos7):192.168.100.0(vmnet2)
DHCP中继服务器(centos7):
10.1.82.10(vmnet1),192.168.100.100(vmnet2),192.168.100.200(vmnet3),100.100.100.100(vmnet4)
客户端(windows server 2019):配置3张网卡,都获取DHCP服务器
DHCP服务器配置:

vim /etc/dhcp/dhcpd.conf
[root@router ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
subnet 192.168.100.0 netmask 255.255.255.0 {
}
subnet 10.1.82.0 netmask 255.255.255.0 {
range 10.1.82.100 10.1.82.200;
option routers 10.1.82.1;
default-lease-time 600;
max-lease-time 7200;
}
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.110 192.168.200.200;
option routers 192.168.200.1;
default-lease-time 600;
max-lease-time 7200;
}
subnet 100.100.100.0 netmask 255.255.255.0 {
range 100.100.100.110 100.100.100.200;
option routers 100.100.100.1;
default-lease-time 600;
max-lease-time 7200;
}
中继服务器配置

//开启路由转发功能
[root@router ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
//安装dhcp服务
yum -y install dhcp
//开启dhcp中继服务
[root@router ~]# dhcrelay 192.168.100.10
客户端配置



可以看到DHCP服务器是192.168.100.10实现了跨网段分配IP地址
5.主配置文件解析
log-facility local7 //日志类型(级别为local7)
ignore client-updates; //忽略客户端更新 DNS 记录
ddns-update-style //配置DHCP-DNS互动更新模式、类型包括 none(不支
持动态更新)、interim(互动更新模式)与 ad-hoc(特殊更新模式)
subnet 192.168.100.0 netmask 255.255.255.0 //网段和掩码
range 192.168.100.10 192.168.100.50; //地址池
option domain-name "example.org"; //为客户端指明DNS域名
option domain-name-servers 192.168.30.250; //为客户端指明DNS服务器ip地址
option routers 192.168.100.254; //网关
option broadcast-address 192.168.100.255; //广播地址
default-lease-time 600: //服务器默认租聘时间(s)
max-lease-time 7200; //最大租聘时间(s)
ntp-server[IP 地址] //定义客户端的网络时间服务器(NTP)
nis-servers[IP 地址] //定义客户端的 NIS 域服务器的地址
Hardware[网卡物理地址] //指定网卡接口的类型与 MAC 地址
server-name[主机名] //向 DHCP 客户端通知 DHCP 服务器的主机名
fixed-address[IP 地址] //将某个固定的 IP 地址分配给指定主机
time-offset[偏移误差] //指定客户端与格林尼治时间的偏移差