DHCP服务器

一、DHCP服务简介

1. DHCP服务简介

DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,DHCP 协议主要是用来自动为局域网中的客户机分配TCP/IP 信息的网络协议,并完成每台客户机的TCP/IP 协议配置。当我们将局域网中客户机IP地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户机自动分配IP地址,使得客户机能够使用这个IP地址。

DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHCP比BOOTP更加复杂,功能更强大。所有的IP网络参数(包括IP地址、网关和DNS服务器地址等)都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配的IP网络参数。

2. 使用DHCP的优点

• 减少管理员的工作量;

• 避免IP冲突;

• 减少收入错误的可能;

• 能方便地更改网络的IP网段;

• 移动计算机后不用重新配置网络信息;

• 提高IP地址的利用率。

3. DHCP的工作过程(面试经常会被问到)

DHCP Client发现阶段:

即DHCP客户端寻找DHCP服务端的过程,对应于客户端发送DHCP Discovery,因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。

注意:客户端执行DHCP DISCOVER 后,如果没有DHCP 服务器响应客户端的请求,客户端会随机使用169.254.0.0/16 网段中的一个IP 地址配置本机地址。看到这个网断的ip,你的DHCP就已经有问题了。

169.254.0.0/16是windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段。

早先的Linux上并不会产生这条路由,现在有这条路由大概是为了和windows兼容。

[root@localhost default]# route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

192.168.1.0 0.0.0.0 255.255.255.224 U 0 0 0 eth1

172.17.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0

169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0

0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0

DHCP Server 提供阶段:

DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPdiscover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer提供信息

DHCP Client 确认阶段:

即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCPoffer提供信息,则DHCP客户机只接受第一个收到的DHCPoffer提供信息,然后它就以广播方式回答一个DHCPrequest请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址

DHCP Server确认阶段:

即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCPrequest请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址

DHCP Client重新登录网络:

当DHCP Client重新登录后,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

DHCP Client更新租约:

DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新租约。更新的方式就是,当当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。

为了便于理解,我们把DHCP客户机比做餐馆里的客人,DHCP服务器工作原理当中,服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:客人走进餐馆,问:“有没有服务员啊?”(DHCP discover),多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCP offer)。客人说:“好吧,我要一份汉堡”(DHCP request,这个客人比较死板,总是选择第一次听到的食物),端着汉堡的服务员回应了一声:“来啦”(DHCP ack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCP request),如果还有汉堡,服务员会再次确认并上菜(DHCP ack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCP nack)。当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

4. DHCP客户机自动更新IP租约

客户机租约期限已过去50%,自动尝试更新租约;当期限过去87.5% 时,发出广播再次更新租约;若租约已经到期(100%),客户机必须立即停止使用当前的IP地址。然后客户机开始新的DHCP租约过程,尝试租用新的IP地址。

二、系统环境

系统平台: CentOS 7.3

DHCP Server: 172.17.1.150

更改主机名,写/etc/hosts记录

# vim /etc/hosts

172.17.1.150 DHCP --最后添加DHCP服务器IP地址和主机名/别名

关闭防火墙

# systemctl stop firewalld --临时关闭防火墙

# systemctl disable firewalld --永久关闭防火墙

关闭selinux

临时关闭:

# setenforce 0

永久关闭:

# vim /etc/selinux/config

SELINUX=disabled --将enforcing改为disabled

# reboot --重启系统永久生效

三、CentOS下的DHCP服务

准备两台机器,一台作为DHCP服务器,一台作为客户机,如下图:

1. 在服务器上安装DHCP软件包

[root@localhost default]# yum -y install dhcp* --安装dhcp软件包

如果已经安装过了,则显示“无须任何处理”

安装好后,配置文件目录:/etc/dhcp/dhcpd.conf

分给客户端IP的记录文件:/var/lib/dhcpd/dhcpd.leases

2. 配置DHCP

把系统默认的样例复制到/etc/dhcp/dhcpd.conf文件里

[root@localhost default]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

cp:是否覆盖"/etc/dhcp/dhcpd.conf"?y --输y覆盖原文件

[root@localhost default]# vim /etc/dhcp/dhcpd.conf --修改配置文件

7 option domain-name "example.org"; --DNS域名

8 option domain-name-servers ns1.example.org, ns2.example.org; --DNS的域服务器

9

10 default-lease-time 600; --默认的租约时间,秒为单位

11 max-lease-time 7200; --最大的租约时间,秒为单位

14 #ddns-update-style none; --表示要不要把IP地址的更新情况告诉DNS服务器,默认是关闭的

22 log-facility local7; --定义日志服务,可以在日志配置文件中查看具体日志位置,默认是:/var/log/boog.log,但是在/var/log/messages里面也会记录dhcp日志

47 subnet 192.168.1.0 netmask 255.255.255.0 { --分配的网段及子网掩码,代表只在192.168.8.x这个C类网段里生效,子网掩码设为255.255.255.0

48 range 192.168.1.100 192.168.1.200; --代表给客户机分配可用的IP范围,起始到结束,尽量不要包含DHCP服务器的IP地址

49 option domain-name-servers 192.168.1.1; --配置要分配给客户端的DNS地址,这里我们设为DHCP服务器的IP地址

50 option domain-name “yunweimao.org"; --DNS的域名

51 option routers 192.168.1.1; (改为自己本机的路由地址,否则服务器连不上) --配置分配给客户机的路由网关,这里我们设为DHCP服务器的IP地址

52 option broadcast-address 192.168.1.255; --给客户机指定广播地址,配置192.168.8.x这个网段的广播地址

53 default-lease-time 600; --指定租约时间,秒为单位

54 max-lease-time 7200; --指定最大租约时间,秒为单位

55 }

