DHCP服务

目录

一、 概述

DHCP协议

DHCP的优势

DHCP的分配方式

应用场景

注意

工作流程(背会)

何时更新租约

当客户端重启后

客户端类型


一、 概述

DHCP协议

Dynamic Host Configuration Protocol ,动态主机配置协议

作用:动态的进行IP地址分配

服务端的监听端口 67/udp

客户端监听端口 68/udp

网络架构 C/S:client/server

DHCP的优势

  • 提高配置效率

  • 减少配置错误

DHCP的分配方式

  • 手动分配:固定不变,工程师进行地址绑定

  • 自动分配:但是不进行地址回收

  • 动态分配:进行地址回收

应用场景

  • 更加准确的配置网络参数的情况下

  • 网络环境较大时

注意

同一个网络环境下不允许存在多个DHCP服务器

工作流程

1、当客户端配置为自动获得IP地址时,客户端发送discover广播包(发现),用来寻找网络中的DHCP服务器

2、假如网络存在DHCP服务器,此时服务器给出回应,向客户端发送Offer广播包(邀约),携带了IP地址的信息,询问客户端是否使用该IP地址

3、假如客户端使用上述IP地址,向服务端发送Request广播包(请求),并将请求信息写入到该包内。

4、服务端向客户端发送Ack广播包(确认),并确定IP地址的租约期。

何时更新租约

当租约期达到50%时

当客户端重启后

客户端直接发送Request包:

A、IP地址空闲 服务端直接回应Ack

B、IP地址被占用 服务端回应noAck 客户端需要将上述“工作流程”完整执行一遍

客户端类型

Linux DHCP服务器不存在,没有IP

Windows DHCP不存在,会启用备用IP地址 169.254.0.0/16 ~ 168.254.255.255/16

二、模拟真实环境下DHCP服务器给主机分配不同网段IP地址


要求:
DHCP服务器能够为两个网络分别分配IP地址。
内部客户机设置为固定获得某一个IP地址。

部署


首先给服务器、路由器分配固定ip地址

基础环境
配置yum源

yum install -y dhcp-server
yum install -y dhcp-relay  ##路由器安装dhcp-relay服务
systemctl  stop  firewalld  && systemctl disable firewalld #关闭防火墙及SElinux
getenforce     #查看SElinux
setenforce  0  #设置宽容模式
 vim  /etc/selinux/config
SELINUX=enforcing  改为 SELINUX=disabled









配置
配置文件存储路径: /etc/dhcp
核心配置文件:       /etc/dhcp/dhcpd.conf
 

·[root@localhost dhcp]# vim dhcpd.conf
# A slightly different configuration for an internal subnet.
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.2 192.168.100.253;
  option domain-name-servers 192.168.100.1;
  #option domain-name "internal.example.org";
  option routers 192.168.100.254;
  option broadcast-address 192.168.100.255;
  default-lease-time 600;
  max-lease-time 7200;
}
subnet 192.168.200.0 netmask 255.255.255.0 {
  range 192.168.200.2 192.168.200.253;
  option domain-name-servers 192.168.200.1;
  #option domain-name "internal.example.org";
  option routers 192.168.200.254;
  option broadcast-address 192.168.200.255;
  default-lease-time 600;
  max-lease-time 7200;
}
host ens33 {
  hardware ethernet 00:0c:29:b3:a1:21;
  fixed-address 192.168.100.100;
}


 

启动 DHCP 服务

1
[root@localhost dhcp]# systemctl enable --now dhcpd
systemctl enable --now dhcrelay #路由器启动dhcrely
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf   


配置内部客户机

[root@localhost1 ~]# 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=eui64
NAME=ens33
DEVICE=ens33
ONBOOT=yes


 

配置外部客户机

[root@localhost dhcp]# 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=eui64
NAME=ens33
DEVICE=ens33
ONBOOT=yes


 

配置后测试
内部机:

[root@localhost1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:b3:a1:21 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.100.100/24 brd 192.168.100.255 scope global dynamic noprefixroute ens33
       valid_lft 598sec preferred_lft 598sec
    inet6 fe80::20c:29ff:feb3:a121/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:41:0d:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever



 

外部机:

[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c4:f5:3c brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.200.2/24 brd 192.168.200.255 scope global dynamic noprefixroute ens33
       valid_lft 391sec preferred_lft 391sec
    inet6 fe80::20c:29ff:fec4:f53c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:41:0d:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever


 

 

  
内部机ping外部机

[root@localhost1 ~]# ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
64 bytes from 192.168.200.2: icmp_seq=1 ttl=63 time=0.363 ms
64 bytes from 192.168.200.2: icmp_seq=2 ttl=63 time=0.428 ms

--- 192.168.200.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.418/0.490/0.563/0.075 ms


 



 

### 定义 DHCP(Dynamic Host Configuration Protocol)服务器是一种用于动态分配IP地址及其他网络配置参数的网络服务。它能为网络中的客户端自动分配IP地址、子网掩码、网关、DNS服务器等信息,避免了手动配置的繁琐和错误。 ### 工作原理 当客户端启动时,会发送一个DHCP Discovery广播包,寻找可用的DHCP服务器DHCP中继代理收到此报文后,以单播方式向DHCP服务器转发该报文并等待回答。DHCP服务器收到请求后,会发送一个DHCP Offer报文,其中包含可用的IP地址和其他配置信息。DHCP中继代理收到此报文后,再将其发回主机。客户端收到Offer后,会发送一个DHCP Request报文,请求使用该IP地址。DHCP服务器确认后,会发送一个DHCP ACK报文,客户端就可以使用分配的IP地址进行网络通信。当租期达到50%时,客户机会再次发送DHCP Request包进行续约,如果服务器无响应,则在87.5%时再次发送续约请求,若仍然无响应,客户端会释放IP地址,并重新发送DHCP Discovery广播包来获取新的IP地址。当无任何服务器响应时,客户端会自动给自己分配一个169.254.x.x/16全球统一无效地址,用于临时内网通信 [^1][^3]。 ### 配置方法 配置DHCP服务器可从查看进程和端口开始,使用命令 `ps aux|grep dhcpd` 查看dhcpd进程,使用 `netstat -anplut|grep dhcp` 查看端口67 UDP是否正常监听。之后可进行客户机测试,以确保服务器配置生效 [^2]。 ### 其他信息 DHCP Relay(DHCPR)也被称为DHCP中继,可实现跨越物理网段处理和转发DHCP信息的功能。并非每个网络都需要部署DHCP服务器,推荐的做法是每个网络至少有一个DHCP中继代理,并配置好DHCP服务器的IP地址信息 [^1]。 ### 代码示例 以下是使用Python模拟DHCP服务器简单工作流程的示例代码: ```python import socket # 模拟DHCP服务器监听端口 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('0.0.0.0', 67)) while True: data, client_address = server_socket.recvfrom(1024) # 这里简单模拟处理DHCP Discovery请求 if b'DHCP Discovery' in data: offer_message = b'DHCP Offer: 192.168.1.100' server_socket.sendto(offer_message, client_address) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值