Linux网络服务--DHCP原理与配置(原理+实验)

一、DHCP工作原理

1.1 了解DHCP服务

  • DHCP(Dynamic Host Configguration Protocol,动态主机配置协议)
  • 由Internet工作任务小组设计开发
  • 专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议

使用DHCP的好处

  • 减少管理员的工作量
  • 避免输入错误的可能
  • 避免IP地址冲突
  • 当更改IP地址段时,不需要重新配置每个用户的IP地址
  • 提高了IP地址的利用率
  • 方便客户端的配置

DHCP的分配方式

  • 自动分配:分配到一个IP地址后永久使用
  • 手动分配:由DHCP服务器管理员专门指定IP地址
  • 动态分配:使用完后释放该IP,供其它客户机使用

1.2 DHCP的租约过程

  • 客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程
  • 分为四个步骤
    在这里插入图片描述
    1.客户端在网络中发送discover广播,以此来搜索DHCP服务器
    2.DHCP服务器接收到广播后,因不知道客户端的IP地址,所以同样以广播的形式将offer发送,来响应主机
    3.客户机收到offer后,开始发出request广播
    4.DHCP收到广播后,依旧不知道客户机IP地址,发送回复request的ACK确认广播

租约过程详解

1、客户机请求IP地址:发送DHCP discover广播

  • 当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机要通过DHCP获取一个合法的地址

  • 此时DHCP客户机以广播方式发送DHCP discover发现信息来寻找DHCP服务器

  • 因为自己没有IP地址,所以源IP地址为:0.0.0.0
    同时也不知道DHCP服务器地址,所以发送广播255.255.255.255
    在这里插入图片描述
    2、服务器响应

  • 当DHCP服务器接收到来自客户机请求IP地址的信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机,

  • 如果有,DHCP服务器就将此IP地址做上标记,加入到DHCP offer的消息中,然后DHCP服务器就广播一则DHCP offer消息

  • 客户机仍没有IP地址,所以发送广播
    在这里插入图片描述
    3、客户机选择IP地址

  • DHCP客户机从接收到的第一个DHCP offer消息中提取IP地址,发出IP地址的DHCP服务器将该地址保留,这样该地址就不能再分配给另一个DHCP客户机
    第一个DHCP offer表示:若局域网中同时存在两个DHCP,- - 那么客户机根据收到DHCP offer的顺序来确定使用哪个DHCP服务器的地址

  • 客户机发送DHCP request 广播,选择IP地址,并附上租约期限信息(默认8天)
    在这里插入图片描述
    4、服务器确定租约

  • DHCP服务器接收到DHCP request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的消息

  • 当客户机收到DHCP ACK消息时,他就配置了IP地址,完成TCP/IP的初始化

  • 此时服务器发出的仍旧是广播,因为客户机还没有IP地址
    在这里插入图片描述
    5、重新登录

  • DHCP客户机每次重新登录网络时,不需要在发送DHCP的discover信息,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息

  • DHCP服务器收到请求后,检查IP地址资源池
    1.发现客户机请求中的IP地址仍旧存在,便发送ACK,将IP地址分配给客户机
    2.发现客户机请求中的IP地址已被占用,便返回一个Nack否认信息,然后客户机重新开始请求IP地址的步骤。
    在这里插入图片描述
    6、更新租约

  • 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约

  • 客户机直接向提供租约的服务器发送DHCP request包,要求更新现有的地址租约

  • 若DHCP服务器宕机,客户机租约到期后,会自动释放地址,然后使用169.254.0.0–169.254.255.255网段的地址

二、DHCP服务器的配置

2.1 使用DHCP动态配置主机地址

DHCP服务

  • 为大量客户机自动分配地址,提供集中管理
  • 减轻管理和维护成本,提高网络配置效率

可分配的地址信息主要包括

  • 网卡的IP地址,子网掩码
  • 对应的网络地址,广播地址
  • 默认网关地址
  • DNS服务器地址

2.2 安装DHCP服务器

DHCP服务器软件

  • CentOS光盘中的dhcp-4.2.5-47.el7.centos.x86_64.rpm
  • dhcp软件包的主要文件
    • 主配置文件:/etc/dhcpd.conf(或者是.cfg文件)
    • 执行程序:/usr/sbin/dhcpd(命令)、/usr/sbin/dhcrelay(启动)
    • 执行参数配置:/etc/sysconfig/dhcpd

2.3 主配置文件

dhcp.conf的内容构成

