【SRE系列--DNS跨域转发】

1.DNS原理

1.1 简介

DNS(Domain Name Service的缩写)的作用就是根据域名查出IP地址。IP地址是由32位二进制数字组成,人们很难记住这些IP,相反,大家愿意使用比较容易记忆的主机名字。而电脑在处理IP数据报文时,是使用IP地址的,因为它是固定长度。

DNS查询的类型对于客户端来说是递归查询,对于DNS服务器来说,绝大多数是迭代查询的。DNS名称解析中,从名称到IP的查询叫做正向解析,从IP到名称的查询的解析叫反向解析。如果DNS服务器至少解析了一个或一个以上的域叫做DNS主服务器或者DNS辅助服务器,如果不负责任何解析叫做DNS缓存服务器。

现在互联网规模很大,DNS被设计成一个分布式的数据库系统,他分布的功能就是把一个大的数据库切割成很多小的数据库,来分别提供一部分数据的处理。全球一共分布了13台DNS跟服务器,名字为A至M。

1.2 解析域名

在这里插入图片描述

  • 根域名:隐含的 .(根域)
  • 顶级域名(TLD):cn
  • 二级级域名(SLD):com.cn
  • 三级级域名:qiange.com.cn
  • 主机名:www.qiange.com.cn (这里 www 是子域名或主机名)

1.3 DNS的域名解析过程

在这里插入图片描述

1.3.1 用户使用浏览器输入网址时域名解析过程

  1. 客户访问时,先查自己的hosts文件,有则返回

  2. 客户hosts中没有就去查自己的缓存,有则返回

  3. 客户缓存没有就去找dns服务器

  4. dns服务器先找根服务器获得顶级域服务器地址

  5. dns服务器在找顶级域服务器去获得二级域服务器地址

  6. dns服务器从二级域服务器获得最终的IP地址

  7. 客户端从dns服务器中得到IP地址

1.3.2 解析答案

  • 肯定答案:存在对应的查询结果
  • 否定答案:请求的条目不存在等原因导致无法返回结果
  • 权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
  • 非权威答案:由其它非权威服务器返回的查询答案

1.3.3 迭代查询和递归查询

1.3.3.1递归查询

在这里插入图片描述

1.3.3.2迭代查询

在这里插入图片描述

1.3.3.3 迭代查询和递归查询的区别

在这里插入图片描述

  • 递归查询:由 DNS 服务器负责完成所有查询,最终返回结果给客户端。客户端发出一次请求,服务器承担查询过程。
  • 迭代查询:客户端依次与多个 DNS 服务器交互,直到找到最终结果。服务器只提供下一级服务器的信息,不代为查询。

注意:这两种查询方式在实际应用中常常结合使用。通常,客户端发起递归查询,而 DNS 服务器之间执行迭代查询。

1.3.4 DNS区域数据库文件

在这里插入图片描述

2.DNS跨地域转发实验

在这里插入图片描述

2.1服务器信息

服务器名称IP地址角色服务器系统版本
dns-master172.17.1.200主DNSUbuntu 20.04.3 LTS
dns-salve172.17.1.201从DNSUbuntu 20.04.3 LTS
nj-dns172.17.1.202南京分部DNS服务Ubuntu 20.04.3 LTS
sz-dns172.17.1.203苏州分布DNS服务Ubuntu 20.04.3 LTS

2.2环境初始化

2.2.1 服务器做免密
2.2.2时间同步
2.2.3 安装bind服务
apt -y install bind9

2.3 配置总部主DNS服务

2.3.1 配置文件
root@dns-master:~# tree /etc/bind
/etc/bind
├── bind.keys   #用于在 DNS 解析中验证受信任的域名签名
├── db.0
├── db.127
├── db.255
├── db.empty
├── db.local
├── named.conf   #配置文件
├── named.conf.default-zones   #默认的区域解析文件
├── named.conf.local
├── named.conf.options
├── rndc.key
└── zones.rfc1918               
2.3.2 主DNS配置文件(/etc/bind/named.conf)
root@dns-master:~#mkdir /var/named/data -p
root@dns-master:~#chown -R bind.bind  /var/named/
root@dns-master:~# cat /etc/bind/named.conf
options {
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
//        dnssec-enable no;
        dnssec-validation no;
        recursion yes;
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "/var/named/data/named.log";
                severity dynamic;
        };
};
include "/etc/bind/named.conf.local";
include "/etc/bind/bind.keys";
include "/etc/bind/named.conf.default-zones";

