设为首页 收藏本站
查看: 620|回复: 0

[经验分享] 详解DHCP服务安装与管理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-2 09:03:38 | 显示全部楼层 |阅读模式
一、DHCP是什么

    名称:DHCP – Dynamic Host Configuration Protocol 动态主机配置协议
    功能:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:
    1、 给内部网络或网络服务供应商自动分配IP地址,主机名,DNS服务器,域名
    2、 配和其它服务,实现集成化管理功能。如:无人执守安装服务器

DHCP是一个C/S架构的协议,DHCP服务器端使用UDP的67号端口; DHCP 客户端使用UDP的68号端口。
为什么使用DHCP

    ①DHCP服务器用于为客户机动态分配IP地址,避免了TCP/IP网络中地址的冲突,便于对网络的IP地址进行管理;
    ②在使用TCP/IP协议通信的网络中,每台计算机都必须至少有一个IP地址,这样才能与其他计算机通信。对于一个较大规模的网络来说,逐个地为每台计算机分配和设置IP地址,将是一件很麻烦的事情,也不便于管理和维护;
    ③对于像笔记本这样的移动用户,经常从一个子网移动到另一个子网,需要不断地手动更换IP地址,很不方便;
    ④DHCP服务器通过动态的IP地址分配还能解决IP地址资源不足的情况,因此DHCP产生了。

二、DHCP工作原理(C/S)

我们看下面的图,客户端从DHCP服务器获取IP地址的过程我们称为DHCP租约过程,分为四个步骤:
wKiom1gYdKnTAQe-AABFNdtE_kg586.jpg
1、客户发出的IP租用请求报文

    DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCP DISCOVER广播包,请求租用IP地址。该 广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。

2、DHCP Server回应的IP租用提供报文

    任何接收到DHCP DISCOVER广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户机回应一个DHCP OFFER广播包,提供一个IP地址。该广播包的源IP地址为DHCP服务器IP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。

3、客户选择IP租用报文

    客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCP OFFER包,并向网络中广播一个 DHCP REQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。该广播包中包含所接受的IP地址和服务器的IP地址。 所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。

4、DHCP服务器发出IP租用确认报文

    被客户机选择的DHCP服务器在收到DHCP REQUEST广播后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。

5、客户配置成功后发出的公告报文

    客户机在收到DHCP ACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。至此一个客户获取IP的DHCP服务过程基本结束,不过客户获取的IP一般是用租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。

注意:客户端执行DHCP DISCOVER 后,如果没有DHCP 服务器响应客户端的请求,客户端会随机使用169.254.0.0/16 网段中的一个IP 地址,配置本机地址。

169.254.0.0/16是windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。
客户IP租用更新报文,由于IP是“租”来的,所以是有租期的:

    (1)在当前租期已过去50%时,DHCP客户机直接向为其提供IP地址的DHCP服务器发送DHCP REQUEST消息包。如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。
    (2)如果在租期过去50%时未能成功更新,则客户机将在当前租期过去87.5%时再次向为其提供IP地址的DHCP联系。如果联系不成功,则重新开始IP租用过程。
    (3)如果DHCP客户机重新启动时,它将尝试更新上次关机时拥有的IP租用。如果更新未能成功,客户机将尝试联系现有IP租用中列出的缺省网关。如果联系成功且租用尚未到期,客户机则认为自己仍然位于与它获得现有IP租用时相同的子网上(没有被移走)继续使用现有IP地址。 如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。

    总结
    50%:续约。(续不上继续用)
    87.5%:再次续约。(续不上找别人)
    DHCP工作站除了在开机的时候发出 DHCPrequest 请求之外,在租约期限一半的时候也会发出 DHCPrequest ,如果此时得不到 DHCP服务器的确认的话,工作站还可以继续使用该IP;当租约期过了87.5%时,如果客户机仍然无法与当初的DHCP服务器联系上,它将与其它 DHCP服务器通信。如果网络上再没有任何DHCP协议服务器在运行时,该客户机必须停止使用该IP地址,并从发送一个Dhcpdiscover数据包开 始,再一次重复整个过程。要是您想退租,可以随时送出 DHCPRELEASE 命令解约,就算您的租约在前一秒钟才获得的。

