72 FreeBSD连载:设置和使用DHCP( 二 )


此后,dhcpd正常运行的时候,会将每一次客户请求及其回应的IP地址分配的记录,都记录在/var/run/dhcpd.leases文件中 。为了使dhcpd能正常进行日志记录,应该在启动dhcpd之前使用touch命令,生成一个新的日志文件 。以后就可以查看这个日志文件的内容,以得到当前DHCP服务器的状态和客户机IP地址分配的情况 。以下是一个日志文件的部分内容 。
lease 192.168.3.11 {starts 3 1998/11/26 05:46:28;ends 4 1998/11/27 05:46:28;hardware ethernet 0:80:c2:12:fd:d;uid 1:0:80:c2:12:fd:d;}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参数的任务了 。
# touch /etc/dhclient.conf# touch /etc/dhclient-script# chmodx /etc/dhclient-script# /usr/local/sbin/dhclient fxp0Listening on BPF/fxp0/00:90:27:4e:92:09/unattachedSending onBPF/fxp0/00:90:27:4e:92:09/unattachedSending onSocket/fallback/fallback-netDHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 22DHCPOFFER from 192.168.3.1DHCPREQUEST on fxp0 to 255.255.255.255 port 67DHCPACK from 192.168.3.1bound to 192.168.3.32 -- renewal in 3600 seconds.在更复杂的情况下,就要指定更多的内容,例如当系统有多个网卡时,要指定dhclient应该从哪个子网中获得IP地址设置,就需要使用设置文件dhclient.conf 。一般除非有多个局域网网络界面,都应该使用空设置文件,避免产生配置错误 。以下为一个简单的dhclient.conf的例子,可以用于多网络界面的情况:
# Defaults timeout 60; reboot 10; retry 60; select-timeout 5; initial-interval 2; script "/etc/dhclient-script"; interface "fxp0" {request subnet-mask, broadcast-address, routers, domain-name-servers,domain-name, host-name;require domain-name-servers; } 这个设置文件主要用于重新定义一些参数,比较容易理解,更改也比较容易 。
成功的手工执行dhclient之后,就可以考虑将其和系统启动文件相结合了 。因为很多网络服务是依赖于网络配置的,应该在启动这些网络服务之前使用DHCP配置好TCP/IP 。使用dhclient-script启动服务的想法虽然也能解决问题,然而这就不能使用系统的启动rc文件中的相关设置启动网络服务,而在这个dhclient-script中重新启动,因此比较麻烦 。更简便的做法是仅仅在dhclient-script中设置hostname,而让系统启动文件完成其他网络服务的启动 。这样就要求将dhclient与系统rc文件结合起来 。
#hostname="my.domain.name" network_interfaces="fxp0 lo0"# List of network interfaces (lo0 isloopback). ifconfig_lo0="inet 127.0.0.1"# default loopback device configuration. #ifconfig_fxp0="inet 192.168.3.12netmask 255.255.255.0" defaultrouter="NO"# Set to default gateway (or NO).这样就需要更改rc.conf文件,更改一些设置语句 。首先要注释hostname设置,而在dhclient.script中进行设置,也不必设置defaultrouter,它通过DHCP协议自动设置 。同时要保证network_interfaces参数中,设置了要通过dhclient来获取IP地址的网络界面fxp0,以允许rc系统文件能启动该与该界面相关的设置文件,然而却必须注释设置该界面的参数ifconfig_fxp0,因为这个设置参数是用于设置静态IP地址的选项,因此要屏蔽它,而使用start_if.fxp0配置脚本来设置网络界面 。

推荐阅读