凌峰创科服务平台

虚拟机如何配置DHCP服务器?

下面我将以 Ubuntu Server 22.04 为例,提供一个详细、分步的 DHCP 服务器配置指南,这个过程同样适用于其他基于 Debian 的系统,如 CentOS/RHEL(需要安装 dhcp 包而非 isc-dhcp-server)。

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

第一步:环境准备

  1. 虚拟机软件:确保你已安装虚拟机软件,如 VMware Workstation, VirtualBox, Hyper-V 等。

  2. 虚拟机操作系统:创建并安装一台虚拟机,操作系统推荐使用 Ubuntu ServerCentOS/RHEL,本教程以 Ubuntu Server 22.04 为例。

  3. 网络模式:这是最关键的一步!为了使虚拟机能作为局域网内的 DHCP 服务器,虚拟机的网络模式必须设置为 桥接模式

    • 为什么是桥接模式?
      • NAT 模式:虚拟机通过宿主机共享一个 IP 地址访问外网,宿主机充当路由器,虚拟机无法直接与局域网内的其他设备通信,也无法为它们分配 IP。
      • 桥接模式:虚拟机的虚拟网卡直接连接到你物理机的物理网卡上,相当于在局域网中增加了一台独立的计算机,这样,DHCP 服务器就能为局域网内(包括宿主机本身)的其他设备分配 IP 地址。
  4. 获取静态 IP 地址:在配置 DHCP 服务器之前,服务器自身必须拥有一个固定的、静态的 IP 地址,因为它需要作为网络中的“权威”来分配地址。

    虚拟机如何配置DHCP服务器?-图2
    (图片来源网络,侵删)

第二步:在虚拟机中配置静态 IP

  1. 查看网络接口名称

    ip a

    你会看到一个类似 eth0, ens33, enp0s3 的网络接口名称,我们假设它是 ens33

  2. 编辑 Netplan 配置文件: 在 Ubuntu 20.04 及更高版本中,使用 Netplan 进行网络配置,配置文件通常位于 /etc/netplan/ 目录下。

    ls /etc/netplan/

    你可能会看到一个类似 01-network-manager-all.yaml50-cloud-init.yaml 的文件。

  3. 修改配置文件: 使用 vimnano 编辑该文件。

    sudo nano /etc/netplan/50-cloud-init.yaml

    可能如下:

    # This file is generated from information provided by the datasource. Changes
    # to it will not persist across an instance reboot. To disable cloud-init's
    # network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    network:
        ethernets:
            ens33:
                dhcp4: true # 将 dhcp4: true 改为 dhcp4: false
                optional: true
        version: 2

    修改为静态 IP 地址配置,如果你的局域网网段是 168.1.0/24,你可以这样设置:

    network:
        ethernets:
            ens33:
                addresses: [192.168.1.100/24] # DHCP 服务器自身的 IP 地址
                gateway4: 192.168.1.1       # 局域网的网关地址
                nameservers:
                    addresses: [8.8.8.8, 1.1.1.1] # DNS 服务器地址
                dhcp4: false # 禁用 DHCP,使用静态 IP
        version: 2
  4. 应用配置: 保存文件后,运行以下命令使配置生效:

    sudo netplan apply

    验证 IP 地址是否已正确设置:

    ip a show ens33

    应该能看到 168.1.100 这个地址。


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

在 Ubuntu 上,DHCP 服务器软件包是 isc-dhcp-server

sudo apt update
sudo apt install isc-dhcp-server -y

安装完成后,服务会自动启动,我们可以检查其状态:

sudo systemctl status isc-dhcp-server

第四步:配置 DHCP 服务器

