• 12.4 DHCP 服务器端进阶观察与使用
    • 12.4.1 检查租约档案
    • 12.4.2 让大量 PC 都具有固定 IP 的脚本
    • 12.4.3 使用 ether-wake 实行远程自动开机 (remote boot)
    • 12.4.4 DHCP 与 DNS 的关系

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

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


    12.4.1 检查租约档案

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

    1. [root@www ~]# cat /var/lib/dhcpd/dhcpd.leases
    2. lease 192.168.100.101 {
    3. starts 2 2011/07/26 18:06:36; <==租约开始日期
    4. ends 5 2011/07/29 18:06:36; <==租约结束日期
    5. tstp 5 2011/07/29 18:06:36;
    6. cltt 2 2011/07/26 18:06:36;
    7. binding state active;
    8. next binding state free;
    9. hardware ethernet 08:00:27:34:4e:44; <==客户端网卡
    10. }

    从这个档案里面我们就知道有多少客户端已经向我们申请了 DHCP 的 IP 使用了呢!很容易了解吧!


    12.4.2 让大量 PC 都具有固定 IP 的脚本

    想一想,如果你有一百台计算机要管理,每部计算机都希望是固定 IP 的情况下,那你要如何处置? 很简单,透过 DHCP 的 fixed-address 就行啦!但是,这一百台计算机的 MAC 如何取得?你要怎么改啦? 难道每部计算机都去抄写,然后再回来设定 dhcpd.conf 吗?这也太可怕了吧?既然每部计算机最终都得要开机, 那么你在开机之后,利用手动的方法来设定好每部主机的 IP 后,在根据底下的脚本来处理好你的 dhcpd.conf 啰!

    1. [root@www ~]# vim setup_dhcpd.conf
    2. #!/bin/bash
    3. read -p "Do you finished the IP's settings in every client (y/n)? " yn
    4. read -p "How many PC's in this class (ex> 60)? " num
    5. if [ "$yn" = "y" ]; then
    6. for site in $(seq 1 ${num})
    7. do
    8. siteip="192.168.100.${site}"
    9. allip="$allip $siteip"
    10. ping -c 1 -w 1 $siteip > /dev/null 2>&1
    11. if [ "$?" == "0" ]; then
    12. okip="$okip $siteip"
    13. else
    14. errorip="$errorip $siteip"
    15. echo "$siteip is DOWN"
    16. fi
    17. done
    18. [ -f dhcpd.conf ] && rm dhcpd.conf
    19. for site in $allip
    20. do
    21. pcname=pc$(echo $site | cut -d '.' -f 4)
    22. mac=$(arp -n | grep "$site " | awk '{print $3}')
    23. echo " host $pcname {"
    24. echo " hardware ethernet ${mac};"
    25. echo " fixed-address ${site};"
    26. echo " }"
    27. echo " host $pcname {" >> dhcpd.conf
    28. echo " hardware ethernet ${mac};" >> dhcpd.conf
    29. echo " fixed-address ${site};" >> dhcpd.conf
    30. echo " }" >> dhcpd.conf
    31. done
    32. fi
    33. echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf"
    34. 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 地址了,如果客户端的主机符合一些电源标准, 并且该客户端主机所使用之网络卡暨主板支持网络唤醒的功能时,我们就可以透过网络来让客户端计算机开机了。 如果你有一部主机想要让他可以透过网络来启动时,你必须要在这部客户端计算机上进行:

    • 首先你得要在 BIOS 里面设定『网络唤醒』的功能,否则是没有用的喔!
    • 再来你必须要让这部主机接上网络线,并且电源也是接通的。
    • 将这部主机的 MAC 抄下来,然后关机等待网络唤醒。
      接下来请到永远开着的主机 DHCP 服务器上面 (其实只要任何一部 Linux 主机均可!) ,安装 net-tools 这个软件后, 就会取得 ether-wake 这个指令,这就是网络唤醒的主要功能!那该如何使用这个指令呢?假设客户端主机的 MAC 为 11:22:33:44:55:66 并且与我的服务器 eth1 相连接好了,那么你想要让这部主机被唤醒,就这样做吧:
    1. [root@www ~]# ether-wake -i eth1 11:22:33:44:55:66
    2. # 更多功能可以这样查阅喔:
    3. [root@www ~]# ether-wake -u

    然后你就会发现,哈哈!那部客户端主机被启动了!以后如果你要连到局域网络内的话, 只要能够连上你的防火墙主机,然后透过这个 ether-wake 软件,就能够让你局域网络内的主机启动了, 控管上面就更加方便的啦!你说是吧! ^_^

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

    16.4. 12.4 DHCP 服务器端进阶观察与使用  - 图1


    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),速度会较快一些。感谢朋友提供的信息喔!^_^

    16.4. 12.4 DHCP 服务器端进阶观察与使用  - 图2


    原文: https://wizardforcel.gitbooks.io/vbird-linux-server-3e/content/86.html