linux网络基础之路由DHCP配置

2024-09-17

linux网络基础之路由DHCP配置(精选6篇)

linux网络基础之路由DHCP配置 第1篇

DHCP的传输原理:

1:客户端使用物理广播FF:FF:FF:FF:FF:FF和IP广播255.255.255.2255

2:当DNS路由器接受到广播包,使用同样的物理广播和IP广播来回应,数据帧中包含了分配的地址信息,

3:客户端接收到包含分配地址信息的数据帧,再次使用物理广播和IP广播进行回应。向其他所有主机宣告接受该地址信息。

4:DNS路由器接受到客户端的回应,再次广播表示确认客户端的地址,并宣告其他所有主机,该客户端从它这里动态分配成功。

路由器的DHCP配置步骤

1:进入configure terminal模式,service dhcp (启动dhcp服务)

2:ip dhcp pool pool_name (确定要动态分配的网络池)

3:network A.B.C.D net_mask (动态主机分配的网络段)

4:default_gatway A.B.C.D (配置分配的网关地址)

5:dns_server A.B.C.D (配置分配的DNS)

中继DHCP服务路由器配置

1:在中继路由器的要进行DHCP服务的端口,开启中继模式,

2:输入 ip helper_address A.B.C.D (此处的IP地址为DHCP路由器的地址)

3:按照DHCP的配置步骤配置动态分配池。

★ 完全路由算法设计目标的方式分析网络知识

★ 网络防御技术论文

★ GPRS功能和业务网络知识

★ 浅析网络商务信息采集技术的发展趋势

★ 网络防御技术安全防护论文

★ 几种网络R7K技术的比较分析

★ 网络营销策划经典

★ 网络发言稿

★ 网络四大名著

★ 经典网络签名

linux网络基础之路由DHCP配置 第2篇

某单位使用Cisco 3620作为IOS DHCP Server,它和内网相连的fastethernet0端口的IP地址为192.168.1.4,二层交换机采用两台Cisco 2950,三层交换机采用一台Cisco 3550。

在整个网络中有二个VLAN,为简化描述,假设每个VLAN都采用24位网络地址,其中VLAN1的IP地址为192.168.1.254,VLAN2的IP地址为192.168.2.254。在Cisco设备上实现IOS DHCP Server功能以使各VLAN中的主机自动获得IP地址,如下图所示。

配置DHCP地址池、附加信息以及租约期限

DHCP服务器的数据库被组织成一个树形结构,树根是用于动态分配的所有网络段的地址池,树枝是子网地址池,树叶是手工绑定给节点的地址。具体操作步骤如下:

首先登陆到Cisco 3640路由器上:

ghq>enable

Password (输入路由器的特权口令)

ghq #config terminal (进入配置模式)

Enter configuration commands one per line. End with CNTL/Z.

ghq?config # ip dhcp pool global(配置一个根地址池,global是地址池的名称,你可以采用有意义的字符串来表示)

ghq dhcp-config #network 192.168.0.0 255.255.0.0(动态分配的地址段)

ghq?dhcp-config #domain-name ghq.com(为客户机配置域后缀)

ghq?dhcp-config #dns-server 192.168.1.1(为客户机配置DNS服务器)

ghq?dhcp-config #netbios-name-server 192.168.1.1(为客户机配置wins服务器)

ghq?dhcp-config #netbios-node-type h-node(为客户机配置h节点模式)

ghq?dhcp-config #lease 30 (地址租用期为30天)

ghq?dhcp-config #ip dhcp pool vlan1 (为VLAN1配置地址池,本池是global池的子池,将从global继承域后缀、DNS服务器、wins服务器等参数)

ghq?dhcp-config #network 192.168.1.0 255.255.255.0 (VLAN1动态分配192.168.1这个网段内可以被分配的地址,没有被排除的地址)?

ghq?dhcp-config#default-router 192.168.1.254 (为客户机配置默认的网关,即VLAN1的IP地址)

ghq?dhcp-config?#ip dhcp pool vlan2 (为VLAN2配置地址池,本池是global池的子池,将从global继承域后缀、DNS服务器、wins服务器等可继承的参数)

ghq?dhcp-config#network 192.168.2.0 255.255.255.0

ghq?dhcp-config?#default-router 192.168.2.254

设置不能用于动态分配的IP地址

在整个网络中,有些IP地址需要静态的指定给一些特定的设备,例如路由器的端口、DNS服务器、wins服务器以及VLAN的地址等。显然,这些静态IP地址是不能用于动态分配的,这就需要将它们排除掉。其步骤如下:

ghq?config?#ip dhcp excluded-address 192.168.1.1 192.168.1.5 (IP地址 192.168.1.1至192.168.1.5不能用于动态分配)

ghq?config?# ip dhcp excluded-address 192.168.1.254

(IP地址192.168.1.254固定为VLAN1的地址,不能用于动态分配)

ghq?config?# ip dhcp excluded-address 192.168.2.254

(IP地址192.168.2.254固定为VLAN2的地址,不能用于动态分配)

设置DHCP数据库代理

DHCP数据库代理是用于存储DHCP绑定信息的一台主机,它可以是FTP、TFTP或者是RCP服务器,

当然,如有必要,你可以配置多个DHCP数据库代理。同样,不配置DHCP数据库代理也是允许的,但这是以不能在DHCP数据库代理上存储地址冲突日志为代价的。如果我们不想配置数据库代理,只要取消掉地址冲突日志的记录功能即可,操作命令如下:

ghq?config?# no ip dhcp conflict logging (取消地址冲突记录日志)

配置路由器的静态路由表

要使客户机能从用作DHCP Server的路由器中自动获得IP地址,首要条件就是各个VLAN中的客户机都能和路由器通信,因此首先就需要在路由器中设置一个路由以使路由器能和各个客户机通信。我们可以按如下设置 :

ghq?config?#ip route 192.168.1.0 255.255.255.0 FastEthernet0

(FastEthernet0为路由器和内网相连的以太网接口,该命令的作用是在以太网接口和VLAN1 192.168.1.254间建立一条静态路由。)

ghq?config?#ip route 192.168.2.0 255.255.255.0 FastEthernet0

(该命令在以太网接口和VLAN2 192.168.2.254间建立一条静态路由)

设置好之后,在配置模式中键入EXIT命令回到特权模式下,Ping一下VLAN1和VLAN2的IP地址?192.168.1.254和192.168.2.254?,如果能够Ping通则表明配置正确,可以直接进入下一步的保存过程。

在交换机上为不同的VLAN指定DHCP服务器地址

这一步骤只须在不同的VLAN中通过设置IP HELPER-ADDRESS即可搞定,指令如下:

switch>enable (进入交换机的特权模式)

Password?

switch #config t (进入配置模式)

Enter configuration commands?one per line. End with CNTL/Z.

switch ?config?#interface vlan1 (配置VLAN1)

switch ?config-if?#ip helper-address 192.168.1.4(指定DHCP服务器的地址,即路由器的地址)

ghq?config-if?#interface vlan2 (配置VLAN2)

ghq?config-if?#ip helper-address 192.168.1.4

对所有直接连到客户机的二层访问端口开启Portfast功能

要使客户机正确获得IP地址,就需要将和客户机相连的交换机端口的Portfast功能打开(Cisco 2950)。这里需要特别注意的是,只能在连接一个单一客户机的二层端口上开启该功能,如果在一个连接到交换机或集线器的端口上开启该功就有可能引起广播风暴或“地址学习”问题。开启Portfast功能的步骤如下:

switch #configure terminal

switch ?config?#interface interface-id

switch ?config-if?#spanning-tree portfast (开启portfast功能)

switch?config-if? #end

经过以上规划与设置操作后,在路由器和交换机上的设置全部完成,剩下的工作只要在客户机上打开“自动获得IP地址”功能即可(如图2所示)。对于Windows/ Server系统,还需要将“DHCP CLIENT”服务启用(如下图3所示),否则在Windows 2000/2003 Server中将不能自动得到IP地址。

图二 图三 至此,通过启用Cisco路由器的DHCP Server功能与客户端DHCP的配合使用,使局域网VLAN中的主机自动获得IP地址,真正实现了DHCP服务全部功能。相比在服务器上用windows/Linux操作系统实现的DHCP服务器,从稳定性和功能上看,路由器实现的DHCP服务器要优越得多。

linux网络基础之路由DHCP配置 第3篇

一、课程概况

1、课程定位

专业方向定位:本专业学生可以选择的专业道路:硬件设备的配置管理方向、操作系统的运行维护方向、网页网站的开发设计方向。这门课程就是为硬件设备这个方向做支撑的。

课程在设备方向的定位:这门课在网络设备配置与管理的这个教学体系中起到了关键的承上启下的作用。

本次课在课程中的定位:这次说课就是在第一个模块办公室网络组建中的第二个任务网络设备的访问。它很重要, 是先决条件、是基础。

2、教学目标