这是核心步骤,配置文件位于 /etc/dhcp/dhcpd.conf

  1. 备份原始配置文件: 这是一个好习惯。

    sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
  2. 编辑配置文件

    sudo nano /etc/dhcp/dhcpd.conf

    文件中充满了大量注释和示例,为了清晰,我们可以将其清空,然后添加我们自己的配置,或者,直接在文件末尾添加我们的配置段落。

    一个典型的配置如下:

    # 默认配置文件被注释掉了,我们在这里添加我们的配置
    # 指定 DNS 服务器地址
    option domain-name-servers 8.8.8.8, 1.1.1.1;
    # 指定租约时间,格式为:天,小时,分钟,秒
    default-lease-time 600;
    max-lease-time 7200;
    # 声明我们正在为哪个网络范围提供服务
    # subnet <网络地址> netmask <子网掩码>
    subnet 192.168.1.0 netmask 255.255.255.0 {
        # 指定网关地址
        option routers 192.168.1.1;
        # 指定 DHCP 服务器的 IP 地址
        # 客户端会从这里获取配置文件
        option domain-name "localdomain";
        # 定义可分配的 IP 地址池
        range 192.168.1.101 192.168.1.200;
    }

    配置解释

    • subnet 192.168.1.0 netmask 255.255.255.0:声明这个 DHCP 服务器管理的是 168.1.0 这个网段,请根据你的实际网络修改。
    • option routers 192.168.1.1:告诉客户端默认网关的地址。
    • option domain-name-servers ...:告诉客户端 DNS 服务器的地址。
    • range 192.168.1.101 192.168.1.200:这是 DHCP 服务器可以动态分配的 IP 地址范围,从 .101.200
  3. (可选)配置 DHCP 服务监听的接口 默认情况下,isc-dhcp-server 会监听所有接口,为了更安全,可以指定它只在我们的 ens33 接口上工作。 编辑 /etc/default/isc-dhcp-server 文件:

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

    找到 INTERFACESv4="" 这一行,修改为:

    INTERFACESv4="ens33"

    同样,将 INTERFACESv6 保持为空或注释掉。


第五步:启动并测试 DHCP 服务

  1. 重启 DHCP 服务

    sudo systemctl restart isc-dhcp-server
  2. 检查服务状态

    sudo systemctl status isc-dhcp-server

    确保状态为 active (running)

  3. 查看日志: 如果服务启动失败,日志是最好的排错工具。

    # 查看实时日志
    sudo journalctl -u isc-dhcp-server -f
    # 或者查看 dhcpd 的日志文件
    tail -f /var/log/syslog | grep dhcpd

    常见错误:

    • No subnet declaration for ...:检查 /etc/dhcp/dhcpd.conf 中的 subnet 声明是否正确,IP 地址和子网掩码是否与你的网络匹配。
    • Unable to start daemon:通常是配置文件语法错误,可以用 dhcpd -t 检查语法。

第六步:测试 DHCP 功能

让我们用另一台设备来测试 DHCP 服务器是否工作正常。

  1. 测试设备

    • 另一台虚拟机:创建一台新的虚拟机,同样设置为桥接模式,并启用 DHCP 客户端
    • 你的物理机(宿主机):暂时断开物理机的网络,或者将网络适配器设置为“自动获取 IP 地址”(DHCP)。
    • 你的手机/笔记本:连接到同一个局域网 Wi-Fi。
  2. 获取 IP 地址: 在测试设备上,执行“释放并更新”IP 地址的操作,在 Windows 上是 ipconfig /release ipconfig /renew;在 Linux 上是 sudo dhclient eth0

  3. 检查结果

    • 在测试设备上,查看其 IP 地址,它应该从你配置的 168.1.101168.1.200 这个范围内获取到一个地址。
    • 在你的 DHCP 服务器虚拟机上,可以查看租约文件来确认:
      cat /var/lib/dhcp/dhcpd.leases

      你应该能看到类似下面的内容,表示已经成功分配了一个租约:

      lease 192.168.1.101 {
        starts 4 2025/10/27 10:00:00;
        ends 4 2025/10/27 12:00:00;
        hardware ethernet 00:0c:29:xx:xx:xx; // 测试设备的 MAC 地址
        uid 01:00:0c:29:xx:xx:xx;
      }

常见问题与排错

  • 问题:测试设备获取不到 IP。

    • 排查
      1. 确认虚拟机是桥接模式
      2. 确认 DHCP 服务器自身有静态 IP,且与分配的网段在同一个子网。
      3. 检查防火墙(ufw),确保 dhcp 服务端口(UDP 67)是开放的。isc-dhcp-server 会自动处理,但可以手动检查:sudo ufw status
      4. 检查 /etc/dhcp/dhcpd.conf 的语法:sudo dhcpd -t
      5. 检查 /var/log/syslogjournalctl 中的错误信息。
  • 问题:分配的 IP 地址不是我期望的。

    • 排查:检查 dhcpd.conf 文件中的 range 配置是否正确。
  • 问题:IP 地址冲突。

    • 排查:确保局域网内没有其他设备(如路由器)也在运行 DHCP 服务,并且没有静态配置了你 DHCP 范围内的 IP 地址。

恭喜!你已经成功在虚拟机上配置了一台功能完备的 DHCP 服务器。

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