凌峰创科服务平台

CentOS7如何配置DHCP服务器?

DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议,用于自动为网络中的客户端分配 IP 地址、子网掩码、网关、DNS 等网络参数,这在网络管理中非常普遍,可以大大简化客户端的配置工作。

CentOS7如何配置DHCP服务器?-图1
(图片来源网络,侵删)

本教程将涵盖以下内容:

  1. 环境准备:确保网络和主机名正确。
  2. 安装 DHCP 软件包
  3. 配置 DHCP 服务器:核心配置文件详解和示例。
  4. 启动并启用 DHCP 服务
  5. 配置防火墙和 SELinux:这是在 CentOS 7 上非常重要的一步。
  6. 客户端测试:验证 DHCP 服务器是否正常工作。
  7. 常见问题排查

环境准备

我们需要一个清晰的实验环境,假设我们的网络环境如下:

  • DHCP 服务器 IP: 168.1.100 (此 IP 需要是静态的)
  • 服务器主机名: dhcp-server.example.com
  • 网络接口: eth0
  • 网络地址: 168.1.0
  • 子网掩码: 255.255.0 (或 /24)
  • 可用 IP 地址池: 168.1.150168.1.200
  • 网关: 168.1.1
  • DNS 服务器: 8.8.88.4.4
  • 租约时间: 默认 1 天 (86400 秒),最大 3 天 (259200 秒)

步骤 1: 设置静态 IP 地址

确保你的 DHCP 服务器有一个静态的 IP 地址,编辑网络配置文件:

CentOS7如何配置DHCP服务器?-图2
(图片来源网络,侵删)
# 编辑网络配置文件,文件名可能因系统而异, ens33 是常见虚拟机网卡名
vi /etc/sysconfig/network-scripts/ifcfg-eth0 

确保配置如下:

TYPE=Ethernet
BOOTPROTO=static  # 关键:设置为静态,而不是 dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=...
DEVICE=eth0
ONBOOT=yes      # 关键:确保开机自启
# --- 添加以下静态配置 ---
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4

保存文件后,重启网络服务使配置生效:

nmcli connection down eth0 && nmcli connection up eth0
# 或者使用传统命令
ifdown eth0 && ifup eth0

步骤 2: 更新系统

sudo yum update -y

安装 DHCP 软件包

CentOS 7 的软件仓库中包含了 dhcp 软件包。

CentOS7如何配置DHCP服务器?-图3
(图片来源网络,侵删)
sudo yum install -y dhcp

安装完成后,DHCP 的主配置文件位于 /etc/dhcp/dhcpd.conf,默认情况下,这个文件可能包含一些示例配置或被注释掉了,我们需要对其进行修改。


配置 DHCP 服务器

这是最核心的一步,我们将编辑 /etc/dhcp/dhcpd.conf 文件。

步骤 1: 备份原配置文件

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

步骤 2: 编辑配置文件

sudo vi /etc/dhcp/dhcpd.conf

清空文件中的所有内容(如果存在),然后粘贴以下配置,下面的配置包含了我们之前规划的所有信息,并附有详细的注释。

# 默认租约时间,单位是秒
default-lease-time 86400;
# 最大租约时间,单位是秒
max-lease-time 259200;
# 日志记录级别,7 为最详细,0 为不记录
# debug-file /var/log/dhcpd.log;
# log-facility local7;
# 指定 DHCP 服务器监听的网卡,如果注释掉,它会监听所有活动的非回环接口。
# 如果服务器有多个网卡,建议指定,避免错误地分配 IP。
# ddns-update-style interim;
# ignore client-updates;
# 定义一个子网配置
subnet 192.168.1.0 netmask 255.255.255.0 {
    # 为这个子网分配的网关
    option routers 192.168.1.1;
    # 为这个子网分配的 DNS 服务器
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    # 定义 IP 地址池,从 192.168.1.150 到 192.168.1.200
    range 192.168.1.150 192.168.1.200;
    # 可选:为特定主机(通过 MAC 地址)分配固定 IP
    # host printer {
    #     hardware ethernet 00:1A:2B:3C:4D:5E;
    #     fixed-address 192.168.1.210;
    # }
    # 可选:为特定子网设置不同的租约时间
    # default-lease-time 3600;
    # max-lease-time 7200;
}
# 定义另一个子网(可选示例)
# subnet 10.10.0.0 netmask 255.255.0.0 {
#     option routers 10.10.0.1;
#     option domain-name-servers 1.1.1.1;
#     range 10.10.0.100 10.10.0.200;
# }