知识目标:熟悉各种网络互连介质的特性;理解网络设备各种接口的基本功能;掌握网络设备的访问方法和基本命令。

能力目标:正确选择线缆类型;分辨设备上各种接口的用途;能够熟练访问网络设备。

素质目标:培养学生认真、细致的工作态度;强调学生的合作精神;增强学生的求知欲和对学习网络设备的热情。

二、教学设计

1、学情分析

做任何设计之前, 我们都有必要搞清楚设计应用的对象。对于授课对象, 我调查和分析了三个方面的内容:

(1) 学生前期基础知识的掌握程度

(2) 兴趣和需要

(3) 认知倾向

2、重点难点

重点:掌握网络设备的访问方法;熟练使用访问设备的基本命令。

难点:正确选择互连介质类型;分辨设备上各种接口的用途。

3、设计思路

根据对学生情况和课程情况的分析, 本次课的设计思路是以路由器的访问为主线, 通过三次思考引入两个子任务和一个隐含任务:近端访问、远程访问、设备访问的安全保障。

在前两个任务完成的过程中, 会涉及到第三个隐含任务:设备访问的安全保障。在网络设备的访问中不同的密码种类会限制不同的登陆方式, 在隐含任务中刚好可以穿插对各种密码的使用和验证。三次思考, 既巩固了这次课的内容, 又为下一次课的任务埋下了伏笔。

三、教学实施

1、教材资料

教材:思科网络技术学院教程:《路由协议和概念》《LAN交换和无线》

参考书:《CCNA学习指南》——人民邮电出版社

2、学习场所

1-2节课让学生在班级综合实训室, 进行必要的理论讲授, 开展互动讨论, 使用学生自己机器里安装的模拟器完成任务。3-4节课使用网络设备实训室进行真实设备的练习, 可以进一步巩固所学, 加深理解。有了模拟器的基础, 学生在真实环境中操作失误的可能性大大降低, 也是对实训室中的网络设备的一种保护。

3、实施过程

知识回顾→新课讲解→实践操作&引导讨论→反馈小结→作业布置

4、组织方法

下面总结一下我在这次课里用到的一些组织方法, 分为教、学、互动三个方面来说。

(1) 教

首先要精心的选择既典型又实用, 学生又觉得有意思的任务。这次课我就用一近一远的两种情况去访问路由器做了子任务, 它们典型、实用。隐含的密码权限子任务又会激发学生的好奇心。

在上课的过程中, 我尽可能做到离开讲台、移动教学, 起初是为了照顾到更多的学生, 后来发现同时也能很好的监控课堂秩序, 一举两得。

另外, 我要求学生讲、练、记结合。因为我发现课上你给他讲的他听懂了, 教他练的他练会了, 可是过不了多久就又还给我了, 所以一定督促他们用自己能够接受的方式把所讲所练记录下来, 纸质、电子, 图文并茂都可以。

(2) 学

鼓励学生主动学习。比如在设备访问密码设置环节, 我只讲授演示一种密码的设置, 其它几种让学生通过我提供的引导材料自行设置并验证功效, 让孩子们体会到独立获取知识的喜悦感。

学生知识点的掌握上采用反馈补救法。学的好的同学掌握的快, 那就让他们去帮助那些还没能透彻理解的同学, 不仅满足了学生能力的各有不同, 也进一步培养了他们的团队精神。

作业个性化。我自己设计使用了项目规划及实施报告, 在这份报告中最大的不同要数角色扮演了。在分组实训项目时, 每个成员分别扮演不同的角色, 而且各种角色在不同项目中也要求组内轮换。分工各有不同, 各司其职, 提交上来的报告内容当然不会千篇一律。把这份报告和学校统一格式的实训报告结合起来, 作为这次课的作业, 既可以巩固知识技能, 也有效的避免了抄袭。

(3) 互动

在上课过程中, 我采用接力问答。就是由上一个已经回答完问题的同学随机指定下一个回答问题的同学。谁都会有“机会”, 而且“机会”随时可能来到, 这样就间接的迫使学生认真听课。

在设备的简单配置演示中, 我采用“你说我做”的方式, 学生可以按照自己的思路指挥我来完成, 这样能增强学生的成就感、提升学习动力。

当然有时会出问题, 但千万不要害怕出问题, 边出问题边解决能很好的培养学生的分析思考能力, 而且一个知识点如果是几经周折才掌握的话, 往往会印象深刻、掌握的更加牢固。

采用这些教学方法后, 极大激发了学生的学习热情, 同时也收到了很好的教学效果。

四、教学体会

linux网络基础之路由DHCP配置 第4篇

【关键词】教学网 带宽合并 Linux 策略路由 负载均衡

【中图分类号】 G 【文献标识码】 A

【文章编号】0450-9889(2015)07C-0181-02

当前,远程网络教学的方式越来越多地受到农村地区学员的欢迎,特别是在西部山区,当地农民接受继续教育的主要方式都是通过远程网络。但网络速度问题一直困扰着基层教学点,由于地处偏远,以专线接入的方式成本很高,一般教学点无法实现,出于网络可靠性和成本的考虑往往需要接入两家甚至更多家电信运营商ISP的ADSL线路,有时为了增加网络访问速度,甚至会从一家ISP购买几条带宽。这些ISP宽带往往是独立的,运营商并不负责使用者获得多个宽带的叠加的网络效果,这个问题需要用户自己通过带宽合并来解决。带宽合并是指多条等速或者不等速的外网带宽,合并成一个逻辑上更大的带宽来使用,给用户更好的网速体验。市场上目前出现所谓解决带宽合并问题的负载均衡器,一般是基于会话(Session)的轮询来处理的,效果不是很理想,而且价格也比较高,我们针对这一情况,提出了一种基于Linux系统下的策略路由机制来解决宽带合并问题的方案,简单易行而且经济。

一、带宽合并模型

网络带宽合并的模型一般如图1所示,这里统一用ADSL带宽为例来说明,每条带宽是8M/1M(下行带宽为8M,上行为1M),如果两条带宽合并使用,其效果应该和16M/2M相差不大。

图1 带宽合并模型

二、负载均衡器的弊端

因为负载均衡器的工作没有得到电信运营商ISP的支持,我们只能在本地通过对TCP/IP协议中的会话(Session)层进行改变来解决流量分摊的问题。其工作机制是局域网内部主机对Internet产生第一条链接会话时,负载均衡器会将该会话导入第一条线路;当主机产生第二条链接会话时,负载均衡器会将其导入第二条线路;产生第三条链接,又会把该会话导入第一条线路上,以此类推进行轮询访问,达到带宽合并。这种合并解决了线路带宽利用的问题,也解决了负载均衡的问题,但是单一链路的会话的带宽上限很明显都无法达到16M/2M的效果。由于负载均衡器是一款网络设备,需要另外投入资金,这对农村地区来说比较困难,性能好的价格也不便宜;另外如果发生问题,从购买设备到重新部署需要不少时间和人力维护。

三、Linux下基于策略路由的带宽合并方案

Linux对硬件的要求很小,我们可以利用学校里多余的主机甚至是实验室、机房等淘汰了的主机来自己架设一款网络带宽合并主机。

首先我们需要一台主机,主机上有三块网卡。本方案测试的设备配置是(奔腾2.4G CPU,512M内存,RealTek100M网卡三块)。

(一) NAT介绍

在日常网络部署中,应用比较多的一对一的NAT和利用端口复用机制的一对多的NAT。如图2,则是一对多的机制。当192.168.1.0/24的主机网段想通过NAT装置上网时,NAT的POSTRTOUTING机制会把数据包内来源端IP换成202.103.224.65,然后再交给路由,通过查表转发。

图2 NAT基本原理

(二)Linux下宽带合并方案设计

常用的思路是对于内部网络进行分类,各设置两个不同的固定网关,以实现负载均衡的能力,但是对于某一个内部主机,它只能通过一条固定的ISP进出,这种方式当然不能实现带宽合并的功能。因此,需要让主机的网关不断地改变,才能使对外的链接平均分配在两条实际的线路上。接下来以图3为例来示范网络带宽合并。

图3

为了实现这个目标,在Linux下进行以下的配置:

[root@localhost ~]# ip rule show

0: from all lookup local

32766: from all lookup local

32767: from all lookup local

[root@localhost ~]# ip rule add from 192.168.10.1 46 table 10 ①

[root@localhost ~]# ip rule add from 192.168.11.1 46 table 20

[root@localhost ~]#

[root@localhost ~]# ip route add 192.168.10.0/24 dev eth0 table 10

[root@localhost ~]# ip route rule add default via 192.168.10.254 table 10

[root@localhost ~]#

[root@localhost ~]# ip route add 192.168.11.0/24 dev eth1 table 20

[root@localhost ~]# ip route rule add default via 192.168.1.254 table 20

[root@localhost ~]# ip route replace default \ ②

nexthop via 192.168.10.254 dev eth0 weight 1 \

nexthop via 192.168.11.254 dev eth1 weight 1

