12.4 DHCP 服务器端进阶观察与使用

如果你要管理的是几十部甚至是几百部的计算机时,你总是希望能够根据座位来进行 IP 的给予吧?因此,固定 IP 配合 MAC 就显的很重要啦!那么如何取得每部主机的 IP 呢?还有,你怎么查询到相关的租约呢?以及,如果你还想要进行远程开机, 帮使用者在固定的时间就开机呢?那就来看看底下的其他用途吧!


12.4.1 检查租约档案

客户端会主动的纪录租约信息,那服务器端更不能忘记记录啰!服务器端是记录在这个地方:

[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 使用了呢!很容易了解吧!


12.4.2 让大量 PC 都具有固定 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 』之类的指令来修订啰!


12.4.3 使用 ether-wake 实行远程自动开机 (remote boot)

既然已经知道客户端的 MAC 地址了,如果客户端的主机符合一些电源标准, 并且该客户端主机所使用之网络卡暨主板支持网络唤醒的功能时,我们就可以透过网络来让客户端计算机开机了。 如果你有一部主机想要让他可以透过网络来启动时,你必须要在这部客户端计算机上进行:

  1. 首先你得要在 BIOS 里面设定『网络唤醒』的功能,否则是没有用的喔!
  2. 再来你必须要让这部主机接上网络线,并且电源也是接通的。
  3. 将这部主机的 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 软件,就能够让你局域网络内的主机启动了, 控管上面就更加方便的啦!你说是吧! ^_^

Tips: 鸟哥办公室有一部桌机是经常用来测试的机器,但是因为比较耗电,因此当鸟哥离开办公室时,就会将计算机关闭。 不过鸟哥办公室有一部 NAT server 在负责防火墙的第一道关卡,当鸟哥在家里有需要查询到学校桌机的数据时, 桌机关了怎办?没关系,透过 NAT server 登入后,使用 ether-wake 唤醒桌机,那就能够开机进去工作啰! 这样也比较不怕耗电问题~


12.4.4 DHCP 与 DNS 的关系

我们知道局域网络内如果很多 Linux 服务器时,你得要将 private IP 加入到每部主机的 /etc/hosts 里面, 这样在联机阶段的等待时间才不会有逾时或者是等待太久的问题。问题是,如果计算机数量太大,又有很多测试机时, 这时你得要常常去更新维护那些重灌过的机器的 /etc/hosts ,烦不烦吶?

此时在区网内架设一部 DNS 服务器负责主机名解析就很重要!因此既然已经有 DNS 服务器帮忙进行主机名的解析,那你根本不需要更动 /etc/hosts !未来的新机器或者是新灌的计算机也不需要改写任何网络参数,这样维护会轻松很多。 因此,一个好的区网内,理论上,我们应该在 DHCP 服务器主机上面在安装一个 DNS 服务器,提供内部计算机的名称解析为宜。 相关的设定就请参考第十九章 DNS 的介绍啰。

  • DHCP 响应速度与有网管 switch 的设定问题

鸟哥在昆山信息传播系 (http://www.dic.ksu.edu.tw) 负责五间计算机教室的维护,每间计算机教室内部的 giga switch 是低阶的有网管功能的机器!有网管功能机器的设定信息比较多, switch 也能够进行封包异常的侦测与抵挡。问题是,如果抵挡的行为『太超过』时,也可能造成许多问题。

鸟哥管理的计算机教室在重新启动网络取得 DHCP 时,都会等待几乎达 30 秒,虽然最终是成功的,但是等这么久呢! 取得 IP 之后,网络速度却又是正常的,一切没问题~就是教导网络参数设定时,学生都会哇哇叫!以为失败了, 有的等了将近一分钟才告知取得 IP 且为正常...

后来问了有经验的计中的罗组长,才发现可能是 switch 的问题。大多在设定位于『L2 Features』-->『Spanning Tree』-->『STP Port Settings』的子项目之类的字眼,将 STP 之类的埠口都设定为关闭 (Disabled) 看看, 鸟哥做完这个设定后,DHCP 的取得就顺畅了!连带的网络开机功能也就没有问题~这部份也提供给大家参考呦!

Tips: 网友巩立伟兄来信谈到,STP 主要的目的是在抵挡广播风暴,若侦测到广播风暴时,该 switch 的埠口会被停用。 只是启动这个功能后,会较缓慢的进入运作状态,所以会产生较慢的情况发生。较好的 switch 会支援 RSTP (Rapid spanning tree protocol),速度会较快一些。感谢朋友提供的信息喔!^_^