Linux网络——DHCP原理与配置

1,476 阅读7分钟

一、 了解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 的分配方式

  • 自动分配:分配到一个IP地址后永久使用 (一般不用)
  • 手动分配:由DHCP服务器管理员专门指定IP地址(类似于静态,比如在公司中,邮件服务器、打印机、扫描仪需要固定IP地址)
  • 动态分配:使用完后释放该IP,供其它客户机使用

二、 DHCP 租约过程

客户机从DHCP服务器获得IP地址的过程称为DHCP的租约过程。

image.png

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

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

  1. 服务器响应(DHCP Offer)

DHCP服务器接收到来自客户机请求lP地址的信息时,在自己的IP地址池中查找是否有合法的IP地址提供给客户机。 如果有,DHCP服务器将此IP地址做上标记,加入到DHCP Offer的消息中,然后广播一则 DHCP Offer 消息(包含网络配置信息:IP地址、子网掩码、DNS、租期等)。

  1. 客户机选择IP地址(DHCP Request)

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

  1. 服务器确定租约(DHCP Ack)

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

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

1. DHCP服务优点

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

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

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

四、 DHCP 配置文件

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

配置文件参数含义:

 # 设置全局配置参数
 option domain-name "example.org";     //指定默认域名
 option domain-name-servers 114.114.114.114;      //指定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地址
}

实验1 :自动获取ip地址

  • 步骤1:Linux虚拟机关闭防火墙和selinux;
  • 步骤2:安装 dhcp 软件包,并查看配置文件;
systemctl stop firewalld                   #关闭防火墙
setenforce 0                               #关闭selinux防火墙

[root@localhost ~]#yum install dhcp -y     #安装dhcp服务
[root@localhost ~]#rpm -qc 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
  • 步骤3:编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf,设置网段、地址池、网关地址。
[root@localhost ~]#vim /etc/dhcp/dhcpd.conf 
#空的
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#       在此目录下有配置模板
#   see dhcpd.conf(5) man page
#
~                                                                                
~                                                                                   
~  
[root@localhost ~]#ls  /usr/share/doc/dhcp-    #按Tab键补全查看
dhcp-4.2.5/        dhcp-common-4.2.5/ 
[root@localhost ~]#  ls  /usr/share/doc/dhcp-4.2.5/
dhcpd6.conf.example  dhcpd.conf.example   ldap/   

[root@localhost ~]#cp  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf 
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y          #将文件拷贝过来覆盖

[root@localhost network-scripts]#  cd /etc/dhcp
[root@localhost dhcp]#vim dhcpd.conf           #修改配置文件

#第8行 修改默认的全局dns地址
8 option domain-name-servers  114.114.114.114;
#直接修改2727 subnet 172.16.235.0 netmask 255.255.255.0 {      #需要分配的网段(跟自己在同一网段)   子网掩码
28   range 172.16.235.30  172.16.235.60;            #地址池  可以使用的ip地址范围
29   option routers 172.16.235.2;                   #网关
30   option domain-name-servers  218.2.135.1;       #dns服务器
31 }

  • 步骤4 :启动dhcp服务并查看状态。
[root@localhost dhcp]#systemctl start dhcpd     启动服务
[root@localhost dhcp]#systemctl status dhcpd    查看状态
  • 步骤5: 验证实验结果
    • 在Linux中验证
开启另一台服务器,VMnet8关掉DHCP选项   #注意两台服务器网卡类型要一致

在虚拟机中 编辑ens33配置文件 
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens33
BOOTPROTO=dhcp  
ip地址等注销掉

[root@localhost dhcp]#systemctl restart network   #重启服务
[root@localhost dhcp]#ip a                        #显示所有接口的配置信息

[root@localhost network-scripts]# cat /etc/resolv.conf 
# Generated by NetworkManager
search example.org
nameserver 218.2.135.1    #用的是局部配置里的dns,局部优先级高于全局配置
Linux验证实验1.png linux验证实验2.png
  • 在Windows中验证
在虚拟机的cmd命令提示符中输入命令进行验证

ipconfig               查看网卡信息
ipconfig -h            查看命令帮助
ipcongfig  /release    释放地址
ipcongfig  /renew      重新获取地址
ipconfig /all          全部信息
win验证实验1.png

实验2 : 固定ip地址

  • 步骤1 :编辑dhcp服务的配置文件/etc/dhcp/dhcpd.conf
[root@localhost ~]#  cd /etc/dhcp
[root@localhost dhcp]#  vim dhcpd.conf     #修改配置文件

host hostname{                                  #指定需要分配固定IP地址的客户机名称
hardware ethernet 00:0C:29:E9:A2:17;            #固定机器的MAC地址
fixed-address 172.16.235.222;                   #固定的IP地址    要和本机在同一网段
}
  • 步骤2 :重启dhcp服务并查看状态
[root@localhost dhcp]#  systemctl restart dhcpd  #重启服务
[root@localhost dhcp]#  systemctl status dhcpd   #查看状态
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2024-04-25 20:23:41 CST; 10s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 44281 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─44281 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

425 20:23:41 localhost.localdomain dhcpd[44281]: No subnet declaration for virbr0 (192.168.122.1).
425 20:23:41 localhost.localdomain dhcpd[44281]: ** Ignoring requests on virbr0.  If this is not what
425 20:23:41 localhost.localdomain dhcpd[44281]:    you want, please write a subnet declaration
425 20:23:41 localhost.localdomain dhcpd[44281]:    in your dhcpd.conf file for the network segment
425 20:23:41 localhost.localdomain dhcpd[44281]:    to which interface virbr0 is attached. **
425 20:23:41 localhost.localdomain dhcpd[44281]: 
425 20:23:41 localhost.localdomain dhcpd[44281]: Listening on LPF/ens33/00:0c:29:00:ee:c3/172.16.235.0/24
425 20:23:41 localhost.localdomain dhcpd[44281]: Sending on   LPF/ens33/00:0c:29:00:ee:c3/172.16.235.0/24
425 20:23:41 localhost.localdomain dhcpd[44281]: Sending on   Socket/fallback/fallback-net
425 20:23:41 localhost.localdomain systemd[1]: Started DHCPv4 Server Daemon.
  • 步骤3 : 验证实验结果
在 windows虚拟机 的cmd命令提示符中输入命令进行验证

ipcongfig  /release    释放地址
ipcongfig  /renew     重新获取地址
ipconfig /all        全部信息
win验证实验2.png