获取 IP 的方式

  • 静态指定
  • 动态获取
    • bootp : boot protocol MAC 与 IP 一一对应
      • 这种方法会绑定 MAC 地址,所以在网络中会产生浪费 IP 的现象
    • dhcp :增强的 bootp,动态
      • 对 IP 的租用会有租期,当主机一段时间不使用或者租期到期后 DHCP 就会回收 IP 地址,这种分配地址的方式就是动态分配 DHCP

DCHP 的工作原理

DHCP 是 UDP 协议,是一个应用层协议,C/S 模式,DHCP server 使用 67/udp、DHCP client 68/udp

主要用途

  • 用于内网网络和网络服务供应商自动分配 IP 地址给用户
  • 用于内部网络管理员作为对所有电脑集中管理的手段
  • 自动化安装系统
  • 解决 IPv4 不足的问题

DHCP 的通信过程

Clinet(客户机)接受回应消息使用的是 67/udp,Server(服务器接收)Client 请求消息的是 68/udp 端口,分为 6 个步骤

  1. Clinet 发现阶段:首先是 Clinet 默认没有 IP 地址会发送 Discover(Clinet 请求 IP)的 IP 为 0.0.0.0,255.255.255.255 的广播报文,网络上的所有主机都会收到 Discover 的报文,只有 server 会回应报文
  2. Server 响应阶段:server 通过 68 端口收到 client 收到请求 IP 的报文后,会通过解析报文来分析自己的 dhcp.conf 文件,来查找有没有相应合适的 IP 地址,如果有的话 Server 会给 Client 发送 offer 报文,来告诉 Client 有何时的资源,可以提供 DHCP 服务
  3. Client 请求使用阶段:Client 收到 offer 报文后,知道本网段有 Server 可以提供 DHCP 服务,所以 Client 就会发送一个 request 的请求报文,向 Server 请求子网掩码,IP 地址,网关,DNS 等信息,以便登录网络
  4. Server 确定使用阶段:Server 收到 Client 发送的 request 报文后,确定要为 Client 提供 IP 地址等信息,所以就向 Client 回应一个 Option 的报文来告诉 CLient 使用的 IP,然后 Client 就可以使用该 IP 了 Server 会把该 IP 与 Client 的 MAC 地址绑定,并且取消之前为 Client 提供的 IP 地址服务
  5. Client 重启网络服务:重启后会发送一个含有 Server 之前分配过的 IP 地址的 request IP请求报文,DHCP 收到后会先查看自己的服务器中有没有主机使用该 IP,如果没有使用就会给 Client 回应一个 ACK 报文表示 Client 可以继续使用此 IP 地址,如果正在使用就会给 Client 重新分配一个没有正在使用的 IP 地址
  6. Client 的续约过程:每个 IP 地址都会有定义的租约,如果租约小于 50% 就需要更新租约,Client 会发送一个 renew 的报文来请求更新租约,如果 dhcp server 没有回应,那么在 1/8 的租约时 Client 会寻找其他的 dhcp server

DHCP 的租期和限制

  • 使用 DHCP 时必须要基于本地的 IP 网段来设置,且分发的 IP 中必须有自己的网段
  • 先到先得的原则
长租期与短租期
  • 长租期:IP 相对稳定,网络资源消耗较少,但是浪费 IP 资源
  • 短租期:IP 相对比较不稳定,网络资源消耗较多(因为需要不停的发送请求续租)但是 IP 地址可以得到充分利用,可以实现较少 IP 为较多的 IP 分发地址,因为如果主机过多,肯定会有主机会停机或者是租期过期,不在工作的主机

DHCP 实现