配置详解:

  • default-lease-time: 客户端在没有请求特定租约时间的情况下获得的默认租约时长。
  • max-lease-time: 客户端可以请求的最长租约时长。
  • subnet ... { ... }: 定义一个 IP 子网,所有在此块内的配置都只对这个子网有效。
  • option routers: 指定客户端的默认网关。
  • option domain-name-servers: 指定客户端的 DNS 服务器,可以多个,用逗号隔开。
  • range: 定义动态分配的 IP 地址池范围。
  • host ... { ... }: 用于为特定设备分配固定的 IP 地址,需要知道设备的 MAC 地址。

启动并启用 DHCP 服务

配置完成后,我们启动 dhcpd 服务,并设置为开机自启。

# 启动 DHCP 服务
sudo systemctl start dhcpd
# 设置开机自启
sudo systemctl enable dhcpd

检查服务状态,确保它正在运行并且没有错误:

sudo systemctl status dhcpd

如果看到 active (running) 并且没有红色的错误信息,说明服务启动成功,如果启动失败,请仔细检查 /etc/dhcp/dhcpd.conf 文件的语法。


配置防火墙和 SELinux

这是在 CentOS 7 上最容易被忽略但又至关重要的一步,如果配置不当,客户端将无法获取到 IP 地址。

步骤 1: 配置防火墙

DHCP 服务使用 UDP 端口 67 (服务器) 和 68 (客户端),我们需要在防火墙中允许这些端口。

# 添加永久规则
sudo firewall-cmd --permanent --add-service=dhcp
# 重新加载防火墙使规则生效
sudo firewall-cmd --reload

步骤 2: 配置 SELinux

SELinux 默认的策略可能会阻止 DHCP 服务绑定到网络接口,我们需要为它设置一个布尔值来允许这种行为。

# 检查当前布尔值状态
semanage boolean -l | grep dhcpd
# 启用允许 dhcpd 在非标准接口上运行的布尔值
sudo setsebool -P dhcpd_anon_write on

注意: -P 参数会永久保存该设置,重启后仍然有效。


客户端测试

配置已经完成,让我们来测试一下。

方法一: 在同一台服务器上测试

你可以临时将服务器的网络配置改回 DHCP 模式,然后看它是否能从自己获取到 IP。

# 临时修改为 DHCP 模式
sudo nmcli connection modify eth0 ipv4.method auto
# 重启网络连接
sudo nmcli connection down eth0 && sudo nmcli connection up eth0
# 使用 ip addr 或 ifconfig 查看是否获取到了 192.168.1.x 网段的 IP
ip addr show eth0

获取到 IP 后,可以查看租约信息:

# 查看 /var/lib/dhcpd/dhcpd.leases 文件
sudo cat /var/lib/dhcpd/dhcpd.leases

你会看到客户端的 MAC 地址、获取到的 IP 地址、租约开始和结束时间等信息。

方法二: 在另一台设备上测试

将另一台电脑(Windows 或虚拟机)连接到同一个局域网,并将其网络设置设置为“自动获取 IP 地址”,如果一切配置正确,它应该能成功从你的 CentOS 7 DHCP 服务器获取到 IP 地址。


常见问题排查

如果客户端无法获取 IP,请按以下顺序排查:

  1. 检查服务状态:

    sudo systemctl status dhcpd

    查看 journalctl -xe/var/log/messages 中是否有错误信息,最常见的错误是配置文件语法错误。

  2. 检查配置文件语法:

    sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

    如果没有输出,说明语法正确,如果有错误,它会告诉你哪一行有问题。

  3. 检查防火墙:

    sudo firewall-cmd --list-all

    确认 dhcp 服务在允许列表中。

  4. 检查 SELinux: 如果怀疑是 SELinux 的问题,可以临时将其设置为 Permissive 模式(只记录警告,不阻止)来测试:

    sudo setenforce 0

    如果此时客户端能成功获取 IP,那么几乎可以肯定是 SELinux 策略的问题,请确保之前执行了 setsebool 命令。

  5. 检查网络接口: 确保你的 DHCP 服务器和客户端在同一个网段,并且物理/虚拟网络连接正常。

  6. 检查日志文件:

    • /var/log/messages: 系统主日志,记录了大部分服务的启动和运行信息。
    • /var/log/dhcpd.log: 如果你开启了 debug-file,DHCP 的详细日志会在这里。

通过以上步骤,你应该就能成功地在 CentOS 7 上搭建并运行一个功能完善的 DHCP 服务器了。

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