[root@localhost ~]#

[root@localhost ~]# iptables –t nat –a POSTROUTING \ ③

–s 192.168.122.0/24 –j MASQUERAD

[root@localhost ~]# traceroute

首先采用 ①建立基本的路由信息表,使用③命令来实现“一对多的NAT”任务,可以确保内网的主机转化为多个不同的网关。这里,把网关设置为192.168.10.254和192.168.11.254,如果设置网关为192.168.10.254时,通过NAT转换后IP就是192.168.10.1;如果设置网关为192.168.112.54时,通过NAT转换后IP就是192.168.11.1 。

如何让主机的网关不断地改变,使对外的连接分摊到两条线路上去,这个目标用②的命令行解决,其中replace default参数是指添加或者取代目前的网关地址。最后用weight 1来标明每个网关的使用率,因为实验环境中,两线路带宽一致,所以使用率设置为1:1。通过上述配置以后,Linux主机可以让由内到外的连接经过NAT,平均地转换到两条不同的实体线路上。例如,第一条连接会转换到第一条实体线路的IP,第二条连接会转换到第二条线路上,而第三条连接又会转换到第一条线路上,如此反复不断循环。

(三)测试结果

通过上述的配置搭建环境后,在本机做了路由测试,可以看到主机两个连接采用了不同的网关,实现两条线路的合并使用。同时基于篇幅限制,中间的十几条路由信息并未列出。

表1 本地主机测试结果(一)

[root@localhost ~]# traceroute –n 8.8.8.8

Traceroute to 8.8.8.8(8.8.8.8),30 hops,60byte packets

1 192.168.10.254 0.652 ms 0.736 ms 0.975 ms

2 192.168.100.1 1.112 ms 2.426 ms 4.537 ms

3 125.71.230.173 2.228 ms 4.360 ms 3.854 ms

4 125.71.230.29 1.667 ms 5.223 ms 1.668ms

5 125.71.230.1 1.775 ms 2 .582ms 1.562 ms

……

18 8.8.8.8 76.892 ms 65.355 ms 65.224 ms

表2 本地主机测试结果(二)

[root@localhost ~]# traceroute –n 8.8.8.8

Traceroute to 8.8.8.8(8.8.8.8),30 hops,60byte packets

1 192.168.11.254 0.336 ms 0.432 ms 0.415 ms

2 192.168.120.1 0.662ms 0.714 ms 0.754 ms

3 125.71.230.173 3.167ms 4.112ms 4.320 ms

4 125.71.230.29 4.127 ms 5.228 ms 4.872ms

5 125.71.230.1 2.372 ms 3 .560ms 2.431ms

……

18 8.8.8.8 86.116 ms 78.288 ms 77.554ms

四、结论

实践证明通过Linux的策略路由机制,可以有效解决偏远农村地区校园网络带宽不足的问题,实现两条出口线路的网络宽带合并的功能。这样的方式无需额外购买添置新的网络设备,这对于农村远程教学点或中小学校来说是一个不错的借鉴。同时,也为网络管理和部署提供了一个新的思路,显示出Linux系统在计算机网络领域中解决多种问题的强大功能。

【参考文献】

[1]陈勇勋.Linux网络安全技术与实现(第2版)[M]. 北京:清华大学出版社,2012

【基金项目】柳州市科学研究与技术开发计划课题(2013G020403)

【作者简介】宋伟奇(1976- ),男,河北张家口人,柳州城市职业学院副教授,研究方向:计算机网络及应用。覃妮妮(1983- ),女,广西河池市人,柳州铁道职业技术学院讲师,研究方向:信息工程管理与应用,计算机教学改革与管理。

Cisco路由器的dhcp配置 第5篇

Cisco 路由器的dhcp 配置

配置的命令及其解释如下:

R1dhcp服务的配置

dhcp#configure terminal

//进入全局模式

dhcp(config)#service dhcp

//打开dhcp功能

dhcp(config)#no ip dhcp conflictlogging

//关闭dhcp日志记录

dhcp(config)#ip dhcp pool cisco

//配置dhcp服务器的名称为cisco

dhcp(dhcp-config)#network 192.168.1.0 255.255.255.0

//配置dhcp服务器要分配的网段

dhcp(dhcp-config)#default-router 192.168.1.1

//配置默认网关为192.168.1.1

dhcp(dhcp-config)#dns-server 192.168.1.1

//配置dns服务器为192.168.1.1

dhcp(dhcp-config)#exit

//退出dhcp配置模式

dhcp(config)#ipdhcpexcluded-address 192.168.1.200 192.168.1.254

//配置dhcp不分配的地址

2、R2客户端获取IP地址

Client#configureterminal

//进入全局模式

dhcp(config)#interfacefastethernet0/0

//进入fastethernet0/0接口

dhcp(config-if)#ipaddress dhcp

linux网络基础之路由DHCP配置 第6篇

dhcpd.conf-dhcpd 配置文件

描述

dhcpd.conf 文件包括ISC DHCP的dhcpd的配置信息。

dhcpd.conf文件是一个普通格式的ASCII码文档,它由内置的递归解析器解释。

dhcpd.conf文件可能会包含许多额外的tab和空格、空行,它们的目的是让文件更容易阅读。其中的关键字对大小写不敏感。注释语句可以放在任何位置(除了引号中)注释语句用# 开头,这一行结束时注释语句自然结束。

文件包括一组语句,语句在一对大括号中,包含参数和声明。

参数语句说明如何做一件事(例如,租期是多长时间),或者是否做一件事情。(例如,dhcpd 是否为未知客户提供地址),或者给客户提供哪种参数(例如,使用网关220.177.244.7)。

声明用来描述网络的拓扑结构、网络上的客户,提供可以为客户端分配的地址,或者对某个客户端组应用组(group)参数。在任何组参数中,所有的这些组参数必须比使用这些组参数的语句先出现。

网络声明包含多子网的网络(有些地方译为:超网,但超网太难理解了,这里叫“多子网网络”)和子网的拓扑声明。对于有地址被动态分配给客户端的子网,子网声明中必须有一个range声明语句。对于静态分配的地址,或者是已知客户的安装,每个客户端都必须使用一个host声明语句。如果一个参数应用到一组声明中,这些声明并不只与某个子网相关,可以定义一个“组参数”。

对每一个要服务的子网,每个dhcp服务器连接的子网,都必须有一个子网声明,用来告诉dhcpd如何处理那个子网上的地址。即使一个子网不需要分配任何地址,也需要一个子网声明。

一些物理网络上不只有一个IP子网存在,例如,如果一个网络需要一个8位的子网,但是当业务发展使总的节点数超过了254台,就需要增加一个8位的子网。这时,就增加了一个新的物理网络,这种情况下,2个网络的子网声明必须包含在一个“多子网网络声明(超级作用域)”中。

有些网络的客户端不只有一个子网,可能会为同一子网中一些客户端分配的一些参数与其它的客户端不同。这样的用户可以使用host语句来定义,一些参数也可以定义在“组参数”语句中,它被这些客户端共同调用。对于需要根据不同情况获得不同地址的客户端,可能会使用“类声明(class declarations)”和“条件声明(conditional declarations)”语句,这样可以根据客户端发送的信息来决定分配给客户端的参数。

当一个客户端启动时,服务器先查看是否有匹配客户端的host语句,如果没有,再看是否有匹配的“类声明(class declarations)”语句,接着查看是否有“池pool”匹配,“子网subnet”匹配和“多子网网络(超级作用域)shared-net-work”匹配。(根据这些匹配,)将符合这个客户端的参数提供给它。每种参数都不会被分析第2次,如果它们出现了2次或2次以上,那么会使用那个最精确出现的地方。

dhcpd首先查找客户端是否有包含固定IP地址的host语句,这个地址要在客户端启动的那个子网中,或者“多子网网络”中,如果没有对应的host语句匹配,那就查找非固定地址的声明。

例如:

一个典型的dhcpd.conf 文件将会象下面这样:

global parameters...subnet 204.254.239.0 netmask 255.255.255.224 {

subnet-specific parameters...range 204.254.239.10 204.254.239.30;

}

subnet 204.254.239.32 netmask 255.255.255.224 {

subnet-specific parameters...range 204.254.239.42 204.254.239.62;

}

subnet 204.254.239.64 netmask 255.255.255.224 {

subnet-specific parameters...range 204.254.239.74 204.254.239.94;

}

group {

group-specific parameters...host zappo.test.isc.org {

host-specific parameters...}

host beppo.test.isc.org {

host-specific parameters...}

host harpo.test.isc.org {

host-specific parameters...}

}

图 1

注意文件的开始,它是全局参数放置的地方,可能会是:

组织的域名,DNS服务器的地址(如果这个服务器对整个网络都是一样的)和其它一些。比如:

option domain-name “isc.org”;

option domain-name-servers ns1.isc.org, ns2.isc.org;

图 2