什么是中继(建议不要用)

    设想一个场景:一个公司有A和B两个网络,但是不想给每个网络都分配一个DHCP服务器,只想用一个DHCP服务器完成地址的分配,该怎么办呢?此时就可以用到中继了,将DHCP服务器放到A网络中,配置一个地址池,用于给A网络分配地址,然后配置一个中继地址池,用于给B网络分配地址。之后在路由器(直连A-B)上,配置一个中继,当B网络的客户机发起DHCP的请求时,路由器就将请求发给A网络的DHCP服务,DHCP服务器将请求响应给路由器,路由器再响应给B网络。(注意:此过程路由器和DHCP服务器间是单播通信,路由器和B网络的主机为广播通信)。

三、DHCP配置
1、安装 dhcp

[iyunv@localhost ~]# yum -y install dhcp

2、dhcp主文件列表

[iyunv@localhost ~]# rpm -ql dhcp
/etc/dhcp/dhcpd.conf                # dhcp 配置文件
/etc/rc.d/init.d/dhcpd              # dhcp 服务启动脚本
/etc/rc.d/init.d/dhcrelay           # dhcp中继 服务启动脚本
/etc/sysconfig/dhcpd                # 服务脚本配置文件
/usr/sbin/dhcpd                     # dhcp 程序,可执行文件
/usr/sbin/dhcrelay                  # dhcp中继程序,可执行文件

3、配置文件详解

