一文胜千言的DHCP的讲解以及DHCP服务器的配置
一、了解DHCP以及相关概念
(一)DHCP如何工作的?
让我们首先了解一下 DHCP 的工作流程:
- 当已连接到网络的客户端计算机(配置为使用 DHCP)启动时,它会发送一个 DHCPDISCOVER 消息到 DHCP 服务器。
- 当 DHCP 服务器接收到 DHCPDISCOVER 请求消息时,它会回复一个 DHCPOFFER 消息。
- 客户端收到 DHCPOFFER 消息后,它再发送给服务器一个 DHCPREQUEST 消息,表示客户端已准备好获取 DHCPOFFER 消息中提供的网络配置。
- 最后,DHCP 服务器收到客户端的 DHCPREQUEST 消息,并回复 DHCPACK 消息,表示允许客户端使用分配给它的 IP 地址。
(二)DHCP的优点
- (1) 减少人为配置管理。使用DHCP服务器可以大大降低用于配置和重新配置计算机的时间。
- (2) 可靠配置。DHCP避免了因手动在每台计算机上输入IP地址而引起的IP冲突。
(三)DHCP工作过程
- (1) IP地址请求阶段。
- (2) IP地址提供阶段。
- (3) IP地址选择阶段。
- (4) IP地址确认阶段。
(四)DHCP提供信息方法
DHCP服务器可以通过两种方法向客户机提供配置信息:
绑定MAC地址法
和地址池法
。
二、DHCP在生活中常用的情景
一个比较简陋的图片:
这个图片可以看出DHCP服务器与DHCP客户端的关系
如果再来一张图说明DHCP的作用,我认为下图再合适不过了:
如果你使用的是WIFI,那就对无线再熟悉不过了。
当你去一个公共场所,张嘴就来:“请问,你们这wifi密码是多少”
给你密码之后,你输入wifi的密码,然后建立连接
后来发生了什么?没错,去请求了AP,也就是去请求了无线路由器,AP去找相关的策略。如果是DHCP的话,就请求DHCP服务器。然后你才会得到一个临时的地址。最终才可以上网了。
三、安装
使用yum进行安装
[root@localhost ~]# yum -y install dhcp
(一)配置文件以及目录介绍
配置文件在/etc/dhcp/
目录下
主要配置就是/etc/dhcp/dhcpd.conf
文件
[root@localhost ~]# cd /etc/dhcp/
[root@localhost dhcp]# ll
总用量 8
drwxr-xr-x. 2 root root 23 5月 9 10:21 dhclient.d
-rw-r--r-- 1 root root 120 4月 2 09:29 dhcpd6.conf
-rw-r--r-- 1 root root 117 4月 2 09:29 dhcpd.conf
drwxr-x--- 2 root dhcpd 28 5月 12 01:56 scripts
[root@localhost dhcp]#
查看一下/etc/dhcp/dhcpd.conf
这个文件的内容:
发现里面除了注释,就是注释 其实提示的这个就是咱们需要的一个模板
[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
#
[root@localhost ~]#
为了防止出错,备份一下原文件
[root@localhost ~]# cp -p /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
[root@localhost ~]#
拷贝模板替换原来的:
[root@localhost ~]#
[root@localhost ~]# cp -p /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@localhost ~]#
由于里面包含了大量的注释,为了方便大家好看,就过滤掉注释:
[root@localhost ~]#
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf |grep -Ev "^#"
option domain-name "example.org"; #为客户机指定解析主机名时的默认搜索域
option domain-name-servers ns1.example.org, ns2.example.org; #域名服务器
default-lease-time 600; #默认租约时间
max-lease-time 7200; #最大的租约时间
log-facility local7;
#子网
#子网网络 #子网掩码
subnet 10.152.187.0 netmask 255.255.255.0 {
}
#子网
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20; #地址池
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
#子网
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}
# 单独拿出来这个比较全的来说明
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
#分配静态IP
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95; #需要分配给的主机的网卡的MAC地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com"; #分配的IP地址
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
[root@localhost ~]#
子网代码块说明:
静态地址分配:
#分配静态IP
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95; #需要分配给的主机的网卡的MAC地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com"; #分配的IP地址,默认是用域名表示的,可以使用:server-name 192.168.8.112;表示
}
四、实战一(DHCP地址池分配IP法)
(一)环境
虚拟机下:
- 一台Centos7的操作系统
- 一台Win10的测试机
使用Centos7安装并配置一个DHCP服务器,然后使用Win10测试机进行获取DHCP地址。
DHCP地址池为:192.168.9.200-192.168.9.230 24位地址
(二)配置
编辑dhcpd.conf配置文件
[root@localhost ~]#
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
配置如下:
# A slightly different configuration for an internal subnet.
subnet 192.168.9.0 netmask 255.255.255.0 {
range 192.168.9.200 192.168.9.230;
option domain-name-servers 192.168.9.222;
option domain-name "dns.zhenghui.com";
option routers 192.168.9.1;
option broadcast-address 255.255.255.255;
default-lease-time 600;
max-lease-time 7200;
}
启动dhcp服务器
如果没有问题就成功了
[root@localhost ~]#
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]#
(三)dhcp客户端测试
首选确定一下DHCP服务器的网卡和win10测试机的网卡是否在同一个网络下
然后把网卡设置成dhcp自动获取
五、实战二(绑定MAC地址分配法:静态分配)
(一) 环境
和实战一的环境一样
(二)配置
查看一下dhcp客户端的网卡地址:
可以看到物理地址,这个物理地址就是MAC地址。
此图为证,现在获取的地址是192.168.9.200
。
咱们给分配一个``192.168.9.212`。
注意此地方,这个
host zhenghui_win10 {}
代码块中的zhenghui_win10
,其实就是我自己随便起的。 可以自定义,为了更好的方便后期查看,可以设置成比较好记的名字
如果重启没有问题就成功了
(三)测试
右击禁用网卡,然后重新打开
使用ipconfig /renew
命令重新获取
C:Users80429>ipconfig /renew
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . : dns.zhenghui.com
本地链接 IPv6 地址. . . . . . . . : fe80::c530:d0d4:17f2:1757%6
IPv4 地址 . . . . . . . . . . . . : 192.168.9.212
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.9.1
C:Users80429>
如果获取的地址还是之前的话,可以使用ipconfig /release
释放掉当前的IP,然后重新获取:
C:Users80429>ipconfig /release
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::c530:d0d4:17f2:1757%6
默认网关. . . . . . . . . . . . . :
C:Users80429>ipconfig
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::c530:d0d4:17f2:1757%6
默认网关. . . . . . . . . . . . . :
C:Users80429>
C:Users80429>ipconfig /renew #重新获取
Windows IP 配置
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . : dns.zhenghui.com
本地链接 IPv6 地址. . . . . . . . : fe80::c530:d0d4:17f2:1757%6
IPv4 地址 . . . . . . . . . . . . : 192.168.9.212
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.9.1
C:Users80429>
- Android Linker 与 SO 加壳技术
- Go语言操作mysql数据库简单例子
- go语言的sql包原理与用法分析
- WordPress免插件生成完整站点地图(sitemap.xml)的php代码
- Go语言常用字符串处理方法实例汇总
- 硬盘故障时如何强制关机:Input/output error
- 举例讲解Go语言中函数的闭包使用
- 实现WordPress提交评论的时删除该页面的WP-Super-Cache缓存的方法
- php自动生成百度开放适配PC页-手机页pattern对应关系sitemap.xml
- Linux系统最大文件打开数优化,解决Too many open files报错
- 【Dev Club 分享】安卓单元测试:What, Why and How
- WordPress记住评论用户信息的js版本,直接操作cookie无视缓存
- 禁止百度转码和百度快照缓存的META声明
- 单机MySQL数据库优化推荐的编译安装参数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法