Linux DHCP DHCP服务 HappyLadySauce 2025-04-09 2025-04-14 基础理论 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中继服务器。
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安全内核。