Linux网络服务之DHCP

3,089 阅读8分钟

一、关于DHCP服务

1、DHCP是什么

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

DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。 默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

DHCP采用C/S架构,C-client(客户机),S-server(服务器),客户机/服务器架构

DHCP服务采用传输层UDP协议,客户机使用UDP协议的68端口,服务器使用UDP的67端口。

2、DHCP好处

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

3、DHCP的分配方式

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

注:

一般在公司中,邮件服务器、打印机、扫描仪需要固定IP地址。

二、DHCP的租约过程

image.png 客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程,分为4个步骤:

1、客户机请求IP地址(DHCP Discover)

  • 当一个DHCP客户机启动时,客户机还没有IP地址,客户机要通过DHCP获取一个合法的地址。
  • 此时DHCP客户机以广播方式发送DHCP Discover报文发现信息来寻找DHCP服务器。

image.png 2、服务器响应(DHCP Offer)

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

  • 如果有,DHCP服务器将此IP地址做上标记,加入到DHCP Offer的消息中,然后广播一则DHCP Offer消息(包含IP地址、子网掩码、DNS、租期等)。

image.png 3、客户机选择IP地址(DHCP Request)

  • DHCP客户机从接收到的第一个DHCP Offer消息中提取IP地址, 之后广播发送DHCP Request消息,通告给局域网中所有的DHCP服务器,它选择了哪个DHCP服务器的哪个IP以及租约期限。
  • 让未被选中的DHCP服务器,把未使用的地址收回。同时发出IP地址的DHCP服务器将该地址保留,该地址就不能再分配给另一个DHCP客户机。

image.png

4、服务器确定租约(DHCP Ack)

  • DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息的形式向客户机广播成功确认,该消息包含有IP地址的有效租约和其他可配置的信息。
  • 当客户机收到DHCP ACK消息时,配置IP地址,完成TCP/IP的初始化。

image.png 备注:

重新登录:

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

image.png

image.png 更新租约:

  • 当DHCP服务器向客户机出租的IP地址租期达到50%时,就需要更新租约;
  • 客户机直接向提供租约的服务器发送DHCP Request包,要求更新现有的地址租约。
  • 当租约到期前,DHCP服务器还没有收到客户机的请求,就会释放该IP地址。

三、使用 DHCP动态配置主机地址

1、DHCP服务优点

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

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

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

3、DHCP共有八种报文

image.png

四、DHCP配置文件

DHCP服务的配置文件为/etc/dhcp/dhcpd.conf。

