关于/etc/resolv.conf文件

在 Linux 系统中,`/etc/resolv.conf` 文件用于配置 DNS 解析器(即 DNS 服务器的地址)。修改 `/etc/resolv.conf` 后,通常不需要重启系统或网络服务即可生效,但需要注意以下几点:

---

### **1. 修改后如何生效**
修改 `/etc/resolv.conf` 后,DNS 解析器的更改会立即生效,因为大多数应用程序(如 `curl`、`ping`、`nslookup` 等)在每次进行 DNS 查询时都会读取该文件。

- 你可以通过以下命令测试 DNS 解析是否生效:

  nslookup google.com
    dig google.com

  如果解析成功,说明修改已生效。

---

### **2. 修改后参数消失的原因**
如果你发现修改 `/etc/resolv.conf` 后,文件内容被重置或恢复为默认值,通常是因为系统中某些服务或工具在自动管理该文件。以下是常见的原因和解决方法:

#### **原因 1:NetworkManager 自动管理 `/etc/resolv.conf`**
- **现象**:`/etc/resolv.conf` 被重置为默认值,或者内容被覆盖。
- **原因**:`NetworkManager` 是 Linux 中常用的网络管理工具,它会根据网络配置自动生成 `/etc/resolv.conf`。
- **解决方法**:
  1. 编辑 `/etc/NetworkManager/NetworkManager.conf` 文件,在 `[main]` 部分添加以下内容:
  

[main]
  dns=none

2. 重启 `NetworkManager` 服务: 

systemctl restart NetworkManager


  3. 手动编辑 `/etc/resolv.conf`,设置你需要的 DNS 服务器。

#### **原因 2:`resolvconf` 工具自动管理 `/etc/resolv.conf`**
- **现象**:`/etc/resolv.conf` 被重置为动态生成的内容。
- **原因**:某些系统安装了 `resolvconf` 工具,它会动态管理 `/etc/resolv.conf`。
- **解决方法**:
  1. 检查是否安装了 `resolvconf`:

dpkg -l | grep resolvconf


  2. 如果安装了 `resolvconf`,可以通过以下方式禁用其自动管理功能:
     - 编辑 `/etc/resolvconf/resolv.conf.d/head` 文件,添加你需要的 DNS 服务器配置。
     - 重启 `resolvconf` 服务:

systemctl restart resolvconf

#### **原因 3:DHCP 客户端覆盖 `/etc/resolv.conf`**
- **现象**:`/etc/resolv.conf` 被 DHCP 客户端覆盖。
- **原因**:如果你的网络接口是通过 DHCP 获取 IP 地址的,DHCP 客户端可能会覆盖 `/etc/resolv.conf` 中的 DNS 配置。
- **解决方法**:
  1. 编辑 DHCP 客户端的配置文件(如 `/etc/dhcp/dhclient.conf`),添加以下内容:

supersede domain-name-servers 8.8.8.8, 8.8.4.4;

 将 `8.8.8.8` 和 `8.8.4.4` 替换为你需要的 DNS 服务器。
  2. 重启网络服务或 DHCP 客户端:

systemctl restart networking

#### **原因 4:`systemd-resolved` 服务管理 `/etc/resolv.conf`**
- **现象**:`/etc/resolv.conf` 被重置为指向 `127.0.0.53`。
- **原因**:`systemd-resolved` 是 `systemd` 提供的 DNS 解析服务,它会接管 `/etc/resolv.conf`。
- **解决方法**:
  1. 检查 `systemd-resolved` 是否正在运行:

systemctl status systemd-resolved

2. 如果正在运行,可以通过以下方式禁用其自动管理功能:
     - 编辑 `/etc/systemd/resolved.conf`,设置:
 

[Resolve]
       DNS=8.8.8.8 8.8.4.4
       FallbackDNS=
       Domains=
       # 禁用 DNSStubListener
       DNSStubListener=no


     - 重启 `systemd-resolved` 服务:

systemctl restart systemd-resolved


     - 删除 `/etc/resolv.conf` 的符号链接并重新创建:
 

rm /etc/resolv.conf
       echo "nameserver 8.8.8.8" > /etc/resolv.conf

---

### **3. 永久生效的方法**
为了避免 `/etc/resolv.conf` 被重置,可以采取以下措施:
1. **禁用自动管理工具**:如上述方法,禁用 `NetworkManager`、`resolvconf` 或 `systemd-resolved` 的自动管理功能。
2. **设置文件为只读**:将 `/etc/resolv.conf` 设置为只读,防止被覆盖:

chattr +i /etc/resolv.conf


   如果需要再次修改,可以取消只读属性:
 

chattr -i /etc/resolv.conf

---

### **总结**
- 修改 `/etc/resolv.conf` 后,DNS 配置会立即生效。
- 如果文件被重置,通常是因为 `NetworkManager`、`resolvconf`、`systemd-resolved` 或 DHCP 客户端在自动管理该文件。
- 通过禁用相关工具的自动管理功能,或设置文件为只读,可以确保修改永久生效。

### 如何使 `/etc/resolv.conf` 文件的更改生效 在 Linux 系统中,为了确保对 `/etc/resolv.conf` 的修改能够持久化并立即生效,有几种方法可以实现这一目标。 #### 方法一:使用 `resolvconf` 工具 如果系统安装了 `resolvconf` 工具,则可以通过该工具来管理 `/etc/resolv.conf` 文件。这有助于在网络接口启动或停止时自动更新 DNS 配置[^1]。 ```bash sudo resolvconf -u ``` 此命令会刷新 `/etc/resolv.conf` 并应用最新的设置。 #### 方法二:处理符号链接情况 有时 `/etc/resolv.conf` 是指向其他位置的实际配置文件的一个符号链接,比如 `/run/systemd/resolve/resolv.conf` 或者由 NetworkManager 创建的临时文件。在这种情况下,应该编辑实际的目标文件而不是直接编辑 `/etc/resolv.conf`[^2]。 #### 方法三:重启网络服务 当手动编辑 `/etc/resolv.conf` 后遇到配置丢失的问题时,可能是因为某些守护进程(如 NetworkManager 或 systemd-resolved)正在覆盖这些更改。因此,建议通过重启相应的服务来强制加载新的配置[^3]: ```bash sudo systemctl restart networking.service # 或者如果是使用NetworkManager的话 sudo systemctl restart NetworkManager.service ``` 另外,也可以尝试重启整个计算机以确保所有更改都被正确读取和应用。 #### 方法四:防止被覆盖的方法 为了避免每次重启后自定义的 DNS 设置消失,可以在系统的网络配置脚本里指定静态的 DNS 服务器地址,或者调整相关服务(例如 systemd-resolved)的行为使其不再动态生成 `/etc/resolv.conf`。 总之,在 Linux 中配置 DNS 解析涉及到多个方面的工作,从简单的文件操作到更复杂的系统级设定都需要考虑进去[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值