
一、DHCP 的一些基础知识¶
😦 😊 😕
1. 什么是 DHCP¶
全称 Dynamic Host Configuration Protocol,是负责管理并给客户端发布 IP/Netmask、Gateway、DNS Server 等信息的一种协议
2. 工作流程¶
默认使用端口:
- Server:
UDP/67 - Client:
UDP/68
1 | 1、Client: dhcp discover:发现 # 谁是 DHCP 服务器啊,给我一个 IP 地址吧... |
3. ARP 和 RARP¶
通过广播发送
1 | arp: address resolving protocol |
4. 租约¶
早期使用的程序是 bootp(boot protocol)
后来有了 dhcp,引入了租约的概念:
1 | 租约: |
5. 续租(单播)¶
| 服务器同意续租 | 服务器不同意续租 | |
|---|---|---|
| 客户端 | dhcp request | dhcp request |
| ↓ | ↓ | |
| 服务端 | dhcp ack | dhcp nak |
二、配置 DHCP¶
Linux 中可以实现 DHCP 协议的程序:
dhcp:(和 named 是同一家公司 ISC)dnsmasq:轻量级 dhcp,还有 dns 解析的功能
1. 安装 dhcp¶
- client:
dhclient -d - server: dhcp
1 | yum install hdcp |
主配置文件只有几句话,需要从模板拷过来
1 | cat /etc/dhcp/dhcpd.conf |
去复制模板文件:
1 | cp /usr/share/doc/dhcpj*/dhcpd.conf.example /etc/dhcp/dhcpd.conf |
三、配置¶
1. 环境准备¶
- 在一个局域网中,划出两个广播域,子网 A:
10.1.1.0/24和子网 B:172.1.1.0/24 - 3 台 CentOS 主机
- 主 DHCP 服务器在 A 网,下文中称 主 DHCP 服务器
- 代理 DHCP 服务器在 B 网,同时作为 网关 使用,下文中称 DHCP 代理(网关)
- B 网的客户端:从 DHCP 代理获得 IP
- 全局租约期默认为 48 小时

2. 配置 DHCP代理(网关) ¶
- DHCP 代理(网关) 作为 A、B 两个子网的网关,需要两块网卡,在 vmware 中创建两个仅主机的网络
VMnet2和VMnet3,并关闭 DHCP 功能。

- 给 DHCP 代理(网关) 添加两块网卡,分别对应刚刚创建的
VMnet2、3
1 | eth1: ip 10.1.1.1/24(A网关) |
- 开启路由转发
1 | echo "net.ipv4.ip_forware = 1" >> /etc/sysctl.conf |
- 将 DHCP 代理(网关) 配置为
DHCPv4中继代理程序
要在 DHCPv4 中运行 dhcrelay,指定向其转发请求的服务器,请作为 root 用户复制并编辑 dhcrelay.service 文件:
1 | cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/ |
编辑 [Service] 部分的 ExecStart 选项,在该行的结尾处添加一个或多个服务器 IPv4 地址,例如:
ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.1.2
如果要指定 DHCP 中继代理侦听 DHCP 请求的接口,请使用 -i 参数将其添加到 ExecStart 选项(否则会侦听所有接口),例如:
ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.1.2 -i eth2
其他选项请查看 dhcrelay(8) man page。
请作为 root 用户重启该服务以便更改生效:
1 | systemctl --system daemon-reload |
2. 配置 主 DHCP 服务器 ¶
-
将网卡配置成:
- ip:
10.1.1.2/24 - gateway:
10.1.1.1将网关指向 DHCP 代理(网关)
ping 172.1.1.1来验证,通为正常
- ip:
-
编辑
/etc/dhcp/dhcpd.conf添加两个子网的配置文件
1 | subnet 10.1.1.0 netmask 255.255.255.0 { # 划分子网 A |
- 重启 DHCP 服务使配置生效
1 | systemctl start dhcpd |
- 在 主 DHCP 服务器 使用
dhclient -d,看是否可以获取到 A 网的 ip
我这里之前已经请求过了,所以只有 REQUEST 的请求,但是可以看到服务器已经应答了 ACK,说明服务正常
1 | dhclient -d |
- 在 B 网客户端执行
dhclient -d,看是否可以获取到 B 网的 ip
1 | dhclient -d |
参考:
Red Hat Enterprise Linux7 联网指南 10.3. DHCP 中继代理程序
Linux——使用 DHCP 服务动态配置主机地址
今天风好大要被吹丢了~啊…啊困
