简单概念


        DHCP,快速客户端网络配置服务,提供IP地址、子网掩码、网关、DNS等网络配置信息和服务附带信息(租约)。


        DHCP可以这样理解:    服务器就是公司,而人是主机。人需要薪水、需要自我实现、需要一个自我实现的场所等生存需求、当然公司还会提供合同书。而客户端获取网络配置信息也就像没有“生存需求”的人去求职一样,需要获得生存的必需因素。这就可以解释获取IP地址的过程了,人人都能做到的。

        投简历,不知到会被那个公司相中,所以只能使用自己的“二层地址信息”(私人电话、身份编码),完成一份简历(广播包---dhcpdiscover)去海发。总有收到返回的信息吧(面试时间、地点---dhcpoffer),然后选择自己有意向的公司再进一步协商。最终获得一份工作,同时签订了合同,这每个月(租约)都会获得生存必需的供给。


        dhcp 的 dns 更新,有这么一个假设。在一个主机其多的环境中,主机间的某些互通需要以域名的方式相互连通,然而因为主机的频繁变更,从而导致这个连通的开销升级。为了方便起见,这个域名与ip的对应关系在主机与dns之间出现了个协调者 —— dhcp。


        地址池的地址范围一定要在子网容器的有效ip地址之内。同时本机网卡的ip地址必需在某个范围之内。在多网卡的主机上,使用网卡启动文件来设置 DHCP 从那个接口启动。

[root@hhh ~]# cat /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS="eth0"


        本机网卡设置

[root@hhh ~]# cat /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
ONBOOT=yes
NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=172.16.181.40

NETMASK=255.255.248.0

GATEWAY=172.16.180.254


        有些值使用ip的时候,可以同时使用域名。当输入域名的时候请确认,域名可以被解析为单一的ip地址。


        这里的ip地址模型采用南图的开放地址空间。

网络:172.16.176.0/21

掩码:255.255.248.0

地址空间:172.16.176.1~172.16.183.255

网关:172.16.180.254

domain:jslib

DNS:172.16.88.17


        应该注意到有些参数是以 “option”开始的。没有以它开始参数直接可以影响服务的设定,以它开头的是需要激活选项功能的参数(是个“选项”,属于“参数”类型)。要不就是,指定的是个客户端参数,并不是一个服务的可选参数。(eg,server-name & filename)


        如果打算启动故障转移,请确保成员间版本相同喔。故障转移跟 BOOTP 协议不兼容。不可同时使用。故障转移仅可以有两台服务主机。当故障转移时,有三种情况;omshell③命令操作的,停止了一台主机的服务,在租约文件里编辑最近的成员状态声明然后重启服务(停止,然后启动)。

failover peer name state {

    my state partnet-down;

    peer state state at date;

    }


        客户端分类(下文 略)

        客户端可以分类,以区别对待。划分类的方法是条件赋值或者类中的表达式匹配语句。


该服务配置较简单,只需注意以下配置 错误情况便可避免
如果需要的池中不包括网卡地址,需要设定一个子接口地址(池中的ip)。
服务器租期文件不存在,手动创建就可以。
地址池与子网作用域网段不一致。


        共享作用域(subnet域)由一组作用域组成。单个的 dhcp 作用域只能包含一个子网;只能在某个接口上分配一个子网的地址,不能在此接口上为多个子网分配 ip 地址。 如果需要一台 dhcp 同时支持多个子网的网络地址分配,必需使用 dhcp 的共享作用域。

        有了共享作用域,就有了中继代理,如果有台机器用来做代理,那就直接做 dhcp 得了。可以选用三层交换机完成中继代理配置。


====================================


配置信息


配置 DHCP 的配置文件有两个,主配置文件、接口广播文件。主配置文件包括 3 部分内容,

是:参数、声明、选项。①②

is: parameters    declarations    option


参数,表示 如何执行任务、是否要执行,给客户端提供那些网络配置选项。

声明,描述网络布局、ip 地址等。

选项,就是可选参数。(option 关键字开始)


参数解释( “”* 表示默认⑤)
ddns-hostname name;
用来设定DNS 的A、PTR记录;如果没有设置比较复杂(略)
ddns-domainname name;

主机的域的名称(域名,)

sunnybay.blog(假设是主机名)

name     51cto.com.  

ddns-update-style style;

stype:ad-doc    interim    none*

filename text;
用来指定一个文件名,客户端载入的初始引导文件的文件名称。
fixed-address ip [, ip];
分配主机的一个或多个固定ip地址
get-lease-hostnames flag;

flag: true false*

租约池 是否 启用记录主机名

hardware type address;

type: ethernet    token-ring    fddi

在 host 中声明

lease-file-name name;

"/var/lib/dhcpd/dhcpd.lease"*

声明的位置要正确

这个配置参数的值可以被环境变量(或启动参数)取代

local-port port;
修改监听的UDP端口(udp: 67*)
next-server server-name;

0.0.0.0*

初始引导文件地址

