C03S03-Linux网络之DNS服务器

一、DNS

1. DNS概述

DNS(域名系统、Domain Name System)是将域名和IP地址相互映射的一个分布式数据库,方便用户访问互联网。IP地址是互联网上所有设备的唯一标识,设备之间的通信依赖于IP地址。DNS使得用户在访问网站时不需要记住复杂的数字IP地址,而是可以使用容易记忆的域名。DNS使用的端口是53号端口,它同时支持TCP和UDP协议;UDP适用于快速解析域名,TCP适用于区域传输,也就是与主域名服务器通信查询解析是否正确。

2. 域名结构

域名是以点分隔,被分为若干个部分,从右到左依次阅读。以百度完整域名为例:

www.baidu.com.cn.
  • .:根域名,最高一级的域名,类似Linux系统里的根目录。在实际使用中会省略。
  • .cn:顶级域名,也叫做一级域名。一般代表一种类型的组织机构或者国家地区。
  • .com.cn:二级域名。代表顶级域内的一种类型的组织机构。
  • baidu.com.cn:注册该域名的实体。
  • www:主机名,也可以称为子域名或三级域名。

3. DNS解析过程

  1. 用户在客户端中通过域名发起访问请求。
  2. 客户端首先检查本地缓存和文件/etc/hosts,看是否已经存储了该域名的IP地址。
  3. 如果在本地没有找到域名对应的IP地址,客户端会向配置的本地域名服务器发起递归查询请求。
  4. 本地DNS服务器如果没有缓存该域名的IP地址,它会向根域服务器查询。
  5. 根域服务器返回顶级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向顶级域名服务器发送查询请求。
  6. 顶级域名服务器返回二级域名服务器的IP地址给本地DNS服务器,本地域名服务器再向二级域名服务器发送查询请求。
  7. 二级域名服务器返回子域名服务器的IP地址给本地DNS服务器,本地域名服务器再向子域名服务器发送查询请求。
  8. 子域名服务器返回域名对应的IP地址给本地域名服务器,本地域名服务器将IP地址存入换成当中,再将IP告诉客户端。
  9. 客户端获得IP后,根据IP访问对应服务。

递归查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会代替客户端去其他DNS服务器查询,直到找到答案或者查询失败。

迭代查询:客户端向DNS服务器发起查询请求,如果该服务器没有缓存域名对应的IP,它会提供另一个DNS服务器的地址,让客户端去那里查询。这个过程会一直持续,直到找到答案或者查询失败。

迭代查询过程中,客户端需要自己管理查询过程,直到找到对应IP;递归查询过程中,DNS服务器代替客户端管理查询过程。

4. DNS解析类型

正向解析、反向解析和主备解析是DNS系统中三个重要的解析类型。

  • 正向解析:将域名解析为IP地址。
  • 反向解析:将IP地址解析为域名。
  • 主从解析:DNS服务器之间的数据同步和负载分担机制,提高DNS服务的可用性和可靠性。

5. curl命令 – 文件传输工具

curl命令来自英文词组CommandLine URL的缩写,功能是在Shell终端界面中基于URL规则进行文件传输工作。

curl [选项] 文件

常见的选项:

选项功能
-I显示网站的响应头信息
-K读取指定文件
-o设置文件下载到本地的路径

二、DNS安装部署

1. BIND概述

1.1 安装BIND

  1. 执行下面的命令,安装BIND。BIND是一款广泛使用的DNS服务软件。

    apt -y instll bind9
    
  2. 安装完成后,会生成一个/etc/bind目录。

    ls /etc/bindbind.keys  db.127  db.empty  named.conf                named.conf.local    rndc.key
    db.0       db.255  db.local  named.conf.default-zones  named.conf.options  zones.rfc1918
    

    主要配置文件:

    • db.empty:DNS区域文件的模板文件。
    • named.conf:BIND服务的主配置文件,引入其他配置文件。
    • named.conf.local:包含本地配置区域,如区域文件的位置、视图的定义等。
    • named.conf.default-zones:包含BIND服务默认配置的区域,通常是一些根区域和常用的顶级域。
    • named.conf.options:BIND服务的其他配置。