ddns-update-style interim;  '全局配置参数,针对所有子网段'
...省略内容
subnet 10.152.187.0 netmask 255.255.255.0 {'网段声明'
  option routers 10.5.5.1;	 '配置选项,网关'
  ...
  default-lease-time 600;		'配置参数,租约'
   ...
  host ns{
        ...
        fixed-address 207.175.42.254; '主机声明,固定的主机地址,(如:网络打印机)基于MAC地址绑定,一定要绑定MAC'
    }
}

在这里插入图片描述
全局设置,作用于整个DHCP服务器

  • ddns-update-style none; 禁止dns动态更新
  • default-lease-time 21600; 默认租约期限
  • max-lease-time 43200; 最大租约期限
  • option domain-name"domain.org"; 指定域名
  • option domain-name-servers 202.106.0.20; 指定分配dns地址

subnet网段声明,作用于整个子网段

  • range参数:设置用于分配的IP地址池(地址池定义了可分配地址的范围)

  • option subnet-mask 参数: 设置客户机的子网掩码

  • option routers 参数: 设置客户机的默认网关地址

[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;
  option routers rtr-239-32-1.example.org;
}

host主机声明,作用于单个主机

  • hardware ethernet 参数:指定对应主机的MAC地址
  • fixed-address参数:指定为该主机保留的IP地址

2.4 启动DHCP服务

启动DHCP服务

