一、dhcp的常用的概念。

1、 作用域:

作用域是一个网络中可分配IP地址的连续。

2、超级作用域

超级作用域是一组作用域的集合。是由一个物理子网中包含的多个IP子网组成的。我们可以理解为作用域是一个用户,而超级作用域就是这个用户的组。

3、排除范围

排除范围是用来定义某IP或者某一组的IP不用于分配给dhcp客户机

4、地址池

定义了dhcp作用域和排除范围后,剩下的可用地址构成了一个地址池。池中的地址可以分配给用户使用

5、租约

就是dhcp服务器指定的时间长度,在此长度内客户机可以使用分配给它的地址,如果租约到期,客户机必须更新ip租约。

6、保留地址

用户可以使用保留地址,保留地址提供了一个将动态地址和其MAC地址相关联的手段。用于保证此网卡长期使用某个IP地址。

7.选项类型。

这是DCHP为工作站提供的其它参数,比如网关的IP地址,dns服务器等。

这里仅仅介绍了dhcp最基础的一些概念,因为在此主要介绍linux下是如何配置这些服务的。所以如果朋友们想了解更多有关dhcp或者后面介绍的几个服务的知识(linux下和win下的dhcp的概念是一样的)可以参阅网络或者书籍。

二、Dhcp的设置

首先安装dhcp服务。如果你在首次安装时没有选择dhcp组件,你可以在你发行版的安装光盘和rpm的添加删除包中找到相关软件,进行安装,或者可以在第二张光盘的/RedHat/RPMS/下找到dhcp-3.0p11-23.i386.rpm的二进制rpm发行包进行安装,安装后效果相同。

然后更新的时候按提示插入安装盘

再给提示朋友们一次,在linux中,所有的程序配置都由文本文件进行控制。所以我们要设置dhcp服务器,就可以通过修改配置文件来达到目的。

所以我们先看下它的典型的配置文件

dhcp的配置文件是/etc/dhcpd.conf,不过默认的情况下这个文件不存在,你需要使用它的模板建一个配置文件。模板的位置在/usr/share/doc/dhcp-3.0p11/dhcpd.conf.sample

如果你找不到你的配置文件可以使用我们学过的查找命令,locate filename进行寻找,如图:

查找到此文件后,我们先来看下模板的配置情况。

为了方便,我把这个配置文件用cat 命令给导入到了一个文本文件中,然后弄到win下来了。模板配置文件内容如下:

和所有的配置文件类似的,它用#代表注释。现在看看每行都说了什么

ddns-update-style interim;

#配置使用过渡性 DHCP-DNS互动更新模式。

ignore client-updates;

#忽略客户端更新

subnet 192.168.0.0 netmask 255.255.255.0 {

#设置子网声明

# --- default gateway

option routers 192.168.0.1;

#设置缺省网关为192.168.0.1

option subnet-mask 255.255.255.0;

#设置客户端的子网掩码

option nis-domain "domain.org";

#为客户设置NIS域

option domain-name "domain.org";

#为客户设置域名

option domain-name-servers 192.168.1.1;

#为客户设置域名服务器

option time-offset -18000; # Eastern Standard Time

#设置偏移时间。

# option ntp-servers 192.168.1.1;

设置NTP服务器。

# option netbios-name-servers 192.168.1.1;

设置wins服务器

# --- Selects point-to-point node (default is hybrid). Don't change this unless

# -- you understand Netbios very well

# option netbios-node-type 2;

#设置netbios节点类型我不清楚这个netbios节点是什么东西。*_*!,不懂最好不设。嘿嘿。

range dynamic-bootp 192.168.0.128 192.168.0.255;

#设置动态的地址池。

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;

指定dhcp客户的mac地址

fixed-address 207.175.42.254;

给指定的mac地址分配ip

}

}

