Linux基础服务 ·

DHCP服务搭建

[隐藏]

所需软件与文件结构

DHCP 的软件需求很简单,就是只要服务器端软件即可,在 CentOS 6.x 上面,这个软件的名称就是 dhcp ! 安装完成可以使用『 rpm -ql dhcp 』来看看这个软件提供了哪些文件,基本上,比较重要的文件数据如下:

  • /etc/dhcp/dhcpd.conf
    这个就是 dhcp 服务器的主要配置文件!在某些 Linux 版本上头这个文件可能不存在,所以如果你确定有安装 dhcp 软件却找不到这个文件时,请手动自行建立它即可。dhcp 软件在安装的时候都会附上一个范例 文件,你可以使用『 rpm -ql dhcp 』来查询到 dhcpd.conf.sample 这个范例文件,然后将该文件复制成为 /etc/dhcp/dhcpd.conf 后,再手动去修改即可,这样设定比较容易!
  • /usr/sbin/dhcpd
    启动整个 dhcp daemon 的执行文件!其实最详细的执行方式应该要使用『 man dhcpd 』来查阅一番!
  • /var/lib/dhcp/dhcpd.leases
    DHCP 服务器端与客户端租约建立的启始与到期日就是记录文件!

主配置文件语法

在 CentOS 5.x 以前,这个文件都被放置到 /etc/dhcpd.conf 的,新版的放置于 /etc/dhcp/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 来更新主机名与 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 地址的意思。

DHCP 服务器设定案例

假设我的环境当中,Linux 主机除了 NAT 服务器之外还得要负责其他服务器,例如邮件服务器的支持。 而在后端局域网络中则想要提供 DHCP 的服务。需要注意的是,在图中 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 这个。

那我的配置文件就会像底下这个样子了:


这样就设定好了!你可以复制上头的数据然后修改一下,让里头的 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 系统) 可以这样做:


不过这个动作在 CentOS 5.x 以后的版本上面已经不需要了,因为新版本的 dhcp 会主动的分析服务器的网段与实际的 dhcpd.conf 设定, 如果两者无法吻合,就会有错误提示,人性化多了。 接下来我们可以开始启动 dhcp 试看看!

DHCP 服务器的启动与观察

开始来启动 dhcp 吧!在启动前你得要注意几件事情:

你的 Linux 服务器网络环境已经设定好,例如 eth1 已经是 192.168.100.254;

你的防火墙规则已经处理好,例如:(1)放行内部区网的联机、(2)iptables.rule 的 NAT 服务已经设定妥当;

另外你要注意的是:dhcpd 使用的端口是 port 67 ,并且启动的结果会记录在 /var/log/messages 文件内,你最好能去观察一下 /var/log/messages 所显示的 dhcpd 相关信息才好。

看到这些资料就是成功了!不过, 万一你看到的日志文件是类似底下的模样:


上述的数据表示在第 7, 9 行恐怕有点设定错误,设定错误的地方在行号底下还有指数符号 (^) 特别标注出来! 由上面的情况来看,第 7 行的地方应该是 domain-name-servers 忘了加 s 了,而第 9 行则是参数下错, 应该是 netmask 而非 network !

内部主机的 IP 对应

/etc/hosts  会影响内部计算机在联机阶段的等待时间,使用 DHCP 之后,要知道哪一部 PC 连上我的主机,需要将所有可能的计算机 IP 都加 /etc/hosts 文件!

在这个例子中,分配的 IP 至少有 192.168.100.30, 192.168.100.101 ~ 192.168.100.200 ,所以 /etc/hosts 可以写成:


这样一来,所有可能连进来的 IP 都已经有纪录了,当然没有什么大问题! 不过, 更好的解决方案则是架设内部的 DNS 服务器,这样一来,内部的其他 Linux 服务器也不必更改 /etc/hosts 就能够取得每部主机的 IP 与主机名对应,那样就更加妥当!

参与评论