Linux 下 NetworkManager 自定义 DNS

本文介绍了在Fedora系统中使用NetworkManager时更改DNS的方法。包括常规配置步骤、改进方案及推荐使用的公共DNS服务器地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OS: fedora
Kernel: 2.6.30
Package: NetworManager 0.8


一、常规方法

在 Linux (笔者用fedora) 下当使用 NetworkManager时,更改 DNS 的一般方式:

  1. 修改 /etc/resolv.conf 文件, 添加 "nameserver ip" 行.
  2. 修改 /etc/sysconfig/network-scripts/ifcfg-eth0, 添加 "DNS1=ip", "DNS2=IP"...行。
  3. 修改 /etc/sysconfig/networking/....目录下的 ifcfg-eth0 或者 default. 方式同上。

修改完文件后需要运行 "service NetworkManager restart" 重启网络以使设置生效。
另说明linux 服务的管理方法:

service NetworkManager restart | start | stop | status

上面的 NetworkManager 可被其他服务名替换。"|" 隔开的命令可任选其一。

注意:以上修改在 关机再次启动 电脑后会被 NetworkManager重置为默认 isp 的 dns. 即 "generated by NetworkManager".

二、改进

用 NetworkManager 管理网络设置,并永久自定义 DNS. 可以如下设置:

  1. 修改 /etc/resolv.conf , 添加 "nameserver ip".
  2. 运行 "sudo chattr +i /etc/resolv.conf", 该命令修改文件属性为 只有 root 用户才能修改该文件。去掉可将参数改为 "-i".
  3. 以 root 身份运行 "service NetworkManager restart".

注意:此时 会产生 /etc/resolv.conf.tmp 文件,不必理会。

三、推荐DNS

Google Public DNS: 8.8.8.8; 8.8.4.4.
Norton DNS: 198.153.192.1; 198.153.194.1.
OpenDNS: 208.67.222.222; 208.67.220.220.

四、笔者的 /etc/resolv.conf 文件

#此行注释
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 198.153.192.1
nameserver 198.153.194.1
nameserver 208.67.222.222
nameserver 208.67.220.220


Edited by DC Morgan on 2010-06-03
带着崇敬与赞美,献给活在计算机里的神灵

转载于:https://www.cnblogs.com/dcmlinux/archive/2010/06/18/1760040.html