1.2 主要配置文件说明

  1. name.conf文件。

    // This is the primary configuration file for the BIND DNS server named.
    //
    // Please read /usr/share/doc/bind9/README.Debian.gz for information on the
    // structure of BIND configuration files in Debian, *BEFORE* you customize
    // this configuration file.
    //
    // If you are just adding zones, please do that in /etc/bind/named.conf.localinclude "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    include "/etc/bind/named.conf.default-zones";
    
    • include:引入配置文件。
  2. named.conf.local文件。

    //
    // Do any local configuration here
    //// Consider adding the 1918 zones here, if they are not used in your
    // organization
    //include "/etc/bind/zones.rfc1918";
    
    • 建议在本文件中进行本地的区域配置。
  3. named.conf.default-zones文件。

    // prime the server with knowledge of the root servers
    zone "." {type hint;file "/usr/share/dns/root.hints";
    };// be authoritative for the localhost forward and reverse zones, and for
    // broadcast zones as per RFC 1912zone "localhost" {type master;file "/etc/bind/db.local";
    };zone "127.in-addr.arpa" {type master;file "/etc/bind/db.127";
    };zone "0.in-addr.arpa" {type master;file "/etc/bind/db.0";
    };zone "255.in-addr.arpa" {type master;file "/etc/bind/db.255";
    };
    
    • 本文件是BIND服务默认的特定区域配置,包括根域服务器区域、本地主机的正向区域和反向区域、网段和广播的反向区域。

    • 区域配置的常见格式。

      zone "example.com" {type master;file "/etc/bind/db.example.com";allow-transfer {IP;};master {IP;};
      };
      
      • zone “example.com”:定义了一个适用于example.com的区域配置。
      • type:区域的类型,常见类型包括:master、slave等。
      • file:区域数据文件的存放位置。
      • allow-transfer {IP;};:设置能够请求区域传输的服务端IP,主要用于主服务器。
      • master {IP;};:设置主服务器的IP,告诉从服务器可以该IP地址请求区域数据。
  4. named.conf.options文件。

    options {directory "/var/cache/bind";// If there is a firewall between you and nameservers you want// to talk to, you may need to fix the firewall to allow multiple// ports to talk.  See http://www.kb.cert.org/vuls/id/800113// If your ISP provided one or more IP addresses for stable// nameservers, you probably want to use them as forwarders.// Uncomment the following block, and insert the addresses replacing// the all-0's placeholder.// forwarders {//      0.0.0.0;// };//========================================================================// If BIND logs error messages about the root key being expired,// you will need to update your keys.  See https://www.isc.org/bind-keys//========================================================================dnssec-validation auto;listen-on-v6 { any; };
    };
    
    • 用于设置服务器的基本运行参数,包括监听端口、允许查询的客户端等设置。
  5. db.empty文件。

    ; BIND reverse data file for empty rfc1918 zone
    ;
    ; DO NOT EDIT THIS FILE - it is used for multiple zones.
    ; Instead, copy it, edit named.conf, and use that copy.
    ;
    $TTL    86400
    @       IN      SOA     localhost. root.localhost. (1         ; Serial604800         ; Refresh86400         ; Retry2419200         ; Expire86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      localhost.
    
    • 本文件是区域数据文件的模板文件。包括记录的存活时间(TTL)、起始授权机构(SOA)记录、服务器和IP记录。

2. 配置正向解析

  1. 编辑named.conf.options文件,在文件中加入以下内容,用于配置网络接口和允许进行DNS查询的客户端地址范围。

    listen-on port 53 {192.168.1.128;};
    allow-query {192.168.1.0/24;};
    
  2. 编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的区域。

    zone "xy104.com" {type master;file "/etc/bind/xy104.local";
    };
    
  3. 复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。

    $TTL    86400
    @       IN      SOA     xy104.com. admin.xy104.com. (1         ; Serial604800         ; Refresh86400         ; Retry2419200         ; Expire86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      xy104.com.
    @       IN      A       192.168.1.128
    www     IN      A       192.168.1.128
    
  4. 配置完成后,重启BIND服务。

    systemctl restart bind9
    
  5. 编辑网络配置文件,重新设置DNS的IP。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128]
    
  6. 查看正向解析是否设置成功。

    nslookup www.xy104.comServer:         127.0.0.53
    Address:        127.0.0.53#53Non-authoritative answer:
    Name:   www.xy104.com
    Address: 192.168.1.128
    

3. 配置反向解析

  1. 编辑named.conf.local文件,在文件中定义区域的相关配置,设置一个匹配域名xy104.com的反向区域。

    zone "1.168.192.in-addr.arpa" {type master;file "/etc/bind/xy104.local";
    };
    
  2. 复制区域数据文件目标,复制后的文件路径要和区域设置里的路径保持一致。修改文件,设置域名xy104.com对应的IP等信息。

    $TTL    86400
    @       IN      SOA     xy104.com. admin.xy104.com. (1         ; Serial604800         ; Refresh86400         ; Retry2419200         ; Expire86400 )       ; Negative Cache TTL
    ;
    @       IN      NS      xy104.com.
    @       IN      A       192.168.1.128
    www     IN      A       192.168.1.128
    128     IN      PTR     www.xy104.com.
    
  3. 配置完成后,重启BIND服务。

    systemctl restart bind9
    
  4. 查看反向解析是否设置成功。

    nslookup 192.168.1.128128.1.168.192.in-addr.arpa      name = www.xy104.com.
    

4. 配置主从解析

  1. 基于前面配置实现主从解析。原有的主机作主服务器,编辑原有的named.conf.local文件,修改区域配置。保存文件后,重启BIND服务。

    zone "xy104.com" {type master;file "/etc/bind/xy104.local";allow-transfer {192.168.1.129;};
    };zone "1.168.192.in-addr.arpa" {type master;file "/etc/bind/xy104.local";allow-transfer {192.168.1.129;};
    };
    
  2. 配置主服务器的网络配置,设置两个DNS,并重启网络服务。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.128/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128, 192.168.1.129]
    
  3. 在另一台主机上安装BIND服务。

    apt -y install bind9
    
  4. 编辑named.conf.options文件,在文件中加入以下内容.

    listen-on port 53 {any;};
    allow-query     {any;};
    
  5. 编辑named.conf.local文件,修改从服务器的区域配置。

    zone "xy104.com" {type slave;file "xy104.local";masters {192.168.1.128;};
    };zone "1.168.192.in-addr.arpa" {type slave;file "xy104.local";masters {192.168.1.128;};
    };
    
  6. 重启从服务器的BIND服务。

    systemctl restart bind9
    
  7. 配置从服务器网络,然后重启网络服务。

    network:ethernets:ens33:dhcp4: noaddresses: [192.168.1.129/24]gateway4: 192.168.1.254nameservers:addresses: [192.168.1.128, 192.168.1.129]
    
  8. 验证主从解析是否存在问题。

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

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

