5154

Good Luck To You!

linux 命令行配置dns

编辑 /etc/resolv.conf 添加 nameserver 行,或用 nmcli 命令设置 DNS 后重启

Linux命令行配置DNS完全指南

DNS基础概念

1 什么是DNS?

域名系统(Domain Name System,DNS)是互联网的电话簿,负责将人类可读的域名(如www.example.com)转换为计算机可识别的IP地址(如192.0.2.1),每次访问网站时,系统都会通过DNS查询获取目标服务器的IP地址。

linux 命令行配置dns

2 DNS工作流程

  1. 客户端请求:应用程序发起DNS查询请求
  2. 递归查询:DNS服务器逐级查询权威服务器
  3. 缓存机制:中间结果会被缓存加速后续查询
  4. 最终响应:返回最终IP地址给客户端

Linux系统DNS配置文件

文件路径 适用场景 优先级
/etc/resolv.conf 传统手动配置
NetworkManager Desktop环境动态管理
systemdresolved 现代系统服务管理
/etc/sysconfig/networkscripts/ifcfg* 网络接口绑定配置 特定接口

1 /etc/resolv.conf文件

nameserver 8.8.8.8    # Google公共DNS
nameserver 8.8.4.4    # 备用DNS
search example.com     # 域名后缀搜索域
options ndots:1        # 配置选项

2 NetworkManager配置

# 查看当前连接配置
nmcli connection show "Wired connection 1"
# 修改DNS服务器
nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 8.8.4.4"
# 设置DNS搜索域
nmcli connection modify "Wired connection 1" ipv4.ignoreautodns yes
nmcli connection modify "Wired connection 1" ipv4.dnssearch "example.com"

DNS配置实战操作

1 静态DNS配置方法

# 直接编辑resolv.conf
sudo nano /etc/resolv.conf
# 添加以下内容:
nameserver 1.1.1.1    # Cloudflare DNS
nameserver 1.0.0.1    # 备用DNS
search localdomain    # 本地网络搜索域

2 动态DNS管理(NetworkManager)

# 查看当前DNS配置
nmcli dev show | grep DNS
# 添加新DNS服务器
nmcli con mod "YourConnectionName" +ipv4.dns "9.9.9.9"
# 删除现有DNS配置
nmcli con mod "YourConnectionName" ipv4.dns "8.8.8.8"

3 使用systemdresolved配置

# 编辑全局DNS配置
sudo nano /etc/systemd/resolved.conf
# 配置示例:
[Resolve]
DNS=9.9.9.9 149.112.112.112
Domain~.localhost
LLMNR=no
MultiCastDNS=yes

公共DNS服务器推荐

服务商 IP地址 特点
Google Public DNS 8.8.8 / 8.8.4.4 速度快,全球覆盖
Cloudflare 1.1.1 / 1.0.0.1 隐私保护,恶意软件拦截
OpenDNS 67.222.222 / 208.67.220.220 家庭友好,内容过滤
AliDNS 5.5.5 / 223.6.6.6 国内访问优化
Quad9 9.9.9 / 149.112.112.112 安全阻断,恶意软件防护

DNS配置验证方法

1 基本连通性测试

# 测试域名解析
ping c 3 www.baidu.com
# 显示完整解析路径
dig +trace www.baidu.com

2 DNS专项测试工具

# 使用dig查询详细信息
dig www.example.com +nocmd +noall +answer
# 测试多个DNS服务器响应时间
for server in 8.8.8.8 1.1.1.1 9.9.9.9; do echo $server; dig @$server www.google.com +time=1; done

3 高级诊断命令

# 显示DNS缓存状态
sudo systemdresolve flushcaches
# 查看网络接口DNS配置
ip 4 route show | grep proto

常见问题解决方案

1 配置不生效怎么办?

症状 原因分析 解决方案
修改后仍使用旧DNS NetworkManager缓存未更新 sudo systemctl restart NetworkManager
resolv.conf被重置 系统服务自动覆盖 禁用systemdresolved或NetworkManager管理
仅生效一个DNS 配置文件语法错误 检查空格和注释格式

2 DNS污染/劫持处理

# 启用DNSSEC验证(需要系统支持)
sudo nano /etc/resolv.conf
# 添加以下行:
options edns0 trustad

高级配置技巧

1 按接口指定DNS服务器

# 编辑网络接口配置文件(以CentOS为例)
sudo nano /etc/sysconfig/networkscripts/ifcfgeth0
# 添加以下配置:
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=no
PEERDNS=no
PEERROUTES=no

2 使用splitdns实现智能解析

# 安装bindutils工具包(包含host/dig等)
sudo apt install bindutils
# 创建本地hosts文件规则
echo "192.168.1.100 mail.local" | sudo tee a /etc/hosts

安全注意事项

  1. 避免使用不可靠DNS:不要随意使用未知来源的DNS服务器
  2. 定期清理缓存sudo systemdresolve flushcaches
  3. 启用加密DNS:考虑部署DoH/DoT(需应用支持)
  4. 限制DNS查询权限:通过防火墙规则控制访问范围
  5. 监控异常流量:使用tcpdump观察DNS查询模式
    sudo tcpdump i any port 53 c 100

Q&A常见问题解答

Q1:如何测试当前DNS配置是否生效?

A:可以使用以下命令组合验证:

# 查看当前使用的DNS服务器
cat /etc/resolv.conf | grep nameserver
# 测试域名解析功能
dig www.google.com @8.8.8.8
# 检查网络接口配置
nmcli dev show | grep IP4.DNS

如果所有命令都能正确返回预期结果,说明DNS配置已生效。

linux 命令行配置dns

Q2:如何设置自定义DNS并防止被系统自动覆盖?

A:需要根据系统类型采取不同策略:

  1. 禁用NetworkManager管理
    nmcli connection edit "YourConnection" set ipv4.ignoreautodns yes
  2. 禁用systemdresolved服务
    sudo systemctl stop systemdresolved
    sudo systemctl disable systemdresolved
  3. 持久化配置:将自定义DNS写入/etc/resolv.conf后,使用以下命令防止覆盖:
    sudo chattr +i /etc/resolv.

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年6月    »
1
2345678
9101112131415
16171819202122
23242526272829
30
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.