linux基础服务(DHCP)

DHCP篇

DHCP是什么

DHCP,动态主机配置协议(Dynamic host configuration protocol),是一个局域网络协议,使用的是UDP协议工作,是给内部局域网或者网络供应商自动分配IP地址,是给用户或者内部网络的网管来作为所有计算机的中央管理,使用的端口是67(DHCP服务器)、68(DHCP客户端)。

DHCP工作原理

DHCP报文共有一下几种:

1.DHCP DISCOVER :客户端开始DHCP过程发送的包,是DHCP协议的开始
2.DHCP OFFER :服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
3.DHCP REQUEST :客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时 候同样会使用。
4.DHCP ACK :服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
5.DHCP NAK :DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。
6.DHCP RELEASE :一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址
7.DHCP INFORM :客户端发出的向服务器请求一些信息的报文
8.DHCP DECLINE :当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。

知道了DHCP报文后,我们进一步了解DHCP工作原理:

  1. 客户端请求IP地址
       当DHCP客户机需要获取IP时,它会通过UDP 67端口向网络上发出一个DHCP discover数据包(包中包含客户机的MAC地址和计算机名等信息)。因为客户机还不知道自己属于哪一个网络,所以封包的源地址为0.0.0.0,目标地址为255.255.255.255,然后再附上DHCP discover的信息,向网络进行广播。
       DHCP discover的等待时间预设为1秒,也就是当客户机将第一个DHCP discover封包送出去之后,在1秒之内没有得到回应的话,就会进行第二次DHCP discover广播。若一直没有得到回应,客户机会将这一广播包重新发送四次(以2,4,8,16秒为间隔,加上1-1000毫秒之间随机长度的时间)。如果都没有得到DHCP Server的回应,客户机会从169.254.0.0/16这个自动保留的私有IP地址中选用一个IP地址。并且每隔5分钟重新广播一次,如果收到某个服务器的响应,则继续IP租用过程。
  2. 提供IP地址租用
       在客户机请求IP地址时,DHCP discover封包内会带有其MAC地址信息,并且有一个XID编号来辨别该封包,DHCP Server响应的DHCP OFFER封包则会根据这些资料传递给要求租约的客户。
       当DHCP Server监听到客户机发出的DHCP discover广播后,会针对这个客户端的物理地址( MAC)与本身的设置数据进行下列工作:

(1)到服务器的日志文件中查找该用户之前是否曾经租用过某个IP,若有且该IP目前无人使用,则提供此IP给客户端。
(2)若配置文件针对该MAC地址提供特定的固定IP时,则提供该固定的IP给客户端。
(3)若不符合上述两个条件,它会从那些还没有租出去的地址中,选择最前面的空置IP,连同其它TCP/IP设定,通过UDP 68端口响应给客户机一个DHCP OFFER数据包(包中包含IP地址、子网掩码、地址租期等信息)。此时还是使用广播进行通讯,源IP地址为DHCP Server的IP地址,目标地址为255.255.255.255。同时,DHCP Server为此客户保留它提供的IP地址,从而不会为其他DHCP客户分配此IP地址。

  1. 接受IP租约
       如果客户机收到网络上多台DHCP服务器的响应,一般会选择最先到达的DHCP offer,并且会向网络发送一个DHCP request广播数据包(包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等),告诉所有DHCP Server它将接受哪一台服务器提供的IP地址,其他的DHCP服务器撤销它们的DHCP offer
       此时,由于还没有得到DHCP Server的最后确认,客户端仍然使用0.0.0.0为源IP地址,255.255.255.255为目标地址进行广播。同时,客户端还会向网络发送一个ARP封包,查询网络上面有没有其他机器使用该IP地址;如果发现该IP地址已经被占用,客户端则会送出一个DHCP declinet包给DHCP服务器,拒绝接受其DHCP offer,并重新发送DHCP discover信息。
  2. 租约确认
       当DHCP Server接收到客户机的DHCP request之后,会广播返回给客户机一个DHCP ACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。此时租约到期计时开始
  3. 租期到期
       客户机会在租期过去50%的时候,直接向为其提供IP地址的DHCP Server发送DHCP request消息包。如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。
       如果在租期过去50%的时候没有更新,则客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP联系。如果还不成功,到租约到期时,客户机必须放弃这个IP地址,重新申请。如果此时无DHCP可用,客户机会使用169.254.0.0/16中随机的一个地址,并且每隔5分钟再进行尝试。
       但目前的DHCP客户端程序大多数会主动依据租约时间去重新申请IP,所以即使有租约期限,也不需要在某个时间点手动去重新申请IP。

DHCP三种分配机制

分配类型作用
自动分配(automatic allocation)Dhcp服务器为指定的客户机指定永久性的IP地址,只要DHCP的客户机成功地从DHCP服务器端租用到了IP地址,那么就能永久使用这个地址。
动态分配(dynamic allocation)DHCP服务器端给主机指定一个具有时间限制的IP地址,当到期后或者说客户机主动表示放弃该地址的时候,那么原先给他的地址就可能分配给其他的客户机使用。这种方式,在原来的拨号上网的时候经常使用到。只有这种分配方式是可以重复使用从某个客户端机器上淘汰的IP地址的。
手动分配(manual allocation)由网络管理员来指定客户端的IP地址是多少。这个时候DHCP所做的工作仅仅只是将网络管理员分配的IP地址告诉客户机。

搭建DHCP

yum安装dchp服务

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

查看生成的配置文件

