当前位置: 首页 > news >正文

[Linux入门] 初学者入门:Linux DNS 域名解析服务详解

目录

一、域名服务基础:从 “名字” 到 “地址” 的转换

1️⃣什么是域名?

2️⃣什么是 DNS?

3️⃣DNS 用 TCP 还是 UDP?

二、DNS 服务器:各司其职的 “导航站”

1️⃣根域名服务器

2️⃣顶级域名服务器

3️⃣权威域名服务器

4️⃣本地 DNS 服务器

5️⃣转发服务器

三、正向解析与反向解析:DNS 的两种 “查询模式”

1️⃣正向解析:域名→IP

2️⃣反向解析:IP→域名

3️⃣区域(Zone)的概念

四、DNS 查询方式:递归与迭代

1️⃣递归查询:“你帮我搞定”

2️⃣迭代查询:“你告诉我下一步找谁”

3️⃣完整查询过程(以www.linuxprobe.com为例)

五、Linux 构建缓存域名服务器

1️⃣为什么需要缓存 DNS?

2️⃣工具:BIND(最常用的 DNS 软件)

3️⃣配置缓存 DNS 服务器(步骤)

步骤 1:修改主配置文件

步骤 2:重启服务并测试

六、Linux 构建主从域名服务器

1️⃣主从服务器的角色

2️⃣配置示例(环境:主服务器 192.168.141.130,从服务器 192.168.141.129)

步骤 1:配置主服务器

步骤 2:配置从服务器

步骤 3:测试


DNS(域名系统)是互联网的 “导航系统”,让我们能通过好记的域名(如www.baidu.com)访问网站,而不是复杂的 IP 地址(如 14.215.177.38)。对于 Linux 初学者来说,理解 DNS 的工作原理并掌握其配置方法,是搭建网络服务的重要基础。

一、域名服务基础:从 “名字” 到 “地址” 的转换

1️⃣什么是域名?

域名(Domain Name)是互联网上计算机或服务器的 “名字”,由一串用点分隔的字符组成,必须以点结尾(如www.qq.com.cn.),我们日常看到的 “www.qq.com.cn” 只是简略形式。

它的核心作用是替代 IP 地址:人类对 “www.baidu.com” 的记忆远比对 “14.215.177.38” 容易,而 DNS 的任务就是把 “名字” 翻译成 “地址”。

通过域名系统(DNS)实现域名与IP地址的映射。

2️⃣什么是 DNS?

DNS 就是用于将网站的域名转换为IP地址的系统。DNS(域名系统)是一个分布式数据库,负责存储域名与 IP 地址的对应关系,并提供查询服务。简单说,当你在浏览器输入 “www.example.com” 时:

  1. 你的电脑会向 DNS 服务器发送查询:“这个域名对应的 IP 是多少?”
  2. DNS 服务器通过一系列查询,找到对应的 IP(如 93.184.216.34)并返回;
  3. 电脑用 IP 地址连接服务器,获取网页内容。

DNS 的关键参数:

  • 使用端口:TCP 和 UDP 的 53 端口;
  • 长度限制:每级域名最长 63 字符,总长度不超过 253 字符。

3️⃣DNS 用 TCP 还是 UDP?

DNS 根据场景选择协议,初学者只需记住:

  • UDP:用于常规查询(如浏览器查域名),速度快、数据量小(≤512 字节),适合缓存查询、迭代查询;
  • TCP:用于大量数据传输(如主从服务器同步数据)、大型响应(>512 字节),或防止攻击,因为 TCP 需要建立连接,更可靠。

二、DNS 服务器:各司其职的 “导航站”

DNS 系统是分层的,不同服务器负责不同环节,就像 “国家 - 省 - 市” 的行政体系:

1️⃣根域名服务器

DNS 的 “顶层领导”,全球共 13 组(标识为 A-M),不直接解析域名,而是指引查询到对应的顶级域名服务器。例如:

  • A 根服务器:管理单位INTERNIC.NET,位于美国弗吉尼亚州,IP 为 198.41.0.4;
  • M 根服务器:由 WIDE Project 管理,位于日本东京,IP 为 202.12.27.33。

2️⃣顶级域名服务器

负责 “顶级域名”(如.com、.org、.cn)的解析,指引查询到下一级服务器。例如:

  • .com 服务器:管理所有以.com 结尾的域名;
  • .cn 服务器:管理中国国家域名(如.qq.com.cn的顶级域是.cn)。

3️⃣权威域名服务器

“具体管事的”,保存某一域名的详细解析记录(如www.baidu.com的 IP),是该域名的 “官方服务器”(如阿里云 DNS、腾讯云 DNS)。

4️⃣本地 DNS 服务器

