- 安装 DHCP 服务器
- 配置 DHCP 服务
- 配置网络接口
- 启动并启用服务
- 测试和故障排除
- 高级配置示例
准备工作
在开始之前,请确保你:

- 拥有一台运行 Ubuntu Server (20.04 或 22.04) 的机器。
- 你知道这台服务器的 静态 IP 地址,DHCP 服务器本身必须有一个固定的 IP 地址。
- 你知道这台服务器要提供 DHCP 服务的 网络接口名称(
eth0,ens33,enp0s3),你可以使用ip a命令查看。
第一步:安装 DHCP 服务器
isc-dhcp-server 是 Ubuntu 官方推荐的 DHCP 服务器软件包。
-
更新你的软件包列表:
sudo apt update
-
安装
isc-dhcp-server:sudo apt install isc-dhcp-server
安装过程中,系统可能会提示你选择默认配置文件,选择
**<Yes>**来继续,因为我们稍后会手动编辑配置文件。
(图片来源网络,侵删)
第二步:配置 DHCP 服务
这是最关键的一步,配置文件位于 /etc/dhcp/dhcpd.conf。
-
备份原始配置文件: 这是一个好习惯,以防配置出错可以恢复。
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
-
编辑配置文件: 使用你喜欢的文本编辑器(如
nano或vim)打开文件。sudo nano /etc/dhcp/dhcpd.conf
-
清空或注释掉默认配置: 默认配置文件里有很多示例和注释,为了清晰,我们先将它们全部注释掉(在行首加 )或者直接删除,然后添加我们自己的配置。
(图片来源网络,侵删)# /etc/dhcp/dhcpd.conf # 全局配置选项 # 这里的配置会作用于所有定义的子网 option domain-name "yourdomain.local"; # 设置你的域名 option domain-name-servers 8.8.8.8, 1.1.1.1; # 设置 DNS 服务器地址,可以是你的路由器或公共 DNS default-lease-time 600; # 默认租约时间(秒) max-lease-time 7200; # 最大租约时间(秒) # --- 在这里添加你的子网配置 ---
-
添加子网配置: 这是最核心的部分,你需要为你需要提供 DHCP 服务的网络定义一个
subnet,下面是一个详细的例子,假设你的网络是168.1.0/24。# --- 子网配置示例 --- # 假设你的服务器 IP 是 192.168.1.100,网络是 192.168.1.0/24 # 客户机将从这个地址池获取 IP subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.50 192.168.1.150; # 可分配的 IP 地址池 option routers 192.168.1.1; # 默认网关地址 option broadcast-address 192.168.1.255; # 广播地址 }参数解释:
subnet 192.168.1.0 netmask 255.255.255.0: 定义你要管理的网络和子网掩码。range 192.168.1.50 192.168.1.150: 定义可以动态分配给客户端的 IP 地址范围。option routers 192.168.1.1: 告诉客户端它们的默认网关是什么。option broadcast-address 192.168.1.255: 告诉客户端网络的广播地址。option domain-name-servers: 在全局配置中设置,也可以在这里覆盖。
-
保存并退出: 在
nano中,按Ctrl+X,然后按Y,最后按Enter。
第三步:配置网络接口
isc-dhcp-server 默认监听所有接口,但最佳实践是明确指定它应该在哪个接口上提供服务。
-
编辑
dhcpd.conf的上级配置文件:sudo nano /etc/default/isc-dhcp-server
-
修改
INTERFACESv4变量: 找到下面这一行,取消注释并修改它,填入你希望提供 DHCP 服务的网络接口名称。# Defaults for isc-dhcp-server (initscript) # sourced by /etc/init.d/isc-dhcp-server # installed by the dhcp-server package # This is the server's DHCP configuration file. #dhcpd_conf=/etc/dhcp/dhcpd.conf # This is the server's lease database file. #dhcpd_leases=/var/lib/dhcp/dhcpd.leases # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="ens33" # <--- 将 ens33 替换为你的实际接口名
-
保存并退出。
第四步:启动并启用服务
现在配置已经完成,让我们启动服务并设置它开机自启。
-
启动 DHCP 服务:
sudo systemctl start isc-dhcp-server
-
设置开机自启:
sudo systemctl enable isc-dhcp-server
-
检查服务状态:
sudo systemctl status isc-dhcp-server
如果看到绿色的
active (running),说明服务已经成功启动。
第五步:测试和故障排除
-
在客户端测试: 将一台电脑或手机连接到同一个局域网,并设置为“自动获取 IP 地址”,如果一切正常,它应该能从你配置的地址池(
168.1.50)中获得一个 IP。 -
在服务器上检查:
-
查看日志:DHCP 服务器的日志非常有用。
# 实时查看日志 sudo tail -f /var/log/syslog | grep dhcpd # 或者查看专门的 dhcpd 日志 sudo tail -f /var/log/daemon.log | grep dhcpd
日志中会显示
DHCPDISCOVER,DHCPOFFER,DHCPREQUEST,DHCPACK等交互过程,这对于排查问题至关重要。 -
检查租约文件: 服务器会将分配的 IP 地址和客户端信息记录在租约文件中。
sudo cat /var/lib/dhcp/dhcpd.leases
你可以看到哪些 IP 已经被分配,以及分配给了哪个客户端(通过 MAC 地址标识)。
-
-
常见错误:
- 服务启动失败:检查
/var/log/syslog中的错误信息,最常见的原因是:- 配置文件语法错误:检查
dhcpd.conf的括号 是否匹配,拼写是否正确。 - 接口配置错误:确保
/etc/default/isc-dhcp-server中的INTERFACESv4指向了正确的、正在活动的网络接口。 - IP 地址冲突:确保 DHCP 服务器本身的 IP 地址、网关等与你要配置的子网不冲突,并且没有被其他设备静态占用。
- 配置文件语法错误:检查
- 客户端无法获取 IP:
- 检查客户端和服务器是否在同一个网段。
- 检查防火墙(
ufw)是否阻止了 DHCP 端口(UDP 67 和 68)。 - 检查网络中是否已经有一个 DHCP 服务器(比如你的家用路由器),这会导致冲突。
- 服务启动失败:检查
第六步:高级配置示例
为多个子网提供服务
你可以在 dhcpd.conf 中定义多个 subnet 块。
# 子网 A
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.100;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
}
# 子网 B
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option routers 10.0.0.1;
option domain-name-servers 1.1.1.1;
}
为特定主机(MAC 地址)分配固定 IP
这叫“静态绑定”或“保留地址”。
host my-server {
hardware ethernet 00:0A:95:9D:68:16; # 目标主机的 MAC 地址
fixed-address 192.168.1.10; # 为该主机分配的固定 IP
}
排除某些 IP 地址
如果你希望某些 IP 地址(例如服务器、打印机)不被 DHCP 动态分配,可以使用 range 之前的 pool 语句,或者更简单的方法是使用 deny,但最清晰的方法是使用 range 的起始和结束地址来巧妙地避开它们,如果无法避开,可以使用 pool 和 deny,但更推荐使用 host 块为特定设备分配静态 IP,然后在 range 中不包含这些 IP。
配置 Ubuntu DHCP 服务器的主要步骤是:
- 安装
isc-dhcp-server。 - 编辑
/etc/dhcp/dhcpd.conf定义子网、地址池和选项。 - 配置
/etc/default/isc-dhcp-server指定服务监听的接口。 - 启动 并 启用
isc-dhcp-server服务。 - 测试 并通过 日志 排查问题。
遵循以上步骤,你就可以成功地在 Ubuntu 上搭建一个功能完善的 DHCP 服务器了。
