DHCP简介
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个工作在应用层的局域网网络协议,数据传输时使用UDP不可靠传输协议工作,通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配网络资源,使网络环境中的主机能动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP服务器在生产环境中不经常使用,因为路由器已经有DHCP功能了,况且服务器必须使用静态IP,但也存在需要配置DHCP服务器的时候,比如PXE网络批量装机时,就需要配置DHCP服务为待装机服务器分配IP地址等网络资源。
特点
- 优点:
减少网络管理员的工作量
避免配置时输入错误
避免IP冲突
提高IP地址使用率 - 缺点:
局域网内有多台DHCP服务器时,IP来源不可控
原理
- 一、客户端请求IP
源IP: 0.0.0.0
目标IP: 255.255.255.255
目标端口:UDP协议67端口
广播信息: DHCP Discover(客户端MAC地址和计算机名)- 1.局域网内无DHCP服务器
客户端将从TCP/IP的B类网段169.254.0.0/16中挑选一个IP地址作为自己的IP地址,继续每隔5分钟尝试与DHCP服务器进行通讯,一旦与DHCP服务器取得联系,则客户机放弃自动配置的IP地址,而使用DHCP服务器分配的IP地址。
- 2.局域网内有一台DHCP服务器
执行DHCP四次握手从该DHCP服务器处获取IP地址、子网掩码、网关、DNS - 3.局域网内有多台DHCP服务器
哪台DHCP服务器回复快,就从哪台DHCP服务器处获取IP地址、子网掩码、网关、DNS
- 1.局域网内无DHCP服务器
- 二、DHCP服务器响应请求
源IP: DHCP服务器IP地址
目标IP: 255.255.255.255
源端口: UDP协议68端口
广播信息:DHCP Offer(客户端MAC地址;DHCP服务器提供的合法IP地址;子网掩码;默认网关(路由);租约的期限;DHCP服务器的IP地址-MAC。) - 三、客户端选择IP
源IP: 0.0.0.0
目标IP: 255.255.255.255
目标端口:UDP协议67端口
广播信息: DHCP Request(为客户端提供IP配置的服务器的服务标识符(IP地址)) - 四、DHCP服务器确定租约
源IP: DHCP服务器IP地址
目标IP: 255.255.255.255
源端口: UDP协议68端口
广播信息: DHCP ACK(确认租约)或 DHCP NACK(拒绝租约)
如果DHCP Request不成功,例如客户机试图租约先前的IP地址,但该 IP地址不再可用,或者因为客户机移到其他子网,该IP无效时,DHCP服务器将广播否定确认消息DHCP NACK。当客户机接收到不成功的确认时,它将重新开始DHCP租约过程。
注:
DHCP客户机收到DHCP服务器回应的ACK报文后,通过地址冲突检测(arp)发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送DECLINE报文,通知服务器所分配的IP地址不可用。 - 五、续租过程
- 1.客户端在租期过去50%的时候,以单播的方式向为其提供IP地址的DHCP服务器发送DHCP Request消息包请求续约。如果客户机接收到该服务器回应的DHCP ACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。
- 2.如果在租期过去50%的时候没有更新,客户端将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系请求续租。
- 3.如果还不成功,到租约的100%时候,DHCP客户机必须放弃这个IP地址,重新广播申请。
搭建手册
- 前提
关闭防火墙及增强安全组件:
# 查询防火墙状态
[root@loaclhost ~]# iptables -L
# 关闭防火墙
[root@loaclhost ~]# service stop iptables
# 禁止防火墙开机自启
[root@loaclhost ~]# chkconfig iptables off
# 查询SE Linux状态
[root@loaclhost ~]# getenforce
# 关闭SE Linux
[root@loaclhost ~]# setinforce 0
关闭 Vmware 虚拟网络编辑器的DHCP功能配置文件(真实环境下无需选择此项)
- DHCP服务相关信息
- DHCP服务的rpm软件包:dhcp
- DHCP命令的rpm软件包:dhcp-common(默认已安装)
- DHCP服务的服务名:dhcpd
- DHCP中继的服务名:dhcrelay
- 端口
- udp 67 #作为客户端的目标端口,接收客户端的请求DHCP请求
- udp 68 #作为服务器的源端口,用来向客户端回复数据包
- 配置文件
- DHCP服务
DHCP服务的配置文件一般使用IPv4的模板进行修改。
- DHCP服务
配置文件 | 详解 |
---|---|
/etc/dhcp/dhcpd.conf | 默认是空的,需要找模板文件重新生成(IPv4 |
/etc/dhcp/dhcpd6.conf | 默认是空的,需要找模板文件重新生成(IPv6) |
/usr/share/doc/dhcp-4.*.*/dhcpd.conf.sample | DHCP的模板配置文件(IPv4) |
/usr/share/doc/dhcp-4.*.*/dhcpd6.conf.sample | DHCP的模板配置文件(IPv6) |
配置文件模板解析:/usr/share/doc/dhcp-4../dhcpd.conf.sample
- 全局模式区域
#DHCP全局选项
#DHCP分配DNS服务器地址,此处有两个:ns1.example.org和ns2.example.org
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
#默认租约时间和最大租约时间(单位:s)
default-lease-time 600;
max-lease-time 7200;
#日志文件选项(默认保存在/var/log/messages内)
log-facility local7;
- subnet区域
#subnet区域:DHCP服务器配置区域,DHCP服务器配置时可将前面的所有subnet区域删除,直接修改最后一个subnet区域即可
#网段和子网掩码(配置时需和本机处于同一网段)
subnet 10.5.5.0 netmask 255.255.255.224 {
#往外分配的IP地址池
range 10.5.5.26 10.5.5.30;
#往外分配的DNS服务器地址(可将ns1.internal.example.org修改为202.106.0.20, 8.8.8.8)
option domain-name-servers ns1.internal.example.org;
#设置DNS域(此行可删除)
option domain-name "internal.example.org";
#默认网关的地址
option routers 10.5.5.1;
#广播地址(此行可删除)
option broadcast-address 10.5.5.31;
#默认租约(s)
default-lease-time 600;
#最大租约(s)
max-lease-time 7200;
}
- #$%^&*(区域
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
- 地址保留配置区域
#地址保留区域:指定某IP固定分配给指定物理地址的客户端。以达到某客户端每次都能分到固定的IP地址。
#fantasia:标签名,可设置为客户机名称,如webserver1
host fantasia {
#客户机的MAC地址
hardware ethernet 08:00:07:26:c0:a5;
#指定分配给该客户机的IP地址,将fantasia.fugue.com换成IP,但尽量写subnet区域地址池以外的IP。
fixed-address fantasia.fugue.com;
}
- 超级作用域配置区域
#此处无须修改
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
#超级作用域区域:当待分配客户端超过255台时,一个网段已无法满足这么多设备,此时就需要使用单臂路由来让这么多客户端都能分配到IP并且能互相通信。
#224-29:标签名。可修改。如分配地址网段为10、11则可设置为10-11。
shared-network 224-29 {
#subnet区域,需要添加一行range 起始IP 终止IP;
subnet 10.17.224.0 netmask 255.255.255.0 {
range 10.5.5.26 10.5.5.30;
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
- DHCP中继服务
配置文件 | 详解 |
---|---|
/etc/sysconfig/dhcrelay | 该文件是中继配置文件,中继实验中用到 |
实战
- 基础DHCP服务器搭建
- 服务器端
# 安装DHCP软件
yum -y install dhcp
#拷贝配置文件模板至/etc/dhcp/目录下
cp -a /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 修改配置文件/etc/dhcp/dhcpd.conf
# 将配置文件的前几个subnet声明注释掉。修改最后一个subnet声明,(subnet区域前面是全局变量配置区域,详情见附件配置文件详解)
# 注:注意配置文件中每行结尾的分号和结束大括号
vim /etc/dhcp/dhcpd.conf
subnet <网段> netmask <子网掩码> {
range <IP地址池起始IP IP地址池结束IP>;
option domain-name-servers <DNS1,DNS2>;
option domain-name "<DNS域>"; #(Linux通常不设置)
option routers <默认网关>;
option broadcast-address <广播地址(网段.255)>;
default-lease-time <默认租约时间(s)>;
max-lease-time <最大租约时间(s)>;
}
# 重启DHCP服务
service dhcpd restart
- 客户端
将网卡配置文件修改为DHCP获取IP,将网卡设置为开机自启。重启网卡即可生效。
- 地址保留(一般结合基础配置使用)
- 确认待分配IP地址的客户端的MAC地址。(ip a或ifconfig命令)
- 服务器端
# 安装DHCP软件
yum -y install dhcp
#拷贝配置文件模板至/etc/dhcp/目录下
cp -a /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 修改配置文件/etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
host <fantasia> { #名字fantasia随便取,需见名知意。
hardware ethernet <MAC地址>; #客户机的mac地址
fixed-address <IP地址>; #固定分配给客户机的ip地址(使用地址池以外的IP)
}
注:此处IP地址必须是该DHCP服务器地址池以外的IP,避免IP冲突
# 重启DHCP服务
service dhcpd restart
- 客户端
将网卡配置文件修改为DHCP获取IP,将网卡设置为开机自启。重启网卡即可生效。
- 超级作用域
单臂路由: 在路由器的一个接口上通过配置子接口(或“逻辑接口”,并不存在真正物理接口)的方式,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通。
通俗点说就是DHCP服务器可以通过给单个网卡添加子网卡配置文件来实现DHCP服务器为单个物理网络上的客户端提供多个逻辑网段(作用域)租约地址。
功能:一台DHCP服务器单个网卡为单个物理局域网内分配多个逻辑网段IP资源。
实验环境:三台虚拟机同一网络模式,一个DHCP服务器,两个客户机
- 服务器端
# 安装DHCP服务
yum –y install dhcp
#拷贝配置文件模板至/etc/dhcp/目录下
cp -a /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 设置DHCP服务器的单臂路由所需子网卡(配置两张网卡为两个网段即可)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1
# 开启路由转发(将此选项修改为1即可)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#刷新内核参数配置文件
sysctl –p
# 修改配置文件/etc/dhcp/dhcpd.conf(注释掉前所有个subnet区域和主机声明后追加!)
vim /etc/dhcp/dhcpd.conf
shared-network <网段1-网段2> {
subnet <网段1> netmask <子网掩码> {
option routers <网关>;
range <IP地址池起始IP IP地址池结束IP>;
}
subnet <网段2> netmask <子网掩码> {
option routers <网关>;
range <IP地址池起始IP IP地址池结束IP>;
}
}
# 剩余内容注释掉或删除掉,切记别落下大括号
Public建议修改为‘网段1-网段2-...’(亦可随意取名)
网关为该服务器该网段网卡IP地址
# 重启DHCP服务
service dhcpd restart
- 客户端
将网卡配置文件修改为DHCP获取IP,将网卡设置为开机自启。重启网卡即可生效。
- DHCP中继服务器
DHCP Relay(DHCPR)DHCP中继是一个小程序,可以实现在不同子网和物理网段之间处理和转发dhcp信息的功能。
- DHCP服务器端
# 安装DHCP服务
yum –y install dhcp
#拷贝配置文件模板至/etc/dhcp/目录下
cp -a /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 修改配置文件/etc/dhcp/dhcpd.conf(注释掉前所有subnet区域和主机声明后追加如下信息!)
vim /etc/dhcp/dhcpd.conf
subnet 网段1 netmask <子网掩码> {
option routers <网关>;
range <IP地址池起始IP IP地址池结束IP>;
}
subnet网段2 netmask <子网掩码> {
option routers <网关>;
range <IP地址池起始IP IP地址池结束IP>;
}
# 剩余内容注释掉或删除掉,切记别落下大括号
Public建议修改为‘网段1-网段2-...’(亦可随意取名)
网关为该服务器该网段网卡IP地址
# 重启DHCP服务
service dhcpd restart
- DHCP中继器端
# 安装DHCP服务
yum –y install dhcp
# 修改配置文件/etc/sysconfig/dhcrelay(该文件不存在,创建并写入如下信息即可)
vim /etc/sysconfig/dhcrelay
dhcrelay <DHCP服务器IP>
# 设置DHCP服务器的单臂路由所需子网卡(配置两张网卡为两个网段即可)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1
# 开启路由转发(将此选项修改为1即可)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#刷新内核参数配置文件
sysctl –p
# 重启DHCP服务
service dhcpd restart
- 客户端
将网卡配置文件修改为DHCP获取IP,将网卡设置为开机自启。重启网卡即可生效。