## 12.2 DHCP 服务器端的设定
事实上,目前市面上的 IP 分享器已经便宜到爆了!而 IP 分享器本身就含有 DHCP 的功能。 所以如果你只是想要单纯的使用 DHCP 在你的局域网络当中而已,那么建议你直接购买一部 IP 分享器来使用即可, 因为至少它很省电。如果你还有其他考虑的话,才来架设 DHCP 吧!底下我们以一个简单的范例来架设 DHCP 先。
* * *
### 12.2.1 所需软件与档案结构
DHCP 的软件需求很简单,就是只要服务器端软件即可,在 CentOS 6.x 上面,这个软件的名称就是 dhcp 啰!如果是默认安装,那么这个软件是不会安装的,请自行使用 yum 去装好这个软件吧!安装完毕之后, 你可以使用『 rpm -ql dhcp 』来看看这个软件提供了哪些档案,基本上,比较重要的档案数据如下:
* /etc/dhcp/dhcpd.conf
这个就是 dhcp 服务器的主要配置文件咯!在某些 Linux 版本上头这个档案可能不存在,所以如果你确定有安装 dhcp 软件却找不到这个档案时,请手动自行建立它即可。
**Tips:** 其实 dhcp 软件在释出的时候都会附上一个范例档案,你可以使用『 rpm -ql dhcp 』来查询到 dhcpd.conf.sample 这个范例档案,然后将该档案复制成为 /etc/dhcp/dhcpd.conf 后,再手动去修改即可,这样设定比较容易啦!
![](https://box.kancloud.cn/2016-05-13_5735736501917.gif)
* /usr/sbin/dhcpd
启动整个 dhcp daemon 的执行档啊!其实最详细的执行方式应该要使用『 man dhcpd 』来查阅一番的呢!^_^
* /var/lib/dhcp/dhcpd.leases
这档案颇有趣的!我们前面原理部分不是有提到『租约』吗?DHCP 服务器端与客户端租约建立的启始与到期日就是记录在这个档案当中的咯!
就跟你说很简单吧!整个软件数据也不过才如此而已呢!
* * *
### 12.2.2 主要配置文件 /etc/dhcp/dhcpd.conf 的语法
在 CentOS 5.x 以前,这个档案都被放置到 /etc/dhcpd.conf 的,新版的才放置于此处。其实 DHCP 的设定很简单啊,只要将 dhcpd.conf 设定好就可以启动了。不过编辑这个档案时你必须要留意底下的规范:
* 『 # 』为批注符号;
* 除了右括号 ")" 后面之外,其他的每一行设定最后都要以『 ; 』做为结尾!重要!
* 设定项目语法主要为:『 <参数代号> <设定内容> 』,例如:
default-lease-time 259200;
* 某些设定项目必须以 option 来设定,基本方式为『 option <参数代码> <设定内容> 』例如:
option domain-name "your.domain.name";
基本上,我们刚刚前面提过说, DHCP 的 IP 分配可分为给予动态 IP 与固定 IP ,其中又需要了解的是, 如果需要设定固定 IP 的话,那么就必须要知道要设定成固定 IP 的那部计算机的硬件地址 (MAC) 才行,请使用 arp 或 ifconfig 来查知你的接口的 MAC 吧!好了,那么需要设定的项目有哪些呢? 其实 dhcpd.conf 里头的设定主要分为两大项目,一个是服务器运作的整体设定 (Global) 一个是 IP 设定模式 (动态或固定), 每个项目的设定值大概有底下这几项:
* 整体设定 (Global)
假设你的 dhcpd 只管理一个区段的区网,那么除了 IP 之外的许多网络参数就可以放在整体设定的区域中,这包括有租约期限、DNS 主机的 IP 地址、路由器的 IP 地址还有动态 DNS (DDNS) 更新的类型等等。当固定 IP 及动态 IP 内没有规范到某些设定时,则以整体设定值为准。这些参数的设定名称为:
* default-lease-time 时间:
用户的计算机也能够要求一段特定长度的租约时间,但若使用者没有特别要求租约时间的话, 那么就以此为预设的租约时间。后面的时间参数默认单位为秒;
* max-lease-time 时间:
与上面的预设租约时间类似,不过,这个设定值是在规范使用者所能要求的最大租约时间。也就是说, 使用者要求的租约时间若超过此设定值,则以此值为准;
* option domain-name "领域名":
如果你在 /etc/resolv.conf 里面设定了一个『 search google.com 』的话,这表示当你要搜寻主机名时, DNS 系统会主动帮你加上这个领域名的意思。
* option domain-name-servers IP1, IP2:
这个设定参数可以修改客户端的 /etc/resolv.conf 档案!就是 nameserver 后面接的那个 DNS IP 啰!特别注意设定参数最末尾为『servers』 (有 s 喔);
* ddns-update-style 类型:
因为 DHCP 客户端所取得的 IP 通常是一直变动的,所以某部主机的主机名与 IP 的对应就很难处理。此时 DHCP 可以透过 ddns (请参考[第十章](http://linux.vbird.org/linux_server/0270dynamic_dns.php)与[第十九章 DNS](http://linux.vbird.org/linux_server/0350dns.php) 的说明) 来更新主机名与 IP 的对应。不过我们这里不谈这么复杂的东西,所以你可以将他设定为 none 喔。
* ignore client-updates:
与上一个设定值较相关,客户端可以透过 dhcpd 服务器来更新 DNS 相关的信息。不过,这里我们也先不谈这个, 因此就将它设定为 ignore (忽略) 了。
* option routers 路由器的地址:
设定路由器的 IP 所在,记得那个『 routers 』要加 s 才对!
* IP 设定模式 (动态或固定)
由于 dhcpd 主要是针对局域网络来给予 IP 参数的,因此在设定 IP 之前,我们得要指定一个区网才行。 指定区网的方式使用如下的参数:
subnet NETWORK_IP netmask NETMASK_IP { ... }
我们知道区网要给予 network / netmask IP 这两个参数才行,例如之前谈过的: 192.168.100.0 / 255.255.255.0 这样的设定值。 上头设定值当中, subnet 与 netmask 是关键词,而大写部分就填上你的区网参数啰。那在括号内还有什么参数需要设定的? 那就是到底 IP 是固定的还是动态的设定啊:
* range IP1 IP2:
在这个区网当中,给予一个连续的 IP 群用来发放成动态 IP 的设定,那个 IP1 IP2 指的是开放的 IP 范围。 举例来说,你想要开放 192.168.100.101 到 192.168.100.200 这 100 个 IP 用来作为动态分配,那就是: range 192.168.100.101 192.168.100.200;
* host 主机名 { ... };
这个 host 就是指定固定 IP 对应到固定 MAC 的设定值,那个主机名可以自己想想再给予即可。 不过在大括号内就得要指定 MAC 与固定的 IP 啰!那这两个设定值怎么设定呢?看看底下啰:
* hardware ethernet 硬件地址:
利用网络卡上面的固定硬件地址来设定,亦即该设定仅针对这个硬件地址有效的意思;
* fixed-address IP地址:
给予一个固定的 IP 地址的意思。
说再多也没有什么用啦!让我们实际来玩一个案例吧!你就知道该如何处理了。
* * *
### 12.2.3 一个局域网络的 DHCP 服务器设定案例
假设我的环境当中,Linux 主机除了 NAT 服务器之外还得要负责其他服务器,例如邮件服务器的支持。 而在后端局域网络中则想要提供 DHCP 的服务。整个硬件配置的情况就如同[第三章的图 3.2-1](http://linux.vbird.org/linux_server/0120intranet.php#fig3.2-1)所示的内部独立区网 (centos.vbird 网域)。 需要注意的是,在图中 Linux Router 有两块接口,其中 eth1 对内而 eth0 对外,至于其他的网络参数设计为:
* Linux 主机对内的 eth1 的 IP 设定为 192.168.100.254 这个;
* 内部网段设定为 192.168.100.0/24 这一段,且内部计算机的 router 为 192.168.100.254 ,此外 DNS 主机的 IP 为中华电信的 168.95.1.1 及 Seednet 的 139.175.10.20 这两个;
* 我想要让每个使用者预设租约为 3 天,最长为 6 天;
* 只想要分配的 IP 只有 192.168.100.101 到 192.168.100.200 这几个,其他的 IP 则保留下来;
* 我还有一部主机,他的 MAC 是『 08:00:27:11:EB:C2 』,我要给他的主机名为 win7 ,且 IP 为 192.168.100.30 这个 (请对照图 3.2-1 喔!)。
那我的配置文件就会像底下这个样子了:
```
[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 试看看啰!
* * *
### 12.2.4 DHCP 服务器的启动与观察
开始来启动 dhcp 吧!在启动前你得要注意几件事情喔:
* 你的 Linux 服务器网络环境已经设定好,例如 eth1 已经是 192.168.100.254;
* 你的防火墙规则已经处理好,例如:(1)放行内部区网的联机、(2)iptables.rule 的 NAT 服务已经设定妥当;
另外你要注意的是: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 !这样了解乎?
* * *
### 12.2.5 内部主机的 IP 对应
如果你有仔细的瞧过第二章的[网络基础](http://linux.vbird.org/linux_server/0110network_basic.php)的话,那么应该还会记得那个 [/etc/hosts (第四章 4.4.1)](http://linux.vbird.org/linux_server/0130internet_connect.php#problem_hosts) 会影响内部计算机在联机阶段的等待时间吧?那么我现在使用 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 与主机名对应,那样就更加妥当啦!
* * *
- 鸟哥的Linux私房菜:服务器架设篇 第三版
- 第一部份:架站前的进修专区
- 作者序
- 第一章、架设服务器前的准备工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架设服务器流程
- 1.3 自我评估是否已经具有架站的能力
- 1.4 本章习题
- 第二章、基础网络概念
- 2.1 网络是个什么玩意儿
- 2.2 TCP/IP 的链结层相关协议
- 2.3 TCP/IP 的网络层相关封包与数据
- 2.4 TCP/IP 的传输层相关封包与数据
- 2.5 连上 Internet 前的准备事项
- 2.6 重点回顾:
- 2.7 本章习题
- 2.8 参考数据与延伸阅读
- 第三章、局域网络架构简介
- 3.1 局域网络的联机
- 3.2 本书使用的内部联机网络参数与通讯协议
- 第四章、连上 Internet
- 4.1 Linux 连上 Internet 前的注意事项
- 4.2 连上 Internet 的设定方法
- 4.3 无线网络--以笔记本电脑为例
- 4.4 常见问题说明
- 4.5 重点回顾
- 4.6 本章习题
- 4.7 参考数据与延伸阅读
- 第五章、 Linux 常用网络指令
- 5.1 网络参数设定使用的指令
- 5.2 网络侦错与观察指令
- 5.3 远程联机指令与实时通讯软件
- 5.4 文字接口网页浏览
- 5.5 封包撷取功能
- 5.6 重点回顾
- 5.7 本章习题
- 5.8 参考数据与延伸阅读
- 第六章、 Linux 网络侦错
- 6.1 无法联机原因分析
- 6.2 处理流程
- 6.3 本章习题
- 6.4 参考数据与延伸阅读
- 第二部分:主机的简易资安防护措施
- 第七章、网络安全与主机基本防护:限制端口, 网络升级与 SELinux
- 7.1 网络封包联机进入主机的流程
- 7.2 网络自动升级软件
- 7.3 限制联机埠口 (port)
- 7.4 SELinux 管理原则
- 7.5 被攻击后的主机修复工作
- 7.6 重点回顾
- 7.7 课后练习
- 7.8 参考数据与延伸阅读
- 第八章、路由观念与路由器设定
- 8.1 路由
- 8.2 路由器架设
- 8.3 动态路由器架设:quagga (zebra + ripd)
- 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
- 8.5 重点回顾
- 8.6 本章习题
- 8.7 参考数据与延伸阅读
- 第九章、防火墙与 NAT 服务器
- 9.1 认识防火墙
- 9.2 TCP Wrappers
- 9.3 Linux 的封包过滤软件:iptables
- 9.4 单机防火墙的一个实例
- 9.5 NAT 服务器的设定
- 9.6 重点回顾
- 9.7 本章习题
- 9.8 参考数据与延伸阅读
- 第十章、申请合法的主机名
- 10.1 为何需要主机名
- 10.2 注册一个合法的主机名
- 10.3 重点回顾
- 10.4 本章习题
- 10.5 参考数据与延伸阅读
- 第三部分:局域网络内常见的服务器架设
- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
- 11.1 远程联机服务器
- 11.2 文字接口联机服务器: SSH 服务器
- 11.3 最原始图形接口: Xdmcp 服务的启用
- 11.4 华丽的图形接口: VNC 服务器
- 11.5 仿真的远程桌面系统: XRDP 服务器
- 11.6 SSH 服务器的进阶应用
- 11.7 重点回顾
- 11.8 本章习题
- 11.9 参考数据与延伸阅读
- 第十二章、网络参数控管者: DHCP 服务器
- 12.1 DHCP 运作的原理
- 12.2 DHCP 服务器端的设定
- 12.3 DHCP 客户端的设定
- 12.4 DHCP 服务器端进阶观察与使用
- 12.5 重点回顾
- 12.6 本章习题
- 12.7 参考数据与延伸阅读
- 第十三章、文件服务器之一:NFS 服务器
- 13.1 NFS 的由来与其功能
- 13.2 NFS Server 端的设定
- 13.3 NFS 客户端的设定
- 13.4 案例演练
- 13.5 重点回顾
- 13.6 本章习题
- 13.7 参考数据与延伸阅读
- 第十四章、账号控管: NIS 服务器
- 14.1 NIS 的由来与功能
- 14.2 NIS Server 端的设定
- 14.3 NIS Client 端的设定
- 14.4 NIS 搭配 NFS 的设定在丛集计算机上的应用
- 14.5 重点回顾
- 14.6 本章习题
- 14.7 参考数据与延伸阅读
- 第十五章、时间服务器: NTP 服务器
- 15.1 关于时区与网络校时的通讯协议
- 15.2 NTP 服务器的安装与设定
- 15.3 客户端的时间更新方式
- 15.4 重点回顾
- 15.5 本章习题
- 15.6 参考数据与延伸阅读
- 第十六章、文件服务器之二: SAMBA 服务器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服务器的基础设定
- 16.3 Samba 客户端软件功能
- 16.4 以 PDC 服务器提供账号管理
- 16.5 服务器简单维护与管理
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考数据与延伸阅读
- 第十七章、区网控制者: Proxy 服务器
- 17.1 什么是代理服务器 (Proxy)
- 17.2 Proxy 服务器的基础设定
- 17.3 客户端的使用与测试
- 17.4 服务器的其他应用设定
- 17.5 重点回顾
- 17.6 本章习题
- 17.7 参考数据与延伸阅读
- 第十八章、网络驱动器装置: iSCSI 服务器
- 18.1 网络文件系统还是网络驱动器
- 18.2 iSCSI target 的设定
- 18.3 iSCSI initiator 的设定
- 18.4 重点回顾
- 18.5 本章习题
- 18.6 参考数据与延伸阅读
- 第四部分:常见因特网服务器架设
- 第十九章、主机名控制者: DNS 服务器
- 19.1 什么是 DNS
- 19.2 Client 端的设定
- 19.3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
- 19.4 DNS 服务器的详细设定
- 19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 19.6 DNS 服务器的进阶设定
- 19.7 重点回顾
- 19.8 本章习题
- 19.9 参考数据与延伸阅读
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服务器之三: FTP 服务器
- 21.1 FTP 的数据链路原理
- 21.2 vsftpd 服务器基础设定
- 21.3 客户端的图形接口 FTP 联机软件
- 21.4 让 vsftpd 增加 SSL 的加密功能
- 21.5 重点回顾
- 21.6 本章习题
- 21.7 参考数据与延伸阅读
- 第二十二章、邮件服务器: Postfix
- 22.1 邮件服务器的功能与运作原理
- 22.2 MTA 服务器: Postfix 基础设定
- 22.3 MRA 服务器: dovecot 设定
- 22.4 MUA 软件:客户端的收发信软件
- 22.5 邮件服务器的进阶设定
- 22.6 重点回顾
- 22.7 本章习题
- 22.8 参考数据与延伸阅读