1、DHCP的工作原理
DHCP 即动态主机配置协议,即在网路中自动获得并配置主机ip地址的协议。一个局域网络中一般有一个DHCP 服务器,可以自动配置网络中其他计算机的ip地址。
DHCP的工作方式: 假设机器都在同一个网段中,即DHCP_Server 和 DHCP_Client 都在同一个网段中,可以通过软件广播的方式实现互通。client通过DHCP Server获得ip地址的过程为:
(1)客户端发出DHCP 请求: 若client端 计算机设置使用DHCP 协议取得网络参数,则client端计算机在开机或者重启网卡时,会自动发出DHCP Client 的请求给网段内的每台计算机;这时,由于发出的信息希望每台计算机都能收到,所以该信息除了网卡的硬件地址外, 信息的来源ip地址设置为 0.0.0.0, 而目的地址则为 255.255.255.255 (linux会自动设置)。这时,网段中的其他没有提供DHCP 服务的计算机,收到这个数据包之后会自动将该包丢弃而不回应。
(2)DHCP 主机响应信息: 如果是DHCP 主机接收到Client的DHCP 请求,那么DHCP主机首先会针对该次请求的信息所携带的MAC地址和DHCP主机本身的设置值进行对比,如果DHCP 主机的设置中有针对该MAC地址提供的静态ip地址(每次都给予一个固定的ip),则提供给Client端相关的固定ip与相关的网络参数; 如果该信息的MAC地址不在DHCP主机的设置中,则DHCP 主机会选取当前网段中没有使用的IP地址(这个IP地址和设置值有关)将其发放给客户端使用。 在DHCP主机发放给客户端的信息中,会附带一个“租约期限”的信息,告诉客户端这个IP可以使用的期限。
(3)Client端接收到来自DHCP 主机的网络参数,并设置自己的网络环境:当Client端接收到响应的信息后,首先会以ARP 数据包在网段内发出信息,以确定来自DHCP主机发放的IP没有被占用! 如果该IP已经被占用,那么Client端对此次的DHCP信息将不接受,将再次向网段发出DHCP的请求广播数据包;若该IP没有被占用,则Client可以接收DHCP主机所给的网络参数,这些参数将被用到Client端的网络设置中,同时Client端也会去对DHCP主机发出确认数据包,告诉Server这次的请求已经确认! 而Server也会将该信息记录下来
(4)Client结束该ip的使用权:当Client开始使用这个DHCP发放的ip之后,在下列几种情况下,它可能会失去这个IP的使用权:
(a) Client端离线:关闭网络接口(ifdown)、重新开机(reboot)、关机(shutdown)等行为,都算是离线状态,此时DHCP Server会将该ip回收,并放到自己的备用区中;
(b)Client 端租约到期: DHCP Server端发放的ip有使用期限,Client使用这个ip叨叨租约规定的时间后悔将该ip收回去。这时会造成断线,而Client也可以再想DHCP 主机请求再次分配ip
如果网段中含有多个DHCP 服务器主机,则最后由哪个DHCP 主机设置您设置您的计算机地址是由计算机先获得哪个DHCP主机的响应决定的。
centos 下安装dhcp服务器
本实验的OS环境:CentOS 6.2
1. 安装DHCP相关软件包
#rpm –qa|grep dhcp //查看是否安装了DHCP相应的软件包
#rpm –ivh dhcp-4.0 //安装DHCP相应的软件包(本地有相应的软件包)
#yum install dhcp //在线安装DHCP软件包
2. 配置本机的IP地址
//这里必须使用 eth0 实际的网卡地址,而不能使用 eth0:0, eth0:1 等虚拟网络接口。
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件:
DEVICE=eth0
HWADDR=00:18:8B:8D:AB:49
BOOTPROTO=static
IPADDR=192.168.1.10 //可任意指定
GATEWAY=192.168.1.1
BROADCAST=192.168.1.255
NM_CONTROLLED=no
ONBOOT=yes
3. 修改DHCP配置文件
可以把/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample,复制为 /etc/dhcp/dhcpd.conf,也可以直接编辑/etc/dhcp/dhcp.conf(如果没有这个文件,新建一个),注意在CentOS 5之前dhcpd.conf在/etc目录下,在CentOS 6上dhcpd.conf在/etc/dhcp目录下。
dhcpd.conf文件的内容如下:
ddns-update-style none; //配置DHCP-DNS互动更新模式
ignore client-updates; //忽略客户端更新
subnet 192.168.1.0 netmask255.255.255.0 { //设置子网声明,该子网要包含本机的IP地址
option routers 192.168.1.1; //默认网关
option subnet-mask 255.255.255.0; //子网掩码
option nis-domain"domain.org"; //NIS域名
option domain-name "it.com"; //DNS域名
option domain-name-servers 10.0.100.166; //DNS的IP地址
option time-offset -1800; //偏移时间
range dynamic-bootp 192.168.1.100192.168.1.200; //动态的IP地址池,为DHCP客户机分配
default-lease-time 21600; //默认的地址租期
max-lease-time 43200; //最长的地址租期
host ns { //主机声明
next-server marvin.redhat.com;
hardware ethernet 00:18:8b:83:89:af;
fixed-address 192.168.1.50;
}
}
4. 控制DHCP服务器
#service dhcpd start //启动DHCP服务
#service dhcpd stop //关闭DHCP服务
#service dhcpd restart //重启DHCP服务
5. 在指定网络接口上启动DHCP服务器
修改/etc/sysconfig/dhcpd文件:
DHCPDAGRS=eth0 //在eth0网卡上启动DHCP
6. 查看DHCP客户机地址的租约信息
/var/lib/dhcpd/dhcpd.leases文件中保存了客户机地址的租约信息
如果要配置主机为DHCP 服务器,则必须至少有两个网卡,一个连接外网获得外网地址,一个作为内网的DHCP服务器地址。
配置过程中要注意的问题是:
1. 脚本文件 /etc/sysconfig/network-scripts/ifcfg-eth0 的配置为static ip 并且要在 dhcp的子网内
2. 拷贝 dhcpd.conf.sample 文件为 /etc/dhcp/dhcpd.conf 文件并做修改, 注意格式正确,例如结尾的分号
3. 配置 /etc/rc.d/init.d/dhcpd 脚本文件(一般不用修改)
4.修改/etc/sysconfig/dhcpd文件: DHCPDAGRS=eth0 //在eth0网卡上启动DHCP
5. service dhcpd start 即可。 如果不行,tail /var/log/messages 查找原因