今天,我想在Linux下配置一台DHCP服务器,感觉上比较直观,难度稍微有点大(相对于在windows及路由器下)。
DHCP(Dynamic Host Configure Protocol,动态主机配置文件),是一个简化手动分配及管理IP地址的烦恼。DHCP是基于C/S模式的。
默认,在RHEL上没有安装服务器组件。查看是否安装的命令
[root@localhost ~]# rpm -qa | grep dhcp
dhcpv6_client-0.10-8
//客户端组件
如果没有安装,拿出RHEL的安装盘,找到相应的组件包。进行安装
[root@localhost cdrom]# rpm -ivh RedHat/RPMS/dhcp-3.0.1-12_EL.i386.rpm
//服务器组件
查看DHCP服务的端口号
[root@localhost root]# vi /etc/services
bootps 67/tcp
# BOOTP server
bootps 67/udp
bootpc 68/tcp
# BOOTP client
bootpc 68/udp
DHCP服务(即dhcpd守护进程)是按照/etc目录下的dhcpd.conf配置文件进行设置。默认情况下,这个文件是不存在的。在安装dhcp服务时都会安装一个帮助文件(配置实例)。通过以下命令查询
[root@localhost ~]# rpm -ql dhcp
/etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcrelay
/etc/sysconfig/dhcpd
/etc/sysconfig/dhcrelay
/usr/bin/omshell
/usr/sbin/dhcpd
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-3.0.1
/usr/share/doc/dhcp-3.0.1/README
/usr/share/doc/dhcp-3.0.1/RELNOTES
/usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample
//配置样本
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcp-eval.5.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/var/lib/dhcp
/var/lib/dhcp/dhcpd.leases
然后,复制到/etc/dhcpd.conf
[root@localhost ~]# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf
//复制文件
查看,/etc/dhcpd.conf配置文件(主要配置文挡)
[root@localhost ~]# cat /etc/dhcpd.conf
ddns-update-style interim;
//支持DNS动态更新
ignore client-updates;
//忽略客户端更新DNS记录
subnet 192.168.0.0 netmask 255.255.255.0 {
//宣告192.168.0.0/24网段
# --- default gateway
option routers 192.168.0.1;
//默认网关
option subnet-mask 255.255.255.0;
//网络掩码
option nis-domain "domain.org";
//NIS域名称
option domain-name "domain.org";
//DNS域名
option domain-name-servers 192.168.0.1;
//DNS服务地址
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.0.1;
# option netbios-name-servers 192.168.0.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.254;
//定义可分配的IP地址池
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;
}
//默认永久分配IP地址(物理地址匹配)
}
PS:我在VMware上做实验的时候,可能dhcp客户端(linux)获取不到IP地址。
出现以下提示:Determining IP information for eth0... failed; no link present. Check cable?
由于虚拟机的原因,需要在/etc/sysconfig/network-scripts/ifcfg-eth0后面添加下面命令
check_link_down()
{
return 1;
}
配置完成后,需要重新开启服务
[root@localhost ~]# service dhcpd restart
//重新开启DHCP服务
[root@localhost ~]# /etc/init.d/dhcpd stop
//停止DHCP服务
[root@localhost ~]# /etc/init.d/dhcpd start
//启动DHCP服务
[root@localhost ~]# chkconfig --level 35 dhcpd on
//开机自动启动DHCP服务
在linux客户端开启DHCP服务(windows下比较简单,不在做相关介绍),需要设置以下文挡
[root@localhost root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
//启动DHCP服务
check_link_down()
{
return 1;
}
这样,就可以获取IP地址了。测试一下
[root@localhost root]# ifconfig eth0
.....
Link encap:Ethernet HWaddr 00:0C:29:93:19:4B
inet addr:
192.168.0.254
Bcast:192.168.0.255 Mask:255.255.255.0
......
在现实生活中,有多个网段的IP地址需要分配,是不是每个网段下分配一台DHCP服务器呢?答案,是否定的。原因:这个也不太现实(成本很高)。所以我们可以用DHCP中继代理来完成这项功能。下次,我会通过一个具体的配置实例,来更形象地说明它的功能作用。
最后:DHCP客户端申请IP地址的工作流程
(1)DHCP客户端向本网段发送一个DHCP DISCOVER(DHCP 发现)
(2)本网段的DHCP服务器回应一个DHCP OFFER(DHCP 提供)
(3)DHCP客户端收到回应后,向DHCP服务器请一个DHCP 所包含的IP地址,并广播一个DHCP REQUEST(DHCP 请求)
(4)最后,DHCP服务器发送一个DHCP REPLY来确认。
其中,四个过程都是广播进行的。