一、DHCP服务概述
1、DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
使用DHCP可以减少管理员的工作量,避免IP地址冲突,当网络更改IP地址网段时不
需要再重新配置每个用户的IP地址,提高了IP地址的利用率,方便客户端的配置。
2、可分配的地址信息主要包括:
网卡的IP地址,子网掩码,对应的网络地址,广播地址,默认网关地址,DNS服务器地址等。
3、DHCP的分配方式
(1)自动分配:分配到一个IP地址后永久使用
(2)手动分配:由DHCP服务器管理员专门指定IP地址
(3)动态分配:使用完后释放该IP,供其他客户机使用
4、DHCP的租约过程
(1)客户机从DHCP服务器获取IP地址的过程称为DHCP的租约过程。
(2)租约过程分为四个步骤:
1>客户机请求IP(客户机发 DHCP Discover 广播包)
2>服务器响应(服务器发 DHCP Offer 广播包)
3>客户机选择IP(客户机发 DHCP Request 广播包)
4>服务器确定租约(服务器发 DHCP ACK 广播包)
(3)重新登录
●
1>客户机选择IP(客户机发 DHCP Request 请求包)
2>服务器确定租约(服务器发 DHCP ACK 确认信息)
●
1>客户机选择IP(客户机发 DHCP Request 请求包)
2>服务器否认信息(服务器发 DHCP Nack 否认信息)
3>客户机重新租约
(4)更新租约
当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约。客户机
直接向提供租约的服务器发送DHCP Request 包,要求更新现有的地址租约。若此时DHCP
服务器无法正常回复DHCP客户机的请求,客户机的此IP地址可以继续使用到最大租约时间的87.5%。
二、DHCP中继原理
当企业的内部网络规模较大时,通常被划分为多个不同的子网,网络内配置 了VLAN,VLAN能隔离广播,而DHCP协议使用广播。DHCP服务器在VLAN 100 中,就只有VLAN 100内的客户机能从DHCP服务器那里获取IP地址, 如果VLAN 2或VLAN 3的客户机也需要通过这台DHCP服务器来获取IP地址, 该怎么办呢?
解决的办法有两种:(1) 为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利 于集中管理
(2)在连接不同网段的设备上开启DHCP中继功能,将DHCP这种特殊的广播信息 在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器那里获得IP地址
DHCP中继的配置命令:
ip helper-address DHCPsrv-IPAddress
DHCPsrv-IPAddress 为DHCP服务器的IP地址
三、Linux中DHCP的安装与配置
[root@localhost ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.111 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::20c:29ff:feb6f933c prefixlen 64 scopeid 0x20<link>
ether 00f0c:29:b6f93f3c txqueuelen 1000 (Ethernet)
RX packets 12095 bytes 5828847 (5.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9811 bytes 1905280 (1.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# mkdir /media/cdrom
[root@localhost ~]# mount /dev/cdrom /media/cdrom
[root@localhost ~]# rpm -ivh /media/cdrom/Packages/dhcp-4.2.568.el7.centos.x86_64.rpm
配置DHCP服务
主配置⽂文件:/etc/dhcp/dhcpd.conf
执行程序:/usr/sbin/dhcpd
服务脚本名:dhcpd
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "crushlinux.com"; //设置DNS域
option domain-name-servers 202.106.0.20, 8.8.8.8; //设置DNS服务器地址
default-lease-time 21600; //设置分配IP地址的默认租约时间,单位是秒
max-lease-time 43200; //设置分配IP地址的最大租约时间,单位是秒
subnet 192.168.200.0 netmask 255.255.255.0 { //设置分配IP地址网段 及⼦网掩码
range 192.168.200.150 192.168.200.200; //设置分配IP地址的地址池范围
option routers 192.168.200.1; //设置分配网关地址
}
[root@localhost ~]# systemctl start dhcpd
DHCP服务端通过监听UDP协议67端口工作,客户端通过UDP协议68端口工作。
[root@localhost ~]# netstat -lnpu | grep :67
udp 0 0 0.0.0.0:67 0.0.0.0:* 109961/dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 1274/dnsmasq
[root@localhost ~]# tail -f /var/log/messages //日志中捕获到的四个过程
Jan 6 22f21f47 localhost dhcpd: DHCPDISCOVER from 00f0c:29:a4f48:bb via ens32
Jan 6 22f21f48 localhost dhcpd: DHCPOFFER on 192.168.200.150 to 00f0c:29:a4f48:bb (Crushlinux-PC) via ens32
Jan 6 22f21f48 localhost dhcpd: DHCPREQUEST for 192.168.200.150 (192.168.200.111) from 00f0c:29:a4f48:bb (Crushlinux-PC) via ens32
Jan 6 22f21f48 localhost dhcpd: DHCPACK on 192.168.200.150 to 00f0c:29:a4f48:bb (Crushlinux-PC) via ens32
Windows7客户机将网络模式设置与DHCP服务器相同模式,获取IP地址测试。
[root@localhost ~]# cat /var/lib/dhcpd/dhcpd.leases //租约信息⽂文件
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
server-duid " 00 01 00 01#304313u 00 14)266223<";
lease 192.168.200.150 {
starts 0 2019/01/06 14f21f48;
ends 0 2019/01/06 20f21f48;
cltt 0 2019/01/06 14f21f48;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00f0c:29:a4f48:bb;
uid " 01 00 14)244H273";
client-hostname "Crushlinux-PC"; }
Linux客户机将网络模式设置与DHCP服务器相同模式,获取IP地址测试。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=b194e583-21c3-4109-a160-3d2a9876a30b
IPV6_PRIVACY=no
DEVICE=ens32
ONBOOT=yes
[root@localhost ~]# systemctl restart network
或者
[root@localhost ~]# dhclient -r ens32 //释放IP地址
[root@localhost ~]# dhclient -d ens32 //重新获取
针对部分主机可绑定其MAC地址为其分配固定IP地址
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
host win7 { //添加主机定义
hardware ethernet 00f0c:29:a4f48:bb;//客户机MAC地址
fixed-address 192.168.200.99; //为客户机绑定的IP地址
}
[root@localhost ~]# systemctl restart dhcpd
Windows7客户机将网络模式设置与DHCP服务器相同模式,重新获取IP地址测试。
ipconfig /release 释放IP地址
ipconfig /renew 重新获取IP地址
四、Linux中DHCP中继配置
DHCP服务器调整:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=b194e583-21c3-4109-a160-3d2a9876a30b
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.200.111
PREFIX=24
GATEWAY=192.168.200.112 //网关需要指向DHCP中继服务器同网络的IP地址
DNS1=202.106.0.20
IPV6_PRIVACY=no
[root@localhost ~]# ifconfig ens32 //VMnet8模式
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.111 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::20c:29ff:feb6f933c prefixlen 64 scopeid 0x20<link>
ether 00f0c:29:b6f93f3c txqueuelen 1000 (Ethernet)
RX packets 12335 bytes 5849822 (5.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9984 bytes 1934256 (1.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "crushlinux.com";
option domain-name-servers 202.106.0.20, 8.8.8.8;
default-lease-time 21600;
max-lease-time 43200;
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.150 192.168.200.200;
option routers 192.168.200.1; }
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.150 192.168.100.200;
option routers 192.168.100.1;
}
[root@localhost ~]# systemctl restart dhcpd
DHCP中继服务器调整:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=b194e583-21c3-4109-a160-3d2a9876a30b
IPV6_PRIVACY=no
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.200.112 //需作为DHCP服务器的网关地址
NETMASK=255.255.255.0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
IPV6_PRIVACY=no
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.100.112
NETMASK=255.255.255.0
[root@localhost ~]# ip a | grep ens
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UP group default qlen 1000
inet 192.168.200.112/24 brd 192.168.200.255 scope global ens32
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UP group default qlen 1000
inet 192.168.100.112/24 brd 192.168.100.255 scope global ens34
[root@localhost ~]# rpm -ivh /media/cdrom/Packages/dhcp-4.2.568.el7.centos.x86_64.rpm
[root@localhost ~]# rpm -ql dhcp |grep dhcrelay
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcrelay
/usr/share/man/man8/dhcrelay.8.gz
打开DHCP中继服务器路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
开启DHCP中继服务
[root@localhost ~]# dhcrelay 192.168.200.111
Dropped all unnecessary capabilities.
Internet Systems Consortium DHCP Relay Agent 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/virbr0/52f54f00:b3:df:0e
Sending on LPF/virbr0/52f54f00:b3:df:0e
Listening on LPF/ens34/00f0c:29f8c:f2:e3
Sending on LPF/ens34/00f0c:29f8c:f2:e3
Listening on LPF/ens32/00f0c:29f8c:f2:d9
Sending on LPF/ens32/00f0c:29f8c:f2:d9
Sending on Socket/fallback
[root@localhost ~]# netstat -anpu | grep dhcrelay
udp 0 0 0.0.0.0:67 0.0.0.0:* 2893/dhcrelay
PS:学习方式
1、服务的使用场景
2、服务的组件和工作原理
3、服务的协议和端口
4、服务的安装,配置修改(主配置文件),常见配置项
5、验证方式