如图2中所示,可以使用DNS服务器的名称而不使用它的IP地址,如果指定不只一个DNS服务器地址,那么只要有可能,所有地址都会提供给客户端。

每个子网都要指明的最可能必须的参数是router,如图1所示。因此对于第一个子网,它就应该是这个样子的 option routers 204.254.239.1;

注意这里的地址是数字形式的,如果每个网关都有域名,这就不是必须的,使用域名也是合法的。然而,很多情况下,多个网关只有一个域名,这样就不能使用域名了。

在图1中,有一个group 语句,它为一组host语句zappo,beppo和harpo提供了通用的参数。如你所见,这些主机都在test.isc.org这个域里,这样它在“组参数”中指明就会覆盖全局设置的参数:

option domain-name “test.isc.org”;

而且,指明它们的域,可能用在测试机器中,如果我们要测试DHCP的租约机制,可以在这里设置比默认值更短的租约:

max-lease-time 120;

default-lease-time 120;

你可能注意到有些参数以option 关键字开头,有些不。以option 关键字开头的语句对应实际的DHCP选项,不以option关键字开头的选项控制服务端(例如,租期)或客户端的选项不在DHCP协议中(例如,服务器名或文件名)

在图1中,每个host 都有指定的参数,它会包含象hostname选项,要上传的文件名(filename 参数),还有要上传的服务器的地址(next-server 参数)。通常,任何参数都可以在任何可以出现的地方出现,并且按照参数出现位置确定应用范围。

假设你的环境中有许多没有CD的X终端,这些终端有不同的型号,你想为每种型号确定一个启动文件,一种方法是给每个服务器和组都使用host语句:

group {

filename “Xncd19r”;

next-server ncd-booter;

host ncd1 { hardware ethernet 0:c0:c3:49:2b:57;}

host ncd4 { hardware ethernet 0:c0:c3:80:fc:32;}

host ncd8 { hardware ethernet 0:c0:c3:22:46:81;}

}

group {

filename “Xncd19c”;

next-server ncd-booter;

host ncd2 { hardware ethernet 0:c0:c3:88:2d:81;}

host ncd3 { hardware ethernet 0:c0:c3:00:14:11;}

}

group {

filename “XncdHMX”;

next-server ncd-booter;

host ncd1 { hardware ethernet 0:c0:c3:11:90:23;}

host ncd4 { hardware ethernet 0:c0:c3:91:a7:8;}

host ncd8 { hardware ethernet 0:c0:c3:cc:a:8f;}

}

地址池

“池”语句(pool)用来定义一个地址池,即便是在同一个网段或者子网,也可以定义几个池,系统将通过“池”来区分它们。例如,你可能想提供一大段地址分配给DHCP客户端时同时提供很短的租约的一小段地址,用来给未知客户。如果有防火墙,你可能会安排一段地址池能上网,另一个地址池不能上网,这可以鼓励用户注册到DHCP系统中来,也就需要建立两个地址池:

subnet 10.0.0.0 netmask 255.255.255.0 {

option routers 10.0.0.254;

# Unknown clients get this pool.pool {

option domain-name-servers bogus.example.com;

max-lease-time 300;

range 10.0.0.200 10.0.0.253;

allow unknown-clients;

}

# Known clients get this pool.pool {

option domain-name-servers ns1.example.com, ns2.example.com;

max-lease-time 28800;

range 10.0.0.5 10.0.0.199;

deny unknown-clients;

}

}

上面这个例子中,已知客户和未知客户在相同的子网中,也可能将已知和未知客户分配在不同的子网中,或者在“多子网层次(超级作用域)”,这样地址池的范围可能跨越不同的子网。正如前面的例子,地址池可以允许或拒绝一个控制用户存取的组,这个组名前面要有allow或 deny 关键字。

如果一个池有一个允许列表,只有匹配的客户端才可以获得地址池的地址,如果这个池有一个拒绝列表,只有不匹配的客户端才可以获得池中的地址,如果同时存在允许和拒绝列表,那么只有在允许列表并且不在拒绝列表中的客户端才可以获得池中的地址。

动态地址分配

地址分配实际只在客户端在初始状态并且发送一个 DHCPDISCOVER信息时完成。如果客户端认为它有一个有效的租约并且发送了一个DHCPREQUEST信息来初始化或者更新租约,服务器就只有3个选择:(1)它可以忽略DHCPREQUEST信息,并且返回一个DHCPNAK 信息来告诉客户端,要求客户端停止使用这个地址,(2)或者发送一个DHCPACK信息,告诉客户端继续再使用这个地址一段时间,如果服务器找到客户端要求的地址,并且这个地址对于这个客户也是可用的,服务器会发送一个DHCPACK信息,如果这个地址已经不能用了,客户端就不能使用它,此时服务器将会发送一个DHCPNAK信息,(3)如果服务器不知道这个地址,它会先保持沉默,除非这个地址对于客户端依附的地址段是不正确的,这种情况下服务器会发送一个DHCPNAK,即便它完全不知道这个地址。

如果有一个host语句定义了客户端,同时host语句中包含了固定地址(fixed-address),这个IP地址对于客户端实际连接的网段也是合法的,此时DHCP服务器不动态分配地址,而是发送host语句指明的地址。如果此时用户发送了DHCPREQUEST信息来获得其它地址,服务器会回应一个DHCPNAK信息,来拒绝为用户分配其它地址。

当一个DHCP服务器为客户端分配一个新的地址时(记住,这只发生在客户端发送DHCPDISCOVER信息时),它首先查找lease文件,看客户机是否存在一个有效的地址租约,或者此客户机原来是否有一个地址(这个地址已经过期),如果有,服务器就会检查那个地址,看客户端是否被允许使用这个地址,如果客户端已经不被允许使用这个地址(通常是客户机从另外一个子网登录了,或者此地址被其它客户端占用),并且服务器lease文件中显示原来的租约还存在,服务器就释放这个租约,事实上,此时是客户端发送的DHCPDISCOVER信息,它已经证明客户端实际并没有使用这个租约。如果没有找到存在的租约,或者客户端被强迫接收一个已经存在的租约,那么服务器就会查找客户端所在网段的地址池,找一个允许客户端使用而又没有使用的地址,它会按顺序遍历每个地址池(所有地址池外的“范围”range定义语句都组成一个没有允许列表的单独的池)。如果地址池的允许列表允许客户端得到一个池中的地址,这个地址池会被检查是否有可用的地址,如果有,客户端将会得到这个地址;否则,会检查下一个地址池。如果一直都没有找到可用的地址,服务器就不发送回应。如果找到一个地址,这个地址以前从未被任何客户端使用过,这个地址将立即分配给这个客户,如果这个地址曾经分配给另一个客户端,服务器会尝试查找一个从未分配的地址给客户端。

DHCP服务器使用哈希表(hash table)来产生一组可用的IP地址,这意味着地址不以任何特定的顺序存放,这样也就不能预测DHCP服务器下一个要分配的地址。前一个版本的ISC DHCP服务器使用降序来分配地址,现在不是了,并且在这个版本里也没有办法配置服务器分发地址的顺序(ISC DHCP 3)。

防止IP地址冲突

DHCP服务器在分配IP地址前检查它们是否被使用来防止冲突。它通过向准备分配的IP地址发送ICMP Echo 请求信息来完成,如果1秒内没有接收到ICMP Echo reply信息,就假定这个地址是可用的。这只对在range语句中指明的租约,并且租约被DHCP服务器认为可用时有效。例如,DHCP服务器或者它的热备机没有列出这个租约在使用中。如果收到ICMP Echo回应,DHCP服务器会假定出现了配置错误――IP地址被网络上的主机使用了,然后它标记这个地址为“废弃地址”,不再把它分配给客户端。如果DHCP客户端试图得到一个地址,但是却没有可用的地址,服务器会(随机)标记一个“废弃地址”为“可用”,然后向这个地址发送同样的ICMP Echo 请求,如果没有得到 ICMP Echo reply回应,这个地址就会分配给这个客户。

如果要收回的第一个IP地址是可用的,DHCP服务器不会去循环使用“废弃地址”。而且,当下一个客户的DHCPDISCOVER信息到达时,它会用相同的方法开始一个新的分配,并且尝试分配一个新的IP地址。

在Linux中配置DHCP服务器 安装DHCP服务器

DHCP配置文件

可以使用RHEL 5.0自身携带的RPM包安装,安装结束后DHCP端口监督程序dhcpd配置文件是/etc目录中的名为dhcpd.conf的文件。下面手工建立/etc/dhcpd.conf文件,该文件通常包括3个部分,即parameters参数、declarations声明和option选项。

1.DHCP配置文件中的parameters

parameters表明如何执行任务,以及是否要执行任务或将哪些网络配置选项发送给客户端,主要参数如表8-1所示。

DHCP配置文件中的主要参数

参 数

解 释

ddns-update-style

配置DHCP-DNS互动更新模式

default-lease-time

指定默认租赁时间的长度,单位是秒

