使用
sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
或`nmcli con mod “System eth0” ipv4.dns “8.8.8.Linux命令行修改DNS完整指南
DNS基础概念
DNS(Domain Name System)是互联网的核心服务之一,负责将域名转换为IP地址,在Linux系统中,DNS配置直接影响网络访问速度和稳定性,本文将详细介绍如何通过命令行修改Linux系统的DNS设置。
临时修改DNS方法
修改/etc/resolv.conf
文件
这是最直接的临时修改方法,但系统重启后可能失效
# 使用文本编辑器打开文件 sudo nano /etc/resolv.conf # 添加以下内容(示例使用阿里DNS) nameserver 223.5.5.5 nameserver 223.6.6.6 # 保存退出(Ctrl+X > Y > Enter)
使用nmcli
命令(NetworkManager)
适用于使用NetworkManager的系统
# 设置DNS(会覆盖现有配置) sudo nmcli con mod "当前网络连接名称" ipv4.dns "223.5.5.5 223.6.6.6" # 查看当前连接名称 nmcli con show active | grep '^[azAZ]'
使用ip
命令(仅IP层)
不影响系统全局DNS配置
# 为特定网络接口添加DNS sudo ip route add local 0.0.0.0/0 via 192.168.1.1 dev eth0 src 192.168.1.100
永久修改DNS方法
NetworkManager配置文件修改
(1) 找到网络连接配置文件
不同发行版路径可能不同:
发行版 | 配置文件路径 |
---|---|
Ubuntu/Debian | /etc/NetworkManager/systemconnections/ |
CentOS/Fedora | /etc/sysconfig/networkscripts/ifcfg |
Arch | /etc/NetworkManager/systemconnections/ |
(2) 编辑对应网络连接文件
以Ubuntu为例:
# 查找当前活动连接名称 nmcli con show active | awk '/^[azAZ]/{print $1}' # 编辑配置文件(替换YourConnectionName) sudo nano /etc/NetworkManager/systemconnections/YourConnectionName.nmconnection # 在[ipv4]部分添加: [ipv4] dns=223.5.5.5;223.6.6.6;
传统ifcfg脚本配置(CentOS旧版本)
编辑网络接口配置文件:
sudo nano /etc/sysconfig/networkscripts/ifcfgeth0 # 添加或修改以下行: DNS1=223.5.5.5 DNS2=223.6.6.6
使用netplan
配置(Ubuntu 18.04+)
现代Ubuntu使用netplan管理网络:
# 编辑netplan配置文件 sudo nano /etc/netplan/01netcfg.yaml # 添加dns4和dns6配置: network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [223.5.5.5, 223.6.6.6]
不同发行版配置对比表
操作类型 | Ubuntu/Debian | CentOS/Fedora | Arch Linux |
---|---|---|---|
临时修改 | /etc/resolv.conf |
/etc/resolv.conf |
/etc/resolv.conf |
永久修改 | NetworkManager配置 | ifcfg脚本 | NetworkManager配置 |
重启网络服务 | systemctl restart NetworkManager |
systemctl restart network |
systemctl restart NetworkManager |
配置文件位置 | /etc/NetworkManager/systemconnections/ |
/etc/sysconfig/networkscripts/ |
/etc/NetworkManager/systemconnections/ |
高级DNS配置技巧
设置DNS搜索域
在/etc/resolv.conf
或NetworkManager配置中添加:
search example.com subdomain.example.com
配置DNS超时和重试次数
编辑/etc/resolv.conf
:
options ndots:1 timeout:2 attempts:3 rotate
参数说明:
ndots:1
:少于n个点的域名直接解析timeout:2
:请求超时时间(秒)attempts:3
:重试次数rotate
:轮询使用多个DNS服务器
使用加密DNS协议
(1) 配置Systemdresolved(较新系统)
编辑/etc/systemd/resolved.conf
:
[Resolve] DNS=https://cloudflaredns.com/dnsquery DNSOverTLS=yes
(2) 使用DoH客户端工具
安装dnsutils
:
# 查询使用Google DoH dig @dns.google/dnsquery {www.example.com}
常见问题与解决
修改DNS后不生效怎么办?
症状 | 解决方案 |
---|---|
浏览器仍使用旧DNS | 清除浏览器DNS缓存,重启浏览器 |
终端应用不生效 | 检查/etc/resolv.conf 是否被覆盖,确认NetworkManager未重置配置 |
SSH连接失败 | 确保DNS服务器可达,检查防火墙规则 |
本地域名解析异常 | 检查search 域配置,尝试使用绝对域名(如www.example.com ) |
如何验证DNS配置是否成功?
使用以下命令进行测试:
# 测试域名解析 dig www.baidu.com +short # 查看当前DNS服务器列表 cat /etc/resolv.conf # 测试网络连通性 ping 223.5.5.5
相关问题与解答
Q1:为什么修改/etc/resolv.conf
后系统重启会失效?
A:大多数现代Linux发行版使用NetworkManager或Wicd等网络管理工具,这些工具会在系统启动时自动覆盖/etc/resolv.conf
文件,要实现永久修改,必须通过对应的网络管理工具或配置文件进行设置。
Q2:如何为特定用户设置独立的DNS服务器?
A:可以通过以下两种方式实现:
- 使用
chroot
环境:在用户虚拟环境中单独配置/etc/resolv.conf
- 配置代理服务器:通过SOCKS5代理或VPN为特定用户路由DNS查询请求
- 修改用户级网络配置:在Wayland/X11系统中配置用户网络命名空间(需root权限
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/203487.html