DHCP原理及配置
2015-11-19 22:38
681 查看
DHCP全称为动态主机配置协议(Dynamic Host Configure Protocol)。从名字我们就可以看出来,这是一个动态的配置主机的协议。DHCP是用来实现给主机自动分配IP地址,从而来减轻网络管理员手动配置IP地址的繁琐。当我们面临几十台的主机还无法体现出这个“繁琐”,但当我们面临一个企业几百台或者是IDC机房上千台主机的时候,你就感受到痛苦了。
DHCP是一个C/S(C:客户端,S:服务器端)架构的协议,所以需要提供一个DHCP服务器,在Linux中,DHCP的服务器端软件是DHCPD。DHCP是UDP协议,与其他协议有所不同,DHCP协议可能是双向通信的,所以客户机和服务器端都需要各自监听一个端口,来完成协议通信:服务端为67,客户端为68。(注:DHCP是由bootp协议的升级版。)
客户机从DHCP获取IP地址的过程我们称为DHCP租约过程,分为四个步骤:
接下来我们通过抓包的方式详细谈一谈这四个步骤:
1.客户端请求IP地址:
客户机发起一个DHCP Discover包,用来请求IP地址:
继续进一步分析这个Discover包,可以看到:
1)目标MAC地址为广播地址(Destination:ff:ff:ff:ff:ff:ff),源MAC地址为客户机MAC地址(Source:00:0c:29:97:15:cb)。
2)目标IP地址为广播地址(Destination:255.255.255.255),源IP地址为0.0.0.0。
3)目标端口为67,源端口为68
2.服务器响应客户机请求:
服务器发送一个DHCP Offer包,响应客户机的请求:
继续进一步分析DHCP Offer包,可以看到:
1)源MAC地址为DHCP服务器的地址(08:10:78:20:99:20),目标MAC地址为广播地址(ff:ff:ff:ff:ff:ff)
2)源IP地址为DHCP服务器的地址(172.16.100.1),目标IP地址为广播地址(255.255.255.255)
3)源端口号为服务器端端口号(67),目标端口号为客户端端口号(68)
4)分配给客户机的IP地址是172.16.100.35/255.255.255.0
5)租约为1天
3.客户端回应(选择IP地址)
客户端回应一个DHCP Request包,选择IP地址:
进一步分析DHCP Request包:
1)源MAC地址为客户机地址,目标MAC为广播地址
2)源IP地址为0.0.0.0,目标IP为广播地址
3)源端口为68,目标端口为67
4)请租的IP地址为172.16.100.35
4.服务器确认
服务器响应一个ACK/NACK(如果IP可用,服务器就回应一个ACK包,其中包含租约等信息;如果IP不可用,服务器就回应一个NACK包,表明此IP不可用),这里为ACK包。
进一步分析ACK包:
1)源MAC地址为服务器地址,目标MAC为广播地址 2)源IP地址为0.0.0.0,目标IP为广播地址 3)源端口为67,目标端口为68 4)出租的IP地址为172.16.100.35/255.255.255.0 5)租约为1天
至此,客户机获取到了IP地址。
由于这个IP是“租”来的,所以是有租期的,正如上面看到了,我这里的起始租约是1天。当租约达到50%的时候,客户机就会联系服务器续约,续约后服务器将此IP的使用期限重置为1天。如果在租约达到50%的时候,客户机无法联系到服务器,那么就会继续使用到当前时间的50%(也就是总体租约达到75%),以此类推,最后当租约已使用了87.5%还无法联系到服务器时候,客户机认为该DHCP服务器已经无效,重新发起Discover获取IP的请求。
上面提到中继。设想一个场景:一个公司有A和B两个网络,但是不想给每个网络都分配一个DHCP服务器,只想用一个DHCP服务器完成地址的分配,该怎么办呢?此时就可以用到中继了,将DHCP服务器放到A网络中,配置一个地址池,用于给A网络分配地址,然后配置一个中继地址池,用于给B网络分配地址。之后在路由器(直连A-B)上,配置一个中继,当B网络的客户机发起DHCP的请求时,路由器就将请求发给A网络的DHCP服务,DHCP服务器将请求响应给路由器,路由器再响应给B网络。(注意:此过程路由器和DHCP间是单播通信,路由器和B网络的主机为广播通信)。这个就是中继,这个我这里就不讲了,如果大家想了解的话,自行搜索。
-------------------------------------------- 一条分割线-------------------------------------------------
配置部分:
1.安装dhcp包:
根据上面内容我们看到,dhcp的配置文件在/etc/dhcp这个目录中:
1.总体分为四个部分:
option #定义全局参数
subnet Netaddress netmask NETMask{ #定义子网
}
host NAME { #主机配置
}
log-facility #定义dhcp自身运行参数
2.每个参数以分号(';')结尾。
3.全局参数对全局生效,局部参数高于全局参数;
4.DHCP常用参数详解:
为了方便起见,我这里是一个简化的dhcp的配置文件(包含了会用到的所有的信息):
没有写在subnet或host中的选项是全局选项,也就是默认值,当host或者subnet中没有定义的时候生效。当内部定义后,则匹配最精确的,也就是自身定义的。
5.启动dhcp:
DHCP是一个C/S(C:客户端,S:服务器端)架构的协议,所以需要提供一个DHCP服务器,在Linux中,DHCP的服务器端软件是DHCPD。DHCP是UDP协议,与其他协议有所不同,DHCP协议可能是双向通信的,所以客户机和服务器端都需要各自监听一个端口,来完成协议通信:服务端为67,客户端为68。(注:DHCP是由bootp协议的升级版。)
客户机从DHCP获取IP地址的过程我们称为DHCP租约过程,分为四个步骤:
接下来我们通过抓包的方式详细谈一谈这四个步骤:
1.客户端请求IP地址:
客户机发起一个DHCP Discover包,用来请求IP地址:
继续进一步分析这个Discover包,可以看到:
1)目标MAC地址为广播地址(Destination:ff:ff:ff:ff:ff:ff),源MAC地址为客户机MAC地址(Source:00:0c:29:97:15:cb)。
2)目标IP地址为广播地址(Destination:255.255.255.255),源IP地址为0.0.0.0。
3)目标端口为67,源端口为68
2.服务器响应客户机请求:
服务器发送一个DHCP Offer包,响应客户机的请求:
继续进一步分析DHCP Offer包,可以看到:
1)源MAC地址为DHCP服务器的地址(08:10:78:20:99:20),目标MAC地址为广播地址(ff:ff:ff:ff:ff:ff)
2)源IP地址为DHCP服务器的地址(172.16.100.1),目标IP地址为广播地址(255.255.255.255)
3)源端口号为服务器端端口号(67),目标端口号为客户端端口号(68)
4)分配给客户机的IP地址是172.16.100.35/255.255.255.0
5)租约为1天
3.客户端回应(选择IP地址)
客户端回应一个DHCP Request包,选择IP地址:
进一步分析DHCP Request包:
1)源MAC地址为客户机地址,目标MAC为广播地址
2)源IP地址为0.0.0.0,目标IP为广播地址
3)源端口为68,目标端口为67
4)请租的IP地址为172.16.100.35
4.服务器确认
服务器响应一个ACK/NACK(如果IP可用,服务器就回应一个ACK包,其中包含租约等信息;如果IP不可用,服务器就回应一个NACK包,表明此IP不可用),这里为ACK包。
进一步分析ACK包:
1)源MAC地址为服务器地址,目标MAC为广播地址 2)源IP地址为0.0.0.0,目标IP为广播地址 3)源端口为67,目标端口为68 4)出租的IP地址为172.16.100.35/255.255.255.0 5)租约为1天
至此,客户机获取到了IP地址。
由于这个IP是“租”来的,所以是有租期的,正如上面看到了,我这里的起始租约是1天。当租约达到50%的时候,客户机就会联系服务器续约,续约后服务器将此IP的使用期限重置为1天。如果在租约达到50%的时候,客户机无法联系到服务器,那么就会继续使用到当前时间的50%(也就是总体租约达到75%),以此类推,最后当租约已使用了87.5%还无法联系到服务器时候,客户机认为该DHCP服务器已经无效,重新发起Discover获取IP的请求。
上面提到中继。设想一个场景:一个公司有A和B两个网络,但是不想给每个网络都分配一个DHCP服务器,只想用一个DHCP服务器完成地址的分配,该怎么办呢?此时就可以用到中继了,将DHCP服务器放到A网络中,配置一个地址池,用于给A网络分配地址,然后配置一个中继地址池,用于给B网络分配地址。之后在路由器(直连A-B)上,配置一个中继,当B网络的客户机发起DHCP的请求时,路由器就将请求发给A网络的DHCP服务,DHCP服务器将请求响应给路由器,路由器再响应给B网络。(注意:此过程路由器和DHCP间是单播通信,路由器和B网络的主机为广播通信)。这个就是中继,这个我这里就不讲了,如果大家想了解的话,自行搜索。
-------------------------------------------- 一条分割线-------------------------------------------------
配置部分:
1.安装dhcp包:
[root@localhost ~]# yum install -y dhcp2.查看dchp包包含的内容
[root@ ~]# rpm -qpl dhcp /etc/dhcp #dhcp的配置文件所在的目录 /etc/dhcp/dhcpd.conf #dhcp的配置文件 /etc/dhcp/dhcpd6.conf #ipv6的dhcp的配置文件,忽略掉即可 /etc/openldap/schema/dhcp.schema /etc/portreserve/dhcpd /etc/rc.d/init.d/dhcpd #dhcp服务脚本 /etc/rc.d/init.d/dhcpd6 /etc/rc.d/init.d/dhcrelay #dhcp中继的服务脚本 /etc/rc.d/init.d/dhcrelay6 /etc/sysconfig/dhcpd #服务脚本的配置文件 /etc/sysconfig/dhcpd6 /etc/sysconfig/dhcrelay /etc/sysconfig/dhcrelay6 /usr/bin/omshell /usr/sbin/dhcpd #dhcp程序 /usr/sbin/dhcrelay #dhcp中继程序 .......... #还有很多,由于后面的都是一些文档,我这里就省略了3.查看配置文件:
根据上面内容我们看到,dhcp的配置文件在/etc/dhcp这个目录中:
[root@ ~]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample #他说配置文件的示例在/usr/share....里 # see 'man 5 dhcpd.conf' # [root@ ~]#按照要求复制配置dhcpd.conf文件到/etc/dhcp/并改名为dhcpd.conf:
[root@ ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf cp: overwrite `/etc/dhcp/dhcpd.conf'? y #询问是否覆盖之前存在的配置文件,y覆盖 [root@ ~]#我们先来解释一下这个配置文件的格式:
1.总体分为四个部分:
option #定义全局参数
subnet Netaddress netmask NETMask{ #定义子网
}
host NAME { #主机配置
}
log-facility #定义dhcp自身运行参数
2.每个参数以分号(';')结尾。
3.全局参数对全局生效,局部参数高于全局参数;
4.DHCP常用参数详解:
domain-name | 为客户端指明DNS服务器的名称 |
domain-name-servers | 指定DNS服务器 |
routers | 网关地址 |
default-lease-time | 默认租约期限 |
max-lease-time | 最大租约期限 |
log-facility | 日志服务器级别 |
subnet | 定义子网 |
range | dhcp地址池 |
host | 定义单独主机 |
filename | 指定PXE文件 |
server-name | 通知客户端dhcp服务器名字 |
fixed-address | 定义主机的IP地址 |
[root@ ~]# sed -i '/^#/d' /etc/dhcp/dhcpd.conf [root@ ~]# sed -i '/^$/d' /etc/dhcp/dhcpd.conf [root@ ~]# cat /etc/dhcp/dhcpd.conf #option domain-name "test.org"; #定义域名为test.org,这个没用,一般都注释掉 option domain-name-servers 172.16.0.1; #定义DNS服务器为172.16.0.1,多个空格分割 option routers 172.16.0.1; #定义网关为172.16.0.1 default-lease-time 600; #定义默认租约期限,这里为600秒 max-lease-time 7200; #定义最大租约期限,这里为7200秒 log-facility local7; #日志为faility local17;可以看/etc/rsyslog.conf,这里不解释 subnet 172.16.0.0 netmask 255.255.0.0 { #定义了一个子网172.16.0.0/24,注意,这个地址池要和你服务器的IP在同一网段,即使是中继,也要至少有一个本地子网段! range 172.16.10.10 172.16.10.20; #地址池从172.16.10.10到172.16.10.20;以空格分割 option broadcast-address 172.16.255.255; #定义广播地址为172.16.255.255 default-lease-time 86400; max-lease-time 86400; } host mandrava { #定义一个名为mandrava的主机 option routers 172.16.100.30; #定义网关 option domain-name-servers 172.16.100.30; #定义域名服务器 option broadcast-address 172.16.100.255; #定义广播地址 filename "vmunix.passacaglia"; #指向一个文件,用于PXE server-name "toccata.fugue.com"; #通知客户端dhcp服务器名字 hardware ethernet 0:0:c0:5d:bd:95; #声明了mandrava这个主机的MAC地址 fixed-address 172.16.100.1; #定义这个主机的ip地址为172.16.100.1 } |
5.启动dhcp:
[root@localhost ~]# service dhcpd start Starting dhcpd: [ OK ] [root@localhost ~]#6.查看监听的端口:
[root@localhost ~]# ss -tunl Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:67 *:* udp UNCONN 0 0 *:68 *:* udp UNCONN 0 0 *:631 *:* tcp LISTEN 0 128 :::22 :::* tcp LISTEN 0 128 *:22 *:* tcp LISTEN 0 128 127.0.0.1:631 *:* tcp LISTEN 0 128 ::1:631 :::* tcp LISTEN 0 100 ::1:25 :::* tcp LISTEN 0 100 127.0.0.1:25 *:* tcp LISTEN 0 128 127.0.0.1:6010 *:* tcp LISTEN 0 128 ::1:6010 :::* tcp LISTEN 0 128 127.0.0.1:6011 *:* tcp LISTEN 0 128 ::1:6011 :::*可以看到监听了udp的67号端口。而68号监听的原因是因为这个服务器也有可能作为客户端,这个监听跟dhcpd服务没关系。
相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- 运维入门
- dns。dhcp,ftp
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- IDC机房实战MRTG
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- 如何降低服务器采购成本 原理分析
- 建议的服务器分区办法
- 服务器托管六大优势分析
- Erlang实现的一个Web服务器代码实例
- 服务器技术全面解析
- 保护DNS服务器的几点方法小结
- 我国成为全球第二大服务器消费国
- 服务器 安全检查要点[星外提供]
- 服务器应用自动重新启动IIS批处理[原创]_DOS/BAT_脚本之家
- FTP 服务器关于权限的问题