一,简介

dhcp

DHCP协议交互过程

  • DHCP DISCOVER(0x01),此为Client广播寻找可用DHCP Server的过程
  • 2)DHCP OFFER(0x02),此为Server对DHCP DISCOVER报文的响应,并向Client提供配置参数等信息
  • 3)DHCP REQUEST(0x03),此报文是Client对server的DHCP OFFER报文的回应,或者是Client续延IP地址租期时发出的报文
  • 4)DHCP DECLINE(0x04),当Client发现Server分配给它的IP地址无法使用,如IP地址冲突时,将发出此报文,通知Server禁止使用IP地址
  • 5)DHCP ACK(0x05),Server对Client的DHCP REQUEST报文的确认响应报文,Client收到此报文后,才真正获得了IP地址和相关的配置信息。
  • 6)DHCP NAK(0x06),Server对Client的DHCP REQUEST报文的拒绝响应报文,Client收到此报文后,一般会重新开始新的DHCP过程。
  • 7)DHCP RELEASE(0x07),Client主动释放server分配给它的IP地址的报文,当Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。
  • 8)DHCP INFORM(0x08),Client已经获得了IP地址,发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息,如route ip,DNS Ip等,这种报文的应用非常少见。 如:运行IPCONFIG/RELEASE后,PC会发出释放IP的报文,DHCP Message Type是7,他的作用是主动释放server分配给它的IP地址的报文,Server收到此报文后,就可以回收这个IP地址,能够分配给其他的Client。

二,实验环境

DHCP服务器:ct78  192.168.137.78(外网)

测试主机:rhel8  自动获取(外网)

DHCP是C/S模式,服务器端监听端口67/UDP(bootps),客户端默监听认端口68/UDP(bootpc)

三,实验

在DHCP服务器上安装dhcp服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@ct78 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
NAME=eth0
ONBOOT=yes
NETBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=192.168.137.78
PREFIX=24
GATEWAY=192.168.137.1
DNS1=192.168.137.1
DEVICE=eth0

[root@ct78 ~]# yum -y install dhcp*

常用配置文件参数说明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
subnet [网络号] netmask [子网掩码] {...}

作用:定义作用域,指定子网掩码

range [起始IP地址] [结束IP地址]

作用:指定动态获取IP地址范围,可以声明多个range但范围不能重合。

option routers [IP地址]

作用:为客户端指定默认网关,可以全局可以局部

option domain-name [域名]

作用:为客户端指定默认的域,可以全局可以局部

option domain-name-servers [IP地址]

作用:为客户端指定默认DNS服务器地址,可以全局可以局部

default-lease-time [数字]

作用:默认最小租约期限(单位秒),可以全局可以局部

max-lease-time [数字]

作用:最长租约期限(单位秒),可以全局可以局部

host [主机注释名]{

hardware [硬件类型] [硬件地址]

fixed-address [IP地址]

}

作用:用于绑定IP地址,一般硬件类型是以太网(ethernet),硬件地址是MAC地址

log-facility [日志属性]

作用:定义自身的日志属性(在/etc/rsyslog.conf日志服务配置文件中定义相应的属性会将日志存放到何处)

编辑DHCP配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
dhcp配置文件地址是/etc/dhcp/dhcpd.conf

[root@ct78 ~]# vim /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
subnet 192.168.137.0 netmask 255.255.255.0 {
        range 192.168.137.101 192.168.137.200;
        option domain-name-servers 192.168.137.1;
        option domain-name "192.168.137.78";     #尤其注意,要么这样引用,要么写名字,否则一直无法启动报错:Failed to start DHCPv4 Server Daemon.#
        option routers 192.168.137.1;
        option broadcast-address 192.168.137.255;
        default-lease-time 86400;
        max-lease-time 259200;
}

启动dhcpd,并开机自启

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@ct78 ~]# systemctl start dhcpd
[root@ct78 ~]# systemctl enable dhcpd
[root@ct78 ~]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-19 01:13:39 CST; 9s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 6597 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─6597 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no...