root@dns-master:/etc/bind# vim /etc/apparmor.d/usr.sbin.named
/var/named/** rwk,  #文件的末尾添加此行
root@dns-master:/etc/bind# apparmor_parser -r /etc/apparmor.d/usr.sbin.named
root@dns-master:/etc/bind# systemctl restart bind9.service
root@dns-master:/etc/bind# systemctl status bind9.service
● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-10-13 20:21:03 CST; 1h 47min ago
       Docs: man:named(8)
   Main PID: 231174 (named)
      Tasks: 8 (limit: 2244)
     Memory: 6.1M
     CGroup: /system.slice/named.service
             └─231174 /usr/sbin/named -f -u bind
2.3.3 区域解析库文件配置(/etc/bind/named.conf.default-zones)
root@dns-master:~# cat /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/usr/share/dns/root.hints";
};
zone "qm.com" IN {      //创建qm.com域
      type master;
      file "/var/named/qm.com.zone";
};

zone "bj.qm.com" IN {   //创建子域bj.qm.com
     type  master;
     file  "/var/named/bj.qm.com.zone";
};
#这个也可以在配置文件里面配置,如果在配置文件添加以上内容,则配置文件无需再配置/etc/bind/named.conf.default-zones

root@dns-master:~# cat /var/named/qm.com.zone
$TTL    1d
@       IN      SOA     qm.com. admin.qm.com. (    ;SOA记录
                        20241013                   ;序列号
                        1H                         ;刷新时间
                        5M                         ;重试时间
                        1W                         ;过期时间
                        1D)                        ;否定答案的TTL值
          IN      NS    ns1.qm.com.                ;主DNS
          IN      NS    ns2.qm.com.                ;备DNS
nj        IN      NS    nj.qm.com.                  ;将南京子域委派给nj.qm.com进行管理
sz        IN      NS    sz.qm.com.                  ;将苏州子域委派给sz.qm.com进行管理
ns1.qm.com.       IN      A     172.17.1.200
ns2.qm.com.       IN      A     172.17.1.201
nj.qm.com.        IN      A     172.17.1.202
sz.qm.com.        IN      A     172.17.1.203

oa.qm.com.        IN      A     172.17.1.100
sql.qm.com.        IN      A     172.17.1.101


root@dns-master:~# cat /var/named/bj.qm.com.zone
$TTL    1d
@       IN      SOA     bj.qm.com. admin.bj.qm.com. (    ;SOA记录
                        20241013                   ;序列号
                        1H                         ;刷新时间
                        5M                         ;重试时间
                        1W                         ;过期时间
                        1D)                        ;否定答案的TTL值
          IN      NS    ns1.qm.com.                ;主DNS
          IN      NS    ns2.qm.com.                ;备DNS
ns1.qm.com.       IN      A     172.17.1.200
ns2.qm.com.       IN      A     172.17.1.201

oa.bj.qm.com.        IN      A     172.17.1.80

2.4 配置总部从DNS服务

2.4.1 从dns的配置文件
options {
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
//        dnssec-enable no;
        dnssec-validation no;
        recursion yes;
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "/var/named/data/named.log";
                severity dynamic;
        };
};
include "/etc/bind/named.conf.local";
include "/etc/bind/bind.keys";
include "/etc/bind/named.conf.default-zones";
2.4.2 从dns的区域解析库文件
root@dns-salve:~# cat  /etc/bind/named.conf.default-zones
zone "." {
        type hint;
        file "/usr/share/dns/root.hints";
};


//因为从DNS服务器只是同步主DNS服务的数据,所以不需要解析区域库文件,只需要设定好谁是主服务即可
zone "qm.com" IN {
  type slave;                    //设置服务器的类型
  masters { 172.17.1.200 ;};     //设置主DNS服务器的IP地址
  file "/var/named/slaves/qm.com.zone";
};

zone "bj.qm.com" IN {
  type slave;
  masters { 172.17.1.200 ;};
  file "/var/named/slaves/bj.qm.com.zone";
};

2.5 配置南京分部DNS配置

2.5.1 配置DNS的配置文件
options {
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
//        dnssec-enable no;
        dnssec-validation no;
        recursion yes;
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "/var/named/data/named.log";
                severity dynamic;
        };
};
include "/etc/bind/named.conf.local";
include "/etc/bind/bind.keys";
include "/etc/bind/named.conf.default-zones";
2.5.2 配置转发域
zone "nj.qm.com" IN {
      type master;
      file "/var/named/nj.qm.com.zone";
};
zone "qm.com" IN {     //设定转发,客户端访问qm.com域时全部转发至指定的服务器
     type forward;
     forward first;
     forwarders { 172.17.1.200; };  //如果访问总部域名则转发至主DNS
};
2.5.3配置区域解析库文件
root@nj-dns:~# cat /var/named/nj.qm.com.zone
$TTL    1d
@       IN      SOA     nj.qm.com. admin.nj.qm.com. (    ;SOA记录
                        20241013                   ;序列号
                        1H                         ;刷新时间
                        5M                         ;重试时间
                        1W                         ;过期时间
                        1D)                        ;否定答案的TTL值
        IN      NS      nj.qm.com.
nj.qm.com.      IN      A       172.17.1.202

oa.nj.qm.com.      IN      A       172.17.1.10
ftp.nj.qm.com.     IN      A       172.17.1.11

2.6 配置苏州分布DNS配置

2.6.1 配置DNS的配置文件
options {
        listen-on port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
//        dnssec-enable no;
        dnssec-validation no;
        recursion yes;
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "/var/named/data/named.log";
                severity dynamic;
        };
};
include "/etc/bind/named.conf.local";
include "/etc/bind/bind.keys";
include "/etc/bind/named.conf.default-zones";
2.6.2 配置转发域
zone "sz.qm.com" IN {
      type master;
      file "/var/named/sz.qm.com.zone";
};
zone "qm.com" IN {     //设定转发,客户端访问qm.com域时全部转发至指定的服务器
     type forward;
     forward first;
     forwarders { 172.17.1.200; };  //如果访问总部域名则转发至主DNS
};
2.6.3 配置区域解析库文件
root@sz-dns:~# cat /var/named/sz.qm.com.zone
$TTL    1d
@       IN      SOA     sz.qm.com. admin.sz.qm.com. (    ;SOA记录
                        20241013                   ;序列号
                        1H                         ;刷新时间
                        5M                         ;重试时间
                        1W                         ;过期时间
                        1D)                        ;否定答案的TTL值
        IN      NS    sz.qm.com.                  ;将苏州子域委派给sz.qm.com进行管理
sz.qm.com.        IN      A     172.17.1.203


oa.sz.qm.com.   IN     A    172.17.1.20

2.7 测试

2.7.1 测试主从DNS功能

1、主DNS正常情况下
在这里插入图片描述
2、主DNS挂了
在这里插入图片描述

2.7.2 在每个公司地域都可以互相解析对方域名

在这里插入图片描述

2.8故障

1、/var/named目录权限不足,导致服务无法启动
  • 查看/var/log/syslog日志,看到如下报错,权限拒绝。看到这个报错检测/var/named的所有者所属组是不是bind且/var/named的权限是不是644,没有发现什么不妥,索性给这个目录最高权限777,还是报这个权限不足被拒绝
    在这里插入图片描述
  • 上网查资料,说ubuntu还存在个AppArmor限制,一查果然是这个问题
    在这里插入图片描述
    解决方案如下:
root@dns-master:/etc/bind# vim /etc/apparmor.d/usr.sbin.named
/var/named/** rwk,
root@dns-master:/etc/bind# apparmor_parser -r /etc/apparmor.d/usr.sbin.named
root@dns-master:/etc/bind# named-checkconf /etc/bind/named.conf  #检查dns配置文件是否有错误
root@dns-master:/etc/bind# named-checkzone sz.qm.com /var/named/sz.qm.com.zone  #检查dns区域解析库文件是否有错误
root@dns-master:/etc/bind# systemctl restart bind9.service
root@dns-master:/etc/bind# systemctl status bind9.service
2、配置的forward转发没有生效

因为没有添加dnssec-validation no;参数

3、区域解析库配置容易出错的地方

在这里插入图片描述
注意:1、TTL值的设定
2、跨地域和跨国要网络和时差

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/891545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高阶数据结构与算法——红黑树の奥秘

1.认识红黑树 1.1红黑树的概念 红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍&#xff0c…

JDK安装环境配置保姆间教程

文章介绍了Java编程语言的基本知识,包括其创始人和发布年份,然后详细阐述了如何下载和安装JDK,以及如何配置JAVA_HOME和Path环境变量,以确保Java开发环境的正确设置。最后,作者提到在JDK1.5以后的版本中,无…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。 注释的分类及语法 注释分为两类:单行注释 和 多行注释。 单行注释 只能注释一行内容,语法如下…

离宝安羊台山登山口最近的停车场探寻

石岩龙眼山矿泉水厂有停车场,这个是距离宝安羊台山登山口最新的停车场了,但是停车位数量没有附近的大眼山停车场多。 石岩龙眼山矿泉水厂停车场的收费标准如下: 序号 收费项目 收费标准 1 小车临时停放 首小时10元 每增加1小时加收3元 3…

如何有效进行主机加固?深信达MCK提供答案

在数字化时代,企业面临的网络安全威胁日益严峻,尤其是勒索病毒等恶意软件的攻击,给企业带来了巨大的挑战。为了有效应对这些威胁,企业需要采取全面的网络安全防护措施,其中主机加固成为了关键的一环。深信达的MCK主机加…

dvwa:文件包含、文件上传

文件包含 本地文件包含(敏感信息泄露)和远程文件包含(命令执行) 本地文件包含一般包含一些本地的敏感文件,如:/etc/passwd或/etc/shadow等 远程文件包含能使得服务器代码执行,如包含黑客vps的…

uniapp引入ThorUI的方法

1、下载文件 2、复制相应的文件除了pages 3、往项目中复制即可 4、引入即可实现 5、添加easycome自动引入

交易所开发:构建安全、高效、可靠的数字资产交易平台

数字资产交易平台是加密市场中连接用户与数字货币的重要枢纽。开发一个安全、高效、可靠的交易所,不仅需要综合考虑技术架构、安全策略、用户体验等方面,还需严格遵循法规要求以确保合规性。本文总结了交易所开发的关键要素,包括其类型、核心…

16年408计算机网络

第一题: 解析: 首先我们要清楚R1,R2,R3是路由器(网络层),Switch是以太网交换机(数据链路层),Hub是集线器(物理层)。 由此可见路由器实现的最高功能层是3层&am…

【兼容多端】UNIAPP popper气泡弹层vue3+typescript unibest

最近要实习一个泡泡弹层。看了下市场的代码,要么写的不怎么好,要么过于复杂。于是拿个轮子自己加工。200行代码撸了个弹出层组件。兼容H5和APP和小程序。 功能: 1)只支持上下左右4个方向的弹层不支持侧边靠齐 2)不对屏幕边界适配 3)支持弹层…

【C语言】你不知道的知识小盲区——柔性数组

文章目录 一、什么是柔性数组二、柔性数组的特点三、柔性数组的使用四、柔性数组的优势 一、什么是柔性数组 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。在C99标准中,如果结构体的最后一个成员是…

【jQuery】 jQuery基础及选择器介绍(基本选择器 层次选择器 属性选择器 过滤选择器)

文章目录 jQuery基础1. 优势2. 版本3. 基本语法4. 选择器基本选择器层次选择器属性选择器过滤选择器基本过滤选择器可见性过滤选择器 注意事项 jQuery基础 jQuery 是一个功能强大且易于使用的 JavaScript 库,它极大地简化了前端开发的工作。无论是 DOM 操作、事件处…

健康推荐系统:SpringBoot技术实现

3系统分析 3.1可行性分析 通过对本基于智能推荐的卫生健康系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于智能推荐的卫生健康系统采用SSM框架&#…

在Java程序中监听mysql的binlog

文章目录 1、背景2、mysql-binlog-connector-java简介3、准备工作1、验证数据库是否开启binlog2、开启数据库的binlog3、创建具有REPLICATION SLAVE权限的用户4、事件类型 eventType 解释1、TABLE_MAP 的注意事项2、获取操作的列名 5、监听binlog的position1、从最新的binlog位…

HCIP-HarmonyOS Application Developer 习题(十)

1、HarmonyOS设备A上的应用通过调用分布式任务调度的能力continuesbility,向设备B的应用发起跨端迁移,此过程属于跨端迁移中的哪个流程? A、流转准备 B、流转进行 C、流转结束 D、流转完成 答案:D 分析: 2、为了帮助用户通过全局…

软件测试工程师面试整理 —— 操作系统与网络基础!

在软件测试中,了解操作系统和网络基础知识对于有效地进行测试工作至关重要。无论是在配置测试环境、调试网络问题,还是在进行性能测试和安全测试时,这些知识都是不可或缺的。 1. 操作系统基础 操作系统(Operating System, OS&am…

Node.js管理工具NVM

nvm(Node Version Manager)是一个用于管理多个 Node.js 版本的工具。以下是 nvm 的使用方法和一些常见命令: 一、安装 nvm 下载 nvm: 地址:https://github.com/coreybutler/nvm-windows/releases访问 nvm 的 GitHub 仓…

Python | Leetcode Python题解之第474题一和零

题目: 题解: class Solution:def findMaxForm(self, strs: List[str], m: int, n: int) -> int:count10 []for s in strs:count10.append([0,0])for c in s:if c 0: count10[-1][0]1else: count10[-1][1]1dp [[0]*(n1) for _ in range(m1)]for i …

贪吃蛇游戏(代码篇)

我们并不是为了满足别人的期待而活着。 前言 这是我自己做的第五个小项目---贪吃蛇游戏(代码篇)。后期我会继续制作其他小项目并开源至博客上。 上一小项目是贪吃蛇游戏(必备知识篇),没看过的同学可以去看看&#xf…