Linux-DHCP服务

1、DHCP基础知识

1.1、什么是DHCP

在大型企业网络环境中,会有大量的主机或设备需要获取IP地址等网络参数,如果采用手动配置,工作量大且不好管理,如果有用户擅自修改网络参数,还可能造成地址冲突;
使用动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)来分配I地址等网络参数,可以减少管理员的工作量,避免手动配置网络参数造成地址冲突;

1.2、DHCP应用场景

只有有网络环境都会涉及到 DHCP(WIFI、家庭、企业) 
云计算环境中,地址无需固定,则需要使用DHCP动态分配地址;

注意:
在传统集群环境下,可能地址不能来回变动,所以任然会采用手动配置方式;

1.3、DHCP工作报文

报文类型            含义
DHCP DISCOVER      客户端用来寻找DHCP服务器
DHCP OFFER         DHHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息
DHCP REQUEST       客户端请求配置确认,或者续借租期
DHCP ACK           服务器对REQUEST报文的确认响应
DHCP NAK           服务器对REQUEST报文的拒绝响应
DHCP RELEASE       客户端要释放地址时用来通知服务器

1.4、DHCP工作原理

1.4.1、工作原理说明

第一步:客户端首先发送dhcp discover广播报文来发现局域网内的dhcp服务器;
第二步:服务器接收到客户端发送的报文后,根据自己地址池剩下的地址,分配给客户端一个地址
第三步:客户端根据先收到的offer报文来决定选用哪个服务器提供的DHCP的地址
1、之所以是广播,是因为可能会存在多个DHCP服务器,假设存在两个DHCP服务器 2、第一台服务器会响应ACK ,确定报文 3、第二台服务器会响应NAK,拒绝报文
第四步︰服务器收到REQUEST 报文以后,确认地址池中的这个地址没有被分配,如果没有被分配就回复ACK报文,如果被分配了,就会回复NAK报文,告诉客户端地址已经被分配了

1.4.2、流程图

1.5、DHCP租期更新

1.5.1、租期更新说明

当租约期限达到50%时,DHCP客户端会请求更新IP地址租约;(默认租期为10分钟)
第一步:客户端发送单播 Request报文,请求服务器更新租期;
第二步︰服务器收到以后,如果该地址可用会响应ACK ,如不可用则响应NAK。

当IP租约期限达到75
%时,DHCP客户端会再次请求更新IP地址租约;客户端发送广播Request报文给 DHCP服务器以便请求继续租用原来使用的地址; 1、如果服务器确认客户端可以使用该地址,则回复一个ACK确认的消息;
2、如果此地址已经无法再分配,则回复一个NCK否认的消息; 3、当客户端收到的不是ACK ,而收到的是NCK ,则会获得169.
254.0.1~169.254.255.254之间的地址,然后每隔5min尝试更新租约;

1.5.2、流程图

1.6、DHCP地址释放

1.6.1、说明

如果IP租约到期前都没有收到服务器响应,客户端停止此IP地址;
如果客户端不再使用分配的地址,也可以主动像服务器发送DHCP RELEASE 报文,释放该IP地址;

1.6.2、流程图

2、DHCP服务端配置

2.1、安装DHCP服务

2.1.1、配置yum源

2.1.2、安装dhcp

yum install epel-release -y
yum install dhcp -y

2.2、配置DHCP

2.2.1、示例配置的位置

/usr/share/doc/dhcp*/dhcpd.conf.example

2.2.2、dhcpd.conf配置解析

cat >> /etc/dhcp/dhcpd.conf <<'EOF'
# 日志,默认存储/var/log/boot.log,也可自行调整
log-facility local7;

# 动态分配地址
subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.99 192.168.10.199;           # 分配地址池
  option domain-name-servers 192.168.10.2;      # DNS地址
  option routers 192.168.10.2;                  # 网关地址
  option broadcast-address 192.168.10.255;      # 广播地址
  default-lease-time 600;                       # 默认租期为10分钟
  max-lease-time 7200;                          # 最大租期2小时
}
EOF

2.2.3、启动DHCP服务

systemctl start dhcpd
systemctl enable dhcpd

2.2.4、查询启动状态

]# netstat -tunlp | grep dhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           8645/dhcpd

2.3、DHCP指定网口提供服务

2.3.1、需求

默认服务器如果是双网卡则提供全局DHCP服务,也可以通过如下方式指定特定接口提供DHCP服务;

2.3.2、指定网口配置方法

cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
vi /etc/systemd/system/dhcpd.service ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid <这里填写网口名:如ens33,eth0等>

systemctl --system daemon-reload systemctl restart dhcpd.service

3、DHCP客户端

3.1、关闭VMware的DHCP

3.2、DHCP客户端配置

3.2.1、配置网口

cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes

3.2.2、重启网口

systemctl restart network

]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.99  netmask 255.255.255.0  broadcast 192.168.10.255
...

3.2.3、查询自动DHCP配置是否达到预期

# 获取到的IP地址
dhcp-client ~]# ip addr | grep ens33 | grep inet
    inet 192.168.10.99/24 brd 192.168.10.255 scope global noprefixroute dynamic ens33

# 路由
dhcp-client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.2    0.0.0.0         UG    100    0        0 ens33
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

# DNS
dhcp-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.10.2

4、使用场景

4.1、客户端重新获取地址

4.1.1、背景

问题描述:
局域网内一台客户端是通过DHCP自动获取IP地址,和另一台手动配置的静态IP产生冲突
解决方法︰ 客户端释放当前IP地址,重新获取IP地址;

4.1.2、客户端重新获取IP地址

# 释放
dhclient -r

# 获取 dhclient

4.1.3、分析DHCP server日志

]# tail -f /var/log/boot.log
Apr 26 05:23:29 vm1 dhcpd: DHCPDISCOVER from 00:50:56:36:4d:8a (dhcp-client) via ens36 Apr 26 05:23:29 vm1 dhcpd: ICMP Echo reply while lease 192.168.10.99 valid. Apr 26 05:23:29 vm1 dhcpd: Abandoning IP address 192.168.10.99: pinged before offer Apr 26 05:23:35 vm1 dhcpd: DHCPDISCOVER from 00:50:56:36:4d:8a via ens36 Apr 26 05:23:36 vm1 dhcpd: DHCPOFFER on 192.168.10.100 to 00:50:56:36:4d:8a via ens36 Apr 26 05:23:36 vm1 dhcpd: DHCPREQUEST for 192.168.10.100 (192.168.10.42) from 00:50:56:36:4d:8a via ens36 Apr 26 05:23:36 vm1 dhcpd: DHCPACK on 192.168.10.100 to 00:50:56:36:4d:8a via ens36

4.2、为客户端分配固定地址

 4.2.1、需求

对于公司的打印机、文件服务器等,都需要手动进行IP地址分配,避免来回变化造成服务不可用;

4.2.2、服务端的配置

]# vi /etc/dhcp/dhcpd.conf 
...
host dhcp-client {
  hardware ethernet 00:50:56:36:4d:8a;
  fixed-address 192.168.10.222;
}

# 重启服务
systemctl restart dhcpd

4.2.3、客户端重新获取IP地址

dhcp-client ~]# systemctl restart network
dhcp
-client ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.222 netmask 255.255.255.0 broadcast 192.168.10.255

 

posted @ 2023-04-25 21:36  小粉优化大师  阅读(407)  评论(0)    收藏  举报