[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# netstat -anpu | grep ":67"
udp   0   0 0.0.0.0:67   0.0.0.0:*    5684/dhcpd

查看租约文件 /var/lib/dhcpd/dhcpd.lease

[root@localhost ~]# vim /var/lib/dhcpd/dhcpd.leases 
或者
[root@localhost ~]# less /var/lib/dhcpd/dhcpd.leases 
或者其他的

服务器 UDP协议的67端口
客户端 UDP协议68端口

三、DHCP服务器配置实验

3.1 实验环境

一台CnetOS 7(作为DHCP服务器)

两台windows 10(作为DHCP客户机)

两台都设置成仅主机模式(相当于都绑定在VMnet 1网卡上)

3.2 需求分析

两台win10可以通过DHCP服务器获取到IP地址

将win10 跟 CentOS 7.6 都设置成仅主机模式

3.3 实验步骤

1、dhcp固定IP地址

2、安装dhcp包

3、修改配置文件(根据模板复制)
设置subnet{地址池、子网掩码、网关、dns地址}

4、启动服务
客户端:
ipconfig /release
ipconfig /renew

3.4 实验过程

1、配置CnetOS 7

[root@localhost ~]# setenforce 0    '关闭核心防护'
[root@localhost ~]# iptables -F     '清空防火墙规则' 
[root@localhost ~]# systemctl status firewalld   '查看防火墙状态'  
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2020-07-05 20:48:40 CST; 2h 5min ago
     Docs: man:firewalld(1)
 Main PID: 8988 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─8988 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

7月 05 20:48:39 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
7月 05 20:48:40 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld.service    '关闭防火墙'
[root@localhost ~]# yum -y install dhcp*    '安装所有dhcp相关的软件包'
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * extras: mirrors.bfsu.edu.cn
 * updates: mirror.bit.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 dhcp.x86_64.12.4.2.5-79.el7.centos 将被 安装
--> 正在处理依赖关系 libisc-export.so.169()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要
--> 正在处理依赖关系 libdns-export.so.1102()(64bit),它被软件包 12:dhcp-4.2.5-79.el7.centos.x86_64 需要
---> 软件包 dhcp-common.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
--> 正在处理依赖关系 dhcp-common = 12:4.2.5-68.el7.centos.1,它被软件包 12:dhclient-4.2.5-68.el7.centos.1.x86_64 需要
---> 软件包 dhcp-common.x86_64.12.4.2.5-79.el7.centos 将被 更新
---> 软件包 dhcp-devel.x86_64.12.4.2.5-79.el7.centos 将被 安装
---> 软件包 dhcp-libs.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
---> 软件包 dhcp-libs.x86_64.12.4.2.5-79.el7.centos 将被 更新
--> 正在检查事务
---> 软件包 bind-export-libs.x86_64.32.9.11.4-16.P2.el7_8.6 将被 安装
---> 软件包 dhclient.x86_64.12.4.2.5-68.el7.centos.1 将被 升级
---> 软件包 dhclient.x86_64.12.4.2.5-79.el7.centos 将被 更新
--> 解决依赖关系完成

依赖关系解决

=======================================================================================
 Package                架构         版本                          源             大小
=======================================================================================
正在安装:
 dhcp                   x86_64       12:4.2.5-79.el7.centos        base          515 k
 dhcp-devel             x86_64       12:4.2.5-79.el7.centos        base          108 k
正在更新:
 dhcp-common            x86_64       12:4.2.5-79.el7.centos        base          176 k
 dhcp-libs              x86_64       12:4.2.5-79.el7.centos        base          133 k
为依赖而安装:
 bind-export-libs       x86_64       32:9.11.4-16.P2.el7_8.6       updates       1.1 M
为依赖而更新:
 dhclient               x86_64       12:4.2.5-79.el7.centos        base          286 k

事务概要
=======================================================================================
安装  2 软件包 (+1 依赖软件包)
升级  2 软件包 (+1 依赖软件包)

总计:2.3 M
总下载量:622 k
Downloading packages:
No Presto metadata available for base
(1/2): dhcp-devel-4.2.5-79.el7.centos.x86_64.rpm                | 108 kB  00:00:00     
(2/2): dhcp-4.2.5-79.el7.centos.x86_64.rpm                      | 515 kB  00:00:01     
---------------------------------------------------------------------------------------
总计                                                      413 kB/s | 622 kB  00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在更新    : 12:dhcp-libs-4.2.5-79.el7.centos.x86_64                            1/9 
  正在更新    : 12:dhcp-common-4.2.5-79.el7.centos.x86_64                          2/9 
  正在安装    : 32:bind-export-libs-9.11.4-16.P2.el7_8.6.x86_64                    3/9 
  正在更新    : 12:dhclient-4.2.5-79.el7.centos.x86_64                             4/9 
  正在安装    : 12:dhcp-4.2.5-79.el7.centos.x86_64                                 5/9 
  正在安装    : 12:dhcp-devel-4.2.5-79.el7.centos.x86_64                           6/9 
  清理        : 12:dhclient-4.2.5-68.el7.centos.1.x86_64                           7/9 
  清理        : 12:dhcp-common-4.2.5-68.el7.centos.1.x86_64                        8/9 
  清理        : 12:dhcp-libs-4.2.5-68.el7.centos.1.x86_64                          9/9 
  验证中      : 12:dhcp-libs-4.2.5-79.el7.centos.x86_64                            1/9 
  验证中      : 12:dhclient-4.2.5-79.el7.centos.x86_64                             2/9 
  验证中      : 12:dhcp-4.2.5-79.el7.centos.x86_64                                 3/9 
  验证中      : 12:dhcp-devel-4.2.5-79.el7.centos.x86_64                           4/9 
  验证中      : 32:bind-export-libs-9.11.4-16.P2.el7_8.6.x86_64                    5/9 
  验证中      : 12:dhcp-common-4.2.5-79.el7.centos.x86_64                          6/9 
  验证中      : 12:dhcp-common-4.2.5-68.el7.centos.1.x86_64                        7/9 
  验证中      : 12:dhclient-4.2.5-68.el7.centos.1.x86_64                           8/9 
  验证中      : 12:dhcp-libs-4.2.5-68.el7.centos.1.x86_64                          9/9 

已安装:
  dhcp.x86_64 12:4.2.5-79.el7.centos      dhcp-devel.x86_64 12:4.2.5-79.el7.centos     

作为依赖被安装:
  bind-export-libs.x86_64 32:9.11.4-16.P2.el7_8.6                                      

更新完毕:
  dhcp-common.x86_64 12:4.2.5-79.el7.centos   dhcp-libs.x86_64 12:4.2.5-79.el7.centos  

作为依赖被升级:
  dhclient.x86_64 12:4.2.5-79.el7.centos                                               

完毕!

2、centos 7 和win 10 都设置为仅 主机模式
在这里插入图片描述
在这里插入图片描述
进入网络编辑器,取消掉使用本地DHCP服务IP地址分配给虚拟机,否则下面做出来还是192.168.100.1,不是自己配置的8.8.8.8
在这里插入图片描述
3、修改配置文件

[root@localhost ~]# rpm -q dhcp   '查看dhcp安装包是否安装'
dhcp-4.2.5-79.el7.centos.x86_64
[root@localhost ~]# rpm -qc dhcp   '查看dhcp安装包所在路径'
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
[root@localhost ~]# cd /etc/dhcp   '进入/etc/dhcp目录'
[root@localhost dhcp]# ls
dhclient.d  dhclient-exit-hooks.d  dhcpd6.conf  dhcpd.conf  scripts
[root@localhost dhcp]# vim dhcpd.conf   '进入配置文件修改'
  #
  # DHCP Server Configuration file.
  #   see /usr/share/doc/dhcp*/dhcpd.conf.example
  #   see dhcpd.conf(5) man page
  #
     '复制这一行:/usr/share/doc/dhcp*/dhcpd.conf.example'

[root@localhost dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf  '把/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example文件复制到/etc/dhcp/dhcpd.conf中,覆盖原有文件'
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes

[root@localhost dhcp]# vim /etc/sysconfig/network-scripts/ifcfg-ens33  '修改网卡信息'
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPRO=static   '原有dhcp改为static'
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
UUID=3cae1424-fc31-4f04-874b-e2bb66dfc8c1
DEVICE=ens33
ONBOOT=yes  '改为yes'

IPADDR=192.168.100.100   '添加IP地址,子网掩码,网关'
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
':wq保存退出'

[root@localhost dhcp]# service network restart   '重启网络服务'
Restarting network (via systemctl):                        [  确定  ]

[root@localhost dhcp]# ifconfig   '查看网卡信息'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.100  netmask 255.255.255.0  broadcast 192.168.100.255  '已经修改成功'
        inet6 fe80::d80b:cb4a:4fe5:254b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f4:24:29  txqueuelen 1000  (Ethernet)
        RX packets 548  bytes 678169 (662.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 588  bytes 49787 (48.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf '进入/etc/dhcp/dhcpd.conf配置'
':set nu标注行号'
......
 8 option domain-name-servers 8.8.8.8;   'DNS设置为8.8.8.8'
......
 27 subnet 192.168.1000 netmask 255.255.255.0 {
 28   range 192.168.100.128 192.168.100.200;  '插入这两行:配置地址池子网段'
 29   option routers 192.168.100.1;  '配置网关'
':wq保存退出'

[root@localhost dhcp]# systemctl start dhcpd  '启动dhcp服务'

[root@localhost dhcp]# systemctl start dhcpd   '启动dhcp服务'
[root@localhost dhcp]# netstat -naup   '查看dhcp状态'
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:973             0.0.0.0:*                           8859/rpcbind        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           8917/avahi-daemon:  
udp        0      0 192.168.122.1:53        0.0.0.0:*                           9954/dnsmasq        
udp        0      0 0.0.0.0:67              0.0.0.0:*                           13316/dhcpd   '有这个服务了'     
udp        0      0 0.0.0.0:67              0.0.0.0:*                           9954/dnsmasq        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp        0      0 127.0.0.1:323           0.0.0.0:*                           8887/chronyd        
udp        0      0 0.0.0.0:47906           0.0.0.0:*                           8917/avahi-daemon:  
udp6       0      0 :::973                  :::*                                8859/rpcbind        
udp6       0      0 :::111                  :::*                                1/systemd           
udp6       0      0 ::1:323                 :::*                                8887/chronyd        

4、启动服务
进入win10虚拟机,改为自动获取网络服务
在这里插入图片描述
进入命令提示符页面
pconfig /release释放IP地址
ipconfig /renew 重新获取IP地址
在这里插入图片描述
再开一台win7虚拟机
分配到的地址是192.168.100.129
在这里插入图片描述
5、下面在子网段配置DNS服务,看子网段优先级与全局配置优先级哪个高

[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf

subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.128 192.168.100.200;
  option routers 192.168.100.1;
  option domain-name-servers 9.9.9.9;    '插入这一行'

[root@localhost dhcp]# systemctl restart dhcpd   '重启dhcp'

进入win10
ipconfig /release
ipconfig /renew
ipconfig /all
此时DNS服务器变成了9.9.9.9
在这里插入图片描述

  • 结论:子网段配置的优先级高于全局配置

6、固定分配IP地址

进入win 10,复制物理地址:00-0C-29-53-74-FC

[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
    ‘/fixed 查找’
......
host yang {     'host后面名称可以改'
  hardware ethernet 00:0C:29:53:74:FC;  '粘贴00-0C-29-53-74-FC,并将 - 改为 :'
  fixed-address 192.168.100.88;   'fixed-address 后可以改成想给WIN 10 配置的IP地址'
......
   ':wq 保存退出'
[root@localhost dhcp]# systemctl restart dhcpd  '重启dhcpd'

进入win10
ipconfig /release
ipconfig /renew
此时,win 10 获取到的IP地址为192.168.100.88
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ycycyyc_/article/details/107145219