Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

更新于
2026-10-25 04:02:15
25阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

常见痛点

  • 更改后重启网络服务仍无效:在编辑完 /etc/resolv.conf 后忘记重启 NetworkManager 或相关程序服务,导致新 DNS 不起作用。
  • 临时修改导致重启丢失:`ifconfig` 或 `ip addr` 临时配置的 DNS 在程序重启后会恢复为默认值,影响长期需求。
  • *不清楚当前程序正在使用哪个 DNS*:缺少查看当前 DNS 配置的步骤,容易在更换时误操作。
  • *文件被程序自动覆盖*:某些发行版会自动生成 resolv.conf,手动编辑后会被覆盖。
  • *权限不足*:普通使用者无法直接编辑 /etc/resolv.conf,需要 sudo 权限。

临时 vs 永久修改 DNS 的区别与痛点排查教程*

*临时修改*: 或故障排除,但不满足“永久”需求。

# 示例 - 临时使用 resolvconf sudo sh -c 'echo "nameserver 8.8.8.8"> /etc/resolv.conf"' sudo systemctl restart NetworkManager

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

dig www.example.com

*永久修改*: 需要编辑根本配置文件并确保服务重启后保持。以下步骤将帮助您避免上述痛点。

  1. 备份原始 resolv.conf 防止意外误删或被覆盖 bash sudo cp /etc/resolv.conf /etc/resolv.conf.bak
  2. 使用 sudo 打开编辑器 bash sudo nano /etc/resolv.conf
  3. 在文件末尾添加或替换 nameserver 行,指定新可靠的 DNS 服务器地址 bash `search your_domain` `nameserver 8.8.8.8`
  4. 保存并退出 随后 **必须** 激活网络服务使配置立即生效。bash sudo systemctl restart NetworkManager # 或 network-manager、systemd-resolved、NetworkManager-wait-online 等对应发行版命令
  5. 验证更换结果是否成功 bash `dig www.example.com` `nslookup google.com` # 若返回正确 IP,说明已生效。
  6. 若仍未生效,检查是否有其他层级覆盖了手动写入的 nameserver。建议先检查当前使用的解析库顺序: `cat /run/systemd/resolve/stub-resolve`、`resolvectl status`或 `nmcli dev show $` 查看实际激活的 DNS 配置。
  7. 常见错误及方法:
      • `System still shows old nameservers after edit`: 检查是否有 `/run/systemd/resolve/stub-resolve`。`/run/systemd/netif/links/*-dhcp-config`,or `/etc/systemd/network/*.network` 中的 DHCP/DNS 指令覆盖;必要时禁用自动获取并在对应 .network 或 .conf 中硬编码 nameserver。
      • `Permission denied when editing`: 必须加 sudo;若使用 GUI 的 Network Manager 前端也要在其设置页面更新 “IPv4” → “DNS”。怎么说呢,
      • `File overwritten automatically`: 在 Ubuntu/Debian 中 resolv.conf 是 symlink 指向 /run/systemd/resolve/stub-resolve;可通过编辑该链接目标,或在 `/etc/systemd/resolved.conf` 中设定 `DNS=` 再执行 `sudo systemctl restart systemd-resolved.service`。
      • \begin{itemize} \item \end{itemize} \end{ul>

*测试更换是否成功*

A*验证方法*:执行下面命令查看实际解析结果是否已经指向新配置的名称解析器 IP 地址:

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

 www.example.com 

标签:命令行

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

常见痛点

  • 更改后重启网络服务仍无效:在编辑完 /etc/resolv.conf 后忘记重启 NetworkManager 或相关程序服务,导致新 DNS 不起作用。
  • 临时修改导致重启丢失:`ifconfig` 或 `ip addr` 临时配置的 DNS 在程序重启后会恢复为默认值,影响长期需求。
  • *不清楚当前程序正在使用哪个 DNS*:缺少查看当前 DNS 配置的步骤,容易在更换时误操作。
  • *文件被程序自动覆盖*:某些发行版会自动生成 resolv.conf,手动编辑后会被覆盖。
  • *权限不足*:普通使用者无法直接编辑 /etc/resolv.conf,需要 sudo 权限。

临时 vs 永久修改 DNS 的区别与痛点排查教程*

*临时修改*: 或故障排除,但不满足“永久”需求。

# 示例 - 临时使用 resolvconf sudo sh -c 'echo "nameserver 8.8.8.8"> /etc/resolv.conf"' sudo systemctl restart NetworkManager

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

dig www.example.com

*永久修改*: 需要编辑根本配置文件并确保服务重启后保持。以下步骤将帮助您避免上述痛点。

  1. 备份原始 resolv.conf 防止意外误删或被覆盖 bash sudo cp /etc/resolv.conf /etc/resolv.conf.bak
  2. 使用 sudo 打开编辑器 bash sudo nano /etc/resolv.conf
  3. 在文件末尾添加或替换 nameserver 行,指定新可靠的 DNS 服务器地址 bash `search your_domain` `nameserver 8.8.8.8`
  4. 保存并退出 随后 **必须** 激活网络服务使配置立即生效。bash sudo systemctl restart NetworkManager # 或 network-manager、systemd-resolved、NetworkManager-wait-online 等对应发行版命令
  5. 验证更换结果是否成功 bash `dig www.example.com` `nslookup google.com` # 若返回正确 IP,说明已生效。
  6. 若仍未生效,检查是否有其他层级覆盖了手动写入的 nameserver。建议先检查当前使用的解析库顺序: `cat /run/systemd/resolve/stub-resolve`、`resolvectl status`或 `nmcli dev show $` 查看实际激活的 DNS 配置。
  7. 常见错误及方法:
      • `System still shows old nameservers after edit`: 检查是否有 `/run/systemd/resolve/stub-resolve`。`/run/systemd/netif/links/*-dhcp-config`,or `/etc/systemd/network/*.network` 中的 DHCP/DNS 指令覆盖;必要时禁用自动获取并在对应 .network 或 .conf 中硬编码 nameserver。
      • `Permission denied when editing`: 必须加 sudo;若使用 GUI 的 Network Manager 前端也要在其设置页面更新 “IPv4” → “DNS”。怎么说呢,
      • `File overwritten automatically`: 在 Ubuntu/Debian 中 resolv.conf 是 symlink 指向 /run/systemd/resolve/stub-resolve;可通过编辑该链接目标,或在 `/etc/systemd/resolved.conf` 中设定 `DNS=` 再执行 `sudo systemctl restart systemd-resolved.service`。
      • \begin{itemize} \item \end{itemize} \end{ul>

*测试更换是否成功*

A*验证方法*:执行下面命令查看实际解析结果是否已经指向新配置的名称解析器 IP 地址:

Linux命令行中如何修改DNS服务器设置以实现特定网络需求?

 www.example.com 

标签:命令行