一. 前言
DHCP 是 Dynamic Host Configuration Protocol 的简称, 主要用来简化网管在: 工作站/主机网络的IP地址设定方面的 "麻烦" 问题, 俗称: "动态IP地址分配 "。
相对於动态IP地址分配的机制, 而使用人工手动的方式, 一台一台去设定, 则称为静态设置。静态设置是相当没有效率的。试想: 如果一个网段中, 有几百台计算机, 用人工手动方式静态设置, 不累死才怪, 况且, 将来, 若欲更动网路拓朴, 也极不方便!
因此, 通常在网管工作中, 假设可以完成动态IP地址分配的DHCP Server 是一项十分重要的工作。以往, DHCP Server 大多架在 NT/W2K 上, 但效能及稳定性不是很好。本文将详细介绍 DHCP Server 在 RedHat Linux 上的架设。
二. 所需软件
dhcp-2.0-5.i386.rpm (RedHat 6.2)
dhcp-2.0-12.i186.rpm (RedHat 7.0)
dhcp-2.0-12.i386.rpm (CLE 1.0)
dhcp-2.0p15-4.i386.rpm(RedHat 7.1)
请根据您的 Linux 版本来挑选 dhcp Server 的套件吧。
三. 架设
在 RedHat Linux 上, 架设 DHCP Server 是非常简单的!
1. 安装:
(a) rpm -ivh dhcp-2.0-5.i386.rpm
(b) 之后, 查看一下, 到底DHCP在主机中安置了那些文件?
rpm -ql dhcp | more
会得到以下文件列表:
/etc/rc.d/init.d/dhcpd
/usr/doc/dhcp-2.0
/usr/doc/dhcp-2.0/CHANGES
/usr/doc/dhcp-2.0/README
/usr/doc/dhcp-2.0/RELNOTES
/usr/doc/dhcp-2.0/dhcpd.conf.sample
/usr/man/man5/dhcp-options.5.gz
/usr/man/man5/dhcpd.conf.5.gz
/usr/man/man5/dhcpd.leases.5.gz
/usr/man/man8/dhcpd.8.gz
/usr/man/man8/dhcrelay.8.gz
/usr/sbin/dhcpd
/usr/sbin/dhcrelay
/var/state/dhcp
其中, 比较重要的有二个:
其一是, /etc/rc.d/init.d/dhcpd , 它可用来控制 dhcp server 的行为, 如:
启动: /etc/rc.d/init.d/dhcpd start
停止: /etc/rc.d/init.d/dhcpd stop
重新启动: /etc/rc.d/init.d/dhcpd restart
观察运作状况: /etc/rc.d/init.d/dhcpd status
另外一个是, /usr/doc/dhcp-2.0/dhcpd.conf.sample
(RedHat 7.0 在 /usr/share/doc/dhcp-2.0 中)
顾名思义, 这是一个 dhcp server 的设定档本, 等一下我们要将它 copy 到 /etc 下, 并且命名为dhcpd.conf。
(c) cp /usr/doc/dhcp-2.0/dhcpd.conf.sample /etc/dhcpd.conf
2. 设定:
接着, 便可开始针对 dhcp server 的配置文件 /etc/dhcpd.conf 来做配置工作。
以下是该文件的原始内容:
subnet 192.168.0.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "domain.org";
option domain-name-servers 192.168.1.1;
option time-offset -5; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.0.128 192.168.0.255;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host ns {
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
||||||请将它修改成: (假定我们设定的织网为163.26.167.0)
subnet 163.26.167.0 netmask 255.255.255.128 {
# --- default gateway
# 路由器 IP
option routers 163.26.197.126;
# 子网掩码
option subnet-mask 255.255.255.128;
# Domain
option domain-name "jmjh.tnc.edu.tw";
# 指定要分派那几台 DNS Server 来提供服务?
option domain-name-servers 163.26.167.1, 163.26.200.1, 168.95.1.1;
option time-offset -5; # Eastern Standard Time
# 动态分配 IP 围
range dynamic-bootp 163.26.167.50 163.26.167.100;
# IP 租用时间
default-lease-time 21600;
max-lease-time 43200;
# 将该子网的 DNS 主机设定在固定 IP
# we want the nameserver to appear at a fixed address
host ns {
next-server dns.jmjh.tnc.edu.tw;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 163.26.167.1;
}
}
上面的设定中, 请您依据你的网络情况, 自行修改。
要注意的是:
(a) host ns {
next-server dns.jmjh.tnc.edu.tw;
hardware ethernet 12:34:56:78:AB:CD; ---> 这个是 DNS 主机网路卡的编号(6 bytes), 请用 ifconfig 来查询, 如下所示:
fixed-address 163.26.167.1;
}
ifconfig 得:
eth0 Link encap:Ethernet HWaddr 48:54:E8:26:CC:C9
inet addr:163.26.167.1 Bcast:163.26.167.127 Mask:255.255.255.128
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:762193 errors:0 dropped:0 overruns:0 frame:0
TX packets:555401 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:11 Base address:0x8000
取 HWaddr 48:54:E8:26:CC:C9 的 48:54:E8:26:CC:C9
填入上面的 hardware ethernet 设定中即可。
(b) 这台 dhcp server 可以和原有的 NT/W2K 上的 dhcp server 共存, 但请注意, IP 分配段最好要错开. 那麽, 到底工作站会向那一台 dhcp server 取得动态分配呢?
很简单, 当工作站发出要求(request)的讯息时, 谁先抢到, 就由谁先提供。
3. 执行:
/etc/rc.d/init.d/dhcpd start
第一次执行时, 不会成功,
若是 dhcp-2.0-5 版本, 它会出现 failed 失败的红色字串, 并警告您:
/var/state/dhcp/dhcpd.leases 这个文件不存, 因此, 您必须手动编写一个新文件:
touch /var/state/dhcp/dhcpd.leases
这个文件的用途是: 记录各工作站租赁 IP 的情形。
若是 DHCP-2.0-12 以後的版本, 则不会出现任何讯息, 您会发现它并没有运作起来。
这是因为: 此版一旦发现您没有建立这个文件, 便会直接跳出而不执行。
而且此文件的位置稍有不同:
它位於 /var/lib/dhcp/dhcpd.leases
OK, 手动建立一下吧!
touch /var/lib/dhcp/dhcpd.leases
现在可以启动了, 并把它设成一开机就自动执行(linuxconf 或 ntsysv 皆可设定之)
/etc/rc.d/init.d/dhcpd start
恭喜您! 你已拥有一个非常稳定的 DHCP Server 了!
四、注意事项
若您有架设 Linux 防火墙, 想将 DHCP Server 由某一张网卡分配出去(一张网卡代表一个网段围), 例如: 想由第二张网路卡 eth1 介面分配出去, 只要修改 /etc/rc.d/init.d/dhcpd 即可. 如下所示:
将 start daemons 的地方由:
daemon /usr/sbin/dhcpd
改成:
daemon /usr/sbin/dhcpd eth1
五、结言:
DHCP Server 是网管工作中非常重要的利器, 架设二台以便一台故障的时候备用, 也是明智的作法。