- 初始化:客户端使用源地址为 0.0.0.0 的 TCP/IP地址通过 DHCP/BOOTP 服务器端口向本地子网发送一个“DHCP Discover(DHCP发现)”广播信息包
- 选择:服务器检查自己是否为给客户机分配了IP。如果是,则发送“DHCP Offer(DHCP提供)”信息包作为响应
- 请求:客户端对收到的第一个信息包产生响应,并以广播的方式发送“DHCP Request(DHCP请求)”信息包作为回应。该信息包告诉服务器,我想让你给我提供服务,我接受你给我的租用期限。
- 捆绑:服务器收到“DHCP Request”信息包后,会以一个“DHCP Acknowledge(DHCP确认)”信息包作为响应。
- 地址租约:分为限定租期和永久租用两种
- 更新租期:租期达50%以上,则需要更新租期。客户端发送一个“DHCP Request”信息包给原始信息的服务器,用于询问舒服可以续租,服务器同意则服务器返回一个DHCP Acknowledge 信息包给客户端。当租期达87.5%,客户端尝试与任何一台DHCP服务器联系以获取有效的IP地址,再次进入捆绑状态。若当前IP租期满,则客户端重新进入初始化状态,重新获取IP。
- 解除租约:客户端离线会造成租约解除。客户端到期也会造成租约解除
# 如何查询本机网卡MAC地址
[root@CentOS ~]# ifconfig
# 查询远程主机MAC地址
[root@CentOS ~]# ping 192.168.1.110
[root@CentOS ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 14:e6:e4:9f:94:28 C eth0
192.168.1.110 ether 00:0c:29:cf:88:43 C eth0
全局参数 | 说明 |
---|---|
default-least-time (默认组约时间) | 默认21600s 即6小时 |
max-lease-time (最大租约时间) | 超过这时间没有打出请求,DHCP 服务器回收该 IP |
domain-name-server (DNS 服务器) | 指定 DNS 服务器 |
option domaim-name (域名) | 指定本地网络的域名 |
option subnet-mask (子网掩码) | 设置子网掩码 |
option routers(网关) | 指定客户端的网关IP |
ddns-update-style(动态更新DNS资料) | 有三种:interim,ad-hoc,none |
option broadcast-address(广播地址) | 默认系统会自动计算 |
全局选项/参数; 全局有效
声明{
选项/参数; 局部有效
}
声明 | 说明 |
---|---|
shared-network | 用来告知一些子网络是否分享相同网络 |
subnet | 描述一个IP地址是否属于该子网 |
range 起始IP 终止 IP | 提供动态分配IP的范围 |
host 主机名称 | 参考特别的主机 |
group | 为一组参数提供声明 |
allow unknown-clients;deny unknown-clients | 是否动态分配IP给未知的使用者 |
allow bootp;deny bootp | 是否响应激活查询 |
allow booting;deny booting | 是否响应使用者查询 |
filename | 开始启动文件的名称,应用于无盘工作站 |
next-server | 设置服务器从引导文件中加装主机名,应用于无盘工作站 |
选项 | 说明 |
---|---|
subnet-mask | 为客户端设定子网掩码 |
domain-name | 为客户端指明DNS名字 |
domain-name-servers | 为客户端指明DNS服务器的IP地址 |
host0name | 为客户端指明主机名字 |
routers | 为客户端设定默认网关 |
broadcast-address | 为客户端指定广播地址 |
ntp-server | 为客户端指定网络时间服务器IP地址 |
time-offset | 为客户端设定和格林威治的偏移时间单位秒| |
subnet 子网 ID netmask 子网掩码 {
range 起始IP ,结束IP地址;
IP参数;
}
Subnet 192.168.3.0 nermask 255.255.255.0 {
range dynamic-bootp 192.168.3.10 192.168.3.100;
range dynamic-bootp 192.168.3.120 192.168.3.220;
}
option 选项代码 设置内容
option routers IP地址; #为客户设置默认网关和路由器IP地址
option subnet-mask 子网掩码; #设置子网掩码
option nis-domain “名称”; #设置NIS服务器域名
option domain-name “名称”; #设置DHCP客户端的DNS域名
option domain-name-servers IP地址; #设置DNS服务器的IP地址
option broadcast-address IP地址; #设置DHCP客户端在该子网中的广播地址
default-lease-time time; #设置默认组约时间长度,单位s
max-lease-time time; #设置最大租约期限
host computer1
{
hardware ethernet MAC地址; #绑定的网卡地址
fixed-address IP地址; #绑定的IP地址
}
option routers 192.168.3.5;
option subnet-mask 255.255.255.0;
option nis-domain “JavaEye.org”;
option domain-name “JavaEye.org”;
option domain-name-servers 192.168.3.2,202.115.3.11;
option broadcast-address 192.168.3.255;
default-lease-time 2400;
max-lease-time 7200;
host computer1
{
hardware ethernet 00:0C:29:38:02:64;
fixed-address 192.168.1.32;
}
default-lease-time time #设置默认组约时间长度,单位s
max-lease-time time #设置最大租约期限
要保留特定的IP地址给指定的DHCP客户端使用,可先用 arp 命令将该客户端网卡的MAC地址查出,然后在/etc/dhcp.conf文件中加入如下格式host语句。
host 主机名
next-srver marvin.radhat.com; #仅用于无盘工作站
hardware ethernet 网卡的MAC地址 #指定DHCP客户端网卡的MAC地址
fixed-address IP地址 #指定为该DHCP客户端分配的IP地址
IP参数 #指定默认网关等其他IP参数
}
为每一个网段设置一个DHCP服务器
在某一个子网中安装DHCP服务器(使用DHCP中继代理)
# 设置DHCP中级代理
[root@CentOS ~]# service dhcrelay start #除非使用INTERFACESzhiling在/etc/sysconfig/dhcrelay文件中指定接口
# 指定DHCP中继代理
[root@CentOS ~]# dhcrelay-i eth1 -i eth2 192.168.2.6 # 192.168.2.6是eth0连接的子网内的DHCP服务器,-i是向指定的子网提供服务
# 确认网卡具有广播功能
[root@CentOS ~]# ifconfig eth0
[root@CentOS ~]# yum list all | grep dhcp
dhcp.x86_64 12:4.1.1-53.P1.el6.centos base
dhcp-common.x86_64 12:4.1.1-53.P1.el6.centos base
dhcp-devel.i686 12:4.1.1-53.P1.el6.centos base
dhcp-devel.x86_64 12:4.1.1-53.P1.el6.centos base
sblim-cmpi-dhcp.i686 1.0-1.el6 base
sblim-cmpi-dhcp.x86_64 1.0-1.el6 base
sblim-cmpi-dhcp-devel.i686 1.0-1.el6 base
sblim-cmpi-dhcp-devel.x86_64 1.0-1.el6 base
sblim-cmpi-dhcp-test.x86_64 1.0-1.el6 base
[root@CentOS ~]# yum install dhcp
[root@CentOS ~]# rpm -ql dhcp
[root@CentOS ~]# vim /etc/dhcp/dhcpd.conf
see /usr/share/doc/dhcp*/dhcpd.conf.sample
see 'man 5 dhcpd.conf'
[root@CentOS ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
cp: overwrite `/etc/dhcp/dhcpd.conf'? y
# 启动服务
[root@CentOS ~]# service dhcpd start
[root@CentOS ~]# service dhcpd stop
[root@CentOS ~]# service dhcpd restart
# 开机启动
[root@CentOS ~]# chkconfig dhcpd on
- Linux 主机对内的 eth0 的IP 设置为 192.168.1.120
- 内部网段设置为192.168.100.0/24,且内部计算机的 router 为192.168.1.1,此外DNS主机的IP为电信的168.95.1.1及Seednet的139.175.10.20
- 每个用户默认租约3天,最长6天
- 要分配的IP只有192.168.100.101到192.168.100.200这几个,其他的IP则保留下来
- 还有一台主机,其MAC是 54:27:1E:21:EE:E3 ,这是其主机名为win7,且IP为 192.168.100.30
[root@CentOS ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name "centos.virtual";
option domain-name-servers 192.168.1.1;
range 192.168.1.10 192.168.1.20;
default-lease-time 21600;
max-lease-time 43200;
host ns2{
hardware ethernet 00:0C:29:CF:88:43;
fixed-address 192.16.100.15;
}
}
# 重启服务
[root@CentOS ~]# service dhcpd restart
#重启另一台主机的网络(动态获取IP)
[root@CentOS ~]# service network restart
#此时另一台主机的IP会显示成如上的IP
[root@CentOS ~]# netstat -tulnp | grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 36772/dhcpd
#查看DHCP租约及地址分配情况
[root@CentOS ~]# tail /var/lib/dhcpd/dhcpd.leases~
server-duid "\000\001\000\001 \217\036\346\000\014)8\002d";
lease 192.168.1.10 {
starts 0 2017/04/23 08:39:08; #租约开始
ends 0 2017/04/23 14:39:08; #租约结束
cltt 0 2017/04/23 08:39:08;
binding state active;
next binding state free;
hardware ethernet 00:0c:29:cf:88:43;
}
[root@CentOS ~]# cat /etc/resolv.conf
# Generated by NetworkManager
domain centos.virtual
search centos.virtual virtual
nameserver 192.168.1.1
[root@CentOS ~]# dhclient eth0
网络唤醒局域网主机,安装net-tools后会有ether-wake命令
[root@www ~]# ether-wake -i eth1 11:22:33:44:55:66
# 更多功能可以这样查阅喔:
[root@www ~]# ether-wake -u
#在动态获取IP地址之后,利用此脚本在配置文件中配置成主机绑定IP
[root@www ~]# vim setup_dhcpd.conf
#!/bin/bash
read -p "Do you finished the IP's settings in every client (y/n)? " yn
read -p "How many PC's in this class (ex> 60)? " num
if [ "$yn" = "y" ]; then
for site in $(seq 1 ${num})
do
siteip="192.168.100.${site}"
allip="$allip $siteip" ping -c 1 -w 1 $siteip > /dev/null 2>&1
if [ "$?" == "0" ]; then
okip="$okip $siteip"
else
errorip="$errorip $siteip"
echo "$siteip is DOWN"
fi
done
[ -f dhcpd.conf ] && rm dhcpd.conf
for site in $allip
do
pcname=pc$(echo $site | cut -d '.' -f 4)
mac=$(arp -n | grep "$site " | awk '{print $3}')
echo " host $pcname {"
echo " hardware ethernet ${mac};"
echo " fixed-address ${site};"
echo " }"
echo " host $pcname {" >> dhcpd.conf
echo " hardware ethernet ${mac};" >> dhcpd.conf
echo " fixed-address ${site};" >> dhcpd.conf
echo " }" >> dhcpd.conf
done
fi
echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf" echo "Finished."