相关文章

华为云全球加速GA该在什么场景使用呢?

在全球化的商业环境中,企业面临着如何快速、稳定地扩展全球业务的挑战。华为云全球加速(GA)作为一款高效的全球网络加速服务,致力于帮助企业提升全球用户的访问体验,确保业务的稳定运行。九河云来和大家介绍一下什么是…

【C++】string(一)

大家好,我是苏貝,本篇博客带大家了解C的string类,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1. 标准库中的string类1.1 string类(了解)1.2 string类的常用接口说明(A) string类对象的…

qt QSyntaxHighlighter详解

1、概述 QSyntaxHighlighter是Qt文本处理框架中的一个强大工具,它专门用于实现文本编辑器中的语法高亮功能。通过自定义高亮规则,QSyntaxHighlighter可以实现对代码编辑器、富文本编辑器中的关键字、注释等内容的高亮显示。这一功能对于提升代码的可读性…

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下,记录和管理车险保单信息是一项必不可少的任务。然而,面对数量庞大的电子保单,传统的手工录入方式显得尤为低效——它不仅消耗大量时间,而且容易出现错误,这不仅影响了用户的满意度&#xf…

有效提升网站流量的SEO技巧分享

内容概要 在数字时代,SEO(搜索引擎优化)已经成为提升网站曝光度和吸引访问者的重要工具。SEO的核心目标是通过优化网站的各个方面,提高在搜索引擎结果页面上的排名,从而获得更多的自然流量。有效的SEO策略能够让您在激…

