DHCP服务

基础理论

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

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

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

基础配置

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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配置文件中添加:

1
2
3
4
5
6
7
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中继服务器。

loading

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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的日志从系统日志中分离出来需要去修改系统文件

1
2
3
4
5
6
7
8
9
[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,不去修改它;

然后重启系统日志服务

1
[root@appsrv ~]# systemctl restart rsyslog

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

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

log-facility local0;

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