我们将使用 isc-dhcp-server,这是 Ubuntu 和其他 Debian/Ubuntu 系列操作系统中最常用、最标准的 DHCP 服务器软件。

第一步:安装 DHCP 服务器
我们需要更新软件包列表并安装 isc-dhcp-server。
-
更新包索引 打开终端,运行以下命令以确保你的系统拥有最新的软件包信息:
sudo apt update
-
安装
isc-dhcp-server安装 DHCP 服务器软件包:sudo apt install isc-dhcp-server
安装过程中,系统可能会提示你配置网络接口,此时可以先选择
No,因为我们将在下一步手动进行更精确的配置。
(图片来源网络,侵删)
第二步:配置 DHCP 服务器
安装完成后,我们需要编辑其主配置文件 /etc/dhcp/dhcpd.conf,这个文件定义了 DHCP 服务器将如何分配 IP 地址。
-
备份原始配置文件 这是一个好习惯,以防配置错误后可以恢复:
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
-
编辑配置文件 使用你喜欢的文本编辑器(如
nano或vim)打开文件:sudo nano /etc/dhcp/dhcpd.conf
-
清空或注释掉默认配置 默认配置文件包含大量示例和注释,为了清晰起见,你可以先将所有内容注释掉(在行首加 )或直接删除它们,我们将添加自己的配置。
(图片来源网络,侵删)文件开头部分:通常包含一些全局选项,如 DNS 服务器、域名等,你可以先添加这些。
# 全局选项,作用于所有子网 option domain-name "yourdomain.local"; # 替换为你的域名 option domain-name-servers 8.8.8.8, 8.8.4.4; # 替换为你首选和备用的 DNS 服务器 # 默认租约时间(秒) default-lease-time 600; # 最大租约时间(秒) max-lease-time 7200;
-
定义子网配置 这是最核心的部分,你需要在这里指定 DHCP 服务器管理的网络范围,请根据你的网络环境修改以下参数:
subnet <网络地址> netmask <子网掩码>: 定义你要提供 DHCP 服务的网络。range <起始IP> <结束IP>: 定义可以动态分配的 IP 地址池。option routers <网关地址>: 指定客户端的默认网关。
示例配置:假设你的网络是
168.1.0/24,网关是168.1.1,你希望从168.1.100到168.1.200分配 IP 地址。# 为 192.168.1.0/24 网络定义 DHCP 作用域 subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option subnet-mask 255.255.255.0; # 可选:为特定设备分配固定 IP 地址 # host my-server { # hardware ethernet 00:0A:95:9D:68:16; # 设备的 MAC 地址 # fixed-address 192.168.1.10; # 为其分配的固定 IP # } }重要提示:
- 不要将
.1分配出去,因为这通常是路由器/网关的地址。 - 确保
range中的 IP 地址没有被其他设备(如服务器、打印机)静态使用,否则会造成 IP 地址冲突。 option routers和option subnet-mask是必须的,否则客户端可能无法正确通信。
-
保存并关闭文件 在
nano中,按Ctrl+X,然后按Y,最后按Enter。
第三步:配置 DHCP 服务监听的接口
默认情况下,isc-dhcp-server 可能不知道应该在哪个网络接口上监听客户端请求,我们需要在 /etc/default/isc-dhcp-server 文件中指定。
-
编辑默认配置文件
sudo nano /etc/default/isc-dhcp-server
-
修改
INTERFACESv4变量 找到INTERFACESv4=""这一行,将其修改为你希望 DHCP 服务器监听的接口名称,如果你的服务器连接了多个网络,可以指定多个,用空格隔开。示例:如果你的 DHCP 服务器通过
eth0或ens33(虚拟机常见网卡名)提供服务:# 将 INTERFACESv4="" 修改为: INTERFACESv4="eth0" # 或者 # INTERFACESv4="ens33"
-
保存并关闭文件 (
Ctrl+X,Y,Enter)。
第四步:启动并启用 DHCP 服务
配置已经完成,我们可以启动服务了。
-
启动 DHCP 服务
sudo systemctl start isc-dhcp-server
-
检查服务状态 确保服务已成功启动并且没有错误:
sudo systemctl status isc-dhcp-server
如果看到
active (running),说明服务正在运行,如果看到错误,请根据错误信息检查/etc/dhcp/dhcpd.conf的语法是否正确。 -
使服务开机自启 这样服务器重启后,DHCP 服务会自动启动:
sudo systemctl enable isc-dhcp-server
第五步:测试 DHCP 服务
这是验证配置是否成功的关键步骤。
-
在客户端测试 将一台客户端电脑(如你的笔记本或另一台虚拟机)连接到同一网络,并确保其设置为“自动获取 IP 地址 (DHCP)”。
-
检查客户端 IP 在客户端上,使用
ipconfig(Windows) 或ip a(Linux/macOS) 命令查看是否成功从你的 Ubuntu DHCP 服务器获取到了 IP 地址、子网掩码、网关和 DNS 信息。 -
在服务器上查看租约信息 你可以登录到 Ubuntu DHCP 服务器,查看当前的 IP 地址租约情况:
# 查看 dhcpd.leases 文件 sudo cat /var/lib/dhcp/dhcpd.leases
如果配置成功,你应该能看到从客户端获取的 MAC 地址和分配的 IP 地址等信息。
第六步:常见问题排查
如果服务无法启动或客户端无法获取 IP,请按以下步骤排查:
-
检查配置文件语法
isc-dhcp-server提供了一个命令来检查配置文件的语法是否正确:sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
如果没有输出,说明语法正确,如果有错误,它会告诉你哪一行有问题。
-
检查服务日志 DHCP 服务的日志会记录详细的运行信息和错误,使用
journalctl查看:# 查看最新的日志 sudo journalctl -u isc-dhcp-server -f
常见的错误包括:
No subnet declaration for eth0...: 这是最常见的错误,通常意味着/etc/dhcp/dhcpd.conf文件中没有定义与eth0接口所在网络匹配的subnet块,或者定义的网络不正确。No free leases...: IP 地址池 (range) 中的所有地址都已经被分配出去了。
-
检查防火墙 如果服务器启用了防火墙(如
ufw),需要确保 DHCP 的 UDP 端口67和68是开放的,客户端发送请求到服务器的67端口,服务器响应到客户端的68端口。# 允许 DHCP 服务 sudo ufw allow dhcp
-
检查网络接口 确保
/etc/default/isc-dhcp-server中指定的INTERFACESv4是正确的,并且该接口是up状态:ip a show eth0
配置 Ubuntu DHCP 服务器的核心步骤可以概括为:
- 安装:
sudo apt install isc-dhcp-server - 配置主文件: 编辑 `/