看完了这个配置文件,朋友们如果有一定的英文基础。是不是觉得其实很好懂,其实不要被linux的配置文件吓倒,配置linux远比windows简单和容易理解,这些配置文件给了你一个模板,你照模板进行填写就可以,类似于给了你一张计划书,上面有你要做的事情,你可以选择做或者不做,具体情况根据你的环境填填空就可以了。不象windows会给你一个向导,至于向导干了什么你根本不知道。出了问题,你也不知道改找谁。但是linux则不同,出了问题,你把你的配置单cat出来,然后贴到网上,讲出你的要求,别人很容易知道你到底干了些什么。

后面我们举个例子来做这个配置。

先看下一个图,非常常见的网络环境。(俺改的以前的一个设计方案,因为讲这里是讲dhcp,就不把vlan考虑进来了,朋友们要是有兴趣,可以在社区http://www.easysafe.net/发帖专门讲这方面的问题。)

我们有一个10.0.0.0的网络,叫做easysafe.net

有一个DHCP,有一套企业应用系统,

dns的服务器地址10.0.0.12

系统的数据库服务器地址为10.0.0.10

应用服务器地址为10.0.0.11

有一个网管监控区,放的网管工作站,其IP分别是,10.0.0.30,机器名字叫webmaster

然后有个防火墙做NAT,内部IP是10.0.0.1,外部IP是202.117.0.43(随便编个.HOHO)

你是这个企业的网管,由于你的机器比较多了,工作人员经常找你配IP地址。所以你让老总给你了台淘汰的机器,上面装上linux,配成DHCP服务器,来给他们分配IP地址。

那么,现在我们要怎么做呢。

首先,我们先要考虑一下这个环境。

10.0.0.10

10.0.0.11,

10.0.0.1

为避免网络问题,以上地址应该是保留的静态地址,也就是说你应该有一个排除范围。这个范围可大可小,在现在的情况下,为了避免以后的问题,可以把排除范围设置大点。比如我们设置为从10.0.0.1~10.0.0.20,为系统使用的。

10.0.0.30是你自己用的,不过你不想让别人用这个ip,也不想每次重新装了系统后重新修改,因此,你决定把你的IP给绑定到MAC上。

其他的人可以随意使用10.0.0.21~10.0.0.254之间的一个地址。

好了,现在调出我们的DHCP配置单模板,看如何配置。

ddns-update-style interim;

ignore client-updates;

#subnet 192.168.1.0 netmask 255.255.255.0 {

#声明变了,我们的总的网络是10.0.0.0/24

subnet 10.0.0.0 netmask 255.255.255.0{

#朋友在修改配置的时候,原有配置我们可以使用#注释掉。

# --- default gateway

#option routers 192.168.0.1;

#路由变了,是10.0.0.1

option routers 10.0.0.1;

option subnet-mask 255.255.255.0;

option broadcast-address 10.0.0.255;

#添加一个广播地址

#这句不用改,因为我们的子网还是个三类地址的子网

#option nis-domain "domain.org";

#nis不用

#option nis-domain "easysafe.net ";

#option domain-name "domain.org";

option domain-name "easysafe.net";

#option domain-name-servers 192.168.1.1;

option domain-name-server 10.0.0.12

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;

#上面的可以不修改,因为我这里没有ntp和wins服务器

#range dynamic-bootp 192.168.0.128 192.168.0.255;

#这里开始设置你的动态ip地址池了

#range dynamic-bootp 10.0.0.21 10.0.0.254

default-lease-time 21600;

max-lease-time 43200;

#缺省的更新ip时间和最大更新时间不修改默认的就可以。

# we want the nameserver to appear at a fixed address

#――――――――――――――――――――――

#以上为模板中有的配置,现在加一些模板没有的配置

#――――――――――――――――――――――

subnet 10.0.0.0.0 netmask 255.255.255.0{

range 10.0.0.21 10.0.0.254;

}

#这里要注意了,在这里我们配置了我们的地址池!!从10.0.0.21到10.0.0.254

#host ns {

# next-server marvin.redhat.com;

# hardware ethernet 12:34:56:78:AB:CD;

# fixed-address 207.175.42.254;

#}

#上面的是为特定用户来设置地址的。咱们来看看网管的机器该怎么配置,为了你以后

#配置的方便,这里加个group声明一下,以便如果哪个人看上了某个地址,你把他固、

#定上就可以。

group {

host webmaster{

option host-name “webmaster.easysafe.net”;

#你的主机名。可以就设置为webmaster

hardware ethernet 00:cd:a9:70:e3:f3;

#你的MAC地址,在linux下直接用ifconfig就可以看到。如果你要看win

#的mac地址可以用ipconfig当然这个MAC地址是我编的,呵呵。

fixed-address 10.0.0.30

}

}

}

朋友们可以看到,在这里我们改的配置文件的地方并不是很多:)总共加了也没有10条语句,但是dhcp的配置文件已经做好了。

