网络服务-DHCP
-
DHCP简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个工作在应用层的局域网网络协议,使用不可靠的传输协议UDP工作,通常被应用到大型的局域网络环境中,主要作用是集中管理和分配网络资源,使网络环境中的主机能动态的获取IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
-
DHCP工作原理(租约+续租)
DHCP Client 首先会在局域网内进行广播,寻找DHCP Server,当找到了DHCP Server,DHCP Server就会回复Offer给客户机,客户机则会告诉服务器是否接受,服务器会再次确认。
(通俗来说:求职者在一定区域内海投找工作,当通过简历筛选,公司会先你发来offer邀请,你就会回复是否去面试,面试后,公司会告诉你是否招你)
-
DHCP客户端进行IP请求
当一个DHCP客户机启动时,会自动将自己的IP设置成0.0.0.0缺省ip,由于使用0.0.0.0不能进行正常的通信,所以客户机就必须通过DHCP服务器来获取一个合法的IP地址。由于客户就不知道DHCP服务器的ip地址,所以它使用0.0.0.0作为源地址,255.255.255.255作为目标地址,使用UDP67端口作为目的端口来广播请求IP地址信息。广播信息DHCP Discover中包含了DHCP客户机的MAC地址和计算机名,以便DHCP服务器能确定是哪个客户机发生的请求。
-
DHCP服务器相应请求
当DHCP服务器接收到客户机请求ip地址的信息时,它就会在自己的ip地址池中查找是否有合法的ip地址提供给客户机。如果有,DHCP服务器就会在此ip地址做上标记,加入到DHCP Offer的消息中,然后DHCP服务器就广播一则包括下列信息时DHCP Offer信息:
DHCP客户机的MAC地址;DHCP服务器提供的合法ip地址;子网掩码;默认网关;租约的期限;DHCP服务器的ip地址-MAC.
因为DHCP客户机还没有ip地址,所以DHCP服务器使用自己的ip地址作为源地址,使用255.255.255.255作为目标地址,使用udp端口68作为源端口来广播DHCP Offer信息,对于MAC的DHCP客户机会接收。
-
DHCP客户机选择IP
DHCP客户机从接收到的第一个DHCP Offer消息中选择ip地址,发出该ip地址的DHCP服务器将该地址保留,锁定该地址,这样该地址就不能提供给另一个DHCP客户机。当客户机从第一个DHCP服务器接收到DHCP Offer并选择地址后,DHCP租约的第三过程发生。客户机将DHCP Request消息广播到所有的DHCP服务器,表明它接受提供的内容。DHCP Request消息包括了该客户机提供ip配置的服务器的ip地址,如果那些DHCP Offer被拒绝,则DHCP服务器会取消提供并保留其ip地址用于下一个ip租约的请求。
在客户机选择ip的过程中,虽然客户机选择了ip地址,但是还没有配置ip地址,而在一个网络中,可能有几个DHCP服务器,所以客户机仍然使用0.0.0.0的地址作为源地址,使用255.255.255.255作为目标地址,使用UDP 67端口作为目的端口来广播DHCP Request的信息。
-
DHCP服务器确认租约
服务器确认租约:DHCP ACK
DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功的确认,该消息包含了ip地址的有效租约和其他可能配置的信息。虽然服务器确认了客户机的租约,但是客户机还没有收到DHCP ACK消息,所以服务器仍然使用自己的ip地址作为源地址,使用255.255.255.255作为目标地址,使用UDP 68端口来广播DHCP ACK信息。当客户机接收到DHCP ACK消息时,它就配置了ip地址,完成TCP/IP的初始化。
服务器拒绝租约:DHCP NACK(DHCP NAK)
如果DHCP Request不成功,例如客户机试图租约先前的ip地址,但该ip地址不再可用,或者因为客户机移到了其他的子网,该ip无效时,DHCP服务器将广播否定确认消息DHCP NACK.当客户机收到不超过的确认时,会重新开始DHCP租约的过程。
-
DHCP客户机的续租
DHCP客户机会在租期到50%的时候,直接向为其提供ip地址的DHCP服务器发生DHCP Request消息包,如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就会根据包中所提供的新的租期以及其他新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没有接收到该服务器的回复,则客户机继续使用现有的ip地址,因为还剩下50%租期。
如果在50%时没有更新,则DHCP客户机将在租期到87.5%的时候再次向为其提供ip地址的DHCP服务器联系。如果还是不成功,到最大租期的时候,DHCP客户机就必须放弃这个ip地址,重新申请。
-
准备实验环境(虚拟机中模拟)
两台主机,网络连接模式设为自定义VMnet*模式
防护的关闭:
-
iptables -L #防火墙
-
getenforce #SELinux
setenforce 0
-
关闭vmware虚拟网络编辑器的DHCP功能,重要!!!
-
软件名: | 注释 |
---|---|
dhcp | DHCP服务软件包 |
dhcp-common | DHCP命令软件包(默认已安装) |
服务名: | 注释 |
---|---|
dchpd | DHCP服务名 |
dhcrelay | DHCP中继服务名 |
端口号 | 注释 |
---|---|
udp 67 | 作为客户端的目标端口,接收客户端的请求DHCP请求 |
udp 68 | 作为服务器的源端口,用来向客户端回复数据包 |
配置文件 | 功能 |
---|---|
dhcpd /etc/dhcp/dhcpd.conf | 该文件默认是空的,需要找模板生成 |
dhcpd.conf.sample /user/share/doc/dhcp-4.x.x/dhcpd.conf.sample | DHCP的模板配置文件 |
dhcrelay /etc/sysconfig/dhcrelay | 中继配置文件,中继实验中用到 |
-
DHCP配置文件
subnet 192.168.88.0 netmask 255.255.255.0{ #声明要分配的网段和子网掩码 range 192.168.88.3 192.168.88.254; #声明可用的ip地址池 option domain-name "dddd.com"; #设置DNS域 option domain-name-servers 8.8.8.8; #设置DNS服务器地址 option routers 192.168.88.2; #广播地址(可不写) option broadcast-address 192.168.88.255;#默认租约 单位s default-lease-time 600; #最大租约 单位s max-lease-time 7200; }
yum -y install dhcp
cp -a /usr/share/doc/dhcp-4.x.x/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
#一般是需要自己根据模板自行创建dhcp.conf文件
vim /etc/httpd/httpd.conf
subnet 192.168.88.0 netmask 255.255.255.0{ #声明要分配的网段和子网掩码
range 192.168.88.3 192.168.88.254; #声明可用的ip地址池
option domain-name "dddd.com"; #设置DNS域
option domain-name-servers 8.8.8.8; #设置DNS服务器地址
option routers 192.168.88.2; #广播地址(可不写)
option broadcast-address 192.168.88.255;#默认租约 单位s
default-lease-time 600; #最大租约 单位s
max-lease-time 7200;
}
填写了正确的subnet后,保存配置文件,service dhcpd start 启动DHCP服务,重启客户机的网卡,查看网卡,ip地址已经为地址池分配的了~
重启客户机的网卡命令最好不要使用service network restart 此命令是重启所有网卡,使用ifdown eth0;ifup eth0
为了是计算机重启后不在重新分配地址,我们可以将MAC和ip地址捆绑,固定起来。
获取客户端的mac地址
arp -a #查看客户机的mac地址
修改/etc/dhcp/dhcpd.conf文件
host fantasia{
hardware ethernet mac地址;#客户机的mac地址
fixed-address IP地址; #固定分配给客户机的ip地址
}
重启DHCP服务
service dhcpd restart
重启客户机的网卡验证ip获取是否成功
ifdown eth0;ifup eth0
超级作用域介绍
DHCP服务器可为单个物理网络上的客户端提供多个作用域租约地址
实验步骤
-
设置DHCP服务器的单臂路由所需的网卡关闭客户机的网卡:
service network stop #暂停客户机的网卡 cp -a ifcfg-eth0 ifcfg-eth0:0 #直接复制即可 vim ifcfg-eth0:0 #网卡名和文件名一致,ip地址修改
-
开启路由转发:
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #此项改为1 sysctl -p #刷新内核参数配置文件
-
修改/etc/dhcp/dhcpd.conf文件
#注释掉其它的网段声明和主机声明
shared-network 88-89 { subnet 192.168.88.0 netmask 255.255.255.0 { option routers 192.168.88.101 192.168.88.103; range 192.168.88.10; } subnet 192.168.89.0 netmask 255.255.255.0 { option routers 192.168.89.101 192.168.89.103; range 192.168.89.10; } }
#其他一定要注释掉或者删掉,注意括号!!!
-
重启DHCP服务
service dhcpd restart
- 分别重启两台机器的网卡,查看获取的地址
if down eth0;ifup eth0
单臂路由的服务器地址是静态的网卡分两个地址。
DHCP中继
中继介绍
DHCP Relay (DHCP中继)是一个小程序,可以实现在不同子网和物理网段之间处理和转发dhcp信息的功能。
实验环境准备
DHCP服务器:
eth0(192.168.10.10) vMnet10
DHCP中继:两网卡相当于网关
eth0(192.168.10.20) vMnet10
eth1(100.100.100.20) vMnet11
外网客户机:
eth0(自动获取) vMnet11
注意:需要关闭所以防护
配置DHCP服务器:
软件安装:yum -y install dhcp
修改/etc/dhcp/dhcpd.conf文件:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.110;
option routers 192.168.10.20;
}
subnet 100.100.100.0 netmask 255.255.255.0 {
range 100.100.100.100 100.100.100.110;
option routers 100.100.100.20;
}
重启dhcpd服务:service dhcpd start
指定网关: 两个网卡设置网关为中继器的内网
配置DHCP中继器服务器
网卡配置
软件安装:yum -y install dhcp
修改中继配置文件:
vim /etc/sysconfig/dhcrelay
INTERFACES=“eth0 eth1”
DHCPSERVERS=“192.168.10.10”
开启路由转发
vim /etc/sysctl.conf
netipv4.ip_forward = 1
sysctl -p
重启中继服务:service dhcrelay start
测试外网主机
服务器重启网卡即可