安装软件包
yum install -y dhcp
yum install -y dhcp-common
yum install -y dhcp-lib
dhcp包包含的主要文件
rpm -ql dhcp #查看dhcp包安装了哪些文件和程序
/etc/dhcpd.conf #主配置文件
/etc/rc.d/init.d/dhcpd #服务启动脚本
/etc/rc.d/init.d/dhcrelay #继dhcp服务启动脚本
/etc/sysconfig/dhcpd #次要配置文件
/etc/sysconfig/dhcrelay
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example #示例文件
/ust/lib/systemd/system/dhcpd.services # 服务启动脚本 systemctl start dhcpd
/var/lib/dhcpd/dhcpd.leases #租约信息存放的文件
客户机和服务器配置文件
/var/lib/dhclient/dhclient.leases #客户端租约文件
/var/lib/dhcpd/dhcpd.leases #服务器端的租约文件在
/etc/dhcp/dhcpd.conf #dhcp配置文件
服务端口对应配置文件
cat /etc/services #linux下基本服务的端口,协议,描述等信息。
http 80/tcp www www-http # WorldWideWeb HTTP httpd服务
bootps 67/tcp # BOOTP server 这就是dhcp服务端口
bootps 67/udp ##是dhcp服务
常用命令
systemctl start dhcp
systemctl stop dhcpd
配置dhcp服务器
配置文件都放在/etc/dhcp目录下,主配置文件为dhcpd.conf
- 编写dhcpd.conf (可以复制dhcpd.conf.example模板文件来修改,也可以直接编辑dhcpd.conf)
## 1、拷贝示例文件覆盖原来的空文件。通过rpm -ql dhcp查看自己模板配置文件(不一定和我一样的版本)
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf ## 2、预先处理,去掉 注释和空行,保留 生效语句,和可选语句。
sed -ri '/(^#[[:space:]]+|^#$|^$)/{d}' /etc/dhcp/dhcpd.conf
删除没用的那些行,保留内容如下:
主配置文件样板:#ddns-update-style none;
#authoritative;
log-facility local7;subnet 10.1.1.0 netmask 255.255.255.0 {range 10.1.1.100 10.1.1.200; ##地址池 option domain-name-servers 202.96.128.166; ##DNS服务器地址option domain-name "class.com"; ##域名option routers 10.1.1.1; ##默认路由option broadcast-address 10.1.1.255; ##广播地址default-lease-time 300; ##默认租约时间 max-lease-time 7200; ##最大租约时间
}
注意:dhcp服务器必须要有一张网卡在10.1.1.0/24网络,并且它只会给这张网卡所在网络(广播域)主机分配ip。
- 一个dhcp服务器给多局域网提供服务
1、先将两张网卡接入两个不同网络,并设置静态ip
2、修改配置文件/etc/dhcp/dhcpd.conf 如下:
#ddns-update-style none;
#authoritative;
log-facility local7;subnet 10.1.1.0 netmask 255.255.255.0 {range 10.1.1.100 10.1.1.200; ##地址池 option domain-name-servers 202.96.128.166; ##DNS服务器地址option domain-name "class.com"; ##域名option routers 10.1.1.1; ##默认路由option broadcast-address 10.1.1.255; ##广播地址default-lease-time 300; ##默认租约时间 max-lease-time 7200; ##最大租约时间
}subnet 192.168.100.0 netmask 255.255.255.0 {range 192.168.100.3 192.168.100.100; ##地址池 option domain-name-servers 202.96.128.166; ##DNS服务器地址option domain-name "class.com"; ##域名option routers 192.168.100.1; ##默认路由option broadcast-address 192.168.100.255; ##广播地址default-lease-time 300; ##默认租约时间 max-lease-time 7200; ##最大租约时间
}
小结:系统在收到dhcp请求时,会看是哪张网卡收到的请求,根据该网卡的ip地址选择对应配置文件里的地址池给对应网络主机分配地址。
mac绑定ip (嵌套一段就好)
#ddns-update-style none;
#authoritative;
log-facility local7;subnet 10.1.1.0 netmask 255.255.255.0 {range 10.1.1.100 10.1.1.200; ##地址池 option domain-name-servers 202.96.128.166; ##DNS服务器地址option domain-name "class.com"; ##域名option routers 10.1.1.1; ##默认路由option broadcast-address 10.1.1.255; ##广播地址default-lease-time 300; ##默认租约时间 max-lease-time 7200; ##最大租约时间 host serverftp { ## 备注名称,可以自行定义。hardware ethernet 12:34:56:78:AB:CD; ##静态绑定mac和ipfixed-address 10.1.1.5;}
}
dhcp配置文件中下面配置作用:客户机通过dhcp获得dns域名和IP地址,并且将dns--ip 保存到/etc/resolv.conf中!
option domain-name-servers 202.96.128.166; ##DNS服务器地址
option domain-name "class.com"; ##域名
客户机/etc/resolv.conf配置文件
; generated by /usr/sbin/dhclient-script ##脚本加载客户端租约文件/var/lib/dhclient/dhclient.leases
search localdomain ##dhcp分配的dns域名
nameserver 192.168.109.2 ##dhcp分配的dns服务器的ip
默认租约时间 与 最大租约时间
注意:这里的时间都是utc时间,比如我们是15:00获取的ip 配置文件里显示的是07:00,比北京时间少8小时
客户机续约过程如下:
假如:默认使用 10 小时租约期 ,10小时内续约,可以继续使用该IP地址。
1、在线:第5小时找一次dhcp自动续约
2、(1请求失败)8.5小时的时候,再尝试
3、(2请求失败)找别的dhcp服务器
4、(3请求失败)继续使用原先的IP地址,直到过期。根据默认租约期限
####服务器的 /var/lib/dhcpd/dhcpd.lease 信息文件。
starts 起始时间点:
ends 结束(过期时间点):
相隔时间= default-lease-time 的设置。
(从这个时间间隔中可以推测出下一次该IP地址的续约时间。)
#### 客户端的 /var/lib/dhclient/dhcpd-eth0.lease 信息文件。
得到的资源信息:
renew:下一次去找dhcpd服务器续约的时间点。 = 租约时间的50%
rebind:renew失败后,重试的时间点。 =租约时间的 85% 左右
expire:过期的时间点
每次续约成功,就会更新一次 /var/lib/dhclient/dhcpd-eth0.lease 租约文件。
最大租约期限
max-lease-time 43200; 最大租约时间(秒)12小时
说明:最大和默认租约时间,机制一样,在客户端没有特殊的租约时间请求的时候,都会
统一的指 派默认租约时间(多数情况)。 如果客户端请求了自定义的租约时间,服务器将会启用最大租约时
间作为限制,客户端自己请求的租约时间不能大于该值。max time
自定义 日志输出路径和级别
update /etc/rsyslog.conf file
# Save boot messages also to boot.log
local7.* /var/log/boot.log ##默认与 boot.log 放在一起,
local2.* /var/log/dhcpd.log ## 自定义独立存放。
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */