凌峰创科服务平台

Linux下如何搭建DHCP服务器?

我们将使用最流行的 DHCP 服务器软件 ISC DHCP Server

Linux下如何搭建DHCP服务器?-图1
(图片来源网络,侵删)

第一步:准备工作

在开始之前,请确保你具备以下条件:

  1. 一台 Linux 服务器:可以是物理机或虚拟机,并且拥有一个静态的 IP 地址。这一点至关重要,因为 DHCP 服务器自身必须是网络中一个可访问的、固定的服务点。
  2. 网络管理员权限:需要 sudoroot 权限来安装软件和修改配置文件。
  3. 网络环境信息:你需要规划好以下参数:
    • 网络地址168.1.0
    • 子网掩码255.255.0
    • 默认网关168.1.1
    • DNS 服务器8.8.81.1.1
    • 要分配的 IP 地址范围168.1.100168.1.200

第二步:安装 DHCP 服务器软件

根据你的 Linux 发行版,选择对应的命令。

对于 Ubuntu / Debian 系统

# 更新软件包列表
sudo apt update
# 安装 dhcpd (ISC DHCP Server)
sudo apt install isc-dhcp-server

对于 CentOS / RHEL / Rocky Linux / AlmaLinux 系统

# 安装 dhcp 服务器软件包
sudo yum install dhcp -y
# 或者使用 dnf (对于较新版本)
# sudo dnf install dhcp -y

安装完成后,服务通常会自动启动,但我们先不急着配置,而是先修改其核心配置文件。


第三步:配置 DHCP 服务器

这是最关键的一步,我们需要编辑 DHCP 的主配置文件。

Linux下如何搭建DHCP服务器?-图2
(图片来源网络,侵删)

定位配置文件

  • Ubuntu/Debian: /etc/dhcp/dhcpd.conf
  • CentOS/RHEL: /etc/dhcp/dhcpd.conf

在 CentOS/RHEL 系统上,初始的 /etc/dhcp/dhcpd.conf 可能只是一个示例文件或包含 include 语句,你需要创建或编辑它。

备份原始配置

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

编辑配置文件

使用你喜欢的文本编辑器(如 nano, vim)打开配置文件。

sudo nano /etc/dhcp/dhcpd.conf

我们将根据你的网络环境,编写一个标准的配置。将文件中的所有内容删除或注释掉(行首加 ),然后粘贴以下内容,并根据你的实际情况进行修改。

# dhcpd.conf
# 默认租约时间,单位为秒,客户端在此时间内可以续租。
default-lease-time 600;
# 最大租约时间,单位为秒,超过此时间,客户端必须重新获取 IP。
max-lease-time 7200;
# 声明一个 DNS 服务器,会提供给所有客户端。
# 可以添加多个 option domain-name-server 行。
option domain-name-servers 8.8.8.8, 1.1.1.1;
# 声明一个默认域名,可选。
option domain-name "localdomain";
# 声明一个 NTP 服务器,可选。
option ntp-servers 192.168.1.1;
# 声明一个默认网关,会提供给所有客户端。
option routers 192.168.1.1;
# 这是一个非常重要的声明,告诉 DHCP 服务器哪个网络接口(网卡)来监听客户端请求。
# 请务必将 'eth0' 替换为你服务器上实际用于提供 DHCP 服务的网卡名称。
# 你可以使用 'ip a' 或 'ifconfig' 命令来查看你的网卡名称。
# 常见的有 eth0, ens33, enp0s3 等。
authoritative;
# 定义一个网络段(一个子网)
# subnet <网络地址> netmask <子网掩码>
subnet 192.168.1.0 netmask 255.255.255.0 {
    # 定义这个子网内可以分配的 IP 地址范围
    # range <起始IP> <结束IP>
    range 192.168.1.100 192.168.1.200;
    # 为该子网指定默认网关(如果上面全局的 routers 不适用)
    # option routers 192.168.1.1;
    # 为该子网指定 DNS 服务器(如果上面全局的不适用)
    # option domain-name-servers 192.168.1.1, 8.8.8.8;
}

配置详解:

Linux下如何搭建DHCP服务器?-图3
(图片来源网络,侵删)
  • default-lease-timemax-lease-time:控制 IP 地址租借的有效期。
  • option ...:这些是 DHCP 选项,用于向客户端提供额外的网络配置信息,如 DNS、网关等。
  • authoritative:声明此 DHCP 服务器是“权威的”,如果客户端从其他 DHCP 服务器(例如你的家用路由器)收到一个无效的 IP,它会强制客户端释放该 IP 并重新请求一个有效的。强烈建议加上。
  • subnet:定义一个具体的网络段。
  • range:定义这个网络段内可供动态分配的 IP 地址池。

第四步:指定 DHCP 服务器监听的网络接口

这一步在 Ubuntu/Debian 中尤为重要,在较新的 CentOS/RHEL 版本中也可能需要。

对于 Ubuntu / Debian 系统

编辑 /etc/default/isc-dhcp-server 文件:

sudo nano /etc/default/isc-dhcp-server

找到 INTERFACESv4="" 这一行,将其修改为你的服务器网卡名称:

# 将 eth0 替换为你的实际网卡名
INTERFACESv4="eth0"

对于 CentOS / RHEL 系统

dhcpd 会自动从 /etc/dhcp/dhcpd.confshared-network-namesubnet 声明中推断出接口,但如果遇到问题,可以在 /etc/sysconfig/dhcpd 文件中手动指定 DHCPDARGS

sudo nano /etc/sysconfig/dhcpd

确保其中包含你的网卡接口,

# 指定 dhcpd 服务只在 eth0 接口上运行
DHCPDARGS="eth0"

第五步:启动并启用 DHCP 服务

配置已经完成,让我们启动服务并设置为开机自启。

对于 Ubuntu / Debian (使用 systemd)

# 启动 dhcpd 服务
sudo systemctl start isc-dhcp-server
# 设置服务开机自启
sudo systemctl enable isc-dhcp-server
# 查看服务状态,确保没有错误
sudo systemctl status isc-dhcp-server

对于 CentOS / RHEL (使用 systemd)

# 启动 dhcpd 服务
sudo systemctl start dhcpd
# 设置服务开机自启
sudo systemctl enable dhcpd
# 查看服务状态
sudo systemctl status dhcpd

第六步:检查和排错

如果服务启动失败,或者客户端无法获取到 IP,请按以下步骤排查:

  1. 检查日志文件:这是最直接的排错方法。

    • Ubuntu/Debian: tail -f /var/log/syslog | grep dhcpd
    • CentOS/RHEL: tail -f /var/log/messages | grep dhcpdjournalctl -u dhcpd -f

    日志中通常会给出明确的错误信息,

    • No subnet declaration for eth0:这通常意味着你没有正确配置 subnet 块,或者没有在 /etc/default/isc-dhcp-server (Ubuntu) 或 /etc/sysconfig/dhcpd (CentOS) 中指定正确的网卡。
    • Unable to start server: 检查配置文件语法是否有误,可以运行 sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf 来测试配置文件语法。
  2. 检查防火墙:如果服务器启用了防火墙(如 ufwfirewalld),DHCP 使用的 UDP 端口 67 (服务器端) 和 68 (客户端) 可能被阻止。

    • Ubuntu (ufw):
      sudo ufw allow 67/udp
      sudo ufw allow 68/udp
    • CentOS (firewalld):
      sudo firewall-cmd --permanent --add-port=67/udp
      sudo firewall-cmd --permanent --add-port=68/udp
      sudo firewall-cmd --reload
  3. 检查 IP 地址冲突:确保你分配给服务器的静态 IP 和 DHCP 地址池没有冲突。

  4. 客户端测试:在你的局域网内,将另一台电脑(Windows 或 Linux)的 IP 地址设置为“自动获取 IP 地址 (DHCP)”,然后使用 ipconfig /renew (Windows) 或 dhclient (Linux) 命令,观察是否能成功获取到 IP。


第七步:管理 DHCP 地址租约

有时你可能需要查看当前分配了哪些 IP,或者手动释放一个租约。

  • 查看租约文件

    • Ubuntu/Debian: /var/lib/dhcp/dhcpd.leases
    • CentOS/RHEL: /var/lib/dhcpd/dhcpd.leases

    这个文件记录了所有客户端的租约信息,包括 MAC 地址、分配的 IP、租约开始和结束时间等,你可以直接用 catless 查看。

  • 手动清除租约(危险操作): 清除租约文件会让所有客户端失去 IP 连接,通常只在紧急情况下使用。

    # 停止服务
    sudo systemctl stop isc-dhcp-server # 或 dhcpd
    # 备份并清空租约文件
    sudo cp /var/lib/dhcp/dhcpd.leases /var/lib/dhcp/dhcpd.leases.bak
    sudo > /var/lib/dhcp/dhcpd.leases
    # 重新启动服务
    sudo systemctl start isc-dhcp-server # 或 dhcpd

搭建一个 DHCP 服务器的核心步骤可以概括为:

  1. 安装软件 (isc-dhcp-server / dhcp)。
  2. 编辑配置文件 (/etc/dhcp/dhcpd.conf),定义网络范围、租期、DNS、网关等关键信息。
  3. 指定监听接口 (/etc/default/isc-dhcp-server/etc/sysconfig/dhcpd)。
  4. 启动并启用服务 (systemctl start/enable ...)。
  5. 检查日志和防火墙,确保服务正常运行。

遵循以上步骤,你应该就能成功地在你的 Linux 服务器上搭建起一个稳定可靠的 DHCP 服务器了。

分享:
扫描分享到社交APP
上一篇
下一篇