你家宽带或公司网络提供的 DNS(如 114.114.114.114),负责替你完成整个查询过程:

  1. 先查自己的缓存,有结果直接返回;
  2. 没有则依次向根、顶级、权威服务器查询,最后把结果返回给你,并缓存下来。

5️⃣转发服务器

可选的 “中间代理”,接收查询后转发给其他 DNS 服务器,适合大型网络减少重复查询(比如公司内网用转发服务器统一处理外部查询)。

三、正向解析与反向解析:DNS 的两种 “查询模式”

DNS 的核心是 “地址对应关系”,分为两种查询方向:

1️⃣正向解析:域名→IP

最常用的功能,根据域名查 IP。例如:输入 “www.baidu.com”,得到 IP“14.215.177.38”。

2️⃣反向解析:IP→域名

根据 IP 查域名,用途较少但重要(如反垃圾邮件验证:验证发送邮件的 IP 是否对应宣称的域名)。例如:输入 “14.215.177.38”,得到 “www.baidu.com”。

3️⃣区域(Zone)的概念

每台 DNS 服务器只负责一小部分 “范围”(称为 “区域”):

  • 正向区域:存储域名→IP 的记录(如xykj.com区域);
  • 反向区域:存储 IP→域名的记录(如 192.168.141.x 网段的区域)。

四、DNS 查询方式:递归与迭代

DNS 查询有两种方式,就像 “找人” 的两种策略:

1️⃣递归查询:“你帮我搞定”

客户端(如你的电脑)向本地 DNS 服务器查询时,本地 DNS 会 “包办到底”:如果自己不知道,就主动向其他服务器查询,直到拿到结果返回给你。
特点:只需发一次请求,等待结果即可(类似 “我问快递员我的快递在哪,他查清楚告诉我市井”)。

2️⃣迭代查询:“你告诉我下一步找谁”

本地 DNS 服务器向其他服务器(如根、顶级服务器)查询时,对方不会直接给结果,而是告诉你 “去问下一个服务器”。本地 DNS 需要自己一步步找下去。
特点:可能发多次请求,目标不断变化(类似 “我问路人邮局在哪,他说‘前面路口问交警’,我再去问交警”)。

3️⃣完整查询过程(以www.linuxprobe.com为例)

  1. 你的电脑先查本地缓存和 hosts 文件(hosts 文件优先级高于 DNS,Linux 路径为 /etc/hosts,Windows 为 C:\Windows\System32\drivers\etc\hosts);
  2. 缓存和 hosts 中没有,就向本地 DNS 服务器发送递归查询;
  3. 本地 DNS 服务器查自己的缓存,没有则开始迭代查询:
    • 问根服务器:“www.linuxprobe.com在哪?” 根服务器说:“去问.com 顶级服务器”;
    • 问.com 顶级服务器,对方说:“去问linuxprobe.com的权威服务器”;
    • 问linuxprobe.com的权威服务器,得到 IP 地址;
  4. 本地 DNS 服务器将结果缓存,再返回给你的电脑。

五、Linux 构建缓存域名服务器

缓存 DNS 服务器的作用是 “记住” 之前的查询结果,让后续查询更快(类似 “记笔记”),适合内网环境(如公司、学校)。

1️⃣为什么需要缓存 DNS?

  • 提高速度:重复访问同一域名时,直接用缓存结果,不用再查外部服务器;
  • 节省流量:减少对外部 DNS 的依赖,降低出口带宽占用;
  • 增强安全:可屏蔽恶意网站,限制内网用户访问风险站点;
  • 方便管理:内网设备用缓存服务器,统一解析规则。

2️⃣工具:BIND(最常用的 DNS 软件)

BIND(Berkeley Internet Name Domain)是 Linux 上主流的 DNS 服务软件,通过以下步骤安装和控制:

  1. 安装:sudo apt install bind9(Debian/Ubuntu)或yum install bind(CentOS);
  2. 服务控制:systemctl start named(启动)、systemctl status named(查看状态)。

3️⃣配置缓存 DNS 服务器(步骤)

以 “192.168.141.130” 作为缓存服务器为例:

步骤 1:修改主配置文件

主配置文件为/etc/bind/named.conf.options,关键设置:

options

directory "/var/cache/bind";  # 数据文件存放目录
recursion yes;  # 启用递归查询(必须,因为缓存服务器要替客户端查询)
listen-on { any; };  # 监听所有网络接口
allow-query { any; };  # 允许所有客户端查询
forwarders {  # 转发器:自己查不到时,转发给这些服务器223.5.5.5;  # 阿里云DNS114.114.114.114;  # 国内通用DNS
};
dnssec-validation auto;  # 自动验证DNS数据有效性
步骤 2:重启服务并测试

