Dynamic Host Configuration Protocol 主机的设置问题(类似 IP 分享器的后端功能)
想像两种情况:(1)如果你在工作单位使用的是笔记本电脑,而且常常要带着你的笔记本电脑到处跑, 那么由第四章、连上 Internet 的说明中会发现,哇! 我的网络卡参数要常常修改啊!而且,每到一个新的地方,就得问清楚该地的网络参数才行!真是麻烦。 (2)你的公司常常有访客或贵客来临,因为他们也带来笔电,所以也得常常跑来找你问网络参数才能设置他的电脑。 哇!这两种情况都会让你想哭哭吧?这个时候,动态主机设置协定 (DHCP) 可就大大的派上用场啦!DHCP 这个服务可以自动的分配 IP 与相关的网络参数给用户端,来提供用户端自动以服务器提供的参数来设置他们的网络。 如此一来,用户只要将自己的笔电设置好经由 DHCP 协定来取得网络参数后,一插上网络线,呵呵!马上就可以享受 Internet 的服务啦!很方便吧!所以得来瞧一瞧这个好用的协定喔!
在正式的进入 DHCP (Dynamic Host Configuration Protocol) 服务器设置之前,我们先来认识一下 DHCP 这个协定吧!还有,需要了解的是,我们是否『一定』得设置 DHCP 这个服务器呢?这里都需要厘清一下概念喔!
在开始 DHCP 的说明之前,我们先来复习一下之前在第二章网络基础里面提到的几个网络参数吧! 要设置好一个网络的环境,使电脑可以顺利的连上 Internet ,那么你的电脑里面一定要有底下几个网络的参数才行,分别是:
其中,那个 IP, netmask, network, broadcast 与 gateway 都可以在 /etc/sysconfig/network-scripts/ifcfg-eth[0-n] 这文件里面设置,DNS 服务器的地址则是在 /etc/resolv.conf 里头设置。只要这几个项目设置正确,那么电脑应该就没问题的可以上网了! 所以说,你家里面的 3, 4 部电脑,你都可以手动的来设置好你所需要的网络参数, 然后利用 NAT 服务器的功能,就可以大摇大摆的连上 Internet 了!真是不错 ^_^,不是吗?
好了,现在让我们换一个大一些些的场景吧!假设你是学校宿舍的网络管理员,所管理的学生电脑大概有 100 部好了,那么你怎么设置好这 100 部的电脑呢?
这三种解决方案所需要的时间都不相同,如果你选择的是(1),那么鸟哥个人认为,你不是工作狂就是疯掉了, 因为所要花费的时间与你所得的薪水与付出的心力是完全不成比例的。如果选择是(2),那么很可能你会被挂上独裁者、 没良心的管理员的称号!如果是选择(3)呢?恭喜你!这个方案的管理时间花费最短,也是最不麻烦的作法啦!
呵呵!知道鸟哥要说些什么了吗?是的!这个 DHCP (Dynamic Host Configuration Protocol) 服务器最主要的工作,就是在进行上面的第三个方案,也就是自动的将网络参数正确的分配给网域中的每部电脑, 让用户端的电脑可以在开机的时候就立即自动的设置好网络的参数值,这些参数值可以包括了 IP、netmask、network、gateway 与 DNS 的地址等等。如此一来,身为管理员的你,只要注意到这一部提供网络参数的主机有没有挂掉就好了, 其他同学们的个人电脑,哈!你想都不必想要怎么去帮忙!因为 DHCP 主机已经完全都帮你搞定啦! ^_^! 阿!当管理员最大的幸福就是可以喝喝茶、聊聊天就能控管好一切的网络问题呢!
你必需要知道的是,DHCP 通常是用于局域网路内的一个通信协定,他主要借由用户端发送广播封包给整个物理网段内的所有主机, 若局域网路内有 DHCP 服务器时,才会回应用户端的 IP 参数要求。所以啰,DHCP 服务器与用户端是应该要在同一个物理网段内的。 至于整个 DHCP 封包在服务器与用户端的来来回回情况有点像底下这样:(注1)
户端取得 IP 参数的进程可以简化如下:
以上就是 DHCP 这个协定在 Server 端与 Client 端的运作状态,由上面这个运作状态来看,我们可以晓得,只要 Server 端设置没有问题,加上 Server 与 Client 在硬件连接上面确定是 OK 的,那么 Client 就可以直接借由 Server 来取得上网的网络参数,当然啦,只要我们这些管理员能够好好的、正确的管理好我们的 DHCP 服务器, 嘿嘿!那么上网的设置自然就变成一件很简单的事情啦!不过,关于上述的流程还是有一些需要额外说明的啦:
在上面的步骤里面,注意到第二步骤了吗?就是服务器会去比较用户端的 MAC 硬件地址,并判断该 MAC 是否需要给予一个固定的 IP 呢!所以啦,我们可以设置 DHCP 服务器给予用户端的 IP 参数主要有两种:
# 1. 观察自己的 MAC 可用 ifconfig: [root@www ~]# ifconfig | grep HW eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD eth1 Link encap:Ethernet HWaddr 08:00:27:2A:30:14 # 因为鸟哥有两张网卡,所以有两个硬件地址喔! # 2. 观察别人的 MAC 可用 ping 配合 arp [root@www ~]# ping -c 3 192.168.1.254 [root@www ~]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.254 ether 00:0c:6e:85:d5:69 C eth0
除非你的局域网路内的电脑有可能用来做为主机之用,所以必需要设置成为固定 IP ,否则使用动态 IP 的设置比较简单,而且使用上面具有较佳的弹性。怎么说呢?假如你是一个 ISP 好了,而你只申请到 150 个 IP 来做为你的客户连接之用。那么你是否真的只能邀集到 150 的用户?呵呵!当然不啰!我可以邀集 200 个用户以上呢!
为什么?这样想好了,我今天开了一家餐馆,里面只有 20 个座位,那么是否我一餐只能卖给 20 个人呢?当然不是啦!因为客人是人来人往的,有人先吃有人后吃,所以同样是 20 个座位,但是可以有 40 个人来吃我的简餐,因为来的时间不一样嘛!了解了吗?呵呵!对啦!你这个 ISP 虽然只有 150 个 IP 可以发放,但是因为你的用户并非 24 小时都挂在在线的,所以你可以将这 150 个 IP 做良好的分配,让 200 个人来『轮流使用』这 150 个 IP 哩!
事实上现在主流的 ADSL 宽带拨接上网也有使用到『静态 IP 』与『固定 IP 』之类的概念喔! 举例来说好了,hinet/seed net 等主要 ISP 都有提供所谓的:『一个固定 IP 搭配 7~8 个浮动 IP 』的 ADSL 拨接功能,也就是说同样通过一条电话线拨接到 ISP ,但是其中一个拨接是可以取得固定的 IP 呢! 而其他的则是非固定的 IP ,DHCP 的 static/dynamic 跟这个玩意儿有点类似啦! ^_^
怪了!如果我们观察上面 DHCP 运作模式的第四个步骤,你会发现最后 DHCP 服务器还会给予一个租约期限! 干嘛还要这样的一个期限呢?其实设置期限还是有个优点啦!最大的优点就是可以避免 IP 被某些用户一直占用着,但该用户却是 Idle (发呆) 的状态!
举个例子来说,我们刚刚不是说到,我有 150 个 IP ,但是偏偏我有 200 个用户吗?我们以 2010 年的世界杯足球赛来说明好了。假设每个用户都急着上网知道世足赛的消息, 那么某些热门对战时段网络将可能达到使用尖峰!也就是说,这 200 个人同时要来使用这 150 个 IP ,有可能吗?当然不可能!肯定会有 50 个人无法连接,因为『很抱歉!目前系统正在忙线中,请你稍后再拨!』
那怎么办?这个时候租约到期的方式就很有用处啦!那几个已经连接进来很久的人, 就会因为租约到期而被迫脱机,这个时候该 IP 就会被释放出来,哈哈!大家赶快抢呀!先抢到先赢喔! 所以,那 50 个人 (包括被迫脱机的那个朋友) 只好继续的、努力的、加油的来进行 DHCP 的要求啰! ^_^""
虽然说是优点,但是其实如果站在用户的角度来看,还是可能会造成公愤的!凭什么大家一起交钱, 我先连接进来就需要先被踢出去?~呵呵!所以啰,如果要当 ISP ,还是得要先规划好服务的方针才行呦! 这样你可以了解租约到期的行为了吗?! ^_^
既然有租约时间,那么是否代表我用 DHCP 取得的 IP 就得要『手动』的在某个时间点去重新取得新的 IP 呢?不需要的啦!因为目前的 DHCP 用户端程序大多会主动的依据租约时间去重新申请 IP (renew) 的!也就是说在租约到期前你的 DHCP 用户端程序就已经又重新申请更新租约时间了。所以除非 DHCP 主机挂点, 否则你所取得的 IP 应该是可以一直使用下去的!
或许你曾经发现过一件事情,那就是当我的网域里面有两部以上的 DHCP 服务器时, 到底哪一部服务器会提供我的这部用户端电脑所发出的 DHCP 要求?呵呵!很抱歉,俺也不晓得! 因为在网络上面,很多时候都是『先抢先赢』的, DHCP 的回应也是如此!当 Server1 先回应时,你使用的就是 Server1 所提供的网络参数内容,如果是 Server2 先回应,你就是使用 Server2 的参数来设置你的用户端 PC !不过,前提之下当然是这些电脑的『物理连接』都是在一起的啊!
因为这个特色的关系,所以当你在练习 DHCP 服务器的设置之前, 不要在已经正常运作的区网下测试,否则会很惨。举个鸟哥的例子来说好了,某一次其他系的研究生在测试网络安全时, 在原有的区网上面放了一部 IP 分享器,结果你猜怎么着?整栋大楼的网络都不通了!因为那时整栋大楼的网络是串接在一起的, 而我们学校是使用 DHCP 让用户端上网。由于 IP 分享器的设置并不能连上 Internet ,哇!大家都无法上网了啦! 那你晓得了吗?不要随便测试啦这个 DHCP 服务器!
既然 DHCP 的好处是『免用户端设置』,而且对于行动设备的上网方面非常的方便!那么是否代表你就得要架设一部 DHCP 呢?那可不一定!接下来要告知大家的是几个概念性的问题, 你倒不一定『必需』遵守底下的一些概念呢!反正,自己的网域自己『爽』就好啦!
在某些情况之下,倒是强烈的建议架设 DHCP 主机的!什么情况呢?例如:
虽然 DHCP 有很多好处,但是你有没有发现一个步骤怪怪的呀!回头看一下那个步骤一, 用户端在开机的时候会主动的发送消息给网域上的所有机器,这个时候,如果网域上就是没有 DHCP 主机呢?很抱歉,那么你的这部用户端电脑,『仍然会持续的发送消息!』 真正的时间与次数不晓得会有多久,不过,肯定会超过 30 秒以上, 甚至可以达到一分钟以上!哇!那么这段时间你能干嘛?呵呵!除了等、还是等! 所以啰,如果电脑数不多,还是使用手动的方式来设置一下就好了!方便嘛!
如前所述,上面的都是概念性的说法,事实上,一件事情的解决之道是有很多的方案的, 没有所谓的『完全正确』的方案,只有『相对可行、并且符合经济效益与功能』的方案! 所以啰,架设任何网站之前,请先多评估评估呐!
事实上,目前市面上的 IP 分享器已经便宜到爆了!而 IP 分享器本身就含有 DHCP 的功能。 所以如果你只是想要单纯的使用 DHCP 在你的局域网路当中而已,那么建议你直接购买一部 IP 分享器来使用即可, 因为至少它很省电。如果你还有其他考量的话,才来架设 DHCP 吧!底下我们以一个简单的范例来架设 DHCP 先。
DHCP 的软件需求很简单,就是只要服务器端软件即可,在 CentOS 6.x 上面,这个软件的名称就是 dhcp 啰!如果是缺省安装,那么这个软件是不会安装的,请自行使用 yum 去装好这个软件吧!安装完毕之后, 你可以使用『 rpm -ql dhcp 』来看看这个软件提供了哪些文件,基本上,比较重要的文件数据如下:
就跟你说很简单吧!整个软件数据也不过才如此而已呢!
在 CentOS 5.x 以前,这个文件都被放置到 /etc/dhcpd.conf 的,新版的才放置于此处。其实 DHCP 的设置很简单啊,只要将 dhcpd.conf 设置好就可以启动了。不过编辑这个文件时你必须要留意底下的规范:
基本上,我们刚刚前面提过说, DHCP 的 IP 分配可分为给予动态 IP 与固定 IP ,其中又需要了解的是, 如果需要设置固定 IP 的话,那么就必须要知道要设置成固定 IP 的那部电脑的硬件地址 (MAC) 才行,请使用 arp 或 ifconfig 来查知你的接口的 MAC 吧!好了,那么需要设置的项目有哪些呢? 其实 dhcpd.conf 里头的设置主要分为两大项目,一个是服务器运作的整体设置 (Global) 一个是 IP 设置模式 (动态或固定), 每个项目的设置值大概有底下这几项:
假设你的 dhcpd 只管理一个区段的区网,那么除了 IP 之外的许多网络参数就可以放在整体设置的区域中,这包括有租约期限、DNS 主机的 IP 地址、路由器的 IP 地址还有动态 DNS (DDNS) 更新的类型等等。当固定 IP 及动态 IP 内没有规范到某些设置时,则以整体设置值为准。这些参数的设置名称为:
由于 dhcpd 主要是针对局域网路来给予 IP 参数的,因此在设置 IP 之前,我们得要指定一个区网才行。 指定区网的方式使用如下的参数:
subnet NETWORK_IP netmask NETMASK_IP { ... }我们知道区网要给予 network / netmask IP 这两个参数才行,例如之前谈过的: 192.168.100.0 / 255.255.255.0 这样的设置值。 上头设置值当中, subnet 与 netmask 是关键字,而大写部分就填上你的区网参数啰。那在括号内还有什么参数需要设置的? 那就是到底 IP 是固定的还是动态的设置啊:
假设我的环境当中,Linux 主机除了 NAT 服务器之外还得要负责其他服务器,例如邮件服务器的支持。 而在后端局域网路中则想要提供 DHCP 的服务。整个硬件配置的情况就如同第三章的图 3.2-1所示的内部独立区网 (centos.vbird 网域)。 需要注意的是,在图中 Linux Router 有两块接口,其中 eth1 对内而 eth0 对外,至于其他的网络参数设计为:
那我的设置档就会像底下这个样子了:
[root@www ~]# vim /etc/dhcp/dhcpd.conf # 1. 整体的环境设置 ddns-update-style none; <==不要更新 DDNS 的设置 ignore client-updates; <==忽略用户端的 DNS 更新功能 default-lease-time 259200; <==缺省租约为 3 天 max-lease-time 518400; <==最大租约为 6 天 option routers 192.168.100.254; <==这就是缺省路由 option domain-name "centos.vbird"; <==给予一个领域名称 option domain-name-servers 168.95.1.1, 139.175.10.20; # 上面是 DNS 的 IP 设置,这个设置值会修改用户端的 /etc/resolv.conf 文件内容 # 2. 关于动态分配的 IP subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.101 192.168.100.200; <==分配的 IP 范围 # 3. 关于固定的 IP 啊! host win7 { hardware ethernet 08:00:27:11:EB:C2; <==用户端网卡 MAC fixed-address 192.168.100.30; <==给予固定的 IP } } # 相关的设置参数意义,请查找前一小节的介绍,或者 man dhcpd.conf
够简单吧!这样就设置好了!你可以拷贝上头的数据然后修改一下,让里头的 IP 参数符合你的环境, 就能够设置好你的 DHCP 服务器了。接下来理论上你就能够启动 dhcp 了。不过,在某些早期的 Linux distribution 上面, 当你的 Linux 主机具有多个接口时,你的一个设置可能会让多个接口同时来监听,那就可能会发生错误了。
举例来说,我们现在的设置是 192.168.100.0/24 这个在 eth1 上头的网域,假设你还有一个接口 eth2 在 192.168.2.0/24 好了, 那万一你的 DHCP 同时监听两块接口的话,想一想,如果 192.168.2.0/24 网域的用户端发送出 dhcp 封包的要求时, 他会取得什么 IP ?当然是 192.168.100.X !所以啰,我们就得要针对 dhcpd 这个运行档设置他监听的接口, 而不是针对所有的接口都监听啊!你说是吧!^_^!那如何处理呢?在 CentOS (Red Hat 系统) 可以这样做:
[root@www ~]# vim /etc/sysconfig/dhcpd DHCPDARGS="eth0"
不过这个动作在 CentOS 5.x 以后的版本上面已经不需要了,因为新版本的 dhcp 会主动的分析服务器的网段与实际的 dhcpd.conf 设置, 如果两者无法吻合,就会有错误提示,人性化多了。 ^_^!接下来我们可以开始启动 dhcp 试看看啰!
开始来启动 dhcp 吧!在启动前你得要注意几件事情喔:
另外你要注意的是:dhcpd 使用的端口口是 port 67 ,并且启动的结果会记录在 /var/log/messages 文件内,你最好能去观察一下 /var/log/messages 所显示的 dhcpd 相关信息才好。
# 1. 启动后观察一下端口口的变化: [root@www ~]# /etc/init.d/dhcpd start [root@www ~]# chkconfig dhcpd on [root@www ~]# netstat -tlunp | grep dhcp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name udp 0 0 0.0.0.0:67 0.0.0.0:* 1581/dhcpd # 2. 固定去看看注册表的输出信息 [root@www ~]# tail -n 30 /var/log/messages Jul 27 01:51:24 www dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1 Jul 27 01:51:24 www dhcpd: Copyright 2004-2010 Internet Systems Consortium. Jul 27 01:51:24 www dhcpd: All rights reserved. Jul 27 01:51:24 www dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Jul 27 01:51:24 www dhcpd: WARNING: Host declarations are global. They are not limited to the scope you declared them in. Jul 27 01:51:24 www dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Jul 27 01:51:24 www dhcpd: Wrote 0 deleted host decls to leases file. Jul 27 01:51:24 www dhcpd: Wrote 0 new dynamic host decls to leases file. Jul 27 01:51:24 www dhcpd: Wrote 0 leases to leases file. Jul 27 01:51:24 www dhcpd: Listening on LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24 Jul 27 01:51:24 www dhcpd: Sending on LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24 ....(以下省略)....
看到这些数据就是成功的象征啦!尤其是上述有特殊字体的部分。恭喜你啊!真是『福气啦!』不过, 万一你看到的注册表是类似底下的模样呢?
Jul 27 01:56:30 www dhcpd: /etc/dhcp/dhcpd.conf line 7: unknown option dhcp.domain-name-server Jul 27 01:56:30 www dhcpd: option domain-name-server#011168. Jul 27 01:56:30 www dhcpd: ^ Jul 27 01:56:30 www dhcpd: /etc/dhcp/dhcpd.conf line 9: Expecting netmask Jul 27 01:56:30 www dhcpd: subnet 192.168.100.0 network Jul 27 01:56:30 www dhcpd: ^ Jul 27 01:56:30 www dhcpd: Configuration file errors encountered -- exiting
上述的数据表示在第 7, 9 行恐怕有点设置错误,设置错误的地方在行号底下还有指数符号 (^) 特别标注出来! 由上面的情况来看,第 7 行的地方应该是 domain-name-servers 忘了加 s 了,而第 9 行则是参数下错, 应该是 netmask 而非 network !这样了解乎?
如果你有仔细的瞧过第二章的网络基础的话,那么应该还会记得那个 /etc/hosts (第四章 4.4.1) 会影响内部电脑在连接阶段的等待时间吧?那么我现在使用 DHCP 之后,糟糕!我怎么知道哪一部 PC 连上我的主机,那要怎么填写 /etc/hosts 的内容呢?这真是太简单了!就将所有可能的电脑 IP 都加进去该文件呀! ^_^ !以鸟哥为例,在这个例子中,鸟哥的分配的 IP 至少有 192.168.100.30, 192.168.100.101 ~ 192.168.100.200 ,所以 /etc/hosts 可以写成:
[root@www ~]# vim /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.100.254 vbird-server 192.168.100.30 win7 192.168.100.101 dynamic-101 192.168.100.102 dynamic-102 ....(中间省略).... 192.168.100.200 dynamic-200
这样一来,所有可能连进来的 IP 都已经有纪录了,哈哈!当然没有什么大问题啰! ^_^!不过, 更好的解决方案则是架设内部的 DNS 服务器,这样一来,内部的其他 Linux 服务器也不必更改 /etc/hosts 就能够取得每部主机的 IP 与主机名称对应,那样就更加妥当啦!
DHCP 的用户端可以是 Windows 也可以是 Linux 呢!鸟哥的网域内使用三部电脑,就如图 3.2-1 所示的那样。 Linux 与 Windows XP 的设置方式已经分别在第四章与第三章谈过了,底下就稍微介绍过而已。至于图标的部分, 我们主要是以 Windows 7 来做介绍啰。
Linux 的网络参数设置还记得吧?不记得的话就得要打屁股了!在第四章 (4.2.2) 我们谈过自动取得 IP 的方式,设置真的很简单:
[root@clientlinux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=dhcp <==就是他!指定这一个就对了! [root@clientlinux ~]# /etc/init.d/network restart
同时记得要拿掉缺省路由的设置喔!改完之后,就将我们的整个网络重新启动即可 (不要使用 ifdown 与 ifup ,因为还有缺省路由要设置!)。请注意,如果你是在远程进行这个动作, 你的连接『肯定会挂掉!』,因为网络卡被你关了嘛!呵呵!所以请在本机前面才进行喔!如果运行的结果有找到正确的 DHCP 主机,那么几个文件可能会被更动喔:
# 1. DNS 的 IP 会被更动呢!查阅一下 resolv.conf 先: [root@clientlinux ~]# cat /etc/resolv.conf search centos.vbird <==还记得设置过 domain-name 否? domain centos.vbird <==还记得设置过 domain-name 否? nameserver 168.95.1.1 <==这就是我们在 dhcpd.conf内的设置值 nameserver 139.175.10.20 # 2. 观察一下路由啦! [root@clientlinux ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.100.254 0.0.0.0 UG 0 0 0 eth0 # 嗯!没错!路由也被正确的捉到了!OK的啦! # 3. 察看一下用户端的指令吧! [root@clientlinux ~]# netstat -tlunp | grep dhc Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:68 0.0.0.0:* 1694/dhclient # 你没看错!确实是有个小程序在监测 DHCP 的连接状态呐! # 4. 看一看用户端租约所记载的信息吧! [root@clientlinux ~]# cat /var/lib/dhclient/dhclient* lease { interface "eth0"; fixed-address 192.168.100.101; <==取得的 IP 呦! option subnet-mask 255.255.255.0; option routers 192.168.100.254; option dhcp-lease-time 259200; option dhcp-message-type 5; option domain-name-servers 168.95.1.1,139.175.10.20; option dhcp-server-identifier 192.168.100.254; option domain-name "centos.vbird"; renew 4 2011/07/28 05:01:24; <==下一次预计更新 (renew) 的时间点 rebind 5 2011/07/29 09:06:36; expire 5 2011/07/29 18:06:36; } # 这个文件会记录该适配器所曾经要求过的 DHCP 信息喔!重要! # 有没有看出来,他几乎就与你设置的 /etc/dhcp/dhcpd.conf 类似? ^_^
有没有发现其实你的用户端取得的数据都被记载在 /var/lib/dhclient/dhclient*-eth0.leases 里头啊? 如果你有多张网卡,那么每张网卡自己的 DHCP 要求就会被写入到不同文件名的文件当中去! 观察该文件就知道你的数据是如何啰!这可也是挺重要的呦!
例题:
在文献中谈到,如果区网内有多个 DHCP 服务器 (假设有 DHCP1, DHCP2),那么每次用户端对整个物理网络区段广播时,DHCP 服务器将是先抢先赢的局面。
但是若第一次取得 DHCP1 服务器的 IP 后,未来重新启动网络,都只会取得 DHCP1 的网络参数,这是为什么?
答:
看到上述的 dhclient-eth0.leases 用户端文件了吗?因为你的主机想要取得上次取得的网络参数,因此将会对 DHCP1 要求网络参数。
如果你想要使用先抢先赢的方式来取得 IP ,或者想要使用 DHCP2 来取得 IP ,那么得要修订或者删除 dhclient-eth0.leases 才行。
|
在 Windows 底下设置 DHCP 协定以取得 IP 实在是很简单喔!例如,你可以到第三章的 3.2.2 小节去瞧瞧如何设置的截取图标。 我们这里以 Windows 7 作为介绍好了。你可以依据『开始』-->『控制台』-->『查看网络状态及工作』 -->『变更适配器设置』,在出现的图标中,选择属于你的相关网卡,然后连击两下之后,就开始底下的设置进程:
C:\Users\win7> ipconfig /all ....(前面省略).... 以太网路卡 区域连接: 连接特定 DNS 尾码 . . . . . . . . : centos.vbird 描述 . . . . . . . . . . . . . . .: Intel(R) PRO/1000 MT Desktop Adapter 实体地址 . . . . . . . . . . . . .: 08-00-27-11-EB-C2 DHCP 已激活 . . . . . . . . . . . : 是 自动设置激活 . . . . . . . . . . .: 是 链接-本机 IPv6 地址 . . . . . . . : fe80::ec92:b907:bc2a:a5fa%11(偏好选项) IPv4 地址 . . . . . . . . . . . . : 192.168.100.30(偏好选项) <==这是取得的IP 子网络遮罩 . . . . . . . . . . . .: 255.255.255.0 租用取得 . . . . . . . . . . . . .: 2011年7月27日 上午 11:59:18 <==这是租约 租用到期 . . . . . . . . . . . . .: 2011年7月30日 上午 11:59:18 缺省闸道 . . . . . . . . . . . . .: 192.168.100.254 DHCP 服务器 . . . . . . . . . . . : 192.168.100.254 <==这一部 DHCP 服务器 DNS 服务器 . . . . . . . . . . . .: 168.95.1.1 <==取得的 DNS 139.175.10.20 NetBIOS over Tcpip . . . . . . . .: 激活 C:\Users\win7> ipconfig /renew # 这样可以立即要求更新 IP 信息喔!这样就 OK 的啦!简单吧!
如果你要管理的是几十部甚至是几百部的电脑时,你总是希望能够根据座位来进行 IP 的给予吧?因此,固定 IP 配合 MAC 就显的很重要啦!那么如何取得每部主机的 IP 呢?还有,你怎么查找到相关的租约呢?以及,如果你还想要进行远程开机, 帮用户在固定的时间就开机呢?那就来看看底下的其他用途吧!
用户端会主动的纪录租约信息,那服务器端更不能忘记记录啰!服务器端是记录在这个地方:
[root@www ~]# cat /var/lib/dhcpd/dhcpd.leases lease 192.168.100.101 { starts 2 2011/07/26 18:06:36; <==租约开始日期 ends 5 2011/07/29 18:06:36; <==租约结束日期 tstp 5 2011/07/29 18:06:36; cltt 2 2011/07/26 18:06:36; binding state active; next binding state free; hardware ethernet 08:00:27:34:4e:44; <==客户端网卡 }
从这个文件里面我们就知道有多少用户端已经向我们申请了 DHCP 的 IP 使用了呢!很容易了解吧!
想一想,如果你有一百台电脑要管理,每部电脑都希望是固定 IP 的情况下,那你要如何处置? 很简单,通过 DHCP 的 fixed-address 就行啦!但是,这一百台电脑的 MAC 如何取得?你要怎么改啦? 难道每部电脑都去抄写,然后再回来设置 dhcpd.conf 吗?这也太可怕了吧?既然每部电脑最终都得要开机, 那么你在开机之后,利用手动的方法来设置好每部主机的 IP 后,在根据底下的脚本来处理好你的 dhcpd.conf 啰!
[root@www ~]# vim setup_dhcpd.conf
#!/bin/bash
read -p "Do you finished the IP's settings in every client (y/n)? " yn
read -p "How many PC's in this class (ex> 60)? " num
if [ "$yn" = "y" ]; then
for site in $(seq 1 ${num})
do
siteip="192.168.100.${site}"
allip="$allip $siteip"
ping -c 1 -w 1 $siteip > /dev/null 2>&1
if [ "$?" == "0" ]; then
okip="$okip $siteip"
else
errorip="$errorip $siteip"
echo "$siteip is DOWN"
fi
done
[ -f dhcpd.conf ] && rm dhcpd.conf
for site in $allip
do
pcname=pc$(echo $site | cut -d '.' -f 4)
mac=$(arp -n | grep "$site " | awk '{print $3}')
echo " host $pcname {"
echo " hardware ethernet ${mac};"
echo " fixed-address ${site};"
echo " }"
echo " host $pcname {" >> dhcpd.conf
echo " hardware ethernet ${mac};" >> dhcpd.conf
echo " fixed-address ${site};" >> dhcpd.conf
echo " }" >> dhcpd.conf
done
fi
echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf"
echo "Finished."
这个脚本的想法很简单,如果你管理的电脑都是 Linux 的话,那么先开机后使用『 ifconfig eth0 YOURIP 』 来设置对应的 IP ,在鸟哥这个例子中,我使用的是 192.168.100.X/24 这个区段,此时 IP 就设置好了! 然后在通过上面的脚本跑一次,每部电脑的 MAC 与 IP 对应就顺利的写入 dhcpd.conf 啰! 然后你在将它粘贴 /etc/dhcp/dhcpd.conf 即可!如果你管理的电脑是 Windows 的话, 那使用文本接口下达『 netsh interface ip set address xxx 』之类的指令来修订啰!
既然已经知道用户端的 MAC 地址了,如果用户端的主机符合一些电源标准, 并且该用户端主机所使用之网络卡暨主板支持网络唤醒的功能时,我们就可以通过网络来让用户端电脑开机了。 如果你有一部主机想要让他可以通过网络来启动时,你必须要在这部用户端电脑上进行:
接下来请到永远开着的主机 DHCP 服务器上面 (其实只要任何一部 Linux 主机均可!) ,安装 net-tools 这个软件后, 就会取得 ether-wake 这个指令,这就是网络唤醒的主要功能!那该如何使用这个指令呢?假设用户端主机的 MAC 为 11:22:33:44:55:66 并且与我的服务器 eth1 相连接好了,那么你想要让这部主机被唤醒,就这样做吧:
[root@www ~]# ether-wake -i eth1 11:22:33:44:55:66 # 更多功能可以这样查阅喔: [root@www ~]# ether-wake -u
然后你就会发现,哈哈!那部用户端主机被启动了!以后如果你要连到局域网路内的话, 只要能够连上你的防火墙主机,然后通过这个 ether-wake 软件,就能够让你局域网路内的主机启动了, 控管上面就更加方便的啦!你说是吧! ^_^
我们知道局域网路内如果很多 Linux 服务器时,你得要将 private IP 加入到每部主机的 /etc/hosts 里面, 这样在连接阶段的等待时间才不会有逾时或者是等待太久的问题。问题是,如果电脑数量太大,又有很多测试机时, 这时你得要常常去更新维护那些重装过的机器的 /etc/hosts ,烦不烦呐?
此时在区网内架设一部 DNS 服务器负责主机名称解析就很重要!因此既然已经有 DNS 服务器帮忙进行主机名称的解析,那你根本不需要更动 /etc/hosts !未来的新机器或者是新灌的电脑也不需要改写任何网络参数,这样维护会轻松很多。 因此,一个好的区网内,理论上,我们应该在 DHCP 服务器主机上面在安装一个 DNS 服务器,提供内部电脑的名称解析为宜。 相关的设置就请参考第十九章 DNS 的介绍啰。
鸟哥在昆山信息传播系 (http://www.dic.ksu.edu.tw) 负责五间电脑教室的维护,每间电脑教室内部的 giga switch 是低级的有网管功能的机器!有网管功能机器的设置信息比较多, switch 也能够进行封包异常的侦测与抵挡。问题是,如果抵挡的行为『太超过』时,也可能造成许多问题。
鸟哥管理的电脑教室在重新启动网络取得 DHCP 时,都会等待几乎达 30 秒,虽然最终是成功的,但是等这么久呢! 取得 IP 之后,网络速度却又是正常的,一切没问题~就是教导网络参数设置时,学生都会哇哇叫!以为失败了, 有的等了将近一分钟才告知取得 IP 且为正常...
后来问了有经验的计中的罗组长,才发现可能是 switch 的问题。大多在设置位于『L2 Features』-->『Spanning Tree』-->『STP Port Settings』的子项目之类的字眼,将 STP 之类的端口口都设置为关闭 (Disabled) 看看, 鸟哥做完这个设置后,DHCP 的取得就顺畅了!连带的网络开机功能也就没有问题~这部份也提供给大家参考呦!