linux 命令行修改dns

使用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) 找到网络连接配置文件

不同发行版路径可能不同:

linux 命令行修改dns

发行版 配置文件路径
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配置中添加:

linux 命令行修改dns

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

linux 命令行修改dns

# 查询使用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:可以通过以下两种方式实现:

  1. 使用chroot环境:在用户虚拟环境中单独配置/etc/resolv.conf
  2. 配置代理服务器:通过SOCKS5代理或VPN为特定用户路由DNS查询请求
  3. 修改用户级网络配置:在Wayland/X11系统中配置用户网络命名空间(需root权限

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/203487.html

Like (0)
小编小编
Previous 2025年5月13日 14:56
Next 2025年5月13日 15:12

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注