<think>嗯,用户询问如何在Linux系统中查询本机使用的DNS服务器地址。这是一个比较基础的网络配置问题,但考虑到用户可能是Linux新手,需要提供清晰且多种验证方式。 用户可能正在排查网络连接问题,或者配置某些服务时需要确认DNS设置。从ta直接询问具体命令来看,应该具备一定命令行基础,但不确定ta是否了解DNS配置的复杂性(比如多来源配置)。 首先想到三个主要查询途径:最直接的resolv.conf文件(但要注意这可能被覆盖)、systemd-resolve(现代主流发行版)、nmcli(如果使用NetworkManager)。需要强调权限问题,因为普通用户可能无法读取某些配置。 注意到引用材料里提到/etc/resolv.conf的nameserver字段(引用2)和systemd-resolve(引用1),这些可以作为理论依据。但要注意引用1关于macOS的配置示例不能直接套用,需要转换到Linux场景。 特别要提醒用户注意:1) resolv.conf可能是符号链接 2) 网络管理工具会覆盖手动配置 3) 临时修改和永久修改的区别。这些坑新手容易踩到。 准备用分层方案:先给最常用的两种命令方案(文件查看+systemd工具),再补充网络管理工具方案,最后说明底层原理。这样无论用户是什么发行版都能覆盖到。 在验证环节考虑加入nslookup的简单用法,这样用户不仅能查到配置还能立即测试DNS是否实际生效。最后补充的多重配置来源说明很重要,很多用户会困惑“为什么我改了resolv.conf没效果”。</think>在 Linux 系统中,查询当前使用的 DNS 服务器地址主要有以下几种方法,根据你的系统配置和使用的网络管理工具选择最合适的方式: ### 🔍 方法 1️⃣:查看 `/etc/resolv.conf` 文件(最常用,但可能被覆盖) 这是系统解析器使用的传统配置文件,通常包含生效的 DNS 服务器地址。 ```bash cat /etc/resolv.conf ``` * **查找以 `nameserver` 开头的行**,后面的 IP 地址就是配置DNS 服务器。 * **注意⚠️**:在现代许多发行版上(尤其是使用 `systemd-resolved` 或 `NetworkManager` 的),此文件可能是一个符号链接(symbolic link),其内容可能由后台服务动态生成或覆盖。直接修改此文件可能无效或重启后失效。 **示例输出:** ``` # Generated by NetworkManager nameserver 192.168.1.1 nameserver 8.8.8.8 # See man:systemd-resolved.service(8) ``` > 这里 `192.168.1.1`(通常是本地路由器)和 `8.8.8.8`(Google DNS)是配置DNS 服务器[^2]。 ### 🔍 方法 2️⃣:使用 `systemd-resolve` 或 `resolvectl` 命令(推荐用于使用 systemd-resolved 的系统) 现代许多 Linux 发行版(如 Ubuntu, Fedora, Debian 等)使用 `systemd-resolved` 服务管理 DNS。 ```bash # 使用 systemd-resolve (较旧版本 systemd) systemd-resolve --status | grep "DNS Servers" -A 2 # 使用 resolvectl (推荐,较新版本 systemd) resolvectl status ``` * 在输出中查找当前活跃的网络接口(如 `eth0`, `wlan0`)下的 `DNS Servers:` 部分。 * 这个命令显示的是 `systemd-resolved` 服务**实际正在使用**的 DNS 服务器配置,它可能整合了来自不同来源(DHCP, 手动配置, `/etc/resolv.conf`)的设置,通常是最准确反映当前状态的[^1]。 **示例输出 (`resolvectl status` 片段):** ``` Link 2 (eth0) Current Scopes: DNS DefaultRoute setting: yes LLMNR setting: yes MulticastDNS setting: no DNSOverTLS setting: opportunistic DNSSEC setting: allow-downgrade DNSSEC supported: yes Current DNS Server: 192.168.1.1 DNS Servers: 192.168.1.1 8.8.8.8 DNS Domain: example.com ~. ``` > 这里明确显示接口 `eth0` 使用的 DNS 服务器是 `192.168.1.1` 和 `8.8.8.8`[^1]。 ### 🔍 方法 3️⃣:使用 `nmcli` 命令(推荐用于使用 NetworkManager 的系统) 如果你的网络是由 NetworkManager 管理的(桌面环境和许多服务器环境常用),`nmcli` 是最直接查看**当前活动连接**的 DNS 配置的方式。 ```bash nmcli dev show | grep DNS ``` * 这个命令会列出所有网络设备的详细信息,过滤出包含 `DNS` 的行。 * 它会显示为每个连接配置DNS 服务器地址。 **示例输出:** ``` IP4.DNS[1]: 192.168.1.1 IP4.DNS[2]: 8.8.8.8 ``` > 同样显示配置DNS 服务器是 `192.168.1.1` 和 `8.8.8.8`。 ### 🔍 方法 4️⃣:使用 `nslookup` 或 `dig` 查询(验证 DNS 服务器响应) 这些工具本身用于 DNS 查询,但通过查询一个已知域名(如 `google.com`),可以看到它们**实际使用的是哪个 DNS 服务器**来进行解析。 ```bash nslookup google.com # 或者 dig google.com ``` * 在命令输出的开头部分(`nslookup`)或 `;; SERVER:` 行(`dig`)会显示用于该查询的 DNS 服务器的 IP 地址。 * 这反映了当你的系统需要解析域名时,**实际发起请求所使用的 DNS 服务器**,非常可靠[^3]。 **示例输出 (`dig google.com` 开头):** ``` ; <<>> DiG 9.16.1-Ubuntu <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64923 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 212 IN A 142.250.185.206 ;; Query time: 16 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) <--- 这就是实际使用的 DNS 服务器! ;; WHEN: Thu Oct 26 10:00:00 UTC 2023 ... ``` > 这里 `SERVER: 127.0.0.53#53` 表明实际使用的是监听在本地环回地址 `127.0.0.53` 上的 DNS 解析器(通常是 `systemd-resolved` 在起作用),它再根据配置转发查询到上游 DNS 服务器(如 `192.168.1.1`, `8.8.8.8`)。`127.0.0.53` 是 `systemd-resolved` 的本地存根解析器地址[^1][^2]。 ## 📌 总结与建议 1. **首选 `resolvectl status` 或 `systemd-resolve --status`**:如果系统使用 `systemd-resolved`(现代主流发行版默认),这是最准确反映当前使用的 DNS 服务器的方法,显示的是实际生效的配置。 2. **使用 `nmcli dev show | grep DNS`**:如果系统使用 NetworkManager 管理网络,这是查看为活动连接配置DNS 服务器的最直接方式。 3. **参考 `/etc/resolv.conf`**:快速查看传统配置文件,但需**注意其内容可能被其他服务动态管理或覆盖**,不一定反映真实使用的上游服务器(尤其在看到 `127.0.0.53` 或 `127.0.0.1` 时)。 4. **使用 `dig` 或 `nslookup` 验证**:查看**实际执行 DNS 查询**时使用的服务器地址(通常是本地解析器如 `127.0.0.53` 或 `127.0.0.1`,它们再转发到上游真实 DNS),这验证了配置是否生效[^3][^4]。 > 💡 **关键点**:理解 `/etc/resolv.conf` 中的 `nameserver 127.0.0.53` 意味着所有 DNS 查询首先被发送到本地的 `systemd-resolved` 服务(监听在 `127.0.0.53`),然后由 `systemd-resolved` 根据其自身的配置(可通过 `resolvectl` 查看)转发到真正的上游 DNS 服务器(如你的路由器 `192.168.1.1` 或公共 DNS `8.8.8.8`)[^1][^2][^3]。因此,`resolvectl status` 显示的 `DNS Servers` 才是最终的上游 DNS 地址。 ## 📚 相关问题 1. **如何永久修改 Linux 系统的 DNS 服务器地址?** (涉及不同网络管理工具如 NetworkManager, systemd-networkd, netplan 或直接修改配置文件) 2. **为什么修改了 `/etc/resolv.conf` 文件后 DNS 设置又变回去了?** (解释 resolvconf 机制、systemd-resolved 和 NetworkManager 的动态管理) 3. **Linux 中 `127.0.0.53` 这个 DNS 服务器地址代表什么?它如何工作?** (深入解释 systemd-resolved 的存根解析器和 DNS 转发机制) 4. **如何在 Linux配置和使用自定义DNS 服务器(如本地的 Pi-hole 或 dnsmasq)?** (涉及配置上游 DNS 和本地解析服务) 5. **如何测试 DNS 服务器的响应速度和可靠性?** (介绍 `dig`, `nslookup` 结合 `time` 命令,或使用 `dnsping`/`dnsperf` 等工具) [^1]: 引用 `/etc/resolver/` 配置和 `127.0.0.1` 作为 DNS 服务器地址的示例,说明本地 DNS 解析器的概念,Linux 的 `systemd-resolved` 使用 `127.0.0.53` 是类似机制。 [^2]: 引用 `/etc/resolv.conf` 文件中 `nameserver` 行的作用和含义,以及 `search` 域的作用。 [^3]: 引用 DNS 服务器的基本定义和作用,说明查询工具显示的是实际用于解析请求的服务器。 [^4]: 引用 `/etc/hosts` 文件在 DNS 解析前的优先级作用,作为 DNS 查询过程的背景知识补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值