为了支持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/dhcpdconf。这个配置文件 语法简单,比较容易理解。
1 server-identifier 19216831;
2
3 subnet 19216830 netmask 2552552550 {
4 range 192168310 192168320;
5 default-lease-time 600;
6 max-lease-time 7200;
7 option subnet-mask 2552552550;
8 option broadcast-address 1921683255;
9 option routers 19216831;
10 option domain-name-servers 19216831;
11 option domain-name "exampleorgorgcn";
12 }
13
14 host a1 {
15 hardware ethernet 00:90:27:4e:92:09;
16 fixed-address 192168332;
17 option subnet-mask 2552552550;
18 option broadcast-address 1921683255;
19 option routers 19216831;
20 option domain-name-servers 19216831;
21 option domain-name "exampleorgorgcn";
22 }
基本的dhcpdconf首先使用server-identifier定义了本服务器的IP地址,这对于有 多个IP地址的服务器系统十分重要,一般不必设置这个参数,dhcpd能自动侦测。然后定义要分配IP地址的客户机组 ,每组拥有一个可用的IP地址范围。有两种客户机组的划分方式,一种为指定子网段来区分,一种为指定主机来区分。
这个例子中的第一组定义了一个子网19216830/24,这个子网段内,可供DHCP服务器分配的I P地址范围为192168310到192168320,这个地址范围也可以不是连续的,不连续的地址可以 使用多个range设置参数来设置。此外,还设置了这一组内分配的IP地址的租期限制default-lease-time 和max-lease-time,可以使用缺省值,而不必改动。后面的option参数设置DHCP的附加功能 ,例如设置DHCP客户的网络掩码、广播地址、DNS服务器、域名等等。事实上这些option设置选项也可以被用作 全局选项设置,即放置在server-identifier之后,对所有的客户机组起作用。
例子的第二组是针对某个特定主机a1进行的设置,这个主机被限定为以太网地址为hardware ethernet 参数值的计算机,将给这个计算机分配一个固定地址。这种分配方式实际等价于固定地址分配方式,唯一的好处就是能够对IP地址进行集中管理,不必每个计算机分别设置了。这里同样也可以使用option参数,设置TCP/IP的参数 。
dhcpdconf中还能有更多的组,包括对非本网段的子网上的客户机指定的组。
当设置了dhcpdconf之后,就能启动dhcpd守护进程了,由于计算机会有多个网络界面,需要指定dhcpd 服务器的网络界面,以便回应相应界面上的DHCP请求。
1 # /usr/local/sbin/dhcpd fxp0
在调试阶段,可以使用-d参数,这样dhcpd就不会进入后台运行,而一直保留在前台,并显示各个与客户计算机通信的过程。当一切都调试完毕之后,就能去除-d参数,并将执行命令放入rclocal启动脚本中,以便系统能够自动执行。
此后,dhcpd正常运行的时候,会将每一次客户请求及其回应的IP地址分配的记录,都记录在/var/run/dhcpdleases 文件中。为了使dhcpd能正常进行日志记录,应该在启动dhcpd之前使用touch 命令,生成一个新的日志文件。以后就可以查看这个日志文件的内容,以得到当前DHCP服务器的状态和客户机IP地址分 配的情况。以下是一个日志文件的部分内容。
1 lease 192168311 {
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/dhclientconf,然而最一般的情况下可以不使用它,软件本身的缺省配置就满足一般情况下请求IP地址的需要了。缺省设置下dhclient在获得了IP地址之后,会自动执行/etc/dhclient-script 这个脚本程序,以针对刚获取的动态IP地址进行必要的设置。很多依赖于IP地址的网络服务,就可以在这个脚 本中启动,或者针对重新分配的动态IP地址对已有的网络服务进行修正。虽然使用者也许不希望使用这个脚本 设置网络,但如果不存在这个脚本程序,或者这个程序不可执行,那么dhclient就不能正常执行。
因此对于最一般的客户机,一般只连接到一个网络上,仅具备一个网络界面,可以使用一个空的dhclientconf 和空的declient-script文件,就能完成设置IP地址和其他TCP/IP参数的任务了。
1 # touch /etc/dhclientconf
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 255255255255 port 67 interval 22
10 DHCPOFFER from 19216831
11 DHCPREQUEST on fxp0 to 255255255255 port 67
12 DHCPACK from 19216831
13 bound to 192168332 -- renewal in 3600 seconds
在更复杂的情况下,就要指定更多的内容,例如当系统有多个网卡时,要指定dhclient应该从哪个子网中获 得IP地址设置,就需要使用设置文件dhclientconf。一般除非有多个局域网网络界面,都应该使用空设置文件, 避免产生配置错误。以下为一个简单的dhclientconf的例子,可以用于多网络界面的情况:
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="mydomainname"
2 network_interfaces="fxp0 lo0"
3 # List of network interfaces (lo0 is loopback)
4 ifconfig_lo0="inet 127001"
5 # default loopback device configuration
6 #ifconfig_fxp0="inet 192168312 netmask 2552552550"
7 defaultrouter="NO"
8 # Set to default gateway (or NO)
这样就需要更改rcconf文件,更改一些设置语句。首先要注释hostname设置,而在dhclientscript中进行设置,也不必设置defaultrouter,它通过DHCP协议自动设置。同时要保证netwo打开系统,挂载光盘。(小白可在桌面模式下,建议在命令行界面 *** 作)
设置IP地址,主机与服务器相互ping通
安装DHCP服务器(我的是用yum安装的,也可以用rpm),yum install -y dhcp
将范本配置文件复制到/etc/dhcp目录下替换掉空白的dhcpdconf的主配置文件
dhcpdconf配置文件:常用参数
ddns-update-style (none|interim|ad-hoc):定义所支持的DNS动态更新类型
ignore client-updates:忽略客户端更新
default-less-time number(数字):定义默认IP租约时间
max-lease-time number(数字):定义客户端IP租约时间的最大值
subnet 1921681000 netmask 2552552550{(定义作用域)
range 19216810010 192168100100;(指定动态IP地址范围)
option routers 192168100254;(网关)
option subnet-mask 2552552550;(子网掩码)
option domain-name"liunx65com";(客户端名称)
option domain-name-servers 19216810032;(DNS服务器地址)
option broadcast-address 192168100255;(广播地址)
}
配置完成后保存退出并重启DHCP服务,测试
设置DHCP自启动(chkconfig --level 3 dhcp on)1安装DHCP服务器软件包
先检查RPM命令检查系统中是否已经安装DHCP软件包,如果没有安装,则挂载RHEL5系统光盘,并安装其中的dhcp- 305el5i386rpm软件包即可
查看dhcp软件包安装的主要文件
使用vi打开dhcp服务器的主配置文件/etc/dhcpdconf,但是该文件中默认并不包含任何有效配置,需要手动建立。
为各客户机动态分配的ip地址,默认租约时间为21600秒,最大租约时间为43200秒,对应于三个物理网段,用于动态分配的ip地址范围:192168110~1921681100、192168210~1921682100、192168310~1921683100
启动dhcpd服务。
打开命令参数配置文件/etc/sysconfig/dhcpd,设置dhcpd服务仅面向eth0、eth1、eth2网卡提供动态地址分配服务。
配置dhcp中继服务器。
在RHEL5系统中,安装dhcp软件包,安装完之后,就已经包含了dhcp中继相关的程序和脚本等文件。配置dhcp中继服务器时,只需修改配置文件/etc/sysconfig/dhcrelay服务即可,作为路由器使用时,还需要开启服务器的路由转发功能。
编辑/etc/sysctlconf文件,将netipv4ip_forward配置项的值修改为1,并执行sysctl -p命令使之生效。
打开dhcp中继服务器的配置文件,设置允许dhcp中继数据的接口及dhcp服务器的ip地址。
启动dhcrelay中继服务程序。
验证dhcp结果。
修改测试客户机的虚拟网卡连接方式,分别使用不同的网卡进行测试。确保能够通过dhcp方式获取正确的网络地址配置(两种方法)。
1 如果测试客户机使用Linux系统,则进行dhclient eth0命令获取地址,或者修改eth0网卡的配置文件,设置BOOTPROTO=dhcp,然后重启network服务。
2 如果测试客户机使用windows系统,则打开cmd命令窗口,执行ipconfig/release命令释放租约,执行ipconfig/renew命令重新获取地址。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)