温馨提示×

Linux DHCP如何设置DNS

小樊
46
2026-08-06 04:25:10
栏目: 智能运维

在 Linux 中设置 DHCP 的 DNS,取决于你是作为 DHCP 客户端还是作为 DHCP 服务器。下面分别说明常见场景。


一、作为 DHCP 客户端(Linux 从 DHCP 自动获取 DNS)

1. 使用 NetworkManager(最常见,桌面/服务器)

NetworkManager 默认会从 DHCP 获取 DNS,并写入 /etc/resolv.conf

查看 DNS:

cat /etc/resolv.conf

手动刷新 DHCP 并获取 DNS:

nmcli device reapply eth0
# 或
nmcli connection down eth0 && nmcli connection up eth0

2. 使用 systemd-networkd

配置文件示例(DHCP 自动 DNS):

# /etc/systemd/network/20-wired.network
[Match]
Name=eth0

[Network]
DHCP=yes

重启服务:

systemctl restart systemd-networkd

3. 使用 dhclient(传统方式)

dhclient -r eth0
dhclient eth0

二、作为 DHCP 服务器(Linux 给客户端分配 DNS)

1. 使用 isc-dhcp-server(最常见)

安装

apt install isc-dhcp-server   # Debian/Ubuntu
yum install dhcp              # CentOS 7

配置文件

vim /etc/dhcp/dhcpd.conf

示例:

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 domain-name-servers 8.8.8.8, 8.8.4.4;
  option domain-name "example.local";
}

重启服务

systemctl restart isc-dhcp-server

✅ 客户端通过 DHCP 会自动获得 8.8.8.88.8.4.4 作为 DNS。


2. 使用 dnsmasq(轻量级 DHCP + DNS)

安装

apt install dnsmasq

配置 DNS 和 DHCP

# /etc/dnsmasq.conf
interface=eth0
dhcp-range=192.168.1.100,192.168.1.200,12h
dhcp-option=6,8.8.8.8,8.8.4.4

重启

systemctl restart dnsmasq

三、常见问题

1. /etc/resolv.conf 被覆盖?

通常是 NetworkManager 或 systemd-resolved 自动管理。

查看:

ls -l /etc/resolv.conf

如需固定 DNS(不推荐与 DHCP 混用):

chattr +i /etc/resolv.conf

2. DHCP 分配 DNS 但客户端未生效?

  • 客户端是否启用了 DHCP
  • 是否使用了静态 IP
  • 是否被 /etc/netplan/*.yaml 覆盖(Ubuntu)

四、快速总结

场景 设置位置
Linux 作为 DHCP 客户端 自动获取
Linux 作为 DHCP 服务器 dhcpd.conf / dnsmasq.conf
指定 DNS option domain-name-servers

如果你能说明:

  • 发行版(Ubuntu / CentOS / Debian)
  • 是客户端还是服务器
  • 是否使用 Netplan / NetworkManager

我可以给你精确到命令级别的配置示例。

0