【go从零单排】JSON序列化和反序列化

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,处理 JSON 数据主要依赖于 encoding/json 包。这个包提…

虚幻引擎 CEO 谈元宇宙:发展、策略与布局

在当今科技领域,元宇宙无疑是最热门的话题之一。Epic Games 首席执行官 Tim Sweeney 对元宇宙的未来发展充满信心,他认为开放元宇宙将融合娱乐、游戏和科技产业,带来一个光明的未来。本文将深入探讨采访中的关键内容,分析元宇宙的…

QT自定义控件封装

QT自定义控件封装 1.概述 这篇文章介绍如何创建UI文件,通过自定义方式将两个控件联动起来,实现自定义功能。 2.创建UI文件 新建一个widget的普通项目,然后在项目名称上右键选择And New... 新建文件,然后选择QT 再选择Qt Desig…

王鹤棣演唱会即将泰国开唱,从原点走向未来,兑现与粉丝之约

对喜爱王鹤棣的粉丝来说,12月28日注定是个令人激动的日子,因为这天,王鹤棣即将在泰国曼谷举办D.Party演唱会,这一消息一经官宣,便引发大量中国以及东南亚地区粉丝欢呼,大家对王鹤棣此次演唱会表现出超常热情…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

<项目代码>YOLOv7 草莓叶片病害识别<目标检测>

YOLOv7是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv7具有更高的…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象:二、原因分析:1、测量值不准问题分析:2、采样干扰问题分析 三、解决办法:1、硬件:(1)、电源供电(2)、引脚电容(3)、减少采…

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935

android studio 轮询修改对象属性(修改多个textview的text)

android studio版本:23.3.1 例程名称:loopsettextviewtext 这几天在帮一个朋友做个数独小游戏,如下图: 要可以玩自定义游戏,点击清空后,所以数字要清除。 要把所有的内容清空,一共有81个text…

Linux(CentOS)项目总结(前后端分离)

项目情况: 前端开发:vue3 vite ts VSCode后端开发:JDK17 Spring Boot 3 Mybatis Maven IDEA数据库:MySQL8.4.3 SQLyog代码管理:Git虚拟环境:VMware远程登录:FinalShell服务器操作系统&…

C# 选择文件夹路径

通过C#代码,调出windows风格的文件夹选择框。提供界面来选择指定文件夹,并将文件夹完整路径以字符串形式返回。 示例: 代码: #region 选择指定文件夹 string folderPath ""; FolderBrowserDialog folderBrowserDialo…

unity3d————协程原理讲解

1.协程的本质 协程可以分成两部分1.协程函数本体 2.协程调度器 协程本体就是一个能够中间暂停返回的函数 协程调度器是Unity内部实现的,会在对应的时机帮助我们继续执行协程函数 Unity只实现了协程调度部分协程的本体本质上就是一个 C#的迭代器方法 2.协程本体是…

丹摩征文活动|CogVideoX-2b:从0到1,轻松完成安装与部署!

丹摩征文活动 | CogVideoX-2b:从0到1,轻松完成安装与部署! CogVideoX 介绍 CogVideoX的问世,标志着视频制作技术迈入了一个全新的时代。它不仅打破了传统视频制作在效率与质量之间的平衡难题,还通过其先进的3D变分自…

知识库搭建|员工培训的效率利器

在企业的快速发展过程中,知识库的搭建成为了提升员工培训效率的关键一环。一个高效的知识库不仅能够为员工提供便捷的学习资源,还能促进知识的持续积累和传承。本文将探讨如何借助知识库工具,来提升员工培训的效率。 一、知识库在员工培训中…

OneRestore: A Universal Restoration Framework for Composite Degradation 论文阅读笔记

这是武汉大学一作单位的一篇发表在ECCV2024上的论文,文章代码开源,文章首页图如下所示,做混合图像干扰去除,还能分别去除,看起来很牛逼。文章是少见的做混合图像干扰去除的,不过可惜只包含了3种degradation…