bash

sudo systemctl restart named  # 重启服务
sudo systemctl stop firewalld  # 关闭防火墙(避免端口被挡)

在客户端(如 192.168.141.128)的/etc/resolv.conf中设置 DNS 为 192.168.141.130,然后用nslookup www.baidu.com测试:如果能返回 IP,说明配置成功。

六、Linux 构建主从域名服务器

主从域名服务器用于 “热备份”:主服务器负责维护数据,从服务器同步主服务器的数据,避免主服务器故障导致解析失效。

1️⃣主从服务器的角色

  • 主域名服务器:拥有某区域的 “决定权”,维护该区域的解析记录(如xykj.com的 A 记录),可自主修改数据;
  • 从域名服务器:同步主服务器的数据,提供相同的解析服务,作为备份(不能自己修改数据)。

2️⃣配置示例(环境:主服务器 192.168.141.130,从服务器 192.168.141.129)

步骤 1:配置主服务器
  1. 安装 bind9:sudo apt install bind9
  2. 修改区域配置文件/etc/bind/named.conf.default-zones,添加正向区域:

    zone

    zone "xykj.com" {type master;  # 主服务器file "/etc/bind/xykj.local";  # 区域数据文件路径
    };
    
  3. 创建区域数据文件/etc/bind/xykj.local(存储域名→IP 记录):

    zone

    $TTL 604800  # 记录在缓存中存活7天
    @ IN SOA xykj.com. admin.xykj.com. (2  ; 序列号(每次修改+1)604800  ; 刷新时间(7天,从服务器多久查一次主服务器)86400   ; 重试时间(1天,查不到时多久再试)2419200 ; 过期时间(28天,超过多久不再同步)604800  ; 否定缓存时间(7天,查不到的记录缓存多久)
    )
    @ IN NS xykj.com.  # 域名服务器记录
    @ IN A 192.168.141.131  # xykj.com对应IP
    www IN A 192.168.141.131  # www.xykj.com对应IP
    
  4. 检查配置:named-checkzone xykj.com /etc/bind/xykj.local,显示 “OK” 则有效;
  5. 启动服务:systemctl start named
步骤 2:配置从服务器
  1. 安装 bind9:sudo apt install bind9
  2. 修改区域配置文件/etc/bind/named.conf.default-zones,添加正向区域(指向主服务器):

    zone

    zone "xykj.com" {type slave;  # 从服务器masters { 192.168.141.130; };  # 主服务器IPfile "/var/cache/bind/xykj.local.slave";  # 同步的文件路径
    };
    

  3. 启动服务:systemctl start named,从服务器会自动同步主服务器的数据。
步骤 3:测试

在客户机(192.168.141.128)的/etc/resolv.conf中设置 DNS 为 192.168.141.129,用nslookup www.xykj.com测试:能返回 192.168.141.131,说明从服务器工作正常。

http://www.dtcms.com/a/300017.html

相关文章:

  • Anaconda常用命令及环境管理指南
  • kali [DNS劫持] 实验(详细步骤)
  • Containerd简介
  • 【Ubuntu】发展历程
  • 如何做数据增强?
  • 框架式3D打印机结构设计cad【9张】三维图+设计说明书
  • 【升级U8+】不能将值 NULL 插入列 ‘LocaleID‘,表 ‘hr_sys_function_Base‘;列不允许有 Null 值。
  • flink查看taskManager日志
  • 数组内存学习
  • Django5.1(130)—— 表单 API一(API参考)
  • 【Luogu】每日一题——Day14. P5960 【模板】差分约束 (图论 + 最短路)
  • Nacos-服务注册,服务发现(二)
  • mac版SVN客户端
  • Pythong高级入门Day5
  • npm ERR! cb() never called!
  • 昇思学习营-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调学习心得
  • 数据结构 二叉树(2)---二叉树的实现
  • 2025年SEVC SCI2区,混沌编码量子粒子群算法QPSO+柔性车间调度,深度解析+性能实测
  • 每日一题7.26
  • WorkManager vs Flow 适用场景分析
  • 抖音短视频矩阵系统源码搭建---底层框架5年开发分享
  • idea中无法删除模块,只能remove?
  • 二叉搜索树(Binary Search Tree)详解与java实现
  • 代码随想录打卡第十五天
  • 睡眠函数 Sleep() C语言
  • AI Agent开发学习系列 - langchain: 本地大模型调用
  • CMU15445-2024fall-project4踩坑经历
  • 设计自己的小传输协议 状态机解析与封装抽象
  • Java设计模式之行为型模式(中介者模式)实现方式详解
  • 函数参数的解包与顺序匹配机制