[root@localhost ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example  --这个是模板文件所在路径,我们一般将该文件覆盖到该配置文件中就行配置
#   see dhcpd.conf(5) man page  --也可以使用man手册寻求帮助
#
[root@localhost ~]# 

将模板文件内容覆盖到dhcp.conf配置文件中

[root@localhost ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf   -- 查看到该文件内容已经改变
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;
......

接下来我们就可以修改配置文件来实现DHCP分配IP

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf 

在配置文件中找到以下内容:

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "example.org";           				  --编辑域名
option domain-name-servers ns1.example.org, ns2.example.org;  --编辑为当前本机的IP地址

default-lease-time 600;										  --设置最短租约时间
max-lease-time 7200;										  --设置最长租约时间
# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {        --设定分配给客户机的网段(当前这台服务器网段)
# 在{}中添加以下大致内容
		range 0.0.0.0 0.0.0.0;                     --设置客户机获得的ip地址范围                              
		option subnet-mask 255.255.255.0;		   --设置子网掩码
		option routers 0.0.0.0;					   --设置网关地址
}

# This is a very basic subnet declaration.

以192.168.1.0网段为例:

option domain-name "haha.com";				--域名设置为haha.com
option domain-name-servers 192.168.1.10;	--该服务器IP为192.168.1.10

default-lease-time 60000;					--最短租约为60000秒
max-lease-time 720000;						--最长租约为720000秒

subnet 192.168.1.0 netmask 255.255.255.0 {    --分配给客户端的网段为1.0网段
        range 192.168.1.20 192.168.1.30;	  --分配给客户端的IP范围为1.20-1.30
        option subnet-mask 255.255.255.0;	  --子网掩码为255.255.255.0
        option routers 192.168.1.1;			  --网关为1.1
}

修改完毕后,重启服务
如果报错,请自行查看配置文件内容是否配置正确

[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# 

配置完毕后,需要将dhcp服务加入防火墙放行策略(客户端和服务器都要)

[root@localhost ~]# firewall-cmd --add-service=dhcp				--配置dhcp临时放行策略
success
[root@localhost ~]# firewall-cmd --add-service=dhcp --permanent --永久放行(如果没有配置临时需重启系统)
success
[root@localhost ~]# firewall-cmd --list-all						--获取当前防火墙策略列表
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcp dhcpv6-client ssh								--可以看到有dhcp,说明以加入放行策略
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
[root@localhost ~]# 

服务器配置完成,到客户端进行简单配置(服务器和客户端必须在用一个网卡中):
在ifcfg-ens33配置文件中将BOOTPROTO(IP获取方式)修改为dhcp获取

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes

重启network服务后
客户端使用命令dhclient -d获取DHCP分配的IP地址

[root@localhost ~]# dhclient -d
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:e7:7b:0e
Sending on   LPF/virbr0-nic/52:54:00:e7:7b:0e
Listening on LPF/virbr0/52:54:00:e7:7b:0e
Sending on   LPF/virbr0/52:54:00:e7:7b:0e
Listening on LPF/ens33/00:0c:29:e9:b5:92
Sending on   LPF/ens33/00:0c:29:e9:b5:92
Sending on   Socket/fallback
DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 7 (xid=0xd551836)
DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 5 (xid=0x5f625df4)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x291f6dab)
DHCPNAK from 192.168.200.254 (xid=0x291f6dab)
DHCPDISCOVER on ens33 to 255.255.255.255 port 67 interval 8 (xid=0x49d731ce)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x49d731ce)
DHCPOFFER from 192.168.1.10
DHCPNAK from 192.168.200.254 (xid=0x49d731ce)
DHCPACK from 192.168.1.10 (xid=0x49d731ce)
bound to 192.168.1.20 -- renewal in 2775 seconds.     --可以看出,获取到了192.168.1.20IP地址

ifconfig查看IP

[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255

我们也可以做保留地址,将指定IP保留给指定客户端
在配置文件中找到以下内容进行修改

# will still come from the host declaration.

host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;       --设置要保留客户端的MAC地址
  fixed-address 192.168.1.25;              --设置要保留分配的IP地址					
  server-name "haha.com";				   --域名
}

重启服务之后,在客户端使用命令获取

[root@localhost ~]# dhclient -d
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/virbr0-nic/52:54:00:e7:7b:0e
Sending on   LPF/virbr0-nic/52:54:00:e7:7b:0e
Listening on LPF/virbr0/52:54:00:e7:7b:0e
Sending on   LPF/virbr0/52:54:00:e7:7b:0e
Listening on LPF/ens33/00:0c:29:e9:b5:92
Sending on   LPF/ens33/00:0c:29:e9:b5:92
Sending on   Socket/fallback
DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 7 (xid=0x453c093e)
DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 3 (xid=0x560d9223)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x63786751)
DHCPDISCOVER on virbr0 to 255.255.255.255 port 67 interval 8 (xid=0x560d9223)
DHCPDISCOVER on virbr0-nic to 255.255.255.255 port 67 interval 11 (xid=0x453c093e)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x63786751)
DHCPNAK from 192.168.200.254 (xid=0x63786751)
DHCPDISCOVER on ens33 to 255.255.255.255 port 67 interval 7 (xid=0x17c2455a)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x17c2455a)
DHCPOFFER from 192.168.1.10
DHCPNAK from 192.168.200.254 (xid=0x17c2455a)
DHCPACK from 192.168.1.10 (xid=0x17c2455a)
bound to 192.168.1.25 -- renewal in 2948 seconds.      --看到这个地方是获取到我们保留的地址
  

如果相要了解更多dhcp知识,参考链接:
链接:DHCP详解
链接:DHCP工作原理
链接:Linux基础DHCP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值