热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

LinuxDHCP服务器的配置

文章标题:LinuxDHCP服务器的配置。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  11.1 DHCP概述
  11.1.1 采用DHCP的必要性
  在TCP/IP网络上,每台工作站要能存取网络上的资源之前,都必须进行基本的网络配置,一些主要参数诸如IP地址,子网掩码,缺省网关,DNS等必不可少,还可能需要一些附加的信息如IP管理策略之类。对于一个稍微大点的网络而言,网络的管理和维护的任务是相当繁重的。一台计算机从一个子网转移到另一个子网,就要重新对系统进行配置。对于普通水平的工作站用户是不能赋予他们配置自己的工作站网络的权限,而且也没有这个必要。如果一个没有相应技术水平的用户出于好奇或想学习一下的目的错误地更改了工作站的网络配置,造成网络故障,后果不言而喻。因此,需要有一种机制来让TCP/IP的配置和管理从用户端转移到网络管理端,实现IP的集中式管理。解决方案就是用DHCP。
  
  11.1.2 DHCP的主要功能
  DHCP的全称是动态主机配置协议(Dynamic Host Configuration Protocol),由IETF(Internet 网络工程师任务小组)设计,详尽的协议内容在RFC文档rfc2131和rfc1541里。目的就是为了减轻TCP/IP网络的规划、管理和维护的负担,解决IP地址空间缺乏问题。运行DHCP的服务器把TCP/IP网络设置集中起来,动态处理工作站IP地址的配置,用DHCP租约和预置的IP地址相联系,DHCP租约提供了自动在TCP/IP网络上安全地分配和租用IP地址的机制,实现IP地址的集中式管理,基本上不需要网络管理人员的人为干预。而且,DHCP本身被设计成BOOTP(自举协议)的扩展,支持需要网络配置信息的无盘工作站,对需要固定IP的系统也提供了相应支持。
  
  11.2 DHCP的工作原理
  11.2.1 几个DHCP名词
  在介绍DHCP工作原理以前,先解释这几个名词的含义:
  
  DHCP客户:DHCP客户是一通过DHCP来获得网络配置参数的Internet主机,通常就是普通用户的工作站。
  
  DHCP服务器:DHCP服务器是提供网络设置参数给DHCP客户的Internet主机。
  
  DHCP/BOOTP 中继代理:在DHCP客户和服务器之间转发 DHCP 消息的主机或路由器。
  
  DHCP是基于客户机/服务器模型设计的,DHCP客户和DHCP服务器之间通过收发DHCP消息进行通讯。
  
  11.2.2  DHCP 消息的格式:
  
 

  DHCP 消息的格式与BOOTP消息大部分相同, 这样设计可以增强BOOTP服务器工具,同时为BOOTP和DHCP两种客户服务。另外,BOOTP的中继代理可用来转发跨子网的DHCP请求。
  
  各段描述如下
  
  括号里的数字代表这个段以8位组为单位的大小,除options外,其余的段的长度都是固定的,options段的长度至少是312个8位组。
  
  如op(1)代表这个段的长度为一个8位组
  
  op 是消息操作代码,值为1 代表BOOTREQUEST(自举请求)值为2 代表BOOTREPLY(自举响应)
  
  在DHCP客户和DHCP服务器对话期间,op段被DHCP客户设置为BOOTREQUEST(1), 被DHCP服务器设置为 BOOTREPLY(2)。
  
  htype 是硬件地址类型
  
  hlen 是硬件地址长度
  
  hops DHCP客户置这项为零,中继代理要用
  
  xid DHCP客户在寻求时产生的一个随机数, 它提供了对所有后续的DHCP消息中的客户请求和服务器响应的一种联合。
  
  ciaddr 客户机用来请求一个特定的IP地址, 这个地址以前曾经分配给该客户机,希望保留。
  
  yiaddr 由DHCP服务器填写,包含它提供给某一DHCP客户的IP地址。
  
  siaddr 服务器的主机地址
  
  giaddr 中继代理的IP地址
  
  chaddr DHCP客户硬件地址
  
  sname 服务器主机名
  
  file 启动文件名
  
  options 选项
  
  在获得IP地址前,DHCP客户用 htype, hlen 和 chaddr 段表明它的硬件地址, 这个值由向客户硬件地址作出响应的服务器和中继代理利用。 以前BOOTP协议中的两个没有用到的8位组的flags段在DHCP消息里有了定义。这个段的高位比特用于表明客户机能不能在IP地址没有被配置前接收Unicast 回应, 剩下的低位比特保留且必须置为零。 hops 和 secs 段在初始化过程中被中继代理有选择地利用。 sname 和 file 域可以被BOOTP或无盘站利用。
  
  关于 options 选项
  
  选项附加在DHCP消息的固定长度段之后, 为了与BOOTP工具兼容, 选项段的前四个8位组包含了
  RFC1497中定义的magic COOKIEs,余下的段就都是DHCP 选项。在RFC1533里定义了DHCP的所有的选项
  的格式。大多数选项用于标志网络传输设置值, 例如子网掩码 (mask)、 DNS 服 务 器 地 址 等其
  他选项被DHCP协议利用, 且在大多数消息中是必需的。
  
  DHCP 选项的编码格式如下:
  
 

  选项可以固定长度或可变长度,所有的选项都以一个8位组标识码开始,这个标识码用来标识选项。不带数据的固定长度选项就只由一个标识码构成。而且只有选项0和255是固定长度,其它的选项都可变长度的,为了标明选项数据的长度,在标识码后面是一个长度8位组,这个长度8位组的值不包含标识码和长度码本身。
  
  例如,DHCP选项里的子网掩码选项如下定义
  
 

  标识码是1,长度是4个8位组,随后的4个8位组就是子网掩码
  
  DHCP消息类型选项的标识码是53,长度是1个8位组,值是从1到7,分别代表不同的DHCP消息类型。
  
 

  

  最后一项选项是零长度的End(选项 255), 表明这是选项的结束以便DHCP客户处理。 采用选项编码的好处是不论选项有多长,DHCP客户都可以正确接收,即使是它不认识的选项(不见得所有的DHCP客户程序都完全遵循RFC标准)。
  
  不论是DHCP客户还是DHCP服务器,都是通过按DHCP消息格式要求来填写各个段形成具体的DHCP消息,DHCP用的传输协议的非面向连接的UDP(用户数据报协议),从DHCP客户发出的DHCP消息送往DHCP服务器的端口67,DHCP服务器发给客户的DHCP消息送往DHCP客户的端口68,由于在取得服务器赋予的IP之前,DHCP客户并没有自己的IP,所以包含DHCP消息的UDP数据报的IP头的源地址段是0.0.0.0,目的地址则是255.255.255.255。
  
  11.2.3 DHCP分配IP地址的过程:
  DHCP客户机初始化TCP/IP,在本地物理子网上广播一个 DHCPDISCOVER 消息, 以确定DHCP服务器位置及其IP地址。如果DHCP服务器和客户不在同一个物理子网上,BOOTP中继代理将转发这个消息给DHCP服务器。由于网络上可能不止一个DHCP服务器,凡所有具有有效IP地址信息的DHCP服务器向客户机发出一个提议。客户机从接收到的第一个提议中选定IP地址信息,并广播一条租用地址的消息请求。由发出该提议的DHCP服务器响应该消息,指定IP地址信息给该客户机并发送一个确认,而所有其它DHCP服务器撤回各自的提议。客户机完成TCP/IP协议的初始化和绑定。配置完成后,客户机就可以使用普通网络通信和连接至其它IP主机时用到的所有IP服务和应用。
  
  11.3 DHCP 服务器软件的安装
  
  在Linux几乎都采用的是Paul Vixie/ISC DHCPd,来实现DHCP服务器端功能。可以访问http://www.isc.org/isc获得最新消息。
  
  目前大多书Linux发布都包含这个软件,如果是Red Hat,以RPM形式提供,只要简单地用RPM安装就可以了。
  
  # rpm -i dhcpd-1.3.17pl5-i386.rpm
  
  11.4 基本应用
  
  从目前情况看,大多数Linux DHCP服务器是为Windows95/98客户平台提供服务。
  
  11.4.1 增加主机路由
  
  为了使DHCP服务器能为正确MS的DHCP客户机器服务,需要创建一个到地址255.255.255.255的路由,把这条路由命令加到/etc/rc.d/rc.local,使得每次机器启动后自动运行。
  
  #route add -host 255.255.255.255 dev eth0
  
  在一些老Linux核心的系统里可能会报告错误消息:
  
  255.255.255.255: Unkown host
  
  可以试着加下面的条目到/etc/hosts文件里
  
  255.255.255.255 dhcphost
  
  再用下面的命令
  
  #route add -host dhcphost dev eth0
  
  11.4.2 修改配置文件
  DHCPd默认的配置文件是/etc/dhcpd.conf,这是一个文本文件,DHCPd里有一个语法分析器,能对这个文件进行语法分析,获得配置参数。dhcpd.conf 格式是递归下降的,关键字大小写敏感,可以有注释,注释以#开头,一直到该行结束。这里给出一个简单的dhcpd.conf的例子,所服务的网络为C类保留网络 192.168.1.0
  
  #examples
  
  # 缺省租约时间
  
  default-lease-time 28800;
  
  # 最大租约时间
  
  max-lease-time 43200;
  
  # 子网掩码选项
  
  option subnet-mask 255.255.255.0;
  
  # 广播地址
  
  option broadcast-address 192.168.1.255;
  
  # 路由器地址
  
  option routers 192.168.1.1;
  
  # DNS地址
  
  option domain-name-servers 192.168.1.1;
  
  # 域名
  
  option domain-name netreslab.org;
  
  # 以上都是全局参数
  
  # 子网声明和掩码
  
  subnet 192.168.1.0 netmask 255.255.255.0 {
  
  # 范围
  r
推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文深入探讨了MAC地址与IP地址绑定策略在网络安全中的应用及其潜在风险,同时提供了针对该策略的破解方法和相应的防御措施。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 解析EasyCVR平台国标GB28181协议下的TCP与UDP模式
    在使用EasyCVR视频融合平台过程中,用户常遇到关于端口设置的问题,尤其是TCP和UDP模式的区别。本文将详细介绍这两种模式在GB28181协议下的具体应用及差异。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • Python Socket 基础入门
    本文介绍了客户端与服务端如何通过IP地址进行身份验证,并详细说明了在不同操作系统中查看和配置网络接口的方法。同时,文章还探讨了Socket的基本使用方法及其工作流程。 ... [详细]
author-avatar
mobiledu2502875315
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有