简单概念
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