当前位置 博文首页 > 积水成渊:关于DHCP协议和dhcpd配置文件的讲解

    积水成渊:关于DHCP协议和dhcpd配置文件的讲解

    作者:[db:作者] 时间:2021-07-29 12:39

    在了解了DHCP协议的基础内容后,我们来对它的dhcpd配置文件的相关内容进行一下了解。首先我们来了解一下这方面的基础概念。然后再对它的应用进行一下分析。

    名称

    dhcpd.conf - dhcpd配置文件

    描述

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

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

    dhcpd.文件可能会包含许多额外的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 文件将会象下面这样:

     
    1. global?parameters... ?
    2. subnet?204.254.239.0?netmask?255.255.255.224?{ ?
    3. subnet-specific?parameters... ?
    4. range?204.254.239.10?204.254.239.30; ?
    5. } ?
    6. subnet?204.254.239.32?netmask?255.255.255.224?{ ?
    7. subnet-specific?parameters... ?
    8. range?204.254.239.42?204.254.239.62; ?
    9. } ?
    10. subnet?204.254.239.64?netmask?255.255.255.224?{ ?
    11. subnet-specific?parameters... ?
    12. range?204.254.239.74?204.254.239.94; ?
    13. } ?
    14. group?{ ?
    15. group-specific?parameters... ?
    16. host?zappo.test.isc.org?{ ?
    17. host-specific?parameters... ?
    18. } ?
    19. host?beppo.test.isc.org?{ ?
    20. host-specific?parameters... ?
    21. } ?
    22. host?harpo.test.isc.org?{ ?
    23. host-specific?parameters... ?
    24. } ?
    25. }?

    图 1

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

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

     
    1. option?domain-name?"isc.org"; ?
    2. option?domain-name-servers?ns1.isc.org,?ns2.isc.org;?

    图 2

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

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

     
    1. option?routers?204.254.239.1;?

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

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

     
    1. option?domain-name?"test.isc.org";?

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

     
    1. max-lease-time?120; ?
    2. default-lease-time?120;?

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

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

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

     
    1. group?{ ?
    2. filename?"Xncd19r"; ?
    3. next-server?ncd-booter; ?
    4. host?ncd1?{?hardware?ethernet?0:c0:c3:49:2b:57;?} ?
    5. host?ncd4?{?hardware?ethernet?0:c0:c3:80:fc:32;?} ?
    6. host?ncd8?{?hardware?ethernet?0:c0:c3:22:46:81;?} ?
    7. } ?
    8. group?{ ?
    9. filename?"Xncd19c"; ?
    10. next-server?ncd-booter; ?
    11. host?ncd2?{?hardware?ethernet?0:c0:c3:88:2d:81;?} ?
    12. host?ncd3?{?hardware?ethernet?0:c0:c3:00:14:11;?} ?
    13. } ?
    14. group?{ ?
    15. filename?"XncdHMX"; ?