Linux系统之dns域名解析全过程

2025-03-26 02:50

本文主要是介绍Linux系统之dns域名解析全过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

一、dns域名解析介绍

dns,应用协议

  • 作用:域名解析
  • 正向解析,将主机名解析成对应的IP地址
  • 反向解析,将IP地址解析成对应的主机名

涉及的软件

  • 软件: bind
  • 服务: named
  • 端口: 53/udp (提供解析服务)、53/tcp(提供多个DNS间数据同步)

1、DNS核心概念

Linux系统之dns域名解析全过程

1.1 区域 zone

正向区域

  • 一般就是个二级域名, linux.com

反向区域

  • x.x.x.in-addr.arpa
  • 10.168.192.in-addr.arpa

1.2 记录 record

A记录, 标识主机名和IP地址的对应关系

www.jd.com		A		123.45.6.78

PTR记录, 标识IP地址和主机名的对应关系

1.1.1.1		PTR		test.linux.com

NS记录, 标识DNS服务器自身, 必须配合A记录

		NS  ns1.jd.com
ns1.jd.com		A		2.2.2.2

MX记录, 标识邮件服务器, 必须配合A记录

// 数字5:优先级,数字越小优先级越高
				MX  5  mail1.linux.com
mail1.linux.com		A		3.3.3.3
				MX  10  mail2.linux.com
mail2.linux.com		A		4.4.4.4

CNAME记录, 别名记录

www.baidu.com		CNAME		www.a.shifen.com

二、DNS服务的配置

1、正向解析的配置

  • 关闭selinux,防火墙
[root@node01 ~]# getenforce 
Disabled
[root@nodphpe01 ~]# systemctl status firewalld.service 
● firewalld.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)
[root@node01 ~]# yum install bind -y 

[root@node01 ~]# rpm -q bind
bind-9.11.4-26.P2.el7_9.16.x86_64
  • 修改dns主配置文件, named.conf
[root@node01 ~]# ls -l /etc/named.conf 
-rw-r----- 1 root named 1806 Jun 11 22:41 /etc/named.conf

[root@node01 ~]# vim /etc/named.conf 
listen-on port 53 { any; };				// 定义dns服务启动的地址、端口
directory       "/var/named";			// 记录文件的存放位置 

allow-query     { any; };				  // 定义dns服务可以为哪些主机提供解析
……………………
include "/etc/named.rfc1912.zones";
  • 创建区域
[root@node01 ~]# vim /etc/named.rfc1912.zones 

zone "linux.com" IN {
    type master;  						// 指定区域类型为master
    file "linux.com.zone";		// 指定存放记录的文件名
};
  • 创建记录
[root@node01 ~]# cp -a /var/named/named.localhost /var/named/linux.com.zone

-a:保留文件权限
[root@node01 ~]# cat /var/named/linux.com.zone
$TTL 1D
@	IN SOA	linux.com. 454452000.qq.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS ns01.linux.com.
ns01	A	192.168.140.10
www	A	192.168.10.1
file	A	192.168.10.9
	MX 5 mail.linux.com.
mail	A	192.168.10.7
  • 启动named服务
[root@node01 ~]# systemctl enable --now named 
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@node01 ~]# 
[root@node01 ~]# ps -elf | grep named 
5 S named      2911      1  0  80   0 - 171176 sigsus 11:20 ?       00:00:00 /usr/sbin/named -u named -c /etc/named.conf
0 S root       2932   1268  0  80   0 - 28203 pipe_w 11:21 pts/0    00:00:00 grep --color=auto named
[root@node01 ~]# 
[root@node01 ~]# 
[root@node01 ~]# netstat -tunlp | grep named 
tcp        0      0 127.0.0.1:953         www.chinasem.cn  0.0.0.0:*               LISTEN      2911/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      2911/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      2911/named          
udp6       0      0 ::1:53                  :::*                                2911/named    

2、测试dns正常工作

C:\Users\admin>nslookup
默认服务器:  public1.alidns.com
Address:  223.5.5.5

> server 192.168.140.10
默认服务器:  [192.168.140.10]
Address:  192.168.140.10

>
> ns01.linux.com
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    ns01.linux.com
Address:  192.168.140.10

> www.linux.com
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    www.linux.com
Address:  192.168.10.1

> file.linux.com
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    file.linux.com
Address:  192.168.10.9

> mail.linux.com
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    mail.linux.com
Address:  192.168.10.7

> 192.168.10.7
服务器:  [192.168.140.10]
Address:  192.168.140.10

> exit

3、配置反向解析

  • 创建反向解析区域
[root@node01 ~]# vim /etc/named.rfc1912.zones 

zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.10.zone";
};
  • 创建反向区域对应的记录文件
[root@node01 ~]# cd /var/named/
[root@node01 named]# cp -a linux.com.zone 192.168.10.zone
[root@node01 named]# cat 192.168.10.zone
$TTL 1D
@	IN SOA	linux.com. 454452000.qq.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS ns01.linux.com.
ns01	A	192.168.140.10
1	PTR	www.linux.com.
9	PTR	file.linux.com.
7	PTR	mail.linux.com.
  • 重启named服务,测试
[root@node01 ~]# systemctl restart named
C:\Users\admin>nslookup
默认服务器:  public1.alidns.com
Address:  223.5.5.5

> server 192.168.140.10
默认服务器:  [192.168.140.10]
Address:  192.168.140.10

> 192.168.10.9
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    file.linux.com
Address:  192.168.10.9

> 192.168.10.7
服务器:  [192.168.140.10]
Address:  192.168.140.10

名称:    mail.linux.com
Address:  192.168.10.7

> exit

4、dns复制

作用:保证多个dns间的数据同步,实现备份

环境描述

  • 192.168.140.10 ns01.linux.com 主DNS
  • 192.168.140.11 ns02.linux.com 从DNS
  • 从DNS安装bind软件
[root@localhost ~]# yum install -y bind
  • 修改主DNS上区域配置文件
[root@node01 ~]# vim /etc/named.rfc1912.zones 

zone "linux.com" IN {
    type master;
    allow-transfer { 从DNS服务器地址; };	www.chinasem.cn	// 允许哪个从来复制数据
    file "linux.com.zone";
};
  • 修改主DNS上记录文件
[root@node01 ~]# vim /var/named/linux.com.zone 

        NS ns01.linux.com.
        NS ns02.linux.com.
ns01    A       192.168.140.10
ns02    A       192.168.140.11

[root@node01 ~]# systemctl restart named
  • 修改从DNS的主配置文件
[root@node01 ~]# vim /etc/named.conf 
listen-on port 53 { any; };				
allow-query     { any; };				 
  • 在从dns上创建和主dns一样的区域
[root@localhost ~]# vim /etc/named.rfc1912.zones 

zone "linux.com" IN {
    type slave;			// 指定区域类型为slave从
    masters { 主DNS服务器地址; };		
    file "slaves/linux.com.zone";
};
  • 启动从DNS服务,验证可以正常复制记录文件
[root@localhost ~]# systemctl enable --now named
[root@localhost ~]# 
[root@localhost ~]# netstat -tunlp | grep named
tcp        0      0 192.168.140.11:53       0.0.0.0:*               LISTEN      1475/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1475/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      1475/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      1475/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      1475/named          
udp        0      0 192.168.140.11:53       0.0.0.0:*                           1475/named          
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1475/named          
udp6       0      0 ::1:53                  :::*                                1475/named          
[root@localhost ~]# 
[root@localhost ~]# ls /var/named/slaves/
linux.com.zone

[root@localhost ~]# file /var/named/slaves/linux.com.zone 
/var/named/slaves/linux.com.zone: data
  • 验证使用从dns解析主机名
C:\Users\admin>nslookup
默认服务器:  public1.alidns.com
Address:  223.5.5.5

> server 192.168.140.11
默认服务器:  [192.168.140.11]
Address:  192.168.140.11

> www.linux.com
服务器:  [192.168.140.11]
Address:  192.168.140.11

名称:    www.linux.com
Address:  192.168.10.1

> mail.linux.com
服务器:  [192.168.140.11]
Address:  192.168.140.11

名称:    mail.linux.com
Address:  192.168.10.7
  • 验证数据同步

主DNS修改记录,从DNS会根据记录文件中的序列号检测变化,同步复制数据

[root@node01 ~]# vim /var/named/linux.com.zone
添加一条记录,修改序列号
 
[root@node01 ~]# systemctl restart named

验证使用从dns来解析变化的记录

三、DNS查询类型

递归查询

  • 只发送一次DNS请求,等待结果
  • 发生在客户端与DNS服务器daqpWwLW

迭代查询

  • 发送多次DNS请求
  • 发生在DNS服务器间

Linux系统之dns域名解析全过程

四、hosts文件的使用

保存主机名、IP地址对应关系

  • Linux
[root@node01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhphpost localhost.localdomain localhost6 localhost6.localdomain6

10.11.0.254	file.linux.com
C:\Windows\System32\drivers\etc\hosts 
  • 主机域名解析的流程

1、先找本地的DNS缓存

2、再找hosts文件

3、向网卡DNS服务器发送查询请求,经过多次迭代过程返回结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Linux系统之dns域名解析全过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153939

相关文章

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决