Oct 19 01:13:39 ct78 dhcpd[6597]: Internet Systems Consortium DHCP Server 4.2.5
Oct 19 01:13:39 ct78 dhcpd[6597]: Copyright 2004-2013 Internet Systems Consortium.
Oct 19 01:13:39 ct78 dhcpd[6597]: All rights reserved.
Oct 19 01:13:39 ct78 dhcpd[6597]: For info, please visit https://www.isc.org/software/dhcp/
Oct 19 01:13:39 ct78 dhcpd[6597]: Not searching LDAP since ldap-server, ldap-port and ld...ile
Oct 19 01:13:39 ct78 dhcpd[6597]: Wrote 0 leases to leases file.
Oct 19 01:13:39 ct78 dhcpd[6597]: Listening on LPF/eth0/00:0c:29:fe:b8:02/192.168.137.0/24
Oct 19 01:13:39 ct78 dhcpd[6597]: Sending on   LPF/eth0/00:0c:29:fe:b8:02/192.168.137.0/24
Oct 19 01:13:39 ct78 dhcpd[6597]: Sending on   Socket/fallback/fallback-net
Oct 19 01:13:39 ct78 systemd[1]: Started DHCPv4 Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

测试

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@rhel8 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=dhcp        #修改为dhcp
DEFROUTE=yes
NAME=ens192
DEVICE=ens192
ONBOOT=yes

[root@rhel8 ~]# nmcli connection down ens192      #升级8系列后,管理方式由NM托管
[root@rhel8 ~]# nmcli connection up ens192

5,如果想要IP绑定MAC

修改DHCP服务器上的配置文件,重启dhcp服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@ct78 ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
subnet 192.168.137.0 netmask 255.255.255.0 {
        range 192.168.137.101 192.168.137.200;
        option domain-name-servers 192.168.137.1;
        option domain-name "192.168.137.78";
        option routers 192.168.137.1;
        option broadcast-address 192.168.137.255;
        default-lease-time 86400;
        max-lease-time 259200;
#fix IP assign to PC 指定某台电脑分配IP地址
  host rhel8{
        hardware ethernet 00:0c:29:bf:ee:87;
        fixed-address 192.168.137.150;
        }
}

[root@ct78 ~]# systemctl restart dhcpd

6,重启测试主机上的network服务

1
2
3
4
5
6
7
8
9
[root@rhel8 ~]# nmcli device disconnect ens192
[root@rhel8 ~]# nmcli device connect ens192
[root@rhel8 ~]# ip a sh ens192
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:bf:ee:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.150/24 brd 192.168.137.255 scope global dynamic noprefixroute ens192
       valid_lft 86308sec preferred_lft 86308sec
    inet6 fe80::20c:29ff:febf:ee87/64 scope link 
       valid_lft forever preferred_lft forever

7,常看相关文件

DHCP服务器上的租约数据库文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@ct78 ~]# 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

lease 192.168.137.101 {
  starts 5 2019/10/18 17:53:59;
  ends 5 2019/10/18 17:54:25;
  tstp 5 2019/10/18 17:54:25;
  cltt 5 2019/10/18 17:53:59;
  binding state free;
  hardware ethernet b0:25:aa:24:44:35;
  uid "\001\260%\252$D5";
}
lease 192.168.137.102 {
  starts 5 2019/10/18 18:01:32;
  ends 5 2019/10/18 18:04:16;
  tstp 5 2019/10/18 18:04:16;
  cltt 5 2019/10/18 18:01:32;
  binding state free;
  hardware ethernet 00:0c:29:bf:ee:87;
  uid "\001\000\014)\277\356\207";
}
server-duid "\000\001\000\001%<\256\351\000\014)\376\270\002";

在测试主机上查看DNS

1
2
3
4
[root@rhel8 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search 192.168.137.78
nameserver 192.168.137.1

查看网关

1
2
3
4
5
6
[root@rhel8 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.137.1   0.0.0.0         UG    100    0        0 ens192
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.137.0   0.0.0.0         255.255.255.0   U     100    0        0 ens192