基础理论

DHCP是一种C/S模式的网络协议,要想实现DHCP功能,首先主机必须支持DHCP Client功能,其次网络中还必须拥有一台DHCP服务器,并且主机和该服务器之间必须能够正常通信。因为DHCP中有些报文时以广播的形式,因此DHCP Server和DHCP Client一般必须要在一个子网内。

DHCP服务器,既可以是一台主机,也可以是路由交换设备(华为和思科系列)用来实现DHCP服务器功能。

DHCP协议采用UDP作为传输协议,客户端发送请求消息到DHCP服务器的67号端口,DHC服务器回应应答消息给客户端的68号端口。DHCP作为服务端负责集中给客户端分配各种网络地址参数(主要包括IP地址、子网掩码、广播地址、默认网关地址、DNS服务器地址)。

基础配置

DHCP配置,默认DHCP配置文件(/etc/dhcp/dhcpd.conf)中什么配置都没有,里面的注释会告诉你在/usr/share/doc/dhcp/下有dhcp的配置模板。

我们把模板拷贝到DHCP配置文件下。

[root@appsrv ~]# cp /usr/share/doc/dhc*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? yes

然后再进入DHCP配置文件中进行修改,这样就会方便很多。但是我们还是需要把多余的配置文件删除或者注释掉。

我一般是只留下这些配置:

log-facility local7;    //dhcp日志,local7是系统日志的名字

subnet 10.5.5.0 netmask 255.255.255.224 {    //开启这个网段的dhcp服务
  range 10.5.5.26 10.5.5.30;                 //设置dhcp地址池
  option domain-name-servers ns1.internal.example.org;    //设置dns服务器的IP或者域名
  option domain-name "internal.example.org";    //设置client dhcp获取到的域名
  option routers 10.5.5.1;    //设置网关
  option broadcast-address 10.5.5.31;    //设置广播地址
  default-lease-time 600;    //设置租期时间(单位是"秒")
  max-lease-time 7200;    //设置最大租期时间
}

一般配置直接把dhcp获取域名和广播地址删除就好,不用管;

为什么有默认租期和最大租期?
默认租期是client获取到ip后,ip能使用的时间,当这个时间过去1/2,7/8的时候都会向dhcp服务器发送
Requset请求去续租;
dhcp服务器回复ACK同意后,client才会继续使用这个ip,如果没有收到;
client会认为服务器没了,会重新进行一次dhcp请求;

这样一直续租可以持续到设置的最大续租时间,这时dhcp服务器会拒绝client的续租
client只好再重新进行一次dhcp请求;

然后按自己的需要进行修改。

配置DHCP保留

在DHCP配置文件中添加:

host ClientName {    //配置dhcp保留
    hardware ethernet MAC;    //绑定保留client的MAC地址
    fixed-address 192.168.1.190;    //绑定保留client的IP
}

host 参数表示这个一个dhcp保留,ClientName则是这个dhcp保留选项的名字
可以按自己的需要改写;

配置DHCP中继

DHCP中继,用于DHCP服务器和client不在同一网段的情景。因为client发送的dhcp请求是广播且没有源IP,只会在二层传播。要想在三层实现DHCP服务,这时需要一个中间人——DHCP中继服务器。

DHCP中继服务器,连通DHCP服务器和clients,和clients在同一个二层网络,能在三层上找到DHCP服务器。

在DHCP服务器配置文件中添加:

subnet 192.168.0.0 netmask 255.255.255.0 {    //clients网段的dhcp服务
  range 192.168.0.110 192.168.0.190;
  option domain-name-servers 192.168.100.100;
  option routers 192.168.0.254;
  default-lease-time 600;
  max-lease-time 7200;
}

subnet 192.168.100.0 netmask 255.255.255.0 {    //DHCP服务器网卡的dhcp服务
}

因为DHCP服务器网卡中没有192.168.0.0/24的网段,dhcpd-service启动不了,
所以要添加一个DHCP服务器自己网段的配置,哪怕里面什么都没有。

如果你想说再加一张网卡,或者把DHCP服务器的网卡IP改到和clients一个网段
那还用做DHCP中继嘛?都同一网段了,clients直接去DHCP服务器拿不好嘛;

DHCP日志分离

DHCP服务的日志默认是和系统日志在一起的,我们要想把DHCP的日志从系统日志中分离出来需要去修改系统文件

[root@appsrv ~]# vim /etc/rsyslog.conf
//按两下Shift+g(大写G)直接去后面找

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local0.*                                                /var/log/dhcpd.log

在local7下面加入一行,表示dhcp的日志名和路径
注意:local0,7中的0,7不是随便给,我试过用8会冲突;这里建议使用0,不去修改它;

然后重启系统日志服务

[root@appsrv ~]# systemctl restart rsyslog

去DHCP配置文件中修改DHCP日志文件名

[root@appsrv ~]# vim /etc/dhcp/dhcpd.conf

log-facility local0;

然后重启DHCP服务,关闭防火墙或者在防火墙中放行相应的端口,关闭selinux安全内核。