关于/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 客户端在自动管理该文件。
- 通过禁用相关工具的自动管理功能,或设置文件为只读,可以确保修改永久生效。

### 修改 DNS 配置文件以更改系统 DNS 设置 在 Linux 系统中,`/etc/resolv.conf` 文件是 DNS 客户端配置文件,用于指定 DNS 服务器的 IP 地址。然而,直接修改该文件可能无法长期生效,因为它的内容通常由其他工具(如 `resolvconf` 或 `NetworkManager`)动态生成[^1]。为了确保修改后的 DNS 设置在系统重启后仍然有效,可以按照以下方法操作。 #### 方法一:通过 `/etc/resolvconf/resolv.conf.d/base` 文件进行修改 如果系统使用了 `resolvconf` 工具,则可以通过编辑 `/etc/resolvconf/resolv.conf.d/base` 文件来设置 DNS 服务器。具体步骤如下: 1. 使用文本编辑器打开 `/etc/resolvconf/resolv.conf.d/base` 文件: ```bash sudo vim /etc/resolvconf/resolv.conf.d/base ``` 2.文件中添加 `nameserver` 行,指定新的 DNS 服务器地址。例如: ```plaintext nameserver 8.8.8.8 nameserver 8.8.4.4 ``` 3. 保存并关闭文件。 4. 更新 `resolvconf` 配置: ```bash sudo resolvconf -u ``` 此时,`/etc/resolv.conf` 文件将被更新为包含新设置的 DNS 服务器地址[^1]。 #### 方法二:通过网络接口配置文件进行修改 如果系统使用了网络管理工具(如 `ifcfg-*` 文件),可以通过编辑网络接口配置文件来设置 DNS 服务器。例如,对于 CentOS 或 RHEL 系统,可以编辑 `/etc/sysconfig/network-scripts/ifcfg-eth0` 文件: 1. 打开网络接口配置文件: ```bash sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 ``` 2. 添加或修改以下行: ```plaintext DNS1=8.8.8.8 DNS2=8.8.4.4 ``` 3. 保存并关闭文件。 4. 重启网络服务以应用更改: ```bash sudo systemctl restart network ``` DNS 设置将在网络服务重启后生效[^2]。 #### 方法三:通过 `/etc/network/interfaces` 文件进行修改 如果系统使用了 Debian 或 Ubuntu 的传统网络配置方式,可以通过编辑 `/etc/network/interfaces` 文件来设置 DNS 服务器。例如: 1. 打开 `/etc/network/interfaces` 文件: ```bash sudo vim /etc/network/interfaces ``` 2. 在网络接口配置中添加 `dns-nameservers` 行。例如: ```plaintext auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 ``` 3. 保存并关闭文件。 4. 重启网络服务以应用更改: ```bash sudo systemctl restart networking ``` #### 方法四:通过 NetworkManager 进行修改 如果系统使用了 `NetworkManager`,可以通过其图形界面或命令行工具设置 DNS 服务器。例如,使用 `nmcli` 命令: 1. 查看当前活动的网络连接: ```bash nmcli connection show ``` 2. 修改指定连接的 DNS 设置: ```bash nmcli connection modify "连接名称" ipv4.dns "8.8.8.8 8.8.4.4" ``` 3. 重启网络连接以应用更改: ```bash nmcli connection down "连接名称" nmcli connection up "连接名称" ``` #### 注意事项 - 如果系统启用了 `NetworkManager`,则手动修改 `/etc/resolv.conf` 文件可能会被覆盖[^3]。 - 修改完成后,可以通过以下命令检查 DNS 设置是否生效: ```bash cat /etc/resolv.conf nslookup google.com ``` ```bash # 示例代码:验证 DNS 设置 cat /etc/resolv.conf nslookup google.com ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值