1.1. DHCP服务理论
名词解释
网络: 单播:一对一的通信 组播:一对多的通信,小范围内广播(ospf协议) 广播:就是给该网络内所有的host都发相同的信息 广播MAC地址:FF-FF-FF-FF-FF-FF 数据链路层 广播的IP地址:255.255.255.255 网络层 广播只能在局域网内广播,不能通过路由器;路由器不会转发广播,帧交换机能够分割广播域和转发收到的数据包;特殊情况下可以配置代理转发广播;
DHCP:
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,使用的是bootstrap协议。dhcp的前身是bootp工作在应用层,分为client (客户端)和server (服务端)
DHCP客户端:DHCP客户是通过DHCP来获得网络配置参数的internet主机,通常就是普通的用户工作站。
DHCP服务器:DHCP服务器是提供网络参数的给DHCP客户的internet主机
DHCP/BOOTP中继代理:在DHCP客户和服务器之间转发DHCP消息的主机或者路由器
作用域:一个完整连续的可用IP地址薄,DHCP服务主要就是通过作用域来管理网络分布、IP地址分配及相关配置参数。
排除范围:排除范围是作用域内从DHCP服务中排除的有限地址序列,排除范围确保在这些范围中的任何地址都不是由网络上的服务器提供给客户端的。其实说白了就是将作用域中的一些IP地址给排除在外使其不能分配给客户端。
地址池:在定义DHCP作用域并应用排除范围后,剩余的地址在作用域内形成的可用地址池,地址池中的地址可以动态分配给DHCP客户端。
租约:客户端可以使用动态分配IP地址的时间。
预约:创建从DHCP服务器到客户机的永久地址租约指定,预约可以保证子网上的特定硬件设备总是使用相同的IP。
1.2. DHCP获取ip的过程
应用层过程 1.客户端发送广播向服务器申请IP地址。 2.服务器收到请求后查看主配置文件dhcpd.conf,先根据客户端的MAC地址查看是否为客户端设置了固定IP地址。 3.如果为客户端设置了固定IP地址则将该IP地址发送给客户端。如果没有设置固定IP地址,则将地址池中的IP地址发送给客户端。 4.客户端收到服务器回应后,客户端给于服务器回应,告诉服务器已经使用了分配的IP地址。 5.服务器将相关租约信息存入数据库。
数据包过程
DHCP Discover --> DHCP Offer --> DHCP Request --> DHCP ACK
1.DHCPDiscover : Client通过ARP广播寻找网络内的dhcp服务器(广播) 2.DHCPOffer : DHCP服务器回复的Offer(ip,netmask,gw,dns)(linux单播) 3.DHCPRequest : DHCP回复Offer后,Client请求DHCPServer分配IP (linux 广播) 4.DHCPAck : DHCPServer确认后发送IP(ip,netmask,gw,dns)到DHCPClient(linux单播)
首先DHCP一般是局域网内的一个通讯协议,当客户端没有设定任何网络配置信息时候,他会向其所在的局域网上发出一个广播封包给局域网内的所有主机(其发送的是DHCP DISCVER数据包,为保证服务器能够接收到请求,数据包源地址设定为0.0.0.0,而目的地址为255.255.255.255,以广播形式发送DHCP DISCOVER的信息。),一般主机接收到这个封包后,会直接给予丢弃,但如果局域网中有DHCP服务器,则会自动响应。
当DHCP服务器监听到客户端发出的DHCP DISCOVER广播后,它会从那些还没有租出的地址范围内选择可用的IP及其他TCP/IP设定以DHCP OFFER数据包的形式发送给客户机。
如果客户端收到网络上多台DHCP服务器的响应,客户端会挑选最快的一个DHCP OFFER并向网络发送一个DHCP REQUEST广播封包,告诉所有DHCP服务器它将使用哪一台服务器提供的IP地址。同时,客户端还会向网络发送ARP广播数据包,查询网络上面有没有其他机器使用该IP地址,如果发现该IP地址已经被占用,客户端则会发送一个DHCP DECLINE数据包给DHCP服务器,拒绝接受其DHCP OFFER,并重新发送DHCP REQUEST信息。 注:实际上并不是所有DHCP客户端都会无条件接受DHCP服务器的响应,客户端可以保留自己的一些TCP/IP设定,比如网关、DNS地址等等
将地址分配给客户端后,DHCP服务器会发送一个DHCP ACK消息,以确认IP租约的正式生效,结束完整的DHCP工作过程。
DHCP客户端成功地从服务器取得IP地址之后,一般不需要再发送DHCP DISCOVER信息了,除非其租约已经到期或者IP地址重新设定回0.0.0.0。此时客户端会直接使用已经租用到的IP地址向为其发此IP地址的DHCP服务器发出DHCP REQUEST信息,DHCP服务器会尽量让客户端使用原来的IP地址,如果没有特殊的情况,会直接响应DHCP ACK,允许客户端继续使用该IP地址。如果该地址已经失效或者已经被其他主机使用了,服务器则会响应一个DHCP NACK数据包给客户端,要求其重新执行DHCP DISCOVER。
注意:客户端执行DHCP DISCOVER后,如果没有DHCP服务器响应客户端的请求,客户端会随机使用169.254.0.0/16网段中的一个IP地址配置本机地址。
端口 Server------端口:67 ----传输层协议:udp client -----端口:68
dhclient -r eth0 释放ip dhclient lan 可以重新获取
服务器只要有以下注释的部分既可以正常工作即(服务器的ip必须是静态的static)修改主配置文件 /etc/dhcp.conf redhat5以前 /etc/dhcp/dhcpd.conf redhat6以后
1.3. 服务搭建:
1.给DHCP服务器配置静态IP地址
DEVICE=eth0
ONBOOT=yes
BOOTP=static
IPADDR=10.1.1.1
NETMASK=255.255.255.0
GETWAY=''
DNS1=''
2.安装DHCP软件
yum install dhcpd -y
3.修改服务配置文件 /etc/dhcp/dhcpd.conf
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option routers 10.5.5.1;
}
4.客服端动态获取IP /etc/sysconfig/network-scritp/ifcfg-eth0**
DEVICE=eth0 设备,即网卡
HWADDR=00:30:67:f2:11:23 MAC地址,网卡的地址
NM_CONTROLLED=no 网络控制,一般关闭
ONBOOT=yes 在开机的时候是否同时开启网卡
BOOTPROTO=dhcp 动态获取Ip
5.对于多网卡的服务器,需要配置DHCP监听的端口
[root@linux102 ]# vi /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=“eth0”
1.4. Client端配置
[root@www ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 设备,即网卡
BOOTPROTO=none 获取IP的方式可以是dhcp或static(none) ,
HWADDR=00:30:67:f2:11:23 MAC地址,网卡的地址 (可选)
IPV6INIT=no IPV6是否使用 (可选)
MTU=1500 最大传输单元(可选)
NM_CONTROLLED=no NetworkManager服务是否启用 (可选)
ONBOOT=yes 在开机的时候是否同时开启网卡
TYPE=Ethernet 网络类型
UUID="5535d06a-7702-43e2-8b4e-26d3b7849da5" 网卡唯一标识符(可选)
USERCTL=no 用户控制(可选)
DNS1=8.8.8.8 DNS服务器的地址,可以有多个(可选)
IPADDR=10.0.0.15 静态IP的地址(可选)
NETMASK=255.255.0.0 子网掩码(可选)
GATEWAY=10.0.0.254 网关(可选)
2. DHCP分配记录
/var/lib/dhcpd/dhcpd.release 当为server时曾经给谁分配过地址
[root@zhao dhcp]# cat /var/lib/dhcpd/dhcpd.leases |more
server-duid "\000\001\000\001\031\206O\254\000\013/_\246\002";
lease 10.25.25.28 { 分配的地址就是10.25.25.28
starts 6 2013/07/27 09:32:31;
ends 6 2013/07/27 09:42:31;
cltt 6 2013/07/27 09:32:31;
binding state active;
next binding state free;
hardware ethernet 00:0c:29:45:56:80;
}
/var/lib/dhclient/dhclient-release 当作为client时,是谁给自己分配ip地址
root@zhao ~]# cat /var/lib/dhclient/dhclient-eth0.leases
lease {
interface "eth0";
fixed-address 10.0.0.230;
filename "pxelinux.0";
option subnet-mask 255.255.0.0;
option routers 10.0.0.253;
option dhcp-lease-time 600;
option dhcp-message-type 5;
option domain-name-servers 8.8.8.8;
option dhcp-server-identifier 10.0.0.254; 是由254服务器给自己分配的230ip地址
renew 4 2013/07/25 05:29:48;
rebind 4 2013/07/25 05:34:20;
expire 4 2013/07/25 05:35:35;
}