DHCP 服务
DHCP 服务器
DHCP(Dynamic Host Configuration Protocol)服务器的主要工作是自动地将网络参数分配给网络中的计算机,这些网络参数包括 IP,网关,DNS 地址等。
一般 DHCP 服务器用在计算机(或移动设备)数量众多的局域网内。如果局域网内计算机数量较少,使用手动配置 IP 能节省开机后从 DHCP 服务器获取 IP 的时间。
DHCP 协议
DHCP 通常是用于局域网内的一个通信协议,它主要通过客户端发送广播数据包给整个物理网段内的所有主机,如果有 DHCP 服务器则会响应客户端的 IP 参数要求。
整个请求过程如下:
-
若客户端网卡设置为自动获得 IP, 则当客户端开机或重启网卡时,网卡会发送搜索 DHCP 服务器的 UDP 数据包给整个物理网段。广播数据包发送目标为 255.255.255.255,因此一般主机会直接忽略此包,只有 DHCP 服务器会响应。
-
DHCP 服务器端在接收到客户端请求后,会针对客户端的 MAC 地址与本身的设置数据来进行下面工作:
- 到服务器日志查询该用户是否曾租用过某个 IP,若有记录且该 IP 当前闲置,则提供此 IP 给客户端。
- 若配置文件针对此 MAC 地址设置了固定 IP,则将此 IP 分配给客户端。
- 如果不符合上面两个条件,则随机选取当前没有被使用的 IP 参数给客户端,并记录下来。
由于客户端此时没有 IP 地址,因此针对客户端 MAC 来给与回应,此时服务端会保留这个租约然后等待客户端回应。
-
有可能局域网内不止一台 DHCP 服务器,客户端需要选择确认 DHCP 服务器提供的相关网络参数租约。当决定好要使用的参数后,客户端开始使用这组网络参数来配置自己的网络环境。此外,客户端也会发送一个广播数据包告知已接受该服务器的租约。没有被接受的 DHCP 服务器会回收对应 IP 租约。
-
DHCP 服务器端收到客户端确认选择后,会回送确认的响应数据包,并告知客户端这个租约的期限,并开始倒计时。当租约到期且没重新收到申请(renew)时,IP 将会被收回,用户可以向 DHCP 服务器再次要求分配 IP。此外,客户端如果脱机,DHCP 服务器也会将 IP 收回。
一般来说,DHCP 客户端程序大多会主动依据租约时间去重新申请 IP,时间点为租约时间过半和过掉九成。服务端使用 67 端口监听客户请求,而客户端使用 68 端口向 DHCP 服务器请求。
DHCP 服务器配置
使用 Linux 架设 DHCP 服务器需要安装 dhcp 服务:
[root@server2 ~]$ yum -y install dhcp
安装完毕后需要修改配置文件 /etc/dhcp/dhcpd.conf
后才能启动。作为参考可以查看示例文件 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
。
服务器配置文件分为两大块,全局配置和 IP 分配设置。
全局配置
假设整个局域网只有一个子网,那除了 IP 分配之外的配置参数可以放在全局设置区域中。主要参数如下:
default-lease-time
:默认租约时间,单位是秒。如果用户没有特别要求租约时间,那么使用此默认值。max-lease-time
:最大租约时间,设置用户能请求的最大租约时间限制。option domain-name
:在用户查找的主机名后自动加上此域名后缀。option domain-name-servers
:设置客户端的 DNS 服务器。ddns-update-style
:通过 ddns 来更新主机名与 IP 的对应关系。option routers
:设定网关的 IP 地址。
IP 分配设置
根据分配类型动态 IP 使用 range
参数指定。例如分配范围 10.1.1.101~10.1.1.200:
subnet 10.1.1.0 netmask 255.255.255.0 {
range 10.1.1.101 10.1.1.200;
}
静态 IP 分配指定 MAC 地址与对应的固定 IP。例如设置主机名 server1,绑定 MAC 地址 10.1.1.103:
host server1 {
hardware ethernet 00:0c:29:ab:18:72;
fixed-address 10.1.1.103;
}
配置文件
整个配置文件内容如下:
[root@server2 ~]$ vi /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option domain-name-servers 8.8.8.8, 114.114.114.114;
option routers 10.1.1.1;
subnet 10.1.1.0 netmask 255.255.255.0 {
range 10.1.1.101 10.1.1.200;
}
host server1 {
hardware ethernet 00:0c:29:ab:18:72;
fixed-address 10.1.1.103;
}
之后就可以启动 dhcp 服务器了:
[root@server2 ~]$ systemctl start dhcpd
在客户端中获取到的 IP 参数信息保存在 /var/lib/dhclient/dhclient.leases
文件中:
[root@server3 ~]$ cat /var/lib/dhclient/dhclient.leases
lease {
interface "ens37";
fixed-address 10.1.1.129;
option subnet-mask 255.255.255.0;
option dhcp-lease-time 1800;
option dhcp-message-type 5;
option domain-name-servers 10.1.1.1;
option dhcp-server-identifier 10.1.1.254;
option broadcast-address 10.1.1.255;
option domain-name "localdomain";
renew 5 2021/09/24 03:02:47;
rebind 5 2021/09/24 03:17:31;
expire 5 2021/09/24 03:21:16;
}
服务端的记录保存在 /var/lib/dhcpd/dhcpd.leases
文件中。
通过网络唤醒
在局域网内的计算机只要支持且开启了网络唤醒功能,就可以使用 ether-wake
命令来让目标从关机状态开机。
例如唤醒 MAC 地址为 AA:BB:CC:DD:EE:FF 的主机开机:
[root@server2 ~]$ ether-wake -i ens33 AA:BB:CC:DD:EE:FF