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

news2024/11/30 20:48:32

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、跨地域和跨国要网络和时差

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5种边界填充

目录 原图代码边界填充需要知道的两个东西什么算边界边界的范围是多少 复制填充 咋们废话不多说,直接上代码 原图 代码 import cv2def img_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()img cv2.imread(enhanced_color_rgb.jpg)pr…

libzip 编译和使用

本文参考libzip开发笔记(一):libzip库介绍、编译和工程模板 libzip解压缩方法分析 libzip依赖zlib,所以编译libzip之前需要先编译zlib。 假设已经编译好zlib CMake打开Zlib 指定ZIB_INCLUDE_DIR目录需包含zlib.h和zconf.h(在zl…

Redis学习笔记:整数集合

概述 整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。它可以保存类型为int16_t、int32_t或者int64_t的整数值&#…

经典文献阅读之--RGBD GS-ICP SLAM(结合ICP和3D GS构建最快的稠密SLAM)

0. 简介 同时定位与地图构建(SLAM)的密集表示在机器人技术、虚拟现实(VR)和增强现实(AR)应用中扮演了关键角色。在密集表示SLAM的最新进展中,利用神经场景表示和3D高斯表示以实现高保真的空间表…

Redis拒绝连接问题分析与解决方案

目录 前言1. 问题描述2. Redis拒绝连接的常见原因分析2.1 Redis服务未启动2.2 Redis配置中的绑定地址问题2.3 防火墙或安全组问题2.4 Redis连接池耗尽2.5 Redis服务器负载过高2.6 权限配置问题 3. 深度解决方案和优化建议4. 总结 前言 在分布式系统中,Redis作为高性…

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件

【WRF工具】QGis插件GIS4WRF:根据嵌套网格生成namelist.wps文件 准备:WRF嵌套网格QGis根据嵌套网格生成namelist.wps文件检查:根据namelist.wps绘制模拟区域参考GIS4WRF 是一个免费且开源的 QGIS 插件,旨在帮助研究人员和从业者进行高级研究天气研究与预报(WRF)模型的建模…

Java面试题———SpringBoot篇

目录 1、项目中为什么选择SpringBoot 2、SpringBoot的自动装配原理 3、SpringBoot的核心注解是哪个 4、SpringBoot中的starter是干什么的 5、SpringBoot可以有哪些方式加载配置 6、bootstrap.yml和application.yml有何区别 7、SpringBoot读取配置的方式有几种 8、Spring…

基于Springboot+Vue的出租车服务管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 包括管…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

英国放弃了一个领地 却连累.io域名也要消失了

或许,哥几个听说过. io 这个域名吗?常年鼓捣技术的差友应该更清楚,.io 这个域名在圈子里的受欢迎程度。因为 io ,或者说 I/O ,在计算机领域是 Input/Output ( 输入 / 输出 )的缩写,而…

面试题:Redis(五)

1. 面试题 面试问 记录对集合中的数据进行统计 在移动应用中,需要统计每天的新增用户数和第2天的留存用户数; 在电商网站的商品评论中,需要统计评论列表中的最新评论; 在签到打卡中,需要统计一个月内连续打卡的用户数&…

Java实现八种排序

目录 分类 直接插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 挖坑法 hoare法 双指针法 优化 非递归实现 归并排序 非递归实现 计数排序 分类 这里的排序可以分为两大类, 基于比较的排序非基于比较的排序 其中有七种基于比较的排序&…

.NET 一款读取Excel文件敏感数据的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【机器学习】智能聊天机器人——基于自然语言处理的智能对话系统

1. 什么是自动化客户服务与智能聊天机器人? 自动化客户服务是一种通过技术手段自动处理客户问题的服务方式,能够在无需人工干预的情况下为客户提供即时、准确的帮助。这种服务通常依托智能系统,通过预设的响应机制或学习历史数据&#xff0c…

数电(编码器、数据分配器、数据选择器)

目录 一、编码器: 1.二进制编码器: 三、优先编码器(Priority Encoder) 1.二-十进制优先编码器 二、数据分配器和数据选择器(功能正好相反) 1.数据分配器 2.数据选择器 一、编码器: 1.二进制编码器: …

【Linux系统编程】第三十二弹---动态库实战指南:从零构建与高效集成的奥秘

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、动态库 1.1、怎么做动态库 1.2、怎么使用动态库 2、外部库使用 1、动态库 1.1、怎么做动态库 方式一 1、将.c文件编…

创客项目秀|基于XIAO ESP32C3的Night Lamp With Chinese Traditional Pane项目

Fab Academy,源自麻省理工学院的先进教育项目,致力于培养具有全球视野的创新者和制造者。通过密集学习和实践,学生们掌握了从基础到高级的制造技术,学习了如何将创意转化为现实。今天小编给大家带来的是Fab academy学员Dion Tsang…

前端全栈混合之路Deno篇:Deno2.0与Bun对比,谁更胜一筹?或者说谁更适合怎样的项目

在前端全栈开发中,工具的不断演变让开发者们始终在寻找更高效、更现代化的解决方案。继Node.js之后,Deno和Bun 成为了两个比较火热的运行时。Deno2.0的近期的发布让它在性能和兼容性方面大幅提升-尤其是兼容了npm包(但我感觉应该不是全部兼容…

如何给低代码平台取名?命名策略与技巧全解析

低代码平台正日益成为企业数字化转型的重要工具。为了确保您的平台能够脱颖而出,吸引到更多的用户和开发者,选择一个恰到好处的名字至关重要。本文将探讨如何为您的低代码平台选择一个既独特又易于记忆的好名字,并详细介绍一系列行之有效的命…

第二百七十九节 JPA教程 - JPA查询IN一对多示例

JPA教程 - JPA查询IN一对多示例 以下JPQL显示如何在一对多映射中使用IN运算符。 executeAndPrintQuery("SELECT DISTINCT p FROM Employee e, IN(e.directs) p");例子 下面的代码来自Department.java。 package cn.w3cschool.common;import java.util.ArrayList; …