max-lease-time

指定最大租赁时间长度,单位是秒

hardware

指定网卡接口类型和MAC地址

server-name

通知DHCP客户端服务器名称

get-lease-hostnames flag

检查客户端使用的IP地址

fixed-address ip 分配给客户端一个固定的地址

authritative 拒绝不正确的IP地址的要求

2.DHCP配置文件中的declarations declarations用来描述网络布局及提供客户的IP地址等,主要声明 声 明 解 释

shared-network 用来告知是否一些子网络共享相同网络 subnet 描述一个IP地址是否属于该子网 range起始IP终止IP 提供动态分配IP的范围 host主机名称 参考特别的主机 group 为一组参数提供声明 续表 声 明

解 释

allow unknown-clients﹔deny unknown-client 是否动态分配IP给未知的使用者

allow bootp;deny bootp 是否响应激活查询

allow booting﹔deny booting 是否响应使用者查询

filename 开始启动文件的名称,应用于无盘工作站

next-server

设置服务器从引导文件中装入主机名,应用于无盘工作站

DHCP配置文件中的option

option用来配置DHCP可选参数,全部用option关键字作为开始,主要选项如表8-3所示。表8-3 DHCP配置文件中option关键字的主要选项 选 项

解 释

subnet-mask

为客户端设定子网掩码

domain-name

为客户端指明DNS名字

domain-name-servers

为客户端指明DNS服务器的IP地址

host-name

为客户端指定主机名称

routers

为客户端设定默认网关

broadcast-address

为客户端设定广播地址

ntp-server

为客户端设定网络时间服务器的IP地址

time-offset

为客户端设定格林威治时间的偏移时间,单位是秒

配置实例

在下面的实例中使用一个example.com的虚拟域名,用户需要修改其中的内容以满足网络的需求。/etc/dhcpd.conf文件的内容如下:

# The options outside a subnet directive are global unless

# over-ridden by the same setting inside the subnet directive.option domain-name-servers 192.0.34.43,193.0.0.236;

default-lease-time 6000;max-lease-time 7200;# If this DHCP server is the official DHCP server for the local

# network,the authoritative directive should be uncommented.authoritative;

# Use this to send dhcp log messages to a different log file(you also

# have to hack syslog.conf to complete the redirection).log-facility local7;

# Handle client dynamic dns updates

ddns-update-style none;# Example Network 1(on eth0)

subnet 192.168.200.0 netmask 255.255.255.0 {

option domain-name “corp.example.com”;

range 192.168.200.100 192.168.200.200;

option routers 192.168.200.254;

}

上面的实例配置文件分为两个部分,即子网配置信息和全局配置信息。可以有多个子网,这里为了简化,只指定了一个子网。

(1)Subnet。

在上面的例子中,一个子网声明以“subset”关键字开始,所以子网信息包括在{}中。{}中的配置信息只对该子网有效,会覆盖全局配置。

(2)Global。

所有子网以外的配置都是全局配置,如果同一个全局配置没有被子网配置覆盖,则其将对所有子网生效。

(3)Configuration Options。

下面是上例中配置指令的解释说明。

option domain-name-servers 192.0.34.43,193.0.0.236;

这一行指定客户端应该使用的DNS服务器,该选项可以用于全局参数或者子网参数。

default-lease-time 6000;max-lease-time 7200;

这两行是相关的,default-lease-time指定客户端需要刷新配置信息的时间间隔(秒),max-lease-time为客户端用于无法从服务器获得任何信息的时间,超过该时间则会丢弃之前从该DHCP服务器获得的所有信息,而转向使用OS的默认设置。

authoritative;

指定当一个客户端试图获得一个不是该DHCP服务器分配的IP信息,DHCP将发送一个拒绝消息,而不会等待请求超时。当请求被拒绝,客户端会重新向当前DHCP发送IP请求获得新地址。

log-facility daemon;

指定DHCP服务器发送的日志信息的日志级别。

ddns-update-style none;

该配置可以指定一个方法,客户端用该方法来更新IP对应的域名信息,本例中禁用了该特性。

subnet 192.168.200.0 netmask 255.255.255.0 {

option domain-name “corp.example.com”;

range 192.168.200.100 192.168.200.200;

option routers 192.168.200.254;

}

上面内容为子网配置,第1行指定该子网地址和掩码。DHCP服务器必须拥有该子网的一个IP,domain-name设置该客户端的域名。DHCP服务器可以负责整个子网的信息,也可以只负责子网的一段。

option routers配置默认网关IP。

启动DHCP服务器

1.建立客户端租约文件

运行DHCP服务器还需要一个名为“dhcpd.leases”的文件,其中保存所有已经分发的IP地址。在Red Hat Linux发行版本中,该文件位于/var/lib/dhcp/目录中。如果通过RPM安装ISC DHCP,那么该目录应该已经存在。dhcpd.leases的文件格式为:

Leases address {statement}

一个典型的文件内容如下:

lease 192.168.1.255 { #DHCP服务器分配的IP地址#

starts 1 2005/05/02 03:02:26;# lease 开始租约时间#

ends 1 2005/05/02 09:02:26;# lease 结束租约时间#

binding state active;

next binding state free;

hardware ethernet 00:00:e8:a0:25:86;#客户机网卡MAC地址#

uid “010000350240%206”;#用来验证客户机的UID标志#

client-hostname “cjh1”;#客户机名称#

}

注意:lease开始租约时间和lease结束租约时间是格林威治标准时间(GMT),不是本地时间。

第1次运行DHCP服务器时,dhcpd.leases是一个空文件,也不用手工建立。如果不是通过RPM安装ISC DHCP,或者dhcpd已经安装,那么应该试着确定dhcpd将其lease文件写到何处并确保该文件存在。也可以手工建立一个空文件:

#touch /var/lib/dhcp/dhcpd.leases

2.启动和检查DHCP服务器

使用命令启动DHCP服务器:

#service dhcpd start

使用ps命令检查dhcpd进程:

#ps-ef | grep dhcpd

root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd

root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd

使用netstat检查dhcpd运行的端口:

# netstat-nutap | grep dhcpd

udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd

3.设置DHCP转发代理

DHCP的转发代理(dhcrelay)允许把无DHCP服务器子网内的DHCP和BOOTP请求转发给其他子网内的一台或多台DHCP服务器。当某个DHCP客户端请求信息时,DHCP转发代理把该请求转发给DHCP转发代理启动时所指定的一台DHCP服务器。当某台DHCP服务器返回一个回应时,该回应被广播或单播给发送最初请求的网络。除非使用INTERFACES指令在/etc/sysconfig/dhcrelay文件中指定了接口,否则DHCP转发代理监听所有接口上的DHCP请求。要启动DHCP转发代理,使用命令:

service dhcrelay start

4.从指定端口启动DHCP服务器

如果系统连接不止一个网络接口,但是只想让DHCP服务器启动其中之一,则可以配置DHCP服务器只在相应设备上启动。在/etc/sysconfig/dhcpd中,把接口的名称添加到DHCPDARGS的列表中:

# Command line options here

DHCPDARGS=eth0

如果有一个带有两块网卡的防火墙机器,这种方法就会大派用场。一块网卡可以被配置成DHCP客户端从互联网上检索IP地址;另一块网卡可以被用做防火墙之后的内部网络的DHCP服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接其守护进程。

其他可在/etc/sysconfig/dhcpd中指定的命令行选项如下。

(1)-p

:指定dhcpd应该监听的UDP端口号码,默认值为67。DHCP服务器在比指定的UDP端口大一位的端口号上把回应传输给DHCP客户端。例如,如果使用默认端口67,服务器就会在端口67上监听请求,然后在端口68上回应客户。如果在此处指定了一个端口号,并且使用了DHCP转发代理,所指定的DHCP转发代理所监听的端口必须是同一端口。

(2)-f:把守护进程作为前台进程运行,在调试时最常用。

(3)-d:把DCHP服务器守护进程记录到标准错误描述器中,在调试时最常用。如果未指定,日志将被写入/var/log/messages中。

(4)-cf:指定配置文件的位置,默认为/etc/dhcpd.conf。

(5)-lf:指定租期数据库文件的位置。如果租期数据库文件已存在,在DHCP服务器每次启动时使用同一个文件至关重要。建议只在无关紧要的机器上为调试目的才使用该选项,默认为/var/lib/dhcp/dhcpd.leases。

(6)-q:在启动该守护进程时,不要显示整篇版权信息。

5.管理DHCP服务器端口

常见的DHCP服务器是dhcpd,可以通过命令行设定其监听端口。例如,使用以下命令:

#dhcpd eth0

该命令允许dhcpd进程只在eth0网络端口上工作,默认为监听所有端口。由于DHCP同样使用67和68端口通信,所以更改该端口将造成DHCP服务无法正常使用。

设置DHCP客户端

1.在Linux下配置DHCP客户端