DHCP 实现软件
bash
dhcp
dnsmasq        小型服务软件,可以提供 dhcp 和 dns 功能,应用在小型机
DHCP 相关文件组成
bash
/usr/sbin/dhcpd            dhcp 的执行程序
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example    dhcp 的备份文件
/var/lib/dhcpd/dhcpd.leases        dhcp 分发 IP 的记录日志 
/etc/dhcp/dhcpd.conf        dhcp 的主配置文件
/usr/lib/systemd/system/dhcpd.service    dhcp 的 service 启动管理文件
dhcp-client 客户端包
bash
/usr/sbin/dhclient #客户端程序 
/var/lib/dhclient #自动获取的IP信息
windows 工具
bash
ipconfig    /release         释放 IP 地址
ipconfig     /renew            获取新的 IP 地址
DHCP 服务器配置
bash
1. dhcp 配置文件介绍
2. 实现 dhcp 分发 IP 地址
3. dhcp 特殊用法,自动安装 IP 分发
bash
`1. dhcp 配置文件介绍`
option domain-name "example.org";            # 定义在 /etc/hosts 文件中 serach 解析的名称,当找不到目标地址会自动填充 serach
option domain-name-servers ns1.example.org, ns2.example.org;    # 设置解析的 dns 地址
default-lease-time 600;        # 租期时间
max-lease-time 7200;        # 最大租期时间

subnet 10.5.5.0 netmask 255.255.255.224 {    # 网段
  range 10.5.5.26 10.5.5.30;        # 定义分发地址池
  option domain-name-servers ns1.internal.example.org;        # 定义 dns 地址
  option domain-name "internal.example.org";    # 定义域名
  option routers 10.5.5.1;        # 网关定义
  option broadcast-address 10.5.5.31;    # 广播地址定义
  default-lease-time 600;    # 租期时间
  max-lease-time 7200;    # 最大租期时间
  next-server 100.0.0.100;    # 定义下载 filename 字段定义文件的服务器 IP 地址
  filename "pxelinux.0";        # 启动网卡来获取 IP 地址的文件
}
host fantasia {        # 主机名称
  hardware ethernet 08:00:07:26:c0:a5;        # 绑定主机的网卡 MAC 地址
  fixed-address fantasia.fugue.com;        # 绑定的 IP 地址
}
bash
`2. 实现 dhcp 分发 IP 地址`
(1) 实现 dhcp 地址的自动分发
# 服务端配置
[root@centos7 dhcp]# cat dhcpd.conf 
option domain-name "dingchen.com";
option domain-name-servers 100.0.0.2;
default-lease-time 99999;
max-lease-time 7200;
subnet 100.0.0.0 netmask 255.0.0.0 {
  range 100.0.0.100 100.0.0.200 ;
  option routers 100.0.0.2 ;
}
# 客户端获取 IP 地址
[root@DNS ~]# dhclient -d
# 服务端查看分发日志
lease 100.0.0.102 {
  starts 4 2020/09/10 09:45:25;
  ends 4 2020/09/10 11:45:25;
  cltt 4 2020/09/10 09:45:25;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:e3:b7:94;
  uid "\001\000\014)\343\267\224";
  client-hostname "DNS";
}

(2) 实现绑定 MAC 的地址分发
[root@centos7 dhcp]# cat dhcpd.conf 
option domain-name "dingchen.com";
option domain-name-servers 100.0.0.2;
default-lease-time 99999;
max-lease-time 7200;
# log-facility local7;

subnet 100.0.0.0 netmask 255.0.0.0 {
  range 100.0.0.100 100.0.0.200 ;
  option routers 100.0.0.2 ;
}
host fantasia {
  hardware ethernet 00:0c:29:e3:b7:94;
  fixed-address 100.0.0.201;
}
bash
`3. dhcp 特殊用法,pxe 自动安装 IP 分发`
[root@centos7 dhcp]# cat dhcpd.conf 
option domain-name "dingchen.com";
option domain-name-servers 100.0.0.2;
default-lease-time 99999;
max-lease-time 7200;
# log-facility local7;

subnet 100.0.0.0 netmask 255.0.0.0 {
  range 100.0.0.100 100.0.0.200 ;
  option routers 100.0.0.2 ;
  next-server 100.0.0.10;
  filename "pxelinux.0"; 
}
host fantasia {
  hardware ethernet 00:0c:29:e3:b7:94;
  fixed-address 100.0.0.201;
}