[chen@localhost root]$ cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.6.6.6 nameserver 8.8.8.8 [chen@localhost root]$ 为什么我DNS全部配置好了,防火墙也没有问题。但是为什么指令出来的是119.6.6.6 ,而不是服务器的IP地址
时间: 2025-07-10 15:34:50 浏览: 5
<think>好的,我现在需要解决用户关于DNS配置的问题。用户说在配置完成后,使用cat命令查看/etc/resolv.conf文件时,显示的是公共DNS(119.6.6.6)而不是服务器自身的IP地址,想知道原因和解决方法。
首先,我需要回忆DNS配置的基本知识。通常,/etc/resolv.conf文件用于指定系统使用的DNS服务器地址。用户可能期望在这里看到自己服务器的IP,但实际看到的是公共DNS地址,这可能涉及到系统服务或配置管理工具的动态更新。
接下来,根据用户提供的引用内容,引用[1]提到/etc/resolv.conf会被重写,所以添加新DNS服务器地址的方法需要注意。引用[2]进一步指出,直接修改该文件在重启后会被覆盖,说明存在自动生成或管理的机制。这可能涉及systemd-resolved、NetworkManager或DHCP客户端等服务。
我需要分析可能的原因:
1. **NetworkManager自动配置**:如果服务器使用NetworkManager管理网络,它可能会根据DHCP获取的DNS信息覆盖resolv.conf。用户可能在NetworkManager配置中指定了公共DNS,或者DHCP服务器分配了119.6.6.6。
2. **systemd-resolved服务**:现代Linux系统可能使用systemd-resolved来管理DNS配置。该服务会动态生成resolv.conf,可能指向127.0.0.53作为缓存DNS,而实际DNS服务器配置在/etc/systemd/resolved.conf或相关文件中。用户可能配置了公共DNS在这里,导致resolv.conf显示的是公共地址。
3. **DHCP客户端覆盖**:如果服务器通过DHCP获取网络配置,DHCP服务器可能会推送公共DNS(如119.6.6.6),导致每次重启后resolv.conf被覆盖。
4. **手动配置错误**:用户可能在某个配置文件中错误地指定了公共DNS,而没有意识到其他服务会覆盖resolv.conf。
解决方法方面,根据引用[1]和[2],直接修改resolv.conf不是长久之计。应该找到管理该文件的源头服务,修改其配置。例如,对于NetworkManager,可以在网络连接配置中设置DNS;对于systemd-resolved,则编辑/etc/systemd/resolved.conf。如果是DHCP的问题,可能需要配置DHCP客户端不覆盖DNS设置。
另外,用户可能需要检查是否有其他网络管理工具在运行,比如netplan或ifupdown脚本,这些也可能影响resolv.conf的内容。确保在正确的配置文件中进行更改,并重启相应服务使配置生效。
总结步骤应该是:确定当前系统使用的网络管理服务,修改对应的配置文件,添加所需的DNS服务器地址,并禁用自动覆盖机制。这样,resolv.conf中的内容就会正确反映服务器自身的IP或用户指定的DNS了。</think>### 原因分析
1. **动态DNS管理服务覆盖**
- 现代Linux系统(如Ubuntu、CentOS 8+)通常通过`systemd-resolved`或`NetworkManager`管理DNS配置。这些服务会动态生成`/etc/resolv.conf`,导致手动修改的配置被覆盖。例如,若系统中启用了`systemd-resolved`,`resolv.conf`可能被链接到`/run/systemd/resolve/stub-resolv.conf`,实际DNS配置由`/etc/systemd/resolved.conf`控制[^1][^2]。
- **示例**:
```bash
# 检查resolv.conf是否为符号链接
ls -l /etc/resolv.conf
# 输出示例:/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
```
2. **DHCP或网络配置推送公共DNS**
- 若服务器通过DHCP获取网络配置,DHCP服务器可能强制分配公共DNS(如119.6.6.6)。此时,即使本地尝试修改`resolv.conf`,重启后仍会被重置[^2]。
3. **手动配置优先级不足**
- 用户可能在临时文件(如`/etc/resolvconf/resolv.conf.d/base`)中添加DNS,但未更新配置或未禁用覆盖机制。
---
### 解决方法
#### 方法1:通过`systemd-resolved`配置(推荐)
1. **编辑配置文件**
```bash
sudo nano /etc/systemd/resolved.conf
```
2. **添加自定义DNS**
取消注释并修改以下行(例如使用本地服务器IP `192.168.1.100`):
```ini
[Resolve]
DNS=192.168.1.100
FallbackDNS=8.8.8.8 # 备用公共DNS(可选)
Domains=yourdomain.local
```
3. **重启服务并生效**
```bash
sudo systemctl restart systemd-resolved
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
```
#### 方法2:通过NetworkManager配置
1. **修改网络连接配置**
```bash
sudo nmcli connection modify "有线连接1" ipv4.dns "192.168.1.100"
```
2. **禁用DHCP的DNS覆盖**
```bash
sudo nmcli connection modify "有线连接1" ipv4.ignore-auto-dns yes
```
3. **应用配置**
```bash
sudo nmcli connection down "有线连接1" && sudo nmcli connection up "有线连接1"
```
#### 方法3:静态配置(仅适用于无动态管理服务的系统)
1. **直接修改`resolv.conf`并锁定**
```bash
sudo nano /etc/resolv.conf
# 添加:nameserver 192.168.1.100
sudo chattr +i /etc/resolv.conf # 禁止修改
```
> **注意**:此方法可能导致依赖动态DNS管理的服务异常[^2]。
---
### 验证步骤
```bash
cat /etc/resolv.conf # 确认DNS地址
systemd-resolve --status # 查看systemd-resolved的当前配置
nmcli device show eth0 | grep DNS # 检查NetworkManager的DNS设置
```
---
阅读全文
相关推荐


