配置DHCP客户端的第1步是确定内核能够识别网卡,多数网卡会在安装过程中被识别,系统会为该网卡配置恰当的内核模块。如果在安装后添加了一块网卡,Kudzu应该会识别它,并提示为其配置相应的内核模块。通常网管员选择手工配置DHCP客户端,需要修改/etc/sysconfig/network文件来启用联网;修改/etc/sysconfig/network-scripts目录中每个网络设备的配置文件,在该目录中的每种设备都有一个叫做“ifcfg-eth?”的配置文件。eth?是网络设备的名称,如eth0等。如果想在引导时启动联网,NETWORKING变量必须被设为yes。除此之外,/etc/sysconfig/network文件应该包含以下行:

NETWORKING=yes

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

每种需要配置使用DHCP的设备都需要一个配置文件。其他网络脚本包括的选项如下。

(1)DHCP_HOSTNAME:只有当DHCP服务器在接收IP地址前需要客户端指定主机名时才使用该选项。

(2)PEERDNS=:取值为如下之一。

 yes:使用来自服务器的信息来修改/etc/resolv.conf。若使用DHCP,那么yes是默认值。

 no:不要修改/etc/resolv.conf。

(3)SRCADDR=:是用于输出包的指定源IP地址。

(4)USERCTL=:取值为如下之一。

 yes:允许非根用户控制该设备。

 no:不允许非根用户控制该设备。

2.在Windows下设置DHCP客户端

Windows 2000和Windows XP的配置方法相同,DHCP客户端的配置很简单。只需要在“控制面板”中双击“网络连接”图标,然后在如图8-1所示的“本地连接属性”对话框中选择“Internet协议(TCP/IP)”属性。

“常规”选项卡中选择“自动获取IP地址”和“自动获取DNS服务器地址”单选按钮。

3.测试端口监督程序

现在应该已经可以将一个客户机接入到网络中,并通过DHCP请求一个IP地址。要通过Windows客户端测试,在DOS提示符下执行以下操作。(1)清除适配器可能已经拥有的IP地址信息,执行命令:

ipconfig /release

(2)向DHCP服务器请求一个新的IP地址,执行命令:

ipconfig /renew

显示从DHCP服务器获得的信息,应该会看到Primary WINS Server、DNS Servers和Connection-specific DNS Suffix域都获得了dhcpd.conf文件中提供的数据

DHCP简介

DHCP的前身是BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取配置信息的自举协议。DHCP使用客户端/服务器模式,请求配置信息的计算机叫做“DHCP客户端”,而提供信息的叫做“DHCP服务器”。DHCP为客户端分配地址的方法有3种,即手工配置、自动配置和动态配置。DHCP最重要的功能就是动态分配,除了IP地址,DHCP还为客户端提供其他的配置信息,如子网掩码,从而使得客户端无须用户动手即可自动配置并连接网络。

为什么使用DHCP

DHCP在快速发送客户网络配置方面很有用,当配置客户端系统时,若管理员选择DHCP,则不必输入IP地址、子网掩码、网关或DNS服务器,客户端从DHCP服务器中检索这些信息。DHCP在网络管理员想改变大量系统的IP地址时也有用,与其重新配置所有系统,不如编辑服务器中的一个用于新IP地址集合的DHCP配置文件。如果某机构的DNS服务器改变,这种改变只须在DHCP服务器中,而不必在DHCP客户端上进行。一旦客户端的网络被重新启动(或客户端重新引导系统),改变就会生效。除此之外,如果便携电脑或任何类型的可移动计算机被配置使用DHCP,只要每个办公室都有一个允许其联网的DHCP服务器,它就可以不必重新配置而在办公室间自由移动。

DHCP的工作流程

1.发现阶段

即DHCP客户端查找DHCP服务器的阶段。客户机以广播方式(因为DHCP服务器的IP地址对于客户端来说是未知的)发送DHCP discover信息来查找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

2.提供阶段

即DHCP服务器提供IP地址的阶段,在网络中接收到DHCP discover信息的DHCP服务器都会做出响应。它从尚未出租的IP地址中挑选一个分配给DHCP客户端,向其发送一个包含出租的IP地址和其他设置的DHCP offer信息。

3.选择阶段

即DHCP客户端选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户端发送DHCP offer信息,则DHCP客户端只接受第1个收到的DHCP offer信息。然后它就以广播方式回答一个DHCP request信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有DHCP服务器,它将选择某台DHCP服务器所提供的IP地址。

4.确认阶段

即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCP request信息之后,它向DHCP客户端发送一个包含其所提供的IP地址和其他设置的DHCP ACK信息,告诉DHCP客户端可以使用该IP地址,然后DHCP客户端便将其TCP/IP与网卡绑定。另外,除DHCP客户端选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

5.重新登录

以后DHCP客户端每次重新登录网络时,不需要发送DHCP discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户端继续使用原来的IP地址,并回答一个DHCP ACK信息。如果此IP地址已无法再分配给原来的DHCP客户端使用(比如此IP地址已分配给其他DHCP客户端使用),则DHCP服务器给DHCP客户端回答一个DHCP NACK信息。当原来的DHCP客户端收到此信息后,必须重新发送DHCP discover信息来请求新的IP地址。

6.更新租约

DHCP服务器向DHCP客户端出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回该IP地址。如果DHCP客户端要延长其IP租约,则必须更新其IP租约。DHCP客户端启动时和IP租约期限过一半时,DHCP客户端都会自动向DHCP服务器发送更新其IP租约的信息。

DHCP的设计目标

(1)DHCP应该是一种机制而不是策略,它必须允许本地系统管理员控制配置参数,本地系统管理员应该能够对所希望管理的资源进行有效的管理。

(2)客户端不需要手工配置,而应该在不参与的情况下发现合适于本地机的配置参数,并利用这些参数加以配置。

(3)不需要为单个客户端配置网络,在通常情况下,网络管理员没有必要输入任何预先设计好的用户配置参数。

(4)DHCP不需要在每个子网上配置一台服务器,出于经济原因,DHCP服务器必须可以和路由器或BOOTP转发代理一起工作。

(5)DHCP客户端必须能对多个DHCP服务器提供的服务做出响应,出于网络稳定与安全的考虑,有时需要在网络中添加多台DHCP服务器。

(6)DHCP必须静态配置,而且必须用现存的网络协议实现。

(7)DHCP必须能够和BOOTP转发代理互操作。

(8)DHCP必须能够为现有的BOOTP客户端提供服务。

(9)不允许有多个客户端同时使用一个网络地址。

(10)在DHCP客户端重新启动后仍然能够保留其原先的配置参数,如果可能,客户端应该被指定为相同的配置参数。

(11)在DHCP服务器重新启动后仍然能够保留客户端的配置参数,如果可能,即使DHCP机制重新启动,也应该能够为客户端分配原有的配置参数。

(12)能够为新加入的客户端自动提供配置参数。

(13)支持对特定客户端永久固定分配网络地址。

上面(9)~(13)的设计目标是对于网络层参数的设计而言的,在网络层参数上,DHCP必须做到这几点。

安装DHCP服务器

DHCP配置文件

可以使用RHEL 5.0自身携带的RPM包安装,安装结束后DHCP端口监督程序dhcpd配置文件是/etc目录中的名为dhcpd.conf的文件。下面手工建立/etc/dhcpd.conf文件,该文件通常包括3个部分,即parameters参数、declarations声明和option选项。

1.DHCP配置文件中的parameters

parameters表明如何执行任务,以及是否要执行任务或将哪些网络配置选项发送给客户端,主要参数如表8-1所示。

DHCP配置文件中的主要参数

ddns-update-style 配置DHCP-DNS互动更新模式

default-lease-time 指定默认租赁时间的长度,单位是秒

max-lease-time 指定最大租赁时间长度,单位是秒

hardware 指定网卡接口类型和MAC地址

server-name 通知DHCP客户端服务器名称

get-lease-hostnames flag 检查客户端使用的IP地址

fixed-address ip 分配给客户端一个固定的地址

authritative 拒绝不正确的IP地址的要求

2.DHCP配置文件中的declarations

declarations用来描述网络布局及提供客户的IP地址等,主要声明

声明 声

shared-network 用来告知是否一些子网络共享相同网络

subnet 描述一个IP地址是否属于该子网

range起始IP终止IP 提供动态分配IP的范围

host主机名称

参考特别的主机

group 为一组参数提供声明

续表

allow unknown-clients﹔deny unknown-client 是否动态分配IP给未知的使用者 allow bootp;deny bootp 是否响应激活查询

allow booting﹔deny booting 是否响应使用者查询 filename 开始启动文件的名称,应用于无盘工作站

next-server 设置服务器从引导文件中装入主机名,应用于无盘工作站 DHCP配置文件中的option

option用来配置DHCP可选参数,全部用option关键字作为开始,主要选项如表8-3所示。表8-3 DHCP配置文件中option关键字的主要选项 选

subnet-mask 为客户端设定子网掩码