然后我们把这个文件复制回etc目录下存储为dhcpd.conf,然后你可以用vi看一下

不过别高兴的太早,linux怎么知道这是你要启动dhcp服务,并且使用这个配置文件呢?

现在就看我们后面要完成哪些工作了。

首先,要运行dhcp,我们需要一个客户租约数据库文件这个文件在/var/lib/dhcpd.leases,默认的这个库是空的,不需要配置,不过管理员可以通过这个来察看dhcp的运行情况。‘

一般来说,这个文件的格式是

lease address {statement}

根据以上要求创建/var/lib/dhcp/dhcpd.lease文件。

完成了以上的配置,后面就是要启动dhcp了,和以前说的smb服务一样,也是通过service命令来执行

service dhcpd start
     (
     1、service dhcpd start/restart 
     2、/usr/sbin/dhcpd(此方法不知道行不行) 
     3、/ect/init.d/dhcpd
     )
启动服务失败,系统提示第10和第27行出错。

原来一个是把domain-name-servers输错成了domain-name-server

另一个则是添加了两个range

费了半天力,到底把dhcp启动起来了。郁闷,又改了好几遍。

然后可以用pstree来察看此服务是否启动

pstree |grep dhcpd/

如图所示,服务有了

如果希望以后每次服务器启动都把dhcp启动的话可以用ntsysV来选择你的dhcp服务器。

如图:

还剩下一点小问题,就是客户机的配置。

客户机win下的不多说了如图:默认就是这样的。

在linux下面,你可以手动配置你的dhcp。

察看你的网络配置文件,如果你没有设置为自动启动联网,则要修改你的网络配置文件。

vi /etc/sysconfig/network

添加

NETWORKING=yes

(让引导的时候启动联网)

或者使用

@echo “NETWORKING=yes”>/etc/sysconfig/network

然后再修改你的网卡配置文件

/etc/sysconfig/network-scriptes/ifcfg-eth0 文件

应该包含这几行

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

三、案例1

