DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
dhcp的主要功能就是给局域网内部自动分配IP地址的。
早期的无盘工作站。bootp是dhcp的前身。为了和服务器通信就需要建立通信,但因为硬盘在服务器那里。这就需要一种特殊的网卡,这种网卡用自己MAC地址来请求一个ip地址,但只要申请到ip,只要标记上,MAC和ip地址就永久对应上了。
dhcp有一个概念就是租约,这不同于bootp,分到ip的主机有一定时常的租期,但只要一关机,这个ip就立马收回。下次开机就需要从新申请ip地址。如果想持续使用ip就需要续租。当租期到达一半就需要发起续租请求了。并且每再过去时间一半就要续租。
DHCP过程:
Client --> DHCPDISCOVER
DHCPOFFER <--Server
Client --> DHCPREQUEST
DHCPACK <-- Server (这4个包都是广播过程)
DHCP Relay (中继器)可以给不同网段分配ip地址
下面介绍一下dhcp服务器的搭建(我是在CentOS7下搭建的)
1.首先 使用yum命令查看dhcp包。
2.下面使用yum install 安装dhcp包
3.安装完成之后就可以配置他的配置文件了。(在/etc/dhcp这个目录下)
这个目录下有2个文件,要用的那个就是dhcpd.conf了。打开它
发现下面什么都没有,但是他提供了一个路径存放有配置文件的模板。去copy过来就好了。就是那个/usr/share/doc/dhcp-4.2.5下的example文件。拷过来,覆盖掉这个空文件。
4.打开这个文件第7,8行选择域名和域名服务器。这里我将域名服务器设置成了221.11.1.67.这是陕西网通的DNS。defaul-lease-time 是默认租约期限。max-lease-time是最大租约期限。单位是秒 。下图是我改的
log-facility是和日志的存放位置相关。这个不用改。
5.删掉这里的24行到28行,这个没有用。就是下面四行。
24 # No service will be given on this subnet, but declaring it helps the 25 # DHCP server to understand the network topology. 26 27 subnet 10.152.187.0 netmask 255.255.255.0 { 28 }
subnet后面紧跟自己所要分配的网络段和子网掩码。 range后跟要分配的ip地址范围。routers后跟分配网络的网关。
7.既然这个普通版的配置写了,那些其他高级版的就可以删除了。删除以下行。
32 # This declaration allows BOOTP clients to get dynamic addresses, 33 # which we don't really recommend. 34 35 subnet 10.254.239.32 netmask 255.255.255.224 { 36 range dynamic-bootp 10.254.239.40 10.254.239.60; 37 option broadcast-address 10.254.239.31; 38 option routers rtr-239-32-1.example.org; 39 } 40 41 # A slightly different configuration for an internal subnet. 42 subnet 10.5.5.0 netmask 255.255.255.224 { 43 range 10.5.5.26 10.5.5.30; 44 option domain-name-servers ns1.internal.example.org; 45 option domain-name "internal.example.org"; 46 option routers 10.5.5.1; 47 option broadcast-address 10.5.5.31; 48 default-lease-time 600; 49 max-lease-time 7200; 50 } 51
除了我说到的地方,其他地方其实都可以删去了。下来退出保存。。
9.这下使用systemctl start dhcpd 就可以启动dhcp服务器了。使用systemctl status dhcpd查看状态。
在 /var/lib/dhcpd/下的dhcpd.lease文件中就可以看到都有谁从我这拿了IP地址。(刚一搭建好就有人来拿IP了。。。)
服务器端和客户端都是用端口来监听的。客户端使用udp的68号端口,服务器端使用67号端口。
刚才上面有个问题,指定特定IP时应该避开ip池里的IP(都是小问题啦,就不改了)