pid-file-name name;
"/var/run/dhcpd.pid" *



声明解释
include "filename";

shared-network name{

参数

声明

}


subnet net-id netmask mask {

参数

声明

}

子网容器

最少要有一个“range”语句

range [ dynamic-bootp ] ip1 [ip2];

host hostname {

参数

声明

}


group {

参数

声明

}




选项解释
option
bootfile-name text;

跟filename相同。

bootstrap file

text: 启动文件的文件名

broadcast-address ip;

domain-name-servers ip;

dns

routers ip;

time-offset int;
相对于格林威治时间偏移量(秒*)
www-server ip;



====================================


经典配置结构


全局参数


subnet 204.254.239.32 netmask 255.255.255.224 {

        子网参数

        range 204.254.239.37 204.254.239.62;

}

subnet 204.254.239.64 netmask 255.255.255.224 {

        子网参数

        range 204.254.239.69 204.254.239.94;

}

subnet 204.254.239.128 netmask 255.255.255.224 {

        子网参数

        range 204.254.239.133 204.254.239.158;

}


group {

        组参数

        host www.sunny.org {

        主机参数

        }

        host bbs.sunny.org {

        主机参数

        }

        host vpn.sunny.org {

        主机参数

        }

}


*按照这个结构构建配置文件。下面的配置只为了说明某个参数的使用方法。而且相互之间没有关联关系。


全局配置

option domain-name "dinglicom.com";

option domain-name-servers njns1.dinglicom.com,njns2.dinglicom.com;


网关

subnet 172.16.176.0 mask 255.255.248.0 {

    option routers 172.16.180.254;

    # 当不同的域使用统一台路由设备的时候,就会有多个ip地址。这个时候如果使用该设备的域名,

    # 就会容易许多

    }


覆盖参数

subnet 172.16.8.0 mask 255.255.248.0 {

    option domain-name "jslib.dinglicom.com";


    # 假说在该域里的主机是用来临时测试的。

    # 那么他们的租约就可以适当的短一些。

    max-lease-time 120;

    default-lease-time 120;

    }


host

主机声明(保留主机)

host hhh {

    hardware ethernet Mac-address;

    fixed-address ip-address;

    }


group

# 假设为不同的机器选用不同的启动文件,就可以这么干。

group {

    filename "Xncd19r";

    next-server ncd-booter;


    host test-one {hardware ethernet Mac-address;}

    host test-two {hardware ethernet Mac-address;}

    }



group {

    filename "pxelinux";

    next-server ncd-booter;


    host test-dns {hardware ethernet Mac-address;}

    host test-vsftp {hardware ethernet Mac-address;}

    }


地址池

为公司内部员工一个地址空间,来访人员另外空间;而且租约长短不同。

subnet 172.16.176.128 mask 255.255.255.128 {

    option routers 172.16.176.255;

    # 指定为默认是广播的 ip 地址


    # unknown host

    pool {

        option domain-name-servers ns1.dinglicom.com;

        max-lease-time 72000;

        default-lease-time 36000;

        range 172.16.176.129 172.16.176.139;

        allow unkown-clients;

        }

    # exployees

    pool {

        option domain-name-servers ns2.dinglicom.com;

        max-lease-time 1080000;

        # 50天

        default-lease-time 108000;

        # 5天

        range 172.16.176.140 172.16.176.229;

        deny unkown-clients;

        }

    }


故障转移


格式

pool {

    failover peer "foo";

    池指定参数

    }


failover peer "foo" {

    primary;    # [ primary | secondary ]

    address dinglicom.com;

    port 647;

    peer address trantor.dinglicom.com;

    peer port 847;

    max-response-delay 60;

    max-unacked-updates 10;

    mclt 3600;

    split 128;

    load balance max seconds 3;

    }

include "/etc/dhcpd/dhcpd.master";

其中没有定义如何分割地址段!


客户端分类(略)


deny & allow


unknown-client

在池中,是否相应该客户端

deny unknown-client

allow unknown-client *⑤

ignore unknown-client


bootp

是否响应该协议请求

deny

allow *

ignore


booting

尽在主机声明中有意义。

deny

allow *


client-updates

是否允许客户端自动更新dns信息(参照dns更新策略)

deny

allow


共享网络(共享作用域)

shared-network any-name {

    sub-network net-name netmask mask {

        子网参数;

        子网声明;

        }

    sub-network net-name netmask mask {

        子网参数;

        子网声明;

        }

    }






====================================


开动



# vi /etc/dhcp/dhcpd.conf

①# man 5 dhcpd.conf        (内容超乎想象)

②# man 5 dhcp-options

③# man 1 omshell


# find /usr/share/doc/ -name dhcpd.conf.sample -exec cp {} /etc/dhcp \;

# mv ... ; mv ...


# vi dhcpd.conf

#ddns-update-style none;

                        dhcp 有能力更新域名信息(* 这是有能力,就像每个军人都有能力杀人一样)


# cat dhcpd.leases

# man 5 dhcpd.leases



DHCP的问题_人人