DHCP服务器如何搭建、如何设置?

发布网友 发布时间:2022-04-22 08:13

我来回答

1个回答

热心网友 时间:2022-06-18 11:09

在FreeBSD的Packages Collection中,有两个不同的DHCP客户机和服务器软件,一 个为ISC-DHCP,另一个为WIDE-DHCP,两个软件都包括了DHCP客户软件和服务器软件,其中ISC-DHCP 更为常用一些,这里就以ISC-DHCP为例介绍在FreeBSD上安装和设置DHCP。
为了支持DHCP,首先要确认系统内核支持伪设备bpfilter,如果没有,就需要重新编译内核。伪设备bpfilter 是一个允许应用程序接收网络的原始数据包的界面,这样应用程序就能接收目的地址非本机IP地址的数据包 了。DHCP使用bpfilter的原因是在DHCP设置好计算机的TCP/IP之前,由于计算机本身没有定义IP地 址,而TCP/IP堆栈本身不会接收不具备本机IP地址的数据包。要接收DHCP服务器发送回客户的数据包,就需要绕 过TCP/IP堆栈,而必须使用伪设备bpfilter。
1. pseudo-device bpfilter 4  

定制内核之后,还要保证/dev/目录下具有对应bpfilter的设备文件。
1. # cd /dev
2. # sh MAKEDEV bpf0 bpf1 bpf2 bpf3 

从Packages Collecion中安装DHCP软件,这将DHCP软件中的dhcpd,dhclient和dhcprelay 安装到/usr/local/sbin目录下。
1. $ ls /usr/local/sbin/dhc*
2. /usr/local/sbin/dhclient
3. /usr/local/sbin/dhcpd
4. /usr/local/sbin/dhcrelay

设置服务器
为了设置DHCP服务器dhcpd,首先就要设置其配置文件/etc/dhcpd.conf。这个配置文件 语法简单,比较容易理解。
1. server-identifier 192.168.3.1;
2.
3. subnet 192.168.3.0 netmask 255.255.255.0 {
4. range 192.168.3.10 192.168.3.20;
5. default-lease-time 600;
6. max-lease-time 7200;
7. option subnet-mask 255.255.255.0;
8. option broadcast-address 192.168.3.255;
9. option routers 192.168.3.1;
10. option domain-name-servers 192.168.3.1;
11. option domain-name "exampleorg.org.cn";
12. }
13.
14. host a1 {
15. hardware ethernet 00:90:27:4e:92:09;
16. fixed-address 192.168.3.32;
17. option subnet-mask 255.255.255.0;
18. option broadcast-address 192.168.3.255;
19. option routers 192.168.3.1;
20. option domain-name-servers 192.168.3.1;
21. option domain-name "exampleorg.org.cn";
22. } 

基本的dhcpd.conf首先使用server-identifier定义了本服务器的IP地址,这对于有 多个IP地址的服务器系统十分重要,一般不必设置这个参数,dhcpd能自动侦测。然后定义要分配IP地址的客户机组 ,每组拥有一个可用的IP地址范围。有两种客户机组的划分方式,一种为指定子网段来区分,一种为指定主机来区分。
这个例子中的第一组定义了一个子网192.168.3.0/24,这个子网段内,可供DHCP服务器分配的I P地址范围为192.168.3.10到192.168.3.20,这个地址范围也可以不是连续的,不连续的地址可以 使用多个range设置参数来设置。此外,还设置了这一组内分配的IP地址的租期*default-lease-time 和max-lease-time,可以使用缺省值,而不必改动。后面的option参数设置DHCP的附加功能 ,例如设置DHCP客户的网络掩码、广播地址、DNS服务器、域名等等。事实上这些option设置选项也可以被用作 全局选项设置,即放置在server-identifier之后,对所有的客户机组起作用。
例子的第二组是针对某个特定主机a1进行的设置,这个主机被限定为以太网地址为hardware ethernet 参数值的计算机,将给这个计算机分配一个固定地址。这种分配方式实际等价于固定地址分配方式,唯一的好处就是能够对IP地址进行集中管理,不必每个计算机分别设置了。这里同样也可以使用option参数,设置TCP/IP的参数 。
dhcpd.conf中还能有更多的组,包括对非本网段的子网上的客户机指定的组。
当设置了dhcpd.conf之后,就能启动dhcpd守护进程了,由于计算机会有多个网络界面,需要指定dhcpd 服务器的网络界面,以便回应相应界面上的DHCP请求。
1. # /usr/local/sbin/dhcpd fxp0 