1、dhcp服务器地址池中ip地址的获取(单作用域

[root@localhost ~]# mkdir /mnt/cdrom   //建立光盘挂载点
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/   //挂载光盘
mount: block device /dev/cdrom is write-protected, mounting read-only

切换到光盘Server目录下并查看与dhcp相关的软件包

image

 

查看-3.0.5-21.el5.i386.rpm 的相关信息

image

安装-3.0.5-21.el5.i386.rpm

image

查看安装后文件

[root@localhost Server]# rpm -ql dhcp |less

image

image

编辑配置脚本文件

image

[root@localhost Server]# service dhcpd configtest//修改完后判断语法是否正确
Syntax: OK   //语法结果正确

重启dhcp服务器

image

[root@localhost ~]# tail -f /var/log/messages   // 查看日志文件记录

 

image

测试

打开一台客户机并将其ip地址和dns均设为自动获取

image

 

image

image

 

image

2、主机与客户机MAC地址的绑定的配置方案

[root@localhost Server]# vim /etc/yum.repos.d/rhel-debuginfo.repo //编辑本地yum文件

 

image

[root@localhost Server]# yum list all |grep shark  //查看yum下的shark文件

image

[root@localhost Server]# yum install -y wireshark  //安装wireshark

image

查看dhcp和client的端口类型

image

[root@localhost Server]# tshark -ni eth0 -R "udp.port eq 67"

image

image

image

[root@localhost Server]# vim /var/lib/dhcpd/dhcpd.leases  //查看租约文件中dhcp服务器记录客户机获取地址情况

image

[root@localhost Server]# arp

image

[root@localhost Server]# vim /etc/dhcpd.conf  //编辑配置脚本文件,将客户机的mac地址与主机绑定,配置ip地址,使客户机每次都能获取固定的ip地址

image

重启dhcp服务器

image

[root@localhost ~]# tail -f /var/log/message //观察日志文件

image

此时dhcp正在eth0shang监听

 

禁用本地连接,然后启用本地连接 之后查看日志文件

image

image

 

image

日志文件中收到固定ip地址

查看本地连接的详细信息

image

image

案例2:Linux中dhcp服务器的超级作用域的建立及实现步骤

image

再新建一个作用域(注:为了了实验结果显著,将两个作用域的地址池的ip地址均缩小到一个ip地址

image 

image

重启dhcp服务器

image

测试

打开一台linux作为客户机

启动其dhcp服务

image

重启网络服务器,使其dhcp服务生效

image

查看客户机ip地址获取情况

image

新打开另一个linux客户机 成功获取到了超级作用域中地址池中的地址

image

获取到了超级作用域中的ip地址:192.168.58.2

image

 

案例3:Linux中dhcp中继的实现及配置

 

实验拓扑图

image

打开一台liux作为服务器并给其配置相应ip地址

image

重启网络服务器使其ip地址生效

image 

[root@zyx ~]# mkdir /mnt/cdrom   //建立光盘挂载点

[root@zyx ~]# mount /dev/cdrom /mnt/cdrom/  //挂载光盘
mount: block device /dev/cdrom is write-protected, mounting read-only

[root@zyx ~]# cd /mnt/cdrom/Server  //切换到光盘Server目录下

查看该目录下与dhcp相关的软件包信息

image

[root@zyx Server]# rpm -ivh dhcp-3.0.5-21.el5.i386.rpm  //安装该软件包

image

[root@zyx Server]# vim /etc/dhcpd.conf  //编辑dhcp的配置脚本文件

建立192.168.10.0网段的作用域(注:此作用域为技术部

image

建立192.168.20.0网段的作用域(注:此作用域为财务部

image

建立与服务器(192.168.58.0)在同一网段的作用域 (注:此作用域为空

image

[root@zyx Server]# service dhcpd restart  //重启dhcp服务器

image

启动另一台Linux虚拟机作为路由器

给该路由器配置三个网卡并给每个网卡连接到对应位置上

image

给三块网卡配置相应ip地址

image

image

image

重启网络服务器使各网卡的ip地址生效

image

image 

[root@node1 Server]# vim /etc/sysctl.conf  //编辑该文件使路由实现数据包转换功能

image

[root@node1 Server]# sysctl –p  //查看数据包生成状况

image

[root@node1 ~]# mkdir /mnt/cdrom   //建立光盘挂载点
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom/ //挂载光盘
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@node1 ~]# cd /mnt/cdrom/Server/  //切换到光盘Server目录下
[root@node1 Server]# ll dhcp* //查看该目录下与dhcp相关的软件包信息

image

[root@node1 Server]# rpm -ivh dhcp-3.0.5-21.el5.i386.rpm //安装该软件包

image

[root@node1 Server]# vim /etc/sysconfig/dhcrelay  //打开此文件建立中继

image

[root@node1 Server]# service dhcrelay start
Starting dhcrelay:                                         [  OK  ]  //启动该服务

测试

启动一台windows虚拟机作为客户机测试相应结果

将客户机的网卡连接到VMnet3(注:作为技术部测试)

image

客户机获得了技术部作用域地址池中的ip地址

image

image

image

将客户机的网卡连接到VMnet2(注:作为财务部测试)

image

客户机获得了财务部作用域地址池中的ip地址

image

image

 

image