配置文件参数含义:

 # 设置全局配置参数
 option domain-name "example.org";     //指定默认域名
 option domain-name-servers 202.106.0.20202.106.148.1;      //指定DNS服务器地址
 default-lease-time 600;              //默认租约600秒(10分钟)
 max-lease-time 7200;                 //最大租约为7200秒(2小时)
 ddns-update-style none;              //禁用DNS动态更新
 ​
 ​
 # subnet网段声明(作用于整个子网段,部分配置参数优先级高于全局配置参数)
 subnet 192.168.100.0 netmask 255.255.255.0 {         //声明要分配的网段地址
 range 192.168.100.128 192.168.100.200;               //设置地址池
 option routers 192.168.100.10;                       //指定默认网关地址
 ​
 ​
 # host主机声明(给单机分配固定的IP地址)    
 host hgstname{                                //指定需要分配固定IP地址的客户机名称
 hardware ethernet 00:c0:c3:22:46:81;          //指定该主机的MAC地址
 fixed-address 192.168.4.100;                  //指定保留给该主机的IP地址

五、实验:设置DHCP服务器并分配地址

实验要求:

将Linux虚拟机设置成DHCP服务器,自动分配IP地址给Windows10 虚拟机。

实验思路:

  1. Linux虚拟机关闭防火墙和selinux。
  2. 安装 dhcp 软件包,并查看配置文件。
  3. 将Linux虚拟机的网络模式改成仅主机模式。修改网卡配置文件,之后重启网络服务。
  4. 编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段、地址池、网关地址。之后重启dhcp服务。
  5. 验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。

实验步骤:

步骤1、Linux虚拟机关闭防火墙和selinux。

 [root@localhost ~]# systemctl stop firewalld.service 
 [root@localhost ~]# setenforce 0

步骤2、安装 dhcp 软件包,并查看配置文件


 [root@localhost ~]# yum install dhcp -y      //安装dhcp
 [root@localhost ~]# rpm -qc dhcp
 /etc/dhcp/dhcpd.conf                      //dhcp的配置文件
 /etc/dhcp/dhcpd6.conf
 /etc/openldap/schema/dhcp.schema
 /etc/sysconfig/dhcpd
 /var/lib/dhcpd/dhcpd.leases
 /var/lib/dhcpd/dhcpd6.leases
 [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
 #

步骤3、将Linux虚拟机的网络模式改成仅主机模式。

image.png

image.png

步骤4、修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ens33,之后重启网络服务。

 [root@localhost ~]# vim /sysconfig/net-scripts/ifcfg-ens33    //修改网卡配置文件
 ​
 [root@localhost ~]# systemctl restart network                 //重启网络服务
 [root@localhost ~]# ifconfig ens33
 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.137.100  netmask 255.255.255.0  broadcast 192.168.137.255
         inet6 fe80::a5da:ff58:2c32:2b5f  prefixlen 64  scopeid 0x20<link>
         ether 00:0c:29:18:b5:ff  txqueuelen 1000  (Ethernet)
         RX packets 471514  bytes 311413414 (296.9 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 228702  bytes 61948898 (59.0 MiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 ​

这里的IP地址需要和网卡vim1在同一网段,否则无效

image.png

image.png

步骤5、编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段(要和虚拟网络编辑器中的保持一致)、地址池、网关地址。之后重启dhcp服务。

 # 将模板文件复制为配置文件
 [root@localhost ~]# cd /usr/share/doc/dhcp-4.2.5/
 [root@localhost dhcp-4.2.5]# ls
 dhcpd6.conf.example  dhcpd.conf.example  ldap
 [root@localhost dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
 cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
 ​
 # 编辑dhcp配置文件
 [root@localhost ~]# vim /etc/dhcp/dhcpd.conf
  ------------------------------------
  27 subnet 192.168.137.0 netmask 255.255.255.0 {     //设置子网IP、子网掩码
  28   range 192.168.137.20  192.168.137.80;          //设置地址池
  29   option routers 192.168.137.10;                 //设置网关地址
  30 }
 ​
 # 重启dhcp服务
 [root@localhost ~]# systemctl restart dhcpd     //重启dhcp服务
 [root@localhost ~]# systemctl status dhcpd      //查看dhcp状态,已启动
 ● dhcpd.service - DHCPv4 Server Daemon
    Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
    Active: active (running) since 三 2022-03-16 22:17:19 CST; 5s ago
      Docs: man:dhcpd(8)
            man:dhcpd.conf(5)
  Main PID: 87982 (dhcpd)
    Status: "Dispatching packets..."
    CGroup: /system.slice/dhcpd.service
            └─87982 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group ...
 ​

image.png

image.png

image.png

步骤6、验证Windows10虚拟机虚拟机能否获取DHCP服务器分配的IP地址。

Windows10虚拟机,将网络类型修改成“仅主机模式”。

释放IP地址,之后重新获取IP地址。

 windows命令:
 ipconfig                #查看网卡信息
 ipconfig /release       #释放地址
 ipconfig /renew         #重新获取地址
 ipconfig /all           #可以看到详情信息

image.png

image.png

image.png

六、DHCP中继原理

当企业的内部网络规模较大时,通常被划分为多个不同的子网,网络内配置了VLAN,网络内配置了VLAN,VLAN能隔离广播,而DHCP协议使用广播。

DHCP服务器在VLAN 100中,就只有VLAN 100内的客户机能从此内获得IP地址。

两种解决办法:

  • 为每个网段安装一台DHCP服务器,但这种方式存在资源上的浪费,而且不利于集中管理。
  • 在连接不同网段的设备上开启DHCP中继功能,将DHCP这种特殊的广播信息在VLAN之间转发,让其他VLAN的客户机也能从DHCP服务器获得IP地址。