答案:Linux中DNS通过/etc/resolv.conf配置,可手动修改nameserver等参数,但需注意NetworkManager或systemd-resolved可能覆盖更改,推荐通过nmcli或systemd-resolved管理以确保持久生效。
在Linux系统中,DNS解析主要通过 /etc/resolv.conf 文件进行配置。这个文件定义了系统用于解析域名的DNS服务器地址和搜索域等信息。虽然现代Linux发行版常使用NetworkManager或systemd-resolved动态管理该文件,但了解如何手动修改和配置它仍然非常实用。
resolv.conf 文件的基本结构
该文件通常包含以下类型的配置行:
- nameserver:指定DNS服务器IP地址,最多可配置3个
- search:定义域名搜索列表,用于补全短域名
- domain:设置本地域名(通常由search替代)
- options:配置解析器行为,如超时、重试次数等
示例:
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com internal.example.com
options timeout:2 attempts:3
直接修改 resolv.conf(适用于临时配置)
你可以使用文本编辑器直接编辑该文件:
sudo nano /etc/resolv.conf
添加或修改 nameserver 行,保存退出即可生效。但注意:如果系统使用NetworkManager或systemd-resolved,你的修改可能会被覆盖。
防止配置被覆盖的方法
若发现修改后配置自动恢复,说明有服务在管理该文件。常见解决方式:
- 使用 chattr 命令锁定文件(谨慎使用):
- 通过NetworkManager配置DNS(推荐):
- 使用systemd-resolved统一管理:
sudo chattr +i /etc/resolv.conf
这将防止任何程序修改该文件。需要解除时使用:sudo chattr -i /etc/resolv.conf
nmcli con show
nmcli con mod “连接名” ipv4.dns “8.8.8.8 1.1.1.1”
nmcli con up “连接名”
这样NetworkManager会自动更新resolv.conf且不会被覆盖。
编辑 /etc/systemd/resolved.conf:
[Resolve]
DNS=8.8.8.8 1.1.1.1
Domains=example.com
然后启用服务:
sudo systemctl enable systemd-resolved
sudo systemctl restart systemd-resolved
并确保 /etc/resolv.conf 指向它:sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
验证DNS配置是否生效
使用以下命令测试解析是否正常:
ping google.com
nslookup example.com
dig example.com
查看当前生效的DNS:
cat /etc/resolv.conf 基本上就这些。修改resolv.conf看似简单,但需注意系统是否由其他服务动态管理。选择合适的方法才能确保配置持久有效。