第十八章 DHCP服务器
DHCP (Dynamic Host Configuration Protocol) 服务器可以用来让网络中的计算机自动取得 IP 设定。架设 DHCP 服务器可以让网络中的计算机设定更容易,您不必再去一台台为每一台计算机设定 IP,这对于大型网络而言可以大幅减少管理者的负担。
读完本章后,您将了解下列主题:
18.1 DHCP 简介
一台计算机要连上网络必须要先设定 IP、子网掩码、路由、DNS 等。一般使用者对这些网络设定并不熟,如果要使用者自己设定这些项目很麻烦。而且,如果网络上有十几台,甚至几百台计算机,如果由 MIS 人员分配 IP、设定计算机实在太累人了。日后如果有新的计算机加入您的网域,系统管理者又要一台台去设定网络数据。这种无趣又乏味的设定工作对管理者而言实在是浪费时间。如果您有使用笔记型计算机,在没有 DHCP 的情形下,在公司要设定一次 IP,回到家又要再设定一次,太麻烦了。
如果有了 DHCP 服务器,网络上的计算机只要设定好自动取得 IP,系统开机后就可以自动取得网络设定。管理者不需要告诉使用者该使用什么 IP,不必再为一台台计算机设定 IP,生活从此更美好了。有了 DHCP 服务器之后,使用笔记型计算机的人只要设定好使用 DHCP,将计算机插上网络线后就可以自动取得 IP,而不必再做任何设定。
在设定 DHCP 服务器时,我们会设定要让使用者自动取得的 IP 地址范围、路由、DNS,在启动 DHCP 服务器之后,这些信息就会放到内存中等客户端来问。当一台使用 DHCP 自动取得 IP 的计算机连上网络后,它会以广播的方式询问网络上有没有 DHCP 服务器,而 DHCP 服务器会响应,并送给客户端网络设定的数据。客户端收到这些信息后,就将它设定为自己的 IP、DNS 等。
如果以 DHCP 的术语来说,DHCP 分配出一个 IP 的情形叫做 DHCP「出租」IP 给客户端。DHCP 的租约是有期限的,时间到了之后,客户端就必须重新取得一次 IP,不过客户端可以要求继续使用同一个 IP。为了避免有机器一直要求使用同一个 IP,我们也可以设定同一个 IP 最长的租期是多久。
除了动态的分配 IP 外,DHCP 也可以同时设定指派固定 IP。每一张网络卡都会有一个固定的网络卡地址 (MAC、Physical Address),例如,我们可以在 FreeBSD 中使用指令 ifconfig 或是在 Windows 中使用 ipconfig/all 来看到 MAC 的信息。以下列为例:
# ifconfig fxp0: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500 options=b<RXCSUM,TXCSUM,VLAN_MTU> inet6 fe80::202:b3ff:fe48:7c74%fxp0 prefixlen 64 scopeid 0x1 inet 10.0.0.1 netmask 0xff000000 broadcast 10.255.255.255 ether 00:02:b3:48:7c:74 media: Ethernet autoselect (100baseTX <full-duplex>) status: active
上列粗体部份「00:02:b3:48:7c:74」就是网络卡地址,我们可以设定某个网络卡地址一定使用固定 IP,如此一来,只要这一台机器使用 DHCP 要求 IP 时,DHCP 服务器都会给它固定的地址。
如果您的机器有多张网络卡,在设定 DHCP 时,我们可以指定只要接受某个网卡进来的要求。DHCP 服务器所需要的系统资源很少,所以通常除了 DHCP 外,我们还会在同一台机器上架设其它服务。例如,NAT、防火墙、网页服务器、或 DNS 等。以一个公司而言,DHCP 是一种内部所使用的服务器,它和网络上要使用 DHCP 服务的计算机一定有所连结,中间不会有防火墙阻挡了 DHCP 的封包。通常我会将 DHCP 和 NAT、或 DNS 服务器放在一起。
18.2 安装 DHCP 服务器
在安装 DHCP 服务器之前,请确定您的核心有支持 bpf 装置。FreeBSD 的 GENERIC 核心预设就有支持 bpf 装置,如果您有修改过核心,请重新加入 bpf 的支持。
DHCP 服务器有很多软件可以使用,我们使用 ISC DHCP,请使用下列指令安装:
# cd /usr/ports/net/isc-dhcp3-server # make install clean
执行上述指令后,将出现下列画面:
图 18-1
我们只要使用预设的设定即可。
安装完后,在 /usr/local/etc/dhcpd.conf.sample 有一份预设的 DHCP 设定档。我们可以将它复制成 /usr/local/etc/dhcpd.conf 并进行修改。以下是 笔者的设定文件范例:
authoritative; option domain-name "twbsd.org"; option domain-name-servers 168.95.1.1; option subnet-mask 255.255.0.0; option broadcast-address 192.168.255.255; # 本地时间与格林威治时间差(快八小时)。 option time-offset 28800; # 预设租期时间长度: 一天(秒)。 default-lease-time 86400; # 最大租期长度: 十天(秒)。 max-lease-time 864000; ddns-update-style none; # 子网络与网络屏蔽。 subnet 192.168.0.0 netmask 255.255.0.0 { # 动态分配 IP 位置范围。 range dynamic-bootp 192.168.100.1 192.168.100.253; range dynamic-bootp 192.168.101.1 192.168.101.253; # 子网络路由器。 option routers 192.168.1.1; } # 设定使用固定 IP 的机器 host alexserver { hardware ethernet 00:07:e9:03:39:80; fixed-address 192.168.1.2; } |
dhcpd.conf 设定文件中,每一个项目的说明如下:
接下来的 subnet 设定中,我们所使用的子网络是 192.168.0.0/255.255.0.0,DHCP 的 IP 分配范围是 192.168.100.1~192.168.100.253 及 192.168.101.1~192.168.100.253。并设定预设的路由器为 192.168.1.1。
另外,我们设定了一个命名为 alexserver 的设定,只要网络卡地址是 00:07:e9:03:39:80 的计算机则指派 192.168.1.2 这个固定 IP 给它。
接下来请在 /etc/rc.conf 中加入下列这一行,以在开机时启动 DHCP 服务器:
dhcpd_enable="YES" |
如果您有多张网络卡分属于不同的网域,则在 dhcpd.conf 必须设定这些网域都必须要有设定值。如果您只想要 DHCP 监听某个网络卡,则可以在 /etc/rc.conf 中加入下列设定,让 DHCP 只接收该网卡进来的要求:
dhcpd_ifaces="fxp1" |
最后我们就可以使用下列指令启动 DHCP 服务器了:
# /usr/local/etc/rc.d/isc-dhcpd.sh start
18.3 客户端 DHCP 设定
在客户端设定方面,如果您使用的是 FreeBSD,请参考「网络设定」一章中关于使用 DHCP 动态取得 IP 的设定说明。
如果您使用的是 Windows 2000/XP,请以鼠标右键点选桌面上的「网络上的芳邻」,选「内容」后出现「网络联机」的画面后,点选「局域网络」后出现下列画面:
图 18-2
接着请选则「Internet Protocol (TCP/IP)」后,点选「内容」出现下列画面:
图 18-3
接下来按确定即可使用 DHCP。
18.4 DHCP 及系统管理
DHCP 服务器会将所有出租过的 IP 信息存放在 /var/db/dhcpd/dhcpd.leases 中。我们来看看该档案的内容:
lease 192.168.101.99 { starts 1 2005/10/03 01:47:16; ends 2 2005/10/04 01:47:16; binding state active; next binding state free; hardware ethernet 00:02:b3:1d:61:7a; uid "\001\000\002\263\035az"; client-hostname "test-winxp"; } lease 192.168.101.44 { starts 1 2005/10/03 02:09:40; ends 2 2005/10/04 02:09:40; binding state active; next binding state free; hardware ethernet 00:02:b3:26:ca:64; uid "\001\000\002\263&\312d"; client-hostname "build"; } |
我们可以看到每一个区段都是一次 IP 出租的信息。这些信息中包含了 IP、开始时间、网络卡地址、客户端计算机名称等等。这些信息有的时候对于我们管理网络中的计算机还蛮有用的。
举例而言,假设有人不小心将计算机设定成您的 IP,在 FreeBSD 的 console 下您会看到下列讯息:
arp: 192.168.1.9 moved from 00:c5:b5:5d:9c:94 to 00:aa:00:01:b7:54 on fxp1 arp: 192.168.1.9 moved from 00:aa:00:01:b7:54 to 00:e9:38:54:92:c3 on fxp1 arp: 00:0c:29:07:0e:7d is using my IP address 192.168.0.4! |
如果是有人在使用您的 IP,您会看到如上述最后一条讯息「xxx is using my IP address」。如果是另外一台机器的 IP 改变了,您会看到「xxx moved from xxx to xxx」的讯息。从这些讯息中,我们可以知道误用 IP 的人的网络卡地址。以上述范例的第三行为例,其网络卡地址是「00:0c:29:07:0e:7d」。接下来,您就可以去 dhcpd.leases 中检查,该网络卡地址是不是曾经使用过 DHCP 服务器。如果有,则您可以找到它的「client-hostname」,并经由该信息找到该计算机。