在调试阶段,可以使用-d参数,这样dhcpd就不会进入后台运行,而一直保留在前台,并显示各个与客户计算机通信的过程。当一切都调试完毕之后,就能去除-d参数,并将执行命令放入rc.local启动脚本中,以便系统能够自动执行。
此后,dhcpd正常运行的时候,会将每一次客户请求及其回应的IP地址分配的记录,都记录在/var/run/dhcpd.leases 文件中。为了使dhcpd能正常进行日志记录,应该在启动dhcpd之前使用touch 命令,生成一个新的日志文件。以后就可以查看这个日志文件的内容,以得到当前DHCP服务器的状态和客户机IP地址分 配的情况。以下是一个日志文件的部分内容。
1. lease 192.168.3.11 {
2. starts 3 1998/11/26 05:46:28;
3. ends 4 1998/11/27 05:46:28;
4. hardware ethernet 0:80:c2:12:fd:d;
5. uid 1:0:80:c2:12:fd:d;
6. } 

 
touch命令的优点是在存在相关的文件时,不删除或更改文件内容,只更新其访问时间设置,只有在文 件不存在时才生成新文件。
然后就能设置网络中的客户计算机使用DHCP协议,获取合法的IP地址了。通常Windows计算机的TCP/IP设置 中能直接设置支持DHCP协议,如果为Unix(包括FreeBSD)设置DHCP客户软件,就需要dhclient的支持。
设置客户软件
ISC-DHCP中同样也提供了一个客户程序dhclient,用于FreeBSD系统从DHCP服务器上动态获取一个IP地 址。这个程序同样也要求内核支持bpfilter伪设备。
dhclient使用的配置文件为/etc/dhclient.conf,然而最一般的情况下可以不使用它,软件本身的缺省配置就满足一般情况下请求IP地址的需要了。缺省设置下dhclient在获得了IP地址之后,会自动执行/etc/dhclient-script 这个脚本程序,以针对刚获取的动态IP地址进行必要的设置。很多依赖于IP地址的网络服务,就可以在这个脚 本中启动,或者针对重新分配的动态IP地址对已有的网络服务进行修正。虽然使用者也许不希望使用这个脚本 设置网络,但如果不存在这个脚本程序,或者这个程序不可执行,那么dhclient就不能正常执行。
因此对于最一般的客户机,一般只连接到一个网络上,仅具备一个网络界面,可以使用一个空的dhclient.conf 和空的declient-script文件,就能完成设置IP地址和其他TCP/IP参数的任务了。
1. # touch /etc/dhclient.conf
2. # touch /etc/dhclient-script
3. # chmod +x /etc/dhclient-script
4. # /usr/local/sbin/dhclient fxp0
5.
6. Listening on BPF/fxp0/00:90:27:4e:92:09/unattached
7. Sending on BPF/fxp0/00:90:27:4e:92:09/unattached
8. Sending on Socket/fallback/fallback-net
9. DHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 22
10. DHCPOFFER from 192.168.3.1
11. DHCPREQUEST on fxp0 to 255.255.255.255 port 67
12. DHCPACK from 192.168.3.1
13. bound to 192.168.3.32 -- renewal in 3600 seconds.

在更复杂的情况下,就要指定更多的内容,例如当系统有多个网卡时,要指定dhclient应该从哪个子网中获 得IP地址设置,就需要使用设置文件dhclient.conf。一般除非有多个局域网网络界面,都应该使用空设置文件, 避免产生配置错误。以下为一个简单的dhclient.conf的例子,可以用于多网络界面的情况:
1. # Defaults
2. timeout 60;
3. reboot 10;
4. retry 60;
5. select-timeout 5;
6. initial-interval 2;
7. script "/etc/dhclient-script";
8. interface "fxp0" {
9. request subnet-mask, broadcast-address, routers, domain-name-servers,
10. domain-name, host-name;
11. require domain-name-servers;
12. }  

 
这个设置文件主要用于重新定义一些参数,比较容易理解,更改也比较容易。
成功的手工执行dhclient之后,就可以考虑将其和系统启动文件相结合了。因为很多网络服务是依赖于网络 配置的,应该在启动这些网络服务之前使用DHCP配置好TCP/IP。使用dhclient-script启动服务的想法虽然也能解决问题,然而这就不能使用系统的启动rc文件中的相关设置启动网络服务,而在这个dhclient-script 中重新启动,因此比较麻烦。更简便的做法是仅仅在dhclient-script中设置hostname, 而让系统启动文件完成其他网络服务的启动。这样就要求将dhclient与系统rc文件结合起来。
1. #hostname="my.domain.name"
2. network_interfaces="fxp0 lo0"
3. # List of network interfaces (lo0 is loopback).
4. ifconfig_lo0="inet 127.0.0.1"
5. # default loopback device configuration.
6. #ifconfig_fxp0="inet 192.168.3.12 netmask 255.255.255.0"
7. defaultrouter="NO"
8. # Set to default gateway (or NO).

这样就需要更改rc.conf文件,更改一些设置语句。首先要注释hostname设置,而在dhclient.script中进行设置,也不必设置defaultrouter,它通过DHCP协议自动设置。同时要保证netwo

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com