DHCP的定义:
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DHCP的工作模式
1.人工分配: 即人工的将mac和ip进行绑定,这样做的缺点是地址利用率低
2.自动分配: 一次分配永久使用 ,同样具有上面的缺陷
3.动态分配: dhcp客户端从服务器得到地址后并非永久使用,而是有一定的租约,租约到期地址就释放,当然在使用期间也会不断的更新租约,已达到地址的充分利用
DHCP的工作原理:
1. 发现阶段,即DHCP客户端寻找DHCP服务器的阶段。客户端以广播方式发送DHCPDISCOVER包,只有DHCP服务器才会响应。 2. 提供阶段,即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCPDISCOVER报文后,从IP地址池中选择一个尚未分配的IP地址分配给客户端,向该客户端发送包含租借的IP地址和其他配置信息的DHCPOFFER包。 3. 选择阶段,即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发送DHCPOFFER包,客户端从中随机挑选,然后以广播形式向各DHCP服务器回应DHCPREQUEST包,宣告使用它挑中的DHCP服务器提供的地址,并正式请求该DHCP服务器分配地址。其它所有发送DHCPOFFER包的DHCP服务器接收到该数据包后,将释放已经OFFER(预分配)给客户端的IP地址。 如果发送给DHCP客户端的DHCPOFFER包中包含无效的配置参数,客户端会向服务器发送DHCPCLINE包拒绝接受已经分配的配置信息。 4. 确认阶段,即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCPREQUEST包后,便向客户端发送包含它所提供的IP地址及其他配置信息的DHCPACK确认包。然后,DHCP客户端将接收并使用IP地址及其他TCP/IP配置参数。
下面通过一些案例来详细说明:
首先来做一个 简单的作用域:
拓扑:
安装dhcp软件包
配置/etc/dhcpd.conf 用vim编辑器打开后是个空文档 需要从样例文件中读取,如下图:
配置后的结果
检查配置并启动服务:
主机可通过dhcp获得地址
通过查看dhcp服务器的日志可知道主机获得地址的过程
增加mac地址ip地址绑定
重启服务
Xp主机网卡关掉重启测试结果
下面我们来做一个超级作用域
为了做出测试的结果,把两个作用域的地址池都设为一个地址
重启服务:
测试结果:
最后从实验结果来看物理机先从第一个地址池中得到地址,然后虚拟机的xp只有从第二个地址池中得到地址,从而以显示了超级作用域的作用,可以解决地址不够用的问题
DHCP中继案例
说明:DHCP服务器用linux做 路由器也用linux系统代替 开启linux系统中继功能,将两台主机放在不同的网络区域去自动获得地址来验证
#以下是在dhcp服务器上的配置,在linux系统上编辑 /etc/dhcpd.conf文件,建立三个作用域,3.0和2.0分别负责主机的dhcp分配,1.0是服务器网段,建立一个空作用域
ddns-update-style interim;
ignore client-updates;
subnet 192.168.2.0 netmask 255.255.255.0 { -----声明作用域
# --- default gateway
option routers 192.168.2.1;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "tec"; ----作用域名称
option domain-name-servers 222.88.88.88;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.2.2 192.168.3.99; ----作用域地址池
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host ns {
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254; -----主机绑定不再配置
}
}
subnet 192.168.3.0 netmask 255.255.255.0 { ------声明另一个作用域 下面为另一作用域的配置
option routers 192.168.3.1;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "final";
option domain-name-servers 222.88.88.88;
range dynamic-bootp 192.168.3.2 192.168.3.99;
default-lease-time 21600;
max-lease-time 43200;
}
subnet 192.168.1.0 netmask 255.255.255.0{}
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
#
利用setup将eth0地址配置成192.168.1.100 子网掩码 255.255.255.0 网关 192.168.1.1
下面为路由器的配置,由linux系统代替,三块网卡分别在不同的区域,vm1 vm2 vm3
Router
[root@localhost ~]#
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:08:ac:6c
ONBOOT=yes 编辑文件给eth0配置地址和掩码
IPADDR=192.168.1.1
NETMASK=255.255.255.0
TYPE=Ethernet
~
~
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=none
IPADDR=192.168.2.1
NETMASK=255.255.255.0 编辑文件给eth1配置地址和掩码
ONBOOT=yes
HWADDR=00:0c:29:08:ac:76
~
~
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth2
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth2
BOOTPROTO=none
IPADDR=192.168.3.1
NETMASK=255.255.255.0
ONBOOT=yes 编辑文件给eth20配置地址和掩码
HWADDR=00:0c:29:08:ac:80
~
~[root@localhost ~]# service network restart 将网卡服务重启
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down interface eth2: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: [ OK ]
Bringing up interface eth2: [ OK ]
~ ~
~[root@localhost ~]# vim /etc/sysconfig/dhcrelay 将dhcp中继功能打开
# Command line options here
INTERFACES="eth0 eth1 eth2"
DHCPSERVERS="192.168.1.100"
~
~
[root@localhost ~]# service dhcrelay start 启动dhcp中继
Starting dhcrelay: [ OK ]
[root@localhost ~]#
下面为测试结果 将两个系统网卡分别放在虚拟机的不同区域得到不同网段的地址
将一系统网卡放在2.0区域得到以下结果
以下是将网卡放在2.0作用域的到如下结果