[iyunv@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#

    提示说配置文件在 /usr/share/doc/dhcp*/dhcpd.conf.sample, 那么我们把它复制到/etc/dhcp目录,并改名为 dhcpd.conf :

[iyunv@localhost ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
cp: overwrite `/etc/dhcp/dhcpd.conf'? y

配置文件主要分为四个部分:

option               #定义全局参数

subnet Netaddress netmask NETMask{  #定义子网
}

host NAME {          #主机配置,分配固定IP
}

log-facility         #定义dhcp 日志信息

    1、每一行必须以分号 ; 结尾。只能通过/var/log/messages文件查看是否有错误
    2、全局参数对全局生效,当全局配置与局部配置冲突时,局部参数将覆盖全局参数。
    3、局部配置必须包含在 花括号 中,其他都是全局配置

常用指令介绍:

指令                    说明
domain-name             指定域名
domain-name-servers     DNS服务器地址
routers                 默认网关
default-lease-time      默认租约期限
max-lease-time          最大租约期限
log-facility            日志
subnet                  定义子网
range                   定义地址池
host                    保留主机地址
filename                指定PXE文件
server-name             服务器名称
fixed-address           固定IP地址

配置文件:
全局配置

#option domain-name "mageedu.com";          #定义域名为test.org,这个没用,一般都注释掉
option domain-name-servers 192.168.211.128;   #定义DNS服务器为172.16.0.1,多个以逗号分隔
default-lease-time 600;    #定义默认租约期限,这里为600秒
max-lease-time 7200;       #定义最大租约期限,这里为7200秒

### 日志信息
log-facility local7;       #日志为faility local7;可以看/etc/rsyslog.conf,这里不解释

### 子网选项
subnet 192.168.211.0 netmask 255.255.255.0 {    # 子网声明
#定义了一个子网192.168.211.0/24,注意,这个地址池一定要和你服务器的IP在同一网段,即使是中继,也要至少有一个本地子网段!
  192.168.211.240 192.168.211.245;    #地址池从192.168.211.240到192.168.211.245;以空格分割
  option domain-name-servers 114.114.114.114,192.168.211.128;  #定义DNS服务器
  option routers 192.168.211.128;         #定义网关为192.168.211.128
  option broadcast-address 192.168.211.255;   #定义广播地址为192.168.211.255
  default-lease-time 86400;     #定义默认IP 租约时间,以秒为单位的租约时间。
  max-lease-time 86400;         #定义客户端IP租约时间的最大值,当客户端超过租约时间,却尚未更新IP 时,最长可以使用该IP 的时间;
}

### 主机选项,保留地址(有时我们需要为某些主机配置固定IP地址,host选项满足这一需求)
host server1 {                        #定义一个名为server1的主机
    option routers 192.168.211.128;     #定义网关
    option domain-name-servers 192.168.211.128;  #定义域名服务器
    option broadcast-address 192.168.211.255;   #定义广播地址
    filename "vmunix.passacaglia";     #指向一个文件,用于PXE
    server-name "cobbler.mageedu.com";   #通知客户端dhcp服务器名字
    hardware ethernet 0:0:c0:5d:bd:95;   #声明了server1这个主机的MAC地址
    fixed-address 192.168.211.133;   #定义这个主机的固定ip地址为192.168.211.133
}

## 绑定pc1主机ip地址配置
host pc1 {
     hardware ethernet 00:a0:cc:cf:9C:14;   #客户端MAC地址
     fixed-address 192.168.1.20;            #客户端要获取的地址
}

没有写在subnet或host中的选项是全局选项,也就是默认值,当host或者subnet中没有定义的时候生效。当内部定义后,则匹配最精确的,也就是自身定义的。

如果DHCP服务器是多网卡,还需要配置dhcpd监听网卡:

[iyunv@localhost ~]# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth0   #绑定网卡名称

4、启动 dhcp 服务

[iyunv@localhost ~]# service dhcpd start

5、查看监听端口

[iyunv@localhost ~]# ss -tulpn | grep dhcp
udp    UNCONN     0      0                      *:67                    *:*      users:(("dhcpd",27249,7)

6、查看租约信息

    作为服务器端的租约文件:/var/lib/dhcpd/dhcpd.leases
    作为客户端的租约文件: /var/lib/dhclient/dhclient-eth0.leases

租期数据库

    在 DHCP 服务器上,/var/lib/dhcp/dhcpd.leases 文件中存放着 DHCP 的客户租期数据库。该文件不应该被手工修改。每个新近分配的 IP 地址的 DHCP 租期信息都会自动储存在租期数据库中。该信息包括租期的长度;IP 地址被分配的对象;租期的开始和终止日期;以及用来检索租期的网卡的 MAC 地址。
    租期数据库中所用的时间是格林威治标准时间(GMT),不是本地时间。
    租期数据库不时被重建,因此它不算太大。首先,所有已知的租期会被储存到一个临时的租期数据库中,dhcpd.leases 文件被重命名为 dhcpd.leases~,然后,临时租期数据库被写入 dhcpd.leases 文件。
    在租期数据库被重命名为备份文件,新文件被写入之前,DHCP 守护进程有可能被杀死,系统也有可能会崩溃。如果发生了这种情况,启动服务所需的dhcpd.leases 文件就不会存在。这时,请不要创建新租期文件。因为这样做会丢失所有原有的旧租期文件,从而导致更多问题。正确的办法是把dhcpd.leases~ 备份文件重命名为 dhcpd.leases,然后再启动守护进程。

配置dhcp中继

1)在dhcp服务器上的主配置文件/etc/dhcp/dhcpd.conf中添加需要中继的subnet并重启dhcp服务
2)在中继服务器上开启包转发功能

[iyunv@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[iyunv@localhost ~]# sysctl -p    #更新配置文件

3)在中继服务器上的配置文件/etc/sysconfig/dhcrelay中添加参数

[iyunv@localhost ~]# vim /etc/sysconfig/dhcrelay
INTERFACES="eth0 eth1"            #声明你要使用哪几块网卡中继
DHCPSERVERS="192.168.211.128"        #指定dhcp服务器

4)在中继服务器上启动中继服务

[iyunv@localhost ~]# service dhcprelay start

配置DHCP客户端

    通常网管员使用选择手工配置 DHCP 客户,需要修改/etc/sysconfig/network 文件来启用联网;并修改/etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做ifcfg-eth?的配置文件,eth?是网络设备的名称。如eth0等。如果你想在引导时启动联网,NETWORKING变量必须设为 yes。除了此处之外/etc/sysconfig/network 文件应该包含以下行:

NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

测试:

    在 dhcp 服务器上, tail -f /var/log/messages , 可以看到dhcp分配的详细信息。
    cat /var/lib/dhcpd/dhcpd.leases 也可以看到分配的租期数据库。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294550-1-1.html 上篇帖子: MQ-RabbitMq部署安装配置 下篇帖子: 【SSH权限故障】 报错信息:Connection closed by
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表