domain-name 为客户端指明DNS名字

domain-name-servers 为客户端指明DNS服务器的IP地址

host-name 为客户端指定主机名称

routers 为客户端设定默认网关

broadcast-address 为客户端设定广播地址

ntp-server 为客户端设定网络时间服务器的IP地址

time-offset 为客户端设定格林威治时间的偏移时间,单位是秒

配置实例

在下面的实例中使用一个example.com的虚拟域名,用户需要修改其中的内容以满足网络的需求。/etc/dhcpd.conf文件的内容如下:

# The options outside a subnet directive are global unless

# over-ridden by the same setting inside the subnet directive.option domain-name-servers 192.0.34.43, 193.0.0.236;

default-lease-time 6000;max-lease-time 7200;# If this DHCP server is the official DHCP server for the local

# network, the authoritative directive should be uncommented.authoritative;

# Use this to send dhcp log messages to a different log file(you also

# have to hack syslog.conf to complete the redirection).log-facility local7;

# Handle client dynamic dns updates

ddns-update-style none;# Example Network 1(on eth0)

subnet 192.168.200.0 netmask 255.255.255.0 {

option domain-name “corp.example.com”;

range 192.168.200.100 192.168.200.200;

option routers 192.168.200.254;}

上面的实例配置文件分为两个部分,即子网配置信息和全局配置信息。可以有多个子网,这里为了简化,只指定了一个子网。

(1)Subnet。

在上面的例子中,一个子网声明以“subset”关键字开始,所以子网信息包括在{}中。{}中的配置信息只对该子网有效,会覆盖全局配置。

(2)Global。

所有子网以外的配置都是全局配置,如果同一个全局配置没有被子网配置覆盖,则其将对所有子网生效。

(3)Configuration Options。

下面是上例中配置指令的解释说明。

option domain-name-servers 192.0.34.43, 193.0.0.236;

这一行指定客户端应该使用的DNS服务器,该选项可以用于全局参数或者子网参数。

default-lease-time 6000;max-lease-time 7200;

这两行是相关的,default-lease-time指定客户端需要刷新配置信息的时间间隔(秒),max-lease-time为客户端用于无法从服务器获得任何信息的时间,超过该时间则会丢弃之前从该DHCP服务器获得的所有信息,而转向使用OS的默认设置。

authoritative;

指定当一个客户端试图获得一个不是该DHCP服务器分配的IP信息,DHCP将发送一个拒绝消息,而不会等待请求超时。当请求被拒绝,客户端会重新向当前DHCP发送IP请求获得新地址。

log-facility daemon;

指定DHCP服务器发送的日志信息的日志级别。

ddns-update-style none;

该配置可以指定一个方法,客户端用该方法来更新IP对应的域名信息,本例中禁用了该特性。

subnet 192.168.200.0 netmask 255.255.255.0 {

option domain-name “corp.example.com”;

range 192.168.200.100 192.168.200.200;option routers 192.168.200.254;}

上面内容为子网配置,第1行指定该子网地址和掩码。DHCP服务器必须拥有该子网的一个IP,domain-name设置该客户端的域名。DHCP服务器可以负责整个子网的信息,也可以只负责子网的一段。

option routers配置默认网关IP。

启动DHCP服务器

1.建立客户端租约文件

运行DHCP服务器还需要一个名为“dhcpd.leases”的文件,其中保存所有已经分发的IP地址。在Red Hat Linux发行版本中,该文件位于/var/lib/dhcp/目录中。如果通过RPM安装ISC DHCP,那么该目录应该已经存在。dhcpd.leases的文件格式为:

Leases address {statement}

一个典型的文件内容如下:

lease 192.168.1.255 { #DHCP服务器分配的IP地址#

starts 1 2005/05/02 03:02:26;# lease 开始租约时间#

ends 1 2005/05/02 09:02:26;# lease 结束租约时间#

binding state active;

next binding state free;

hardware ethernet 00:00:e8:a0:25:86;#客户机网卡MAC地址#

uid “010000350240%206”;#用来验证客户机的UID标志#

client-hostname “cjh1”;#客户机名称# }

注意:lease开始租约时间和lease结束租约时间是格林威治标准时间(GMT),不是本地时间。第1次运行DHCP服务器时,dhcpd.leases是一个空文件,也不用手工建立。如果不是通过RPM安装ISC DHCP,或者dhcpd已经安装,那么应该试着确定dhcpd将其lease文件写到何处并确保该文件存在。也可以手工建立一个空文件:

#touch /var/lib/dhcp/dhcpd.leases

2.启动和检查DHCP服务器

使用命令启动DHCP服务器:

#service dhcpd start

使用ps命令检查dhcpd进程:

#ps-ef | grep dhcpd

root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd

root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd

使用netstat检查dhcpd运行的端口:

# netstat-nutap | grep dhcpd

udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd

3.设置DHCP转发代理

DHCP的转发代理(dhcrelay)允许把无DHCP服务器子网内的DHCP和BOOTP请求转发给其他子网内的一台或多台DHCP服务器。当某个DHCP客户端请求信息时,DHCP转发代理把该请求转发给DHCP转发代理启动时所指定的一台DHCP服务器。当某台DHCP服务器返回一个回应时,该回应被广播或单播给发送最初请求的网络。除非使用INTERFACES指令在/etc/sysconfig/dhcrelay文件中指定了接口,否则DHCP转发代理监听所有接口上的DHCP请求。要启动DHCP转发代理,使用命令:

service dhcrelay start

4.从指定端口启动DHCP服务器

如果系统连接不止一个网络接口,但是只想让DHCP服务器启动其中之一,则可以配置DHCP服务器只在相应设备上启动。在/etc/sysconfig/dhcpd中,把接口的名称添加到DHCPDARGS的列表中: # Command line options here

DHCPDARGS=eth0

如果有一个带有两块网卡的防火墙机器,这种方法就会大派用场。一块网卡可以被配置成DHCP客户端从互联网上检索IP地址;另一块网卡可以被用做防火墙之后的内部网络的DHCP服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接其守护进程。

其他可在/etc/sysconfig/dhcpd中指定的命令行选项如下。

(1)-p

:指定dhcpd应该监听的UDP端口号码,默认值为67。DHCP服务器在比指定的UDP端口大一位的端口号上把回应传输给DHCP客户端。例如,如果使用默认端口67,服务器就会在端口67上监听请求,然后在端口68上回应客户。如果在此处指定了一个端口号,并且使用了DHCP转发代理,所指定的DHCP转发代理所监听的端口必须是同一端口。

(2)-f:把守护进程作为前台进程运行,在调试时最常用。

(3)-d:把DCHP服务器守护进程记录到标准错误描述器中,在调试时最常用。如果未指定,日志将被写入/var/log/messages中。

(4)-cf:指定配置文件的位置,默认为/etc/dhcpd.conf。

(5)-lf:指定租期数据库文件的位置。如果租期数据库文件已存在,在DHCP服务器每次启动时使用同一个文件至关重要。建议只在无关紧要的机器上为调试目的才使用该选项,默认为/var/lib/dhcp/dhcpd.leases。

(6)-q:在启动该守护进程时,不要显示整篇版权信息 5.管理DHCP服务器端口

常见的DHCP服务器是dhcpd,可以通过命令行设定其监听端口。例如,使用以下命令:

#dhcpd eth0

该命令允许dhcpd进程只在eth0网络端口上工作,默认为监听所有端口。由于DHCP同样使用67和68端口通信,所以更改该端口将造成DHCP服务无法正常使用。

设置DHCP客户端

1.在Linux下配置DHCP客户端 配置DHCP客户端的第1步是确定内核能够识别网卡,多数网卡会在安装过程中被识别,系统会为该网卡配置恰当的内核模块。如果在安装后添加了一块网卡,Kudzu应该会识别它,并提示为其配置相应的内核模块。通常网管员选择手工配置DHCP客户端,需要修改/etc/sysconfig/network文件来启用联网;修改/etc/sysconfig/network-scripts目录中每个网络设备的配置文件,在该目录中的每种设备都有一个叫做“ifcfg-eth?”的配置文件。eth?是网络设备的名称,如eth0等。如果想在引导时启动联网,NETWORKING变量必须被设为yes。除此之外,/etc/sysconfig/network文件应该包含以下行:

NETWORKING=yes

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

每种需要配置使用DHCP的设备都需要一个配置文件。其他网络脚本包括的选项如下。

(1)DHCP_HOSTNAME:只有当DHCP服务器在接收IP地址前需要客户端指定主机名时才使用该选项。

(2)PEERDNS=:取值为如下之一。

yes:使用来自服务器的信息来修改/etc/resolv.conf。若使用DHCP,那么yes是默认值。

no:不要修改/etc/resolv.conf。

(3)SRCADDR=:是用于输出包的指定源IP地址。

(4)USERCTL=:取值为如下之一。

yes:允许非根用户控制该设备。

no:不允许非根用户控制该设备。

2.在Windows下设置DHCP客户端

Windows 2000和Windows XP的配置方法相同,DHCP客户端的配置很简单。只需要在“控制面板”中双击“网络连接”图标,然后在如图8-1所示的“本地连接属性”对话框中选择“Internet协议(TCP/IP)”属性。“常规”选项卡中选择“自动获取IP地址”和“自动获取DNS服务器地址”单选按钮。

3.测试端口监督程序

现在应该已经可以将一个客户机接入到网络中,并通过DHCP请求一个IP地址。要通过Windows客户端测试,在DOS提示符下执行以下操作。

(1)清除适配器可能已经拥有的IP地址信息,执行命令:

ipconfig /release

(2)向DHCP服务器请求一个新的IP地址,执行命令:

ipconfig /renew

显示从DHCP服务器获得的信息,应该会看到Primary WINS Server、DNS Servers和Connection-specific DNS Suffix域都获得了dhcpd.conf文件中提供的数据:

ipconfig /all

DHCP服务器的故障排除

通常配置DHCP服务器很容易,有一些技巧可以帮助避免出现问题。对服务器而言,要确保网卡正常工作并具备广播功能;对客户端而言,要确保网卡正常工作。最后,要考虑网络的拓扑,以及客户端向DHCP服务器发出的广播消息是否会受到阻碍。另外,如果dhcpd进程没有启动,那么可以浏览syslog消息文件来确定是哪里出了问题,这个消息文件通常是/var/ log/messages。

客户端无法获取IP地址

DHCP服务器配置完成且没有语法错误,但是网络中的客户端却无法取得IP地址。这通常是由于Linux DHCP服务器无法接收来自255.255.255.255的DHCP客户端的request封包造成的,一般是Linux DHCP服务器的网卡没有设置MULTICAST功能。为了让dhcpd(dhcp程序的守护进程)能够正常地和DHCP客户端沟通,dhcpd必须传送封包到255.255.255.255这个IP地址。但是在有些Linux系统中,255.255.255.255这个IP地址被用来作为监听区域子网域(local subnet)广播的IP地址。所以需要在路由表(routing table)中加入255.255.255.255以激活MULTICAST功能,执行命令:

route add-host 255.255.255.255 dev eth0

如果报告错误消息:

255.255.255.255:Unkown host

那么修改/etc/hosts,加入如下行:

255.255.255.255 dhcp

DHCP客户端程序和DHCP服务器不兼容

由于Linux有许多发行版本,不同版本使用的DHCP客户端和DHCP服务器程序也不相同。Linux提供了4种DHCP客户端程序,即pump、dhclient、dhcpxd和dhcpcd。了解不同Linux发行版本的服务器端和客户端程序对于排除常见错误是必要的,如果使用SuSE Linux 9.1 DHCP服务器和使用Mandrake Linux 9.0客户端不兼容的情况,则必须更换客户端程序。方法是停止客户端的网络服务,卸载原程序,然后安装和服务器端兼容的程序。表8-4所示为主要Linux发行版本使用的DHCP客户端。

主要Linux发行版本使用的DHCP客户端

发行版本

默认DHCP客户端

可选DHCP客户端

DHCP客户端启动脚本

附加配置文件

RHEL 4.0 dhclient

/sbin/ifup

/etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 Debian Linux 3.0 dhclient

/sbin/ifup /etc/network/interfaces /etc/dhclient.conf Mandrake Linux 9.1 dhclient

dhcpcd、dhcpxd和pump /sbin/ifup

/etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/dhclient-eth0.conf SuSE Linux 9.1 dhcpcd dhclient

/sbin/ifup-dhcp

/etc/sysconfig/network/dhcp /etc/sysconfig/network/ifcfg-eth0 管理监控DHCP服务器

/etc/dhcpd.conf通常包括3个部分,即parameters、declarations和option,共40多个参数,可以使用Gdhcpd管理监控DHCP服务器。

Gdhcpd是一个在GNOME及KDE桌面环境下的DHCP管理工具,基本上能实现命令行模式下的所有功能。由于DHCP是一个非常复杂的协议,所以配置工作也是比较麻烦的。

Gdhcpd是一套在GTK+图形界面下开发并用于帮助管理员在桌面环境下完成DHCP设置工作的DHCP前端程序。通过Gdhcpd,网络管理员可以管理DHCP,包括启动及停止DHCP服务器的服务。也可以直接修改配置文件,或决定系统重新启动的时间。几乎所有与DHCP相关的功能都能使用Gdhcpd直接完成。1.下载安装 #Wget linux/gdhcpd/gdhcpd-0.2.9.tar.gz">http://mange.dynalias.org/linux/gdhcpd/gdhcpd-0.2.9.tar.gz 2.系统要求

硬件要求为中央处理器兼容Intel X86处理器,PentiumII 400以上,64 MB(推荐128 MB)内存,150 MB以上硬盘空间,显示内存4 MB。软件要求为内核版本基于2.4或以上,GNOME 1.2以上。桌面分辨率至少为640×480,桌面颜色至少65 000色(16位元)。3.安装前的准备工作

安装过程中需要编译,因此需要GCC(2.96以上)、Qt(2.0以上)和GTK+2.0支持,需要使用RPM来确认:

rpm-qa | grep gcc;rpm-qa | grep qt;rpm-qa | grep gtk+ 4.在命令行下安装软件 命令如下:

gunzip gdhcpd-0.2.9.tar.gz tar vxf gdhcpd-0.2.9.tar cd gdhcpd-0.2.9./configure;make;make install 5.运行软件

执行一个终端运行命令“/usr/sbin/gdhcpd”,显示Scopes设置界面,如图所示。Scopes设置界面

在这个界面中可以设置/etc/dhcpd.conf的parameters、declarations及option。在Single hosts界面中可以设置Hostname和Hardware address等,Single hosts设置界面

在中型网络中,数百台计算机的IP地址的管理是一个大问题。为了解决这个问题,相信许多校园网网管会使用DHCP来动态地为客户端分配IP地址。但是这同样意味着如果DHCP服务器因为某种原因瘫痪,DHCP服务自然也就无法使用。客户端也就无法获得正确的IP地址,从而影响整个网络的运行。为解决这个问题,配置两台以上的DHCP服务器即可。如果其中的一台DHCP服务器故障,另外一台DHCP服务器就会自动承担分配IP地址的任务。对于用户来说,这个过程是透明的,他们并不知道DHCP服务器的变化。

另外,在一个具备多个子网的网络中,提供冗余是一个非常重要的方法。由于DHCP中DHCP服务器负责分配IP地址,一旦DHCP服务器出现故障,那么所有的客户端就无法正确获得IP地址,从而不能访问网络。

可以同时设置多台DHCP服务器来提供冗余,然而Linux的DHCP服务器本身不提供备份。它们占用的IP地址资源也不能重叠,以免发生客户端IP地址冲突的现象。提供容错能力即通过分割可用的IP地址到不同的DHCP服务器上,多台DHCP服务器同时为一个网络服务,从而使得一台服务器发生故障还能正常执行操作。通常为了进一步增强可靠性,还可以将不同的DHCP服务器放置在不同子网中,互相使用中转提供服务。

例如,在两个子网中各自有一台DHCP服务器。标准的做法可以不使用DHCP中转,各子网中的服务器为各个子网服务。然而为了达到容错的目的,可以互相为另一个子网提供服务,通过设置中转或路由器转发广播以达到互为服务的目的。

例如,位于192.168.3.0网络上的srv1的配置文件片段为: subnet 192.168.3.0 netmask 255.255.255.0 {

range 192.168.3.10 192.168.3.199;

}

subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.200 192.168.4.220;} 位于192.168.4.0网络上的srv2的配置文件片段可能为: subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.10 192.168.4.199;}subnet 192.168.3.0 netmask 255.255.255.0 { range 192.168.3.200 192.168.3.220;} 注意:上述设置都是设置样例,标准情况下还需分别指定各option,用于设置IP地址及其相关设置。

可以看出两台服务器都能为两个网络上的客户端分配IP地址,而各自又有一个主要服务的网络。每个网络上的IP地址主要放在本地的服务器上,但也有少部分地址放在另一台子网中的服务器中(地址资源不能冲突),这样提供了一定的容错能力。实际上在多子网网络中,没有必要每个子网设置一台服务器,并使用另外的服务器备份。一般网络中有2台~3台DHCP服务器即可。其他子网可以通过DHCP中转的方式,为该子网提供DHCP服务。以debug模式运行DHCP服务器 执行命令如下: #dhcpd-d 该命令指明dhcpd将出错信息记录到标准的错误描述器,记录的信息将根据/etc/syslog.conf文件的配置保存在指定的文件中。例如,在/etc/syslog.conf文件中要指定记录debug信息:

logalldebuginformationinto/var/log/dameon.log dameon.=debug/var/log/dameon.log

小结

上一篇:辩论赛:网络购物弊大于利辩稿下一篇:微生物复习总结