75 host fantasia { --将MAC地址和IP绑定,host后面的名字随意,如:fantasia

76 hardware ethernet 08:00:07:26:c0:a5; --MAC地址

77 fixed-address fantasia.fugue.com; --IP地址

78 }

85 class "foo" { --定义多个子网,class后面写组名

86 match if substring (option vendor-class-identifier, 0, 4) = "SUNW";

87 }

88

89 shared-network 224-29 { --定义多个子网,要从大往小写

90 subnet 10.17.224.0 netmask 255.255.255.0 {

91 option routers rtr-224.example.org;

92 }

93 subnet 10.0.29.0 netmask 255.255.255.0 {

94 option routers rtr-29.example.org;

95 }

96 pool {

97 allow members of "foo";

98 range 10.17.224.10 10.17.224.250;

99 }

100 pool {

101 deny members of "foo";

102 range 10.0.29.10 10.0.29.230;

103 }

104 }

修改红色标注位置就可以了,修改完成之后,保存退出。

[root@localhost default]# ifconfig eth1 192.168.1.0 broadcast 192.168.1.255 netmask 255.255.255.224 #给eth1配置ip

[root@localhost default]# vim /etc/sysconfig/dhcpd #指定网卡eth1

# Command line options here

DHCPDARGS=eth1

结果展示:

[root@localhost default]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 02:00:5e:f7:03:9d brd ff:ff:ff:ff:ff:ff

inet 172.17.1.150/20 brd 172.17.15.255 scope global eth0

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 02:00:05:1c:00:2b brd ff:ff:ff:ff:ff:ff

inet 192.168.1.0/27 brd 192.168.1.255 scope global eth1

3、启动DHCP服务

[root@localhost default]# service dhcpd restart --重启DHCP服务

[root@localhost default]# netstat -anlp|grep dhcpd --查看dhcp服务端口为67

4、来到客户机验证

把客户端机的网卡配置成dhcp,再重启网络服务

[root@localhost default]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth1

[root@localhost network-scripts]# vim ifcfg-eth1

TYPE="Ethernet"

PROXY_METHOD="none"

BROWSER_ONLY="no"

BOOTPROTO="dhcp" ##改成dhcp模式

DEFROUTE="yes"

IPV4_FAILURE_FATAL="no"

NAME="ens35"

UUID="5e02ab66-a084-404a-bb4c-50bf47bd1bd5"

DEVICE="ens35"

ONBOOT="yes"

重启网卡:

[root@localhost network-scripts]# ifdown eth1 && ifup eth1

然后发现主机会自动获取IP地址。

打开日志文件查看分配的IP地址

服务器:

# tail -f /var/log/messages --在服务器上监听日志

客户机:

打开两个终端窗口:一个查看日志,一个重启网络。

查看日志

# tail -f /var/log/messages

重启网络

# systemctl restart NetworkManager --重启这个服务,每次重启网络服务时,系统都会重新去DHCP服务器上获取IP地址

查看IP

# ifconfig --查看IP

查看网关

# route -n | grep UG --查看网关

查看路由

# cat /etc/resolv.conf --查看路由

5、如果要把客户机分配的IP给固定的话,可以在服务器做如下配置

[root@localhost network-scripts]# vim /etc/dhcp/dhcpd.conf --分给客户机IP的记录文件

在文件的最下面加上下面一段代码即可

75 host Client { --host后面接的是客户机主机名称,可以自定义,建议为主机名

76 hardware ethernet 00:0c:29:82:6f:db; --代表客户机的物理MAC地址

77 fixed-address 192.168.8.40; --代表如果有遇到物理MAC地址为上面一行的,则分配这行的IP给它

78 }

[root@localhost network-scripts]# service dhcpd restart --重启DHCP服务

测试,重复第4步

6、客户机获取IP

先清除客户机IP地址缓存

[root@localhost network-scripts]# service network restart --重启这个服务,每次重启网络服务时,系统都会重新去DHCP服务器上获取IP地址

本文分享自微信公众号 - 运维猫(centos15),作者:胡齐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • samba服务

    摘选自:朋友杰哥的微信公众号:(杰哥的IT之旅)里面很多干货,感兴趣的小伙伴可以关注下。

    胡齐
  • LVS集群-DR模式

    director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半...

    胡齐
  • Tomcat安装部署

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和...

    胡齐
  • 计算机网络中这些高频考题,你还在死记硬背吗?(三)

    上期《计算机网络中这些高频考题,你还在死记硬背吗?(二)》中,首先介绍了局域网、路由器、IGP协议、EGP协议、RIP协议、OSPF协议、DHCP协议的概念,然...

    C you again
  • DHCP介绍及H3C配置DHCP

    1.DHCP引入 (1)简介 DHCP(动态主机设置协议)是一个局域网的网络协议,使用UDP协议工作,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态...

    py3study
  • 第21章 DHCP

    1.在TCP/IP协议族中,应用层的各种服务是建立在传输层提供服务的基础上,下列哪组协议需要使用传输层的TCP建立连接()。

    week
  • 计算机网络之网络层- 动态主机配置协议(DHCP)

    动态分配: 动态主机配置协议来分配。动态主机配置协议(Dynamic Host Configuration Protocol , DHCP)

    越陌度阡
  • 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识

    本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP的学习,需要大...

    armfly
  • 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

    Vamei
  • 如何在 Debian 中安装 DHCP 服务器

    动态主机配置协议(DHCP)是一种用于使主机能够从服务器自动分配 IP 地址和相关的网络配置的网络协议。DHCP 服务器分配给 DHCP 客户端的 IP 地址处...

    Debian社区

扫码关注云+社区

领取腾讯云代金券