RHEL下DHCP配置心得体会.docx
《RHEL下DHCP配置心得体会.docx》由会员分享,可在线阅读,更多相关《RHEL下DHCP配置心得体会.docx(17页珍藏版)》请在冰豆网上搜索。
RHEL下DHCP配置心得体会
RHEL6下DHCP服务配置
1、DHCP服务器的安装
DHCP只需一个安装包可通过RPM或YUM安装
[root@rhel6-1~]#yum-yinstalldhcp
2、DHCP服务共有几个配置文件?
有两个相关文件:
主配置文件是/etc/dhcp/dhcpd.conf。
样例文件是/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample。
还有一个/var/lib/dhcpd/dhcpd.leases是用来记录客户端租约时间的,这个不用配置。
命令只有一个:
/usr/sbin/dhcpd
请注意:
在rhel5中,主配置文件的位置是/etc/dhcpd.conf,rhel6有变化
3、/etc/dhcpd.conf从何而来?
DHCP的主配置文件为/etc/dhcpd.conf,但这个文件默认是空的,我们要自己动手创建。
但其实DHCP软件在安装时都会附上dhcpd.conf.sample样本文件。
可以将此文件复制为/etc/dhcpd.conf,再修改即可。
4、DHCP服务配置文件的格式要求
“#”:
为批注符号,此行不执行
“;”:
每一行结尾都要有“;”,这是最容易犯错的地方
“{}”:
局部设置和主机设置的内容都要用{}包括起来
option:
option后面接的是像网关、DNS地址之类的参数
5、有多个网卡,如何指定提供DHCP服务的网卡
#vim/etc/sysconfig/dhcpd
DHCPDARGS=“eth1eth0”
如果允许多个网卡可以写多个网卡名,以空格隔开
6、如何测试dhcpd.conf的语法是否正确
servicedhcpdconfigtest
7、如何不使客户机接受DHCP服务器分配的DNS地址
默认情况下DHCP客户机会获得DHCP服务器分配的DNS地址,自动覆盖客户机掉/etc/resolv.conf的内容。
但如果客户机不想使用DHCP服务器分配的DNS地址,想保留自己的DNS地址,可以修改ifcfg-eth0网卡配置文件内容,将
PEERDNS=no
如果想使用DHCP服务器分配的DNS,
PEERDNS=yes
8、客户机如何使用命令来获得IP地址
在windows里面可以使用ipconfig/release先释放当前地址,再使用ipconfig/renew重新获取IP地址
在linux系统里可以使用dhclient–deth0来获得IP地址,按ctrl+c退出,分配的IP地址失效。
如果直接使用dhclient命令,则分配的命令会在后台持续下去,分配的IP一直可用
9、如何查看DHCP中继监听的网卡有哪些
tail–f/var/log/messages
10、如何观察DHCPD服务是否启动?
运行netstat–tlunp
Udp000.0.0.0:
670.0.0.0:
*7294/dhcpd
因为dhcpd的端口是67,只要你能看到就证明服务已经可以正常运行
还可以查看日志文件
tail-n30/var/log/messages
11、如何观察DHCP客户机的DHCP服务器是何
在客户机的/var/lib/dhclient/dhclient.lease
lease{
interface"eth0"。
fixed-address192.168.0.100。
optionsubnet-mask255.255.255.0。
optiondhcp-lease-time43200。
optionrouters192.168.0.1。
optiondhcp-message-type5。
optiondhcp-server-identifier192.168.0.60。
optiondomain-name-servers8.8.8.8。
renew22011/12/1308:
19:
22。
rebind22011/12/1314:
18:
03。
expire22011/12/1315:
48:
03。
}
12、范例
DHCP配置文件分为三大部分:
整体设置、局部设置和主机设置。
整体设置部分就类似于windows里DHCP服务器的服务器选项,局部设置就类似于作用域选项,而主机设置类似于保留选项。
优先级为整体设置<局部设置<主机设置。
一般我们将整体设置放在配置文件的最前面。
#下面是整体设置部分,对所有局部设置都生效
#其中多数配置也可以被设置在局部设置中,但作用范围也将只在局部设置中
ddns-update-stylenone。
#请注意此配置项是必须设置的
#动态DNS更新模式关闭,这个功能很少用,基本都是关闭
#总共有3个选项none,interim都表示不更新,ad-hoc表示点对点,无线网络的临时互联需求,通常很少设置。
可参考
optiondomain-name“”
#主机域名,注意引号不能省
optionnis-domain
#默认搜索NIS区域为,与/etc/resolv.conf配置文件设置有关
ignoreclient-updates
#忽略客户端更新,
default-lease-time259200。
#默认租约为3天
optionsubnet-mask255.255.248.0。
#子网掩码为255.255.248.0
max-lease-time518400。
#最大租约为6天
optionrouters192.168.1.1;
#设置默认路由为192.168.1.1
optionbroadcast-address192.168.1.255;
#设置广播地址
optiondomain-name-servers202.96.128.86,8.8.8.8;
#设置DNS地址(注意如果设置多个DNS地址,需要以“,”分隔开)
optionntp-servers192.168.1.1。
#设置NTP服务器地址
optiontime-offset-18000。
#设定与格林威治时间的偏移值,UT(universaltime)格林威治时间,亦称“世界时”。
格林威治是英国伦敦南郊原格林威治天文台的所在地,它又是世界上地理经度的起始点。
北京时间比格林威治时间要早8小时,所以各资料上介绍这里偏移时间设-18000秒即5个小时我一直不明白原因,可能只是例子吧。
这项的作用就是保持客户机取得的时间与其当地时区保持一致。
比如客户机在北京,而DHCP服务器在新德里,那么就需要设置这个偏移值来使北京的客户机取得的时间与北京时间保持一致。
但实际上DHCP服务器与客户机不在同一时区的情况太少见了。
基本上不用设置这一项。
optionnetbios-name-servers192.168.1.1
#NetBios服务器地址
#下面是局部声明部分
range192.168.1.100192.168.1.200。
rangedynamic-bootp192.168.1.100192.168.1.200。
#可分配IP范围是192.168.1.100-192.168.1.200
#rangedynamic-bootp表示动态分配IP范围,有时也写成range
optiondomain-name-server8.8.4.4。
#指定本网段的DNS地址为8.8.4.4
class“pxeclients”
#定义名为pxeclients的类
matchifsubstring(optionvendor-class-identifier,0,9)=“PXEClient”。
#匹配客户机发送来的请求含有字符串0-9共10个字符是PXEClient才响应请求
#当有不同的客户机都来请求时,有些客户机只是单纯请求IP地址,有些客户机除获得IP外还要下载启动文件,这时可以设置class类来匹配不同的请求
matchifsubstring(hardware,1,3)=00:
0C:
29
#匹配客户机硬件地址前3个字段是00:
0C:
29
next-server192.168.1.1或主机名。
#设定存放初始启动文档的主机地址,无人值守安装系统或无盘工作站会用
filename“linux-install/pxelinux.0”。
#下载启动文档的文件名
#下面是主机声明部分
hardwareethernet00-19-D2-44-E1-B9。
#指定客户机的网卡MAC地址
fixed-address192.168.1.188。
#指定客户机获得静态IP
hostsale-manager{hardwareethernet00-19-D2-44-E1-B9。
fixed-address192.168.1.199。
}
#销以上配置其实也可以不换行写
13、其它注意事项
如果启动DHCPD服务失败,可能的原因有:
1)90%都是配置文件中设置项有写错,比如少写字母,或少写个“;”号等
2)主机没有设置静态IP。
这个我遇到过,主机本身就是动态获得IP时,服务是无法启动的。
3)DHCP服务器防火墙没有打开
Linux下的DHCP服务是从最后一个可用IP开始分配的,这一点与WINDOWS下的DHCP服务正好相反。
在进行DHCP中继实验时,关机添加网卡后启动主机时会遇到一个自检提示。
这是linux系统发现新的硬件所出现的,可以此时按照提示进行配置,如IP等,也可以等到启动完成后再配置IP等。
14、DHCP中继
1、首先修改DHCP中继配置文件
[root@localhost~]#vi/etc/sysctl.conf
改成
net.ipv4.ip_forward=1
重新载入配置文件
[root@localhost~]#sysctl–p
2、设定启用中继功能的网卡并指定DHCP服务器
[root@localhost~]#vi/etc/sysconfig/dhcrelay
INTERFACES="eth0eth1"
DHCPSERVERS="192.168.1.2"
重启DHCP中继服务
[root@localhost~]#servicedhcrelaystart
注意:
如果实验不成功,请将与DHCP中继服务器的网关指向DHCP服务器。
15、客户端分类(class)
客户端可以被分成一些类,并且按照所属的类被区别对待,这个区分可以由conditional语句完成,或者由class语句中的match语句完成。
可以指定某个指定的类或子类在同一时间内获得租约的全部客户端的限制数目,也可以基于客户端发送包的内容来自动指定子类。
基于条件的客户端分类,可以在class语句中指定一个matching表达式:
class"ras-clients"{
matchifsubstring(optiondhcp-client-identifier,1,3)="RAS"。
}
注意,不管使用match语句或者使用add语句(或者两者都使用)来给客户端分类,都必须首先声明用到的客户端的类。
如果没有match语句也没有in-scope语句,类声明语句就会是这个样子:
(这里有个矛盾,前面应该是in-scope,而不是add)
class"ras-clients"{
}
子类(SUBCLASSES)
除了类,也可能会用到子类subclass。
子类是与通常的类有相同名字,但是又有特定的可以用哈希算法快速匹配的附加条件(submatch)。
这本质上是速度问题――一个有五个match语句的类和一个类有五个子类的主要区别是使用子类速度更快,子类的工作方式如下:
class"allocation-class-1"{
matchpick-first-value(optiondhcp-client-identifier,hardware)。
}
class"allocation-class-2"{
matchpick-first-value(optiondhcp-client-identifier,hardware)。
}
subclass"allocation-class-1"1:
8:
0:
2b:
4c:
39:
ad。
subclass"allocation-class-2"1:
8:
0:
2b:
a9:
cc:
e3。
subclass"allocation-class-1"1:
0:
0:
c4:
aa:
29:
44。
subnet10.0.0.0netmask255.255.255.0{
pool{
allowmembersof"allocation-class-1"。
range10.0.0.1110.0.0.50。
}
pool{
allowmembersof"allocation-class-2"。
range10.0.0.5110.0.0.100。
}
}
在子类声明语句中跟在类名后的数据是一个固定值,用来匹配类中的match语句。
当类匹配完成后,服务器会计算match语句,然后在哈希表中查找结果。
如果找到一个匹配,客户端就被认为是一个这个类和这个子类的成员。
子类Subclasses可以有也可以没有scope语句,在上面的例子中,使用子类的单一目的就是允许一些客户端使用其中一个地址池,而其它一些客户端使用别的地址池,所以这些子类没有使用scope语句。
如果使用子类的部分目标是为部分客户端定义不同的参数,那就可能定义子类时使用scope语句了。
在上面的例子里,如果你的一个客户需要一些配置参数,而它客户则不需要这些参数,可以为这个客户使用下面的子类声明:
subclass"allocation-class-2"1:
08:
00:
2b:
a1:
11:
31{
optionroot-path"samsara:
/var/diskless/alphapc"。
filename"/tftpboot/netbsd.alphapc-diskless"。
}
在这个例子里,我们使用子类来控制为每个客户进行地址分配。
然而也可能使用子类不指明客户端,例如,使用值vendor-class-identifier选项来确定给vendor-encapsulated-options选项发送什么值。
在dhcp-options(5)手册中的VENDORENCAPSULATEDOPTIONS里有一个例子。
动态地址分配时类的限制(PER-CLASSLIMITSONDYNAMICADDRESSALLOCATION)
可以给某个类指定一个可以分配的客户端的数目的最大值限制,它的影响是一个新的客户端可能很难得到一个地址。
一旦类的这个限制数达到,新客户端得到地址的唯一可能就是原来的某个客户端放弃了租约,不管是租约过期还是发送DHCPRELEASE包,有租约数限制的类都像下面一样:
class"limited-1"{
leaselimit4。
}
这将使这个类同一时间最多只能有4个成员。
自动产生子类的类SPAWNINGCLASSES
可以定义一个spawningclass,spawningclass是一个根据客户端发送内容自动产生子类的类。
Spawningclass建立的原因是为了使建立租约限制的类不工作。
假定使用在cable-modem环境中,ISP想为一个点的客户提供不只一个IP地址,但不希望这个客户建立自己的子网,或者给这个客户连接的网段里无限制的IP地址数,很多cablemodem的头端系统可以配置一个DHCP的中继代理信息,它可以把客户端的DHCP请求发送到DHCP服务器,这些典型系统都会使用虚电路号(circuitID)或者远程ID号(remoteID)来确定用户位置。
为了利用这些,可以如下的类定义语句:
class"customer"{
spawnwithoptionagent.circuit-id。
leaselimit4。
}
现在,一旦用户节点的请求到达后,circuitID选项将会在hash表中检查。
如果发现其中一个子类匹配了这个电路号(circuitID),这个客户将会被归入这个子类并按这个子类成员对待。
如果没有发现匹配,一个新的类将会建立并记录在dhcpd.leases文件中,这个客户会被归入这个新类中。
客户端被归类后,它将按照类的成员对待,在这种情况下,按类成员对待每个点最多4个成员。
使用子类生成机制并不仅限于中继代理选项,使用这个例子只是因为它容易理解。
组合匹配等(COMBININGMATCH,MATCHIFANDSPAWNWITH)
有些情况下,使用一个表达式指定一个客户端到一个类,然后用第二个表达式把它放到一个子类中是很有用的。
这可以由组合match if 和spawn with语句完成,或者由matchif和match完成,例如:
class"jr-cable-modems"{
matchifoptiondhcp-vendor-identifier="jrcm"。
spawnwithoptionagent.circuit-id。
leaselimit4。
}
class"dv-dsl-modems"{
matchifoptondhcp-vendor-identifier="dvdsl"。
spawnwithoptionagent.circuit-id。
leaselimit16。
}
这允许你的两个类中有相同的spawnwith表达式,而不会把一个客户端弄到两个类中,从而互相混乱
matchif((substring(hardware,1,6)=00:
00:
00:
00:
00:
02)or(substring(hardware,1,6)=00:
00:
00:
00:
00:
05))
如:
ddns-update-stylenone。
ignoreclient-updates。
class"vmware"{
matchifsubstring(hardware,1,3)=00:
0C:
29。
}
subnet192.168.0.0netmask255.255.255.0{
pool{
allowmembersof"vmware"。
range192.168.0.104192.168.0.110。
}
}
#定义了一个类叫vmware,此类定义了硬件地址前三位为00:
0c:
30
#定义局部设置,一个地址池符合
在客户机上测试
[root@rhel6-2dhclient]#ifconfigeth0
eth0Linkencap:
EthernetHWaddr00:
0C:
29:
4B:
AB:
10
BROADCASTMULTICASTMTU:
1500Metric:
1
RXpackets:
119errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
656errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
18497(18.0KiB)TXbytes:
86357(84.3KiB)
Interrupt:
19Baseaddress:
0x2000
[root@rhel6-2dhclient]#dhclient-deth0
InternetSystemsConsortiumDHCPClient4.1.1-P1
Copyright2004-2010InternetSystemsConsortium.
Allrightsreserved.
Forinfo,pleasevisithttps:
//www.isc.org/software/dhcp/
ListeningonLPF/eth0/00:
0c:
29:
4b:
ab:
10
SendingonLPF/eth0/00:
0c:
29:
4b:
ab:
10
SendingonSocket/fallback
DHCPREQUESToneth0to255.255.255.255port67
DHCPACKfrom192.168.0.60
boundto192.168.0.104--renewalin18555seconds.
但遇到一个问题,dhclient命令测试获得IP是没有问题的,但是在重启网络服务来获得IP时却会有问题
[root@rhel6-2dhclient]#servicenetworkrestart
正在关闭接口eth0:
[确定]
关闭环回接口:
[确定]
弹出环回接口:
[确定]
弹出界面eth0:
错误:
激活连接失败:
DevicenotmanagedbyNetworkManager
[失败]
提示NetworkManager服务启动失败,在RHEL6中,网卡同时受两个服务的控制(NetworkManager和network)。
可以停止网卡受NetworkManager的控制
[root@rhel6-2dhclient]#vim/etc/sysconfig/network-scripts/ifcfg-eth0
NM_CONTROLLED=no
[root@rhel6-2dhclient]#servicenetworkrestart
关闭环回接口:
[确定]
弹出环回接口:
[确定]
弹出界面eth0:
正在决定eth0的IP信息...完成。
[确定]
[root@rhel6-2dhclient]#ifconfigeth0
eth0Linkencap:
E