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

linux基本系统服务——DNS服务

一、DNS域名解析原理

DNS,Domain Name System,域名系统:在互联网中由大量域名解析服务器共同提供的一整套关于“域名 <--> IP地址”信息查询的数据系统

    !!!! C/S架构:DNS服务端监听UDP 53端口(处理客户端查询),也监听TCP 53端口(主-辅同步)

    !!!! 客户机向DNS服务器提问:xx域名的IP地址是多少?

#### 如何通过域名找到一个站点

    FQDN,Full Qualified Domain Name,完全限定域名(站点名+域名) ,比如:servera.lab.example.com、www.stu.cn

#### 分层次管理(域名体系结构):

    根域 =》.

    顶级域/一级域 =》.com、.cn

    二级域 (最常见)=》 .example.com、.stu.cn

    三级域(比较少) =》 lab.example.com、……

    站点(使用DNS名称的各服务器)=》 www、mail、ftp、game、news、……

#### 分布式部署(域名服务器):

    每个权威DNS服务器只负责分担自己管辖的一个或多个域,提供这个域内的名称解析服务

    每个权威DNS服务器可以代客户端查询管辖范围外的域名(问其他DNS服务器)

    每个权威DNS服务器可以授权某个子域DNS服务器,告知客户端自己去找子域DNS服务器继续查询

    比如,IANA管理根域(.)的DNS服务器、CNNIC管理一级域.cn的DNS服务器、stu管理二级域.stu.cn的DNS服务器

#### DNS服务器的类型

    权威DNS:需由IANA统一授权管理,管理一个或更多个DNS区域,有公网IP地址

    缓存DNS:运行商或企业自行架设、自行管理,主要面向客户端提供代理查询服务,提高客户体验(缓存加速),无需管理任何区域

#### 域名查询的主要方式

    !!!! 按问题内容分 ——

       正向查询:根据已知的域名查询这个域名的IP地址,比如“域名www.baidu.com的IP地址是多少?”

       反向查询:根据已知的IP地址查询这个IP地址的域名,比如“IP地址39.156.66.18对应的域名是什么?”

    !!!! 按服务方式分 ——

       递归查询:为客户机查询非本DNS服务器管辖的解析记录,主要出现在“客户机 -> 缓存DNS服务器”场景;客户端只发送一次查询请求,剩下的都交给DNS服务器

       迭代查询:告知客户机子域DNS服务器的地址,让客户机自己去找子域DNS查询,主要出现在“缓存DNS -> 权威DNS服务器”场景;客户端需要发送多次查询请求,依次询问根DNS、一级DNS、二级DNS、……

#### 域名解析条目的类型

    TTL:设置解析记录的默认超时时间(缺省单位为秒,可以添加 H/D/W表示小时/天/周)

    SOA:设置区域授权记录(建议参考/var/named/named.localhost范本文件) —— @ IN  SOA   @  admin.@  (  .. .. )

    NS:域名服务器

    MX:邮件服务器记录

    CNAME:域名别名记录

    A:正向解析记录(域名->IPv4地址)

    AAAA:正向解析记录(域名->IPv6地址)

    PTR:反向解析记录(IP地址->域名)

   

二、域名查询(host/nslookup/dig)

软件包bind-utils提供以下域名查询工具:

    host:简单查询工具,用法:host    域名或IP地址   DNS服务器地址

    nslookup:交互式查询工具,用法:nslookup    域名或IP地址   DNS服务器地址

    dig:深度挖掘查询工具,用法:dig  @DNS服务器地址    域名或IP地址   [-t  资源类型]

[root@work ~]# yum   -y   install   bind-utils       //安装域名查询工具包

!!!! 使用上述工具时,需要有可用的DNS服务器

!!!! 如果还没有配置DNS服务器,也可以找一台能上网的主机,练习host/nslookup/dig命令

!!!! 在Windows系统中,自带nslookup命令,也可以向DNS查询域名

练习:查询域名

1)直接查询(向本机设置的默认DNS服务器查询)www.12306.cn的IP地址

C:\Users\TsengYia>nslookup  www.12306.com

服务器:  public1.114dns.com

Address:  172.50.163.10

非权威应答:

名称:    www.12306.com

Address:  112.74.143.83

2)向DNS服务器8.8.8.8查询www.12306.cn的IP地址

C:\Users\TsengYia>nslookup  www.12306.com  8.8.8.8

服务器:  dns.google

Address:  8.8.8.8

非权威应答:

名称:    www.12306.com

Address:  112.74.143.83

3)向8.8.8.8查询IP地址114.114.114.114的域名是多少(注意:大多数IP地址是查不到反向结果的)

C:\Users\TsengYia>nslookup  114.114.114.114  8.8.8.8

服务器:  dns.google

Address:  8.8.8.8

名称:    public1.114dns.com

Address:  114.114.114.114

三、权威DNS服务器-bind正向域设置

BIND,Berkeley Internet Name Domain,伯克利互联网名称服务器

servera(权威DNS服务器,servera.lab.example.com的IP地址是多少)

    1)装包 bind

    2)配置 (主配置、地址库)

    3)起服务  named

   

获取BIND配置帮助:

# man  named.conf

# firefox  file:///usr/share/doc/bind/Bv9ARM.html

   

#### 主配置文件/etc/named.conf,设置DNS全局参数、管理哪些区域(用哪一个地址库)、安全控制、……

# vim  /etc/named.conf

options  {

    listen-on port 53 { 本机的IPv4监听地址; };

    listen-on-v6 port 53 { 本机 ky的IPv6监听地址; };

    directory       "/var/named";          //指定地址库文件的默认存放目录

    allow-query     { 客户机的网段或IP地址; };

    recursion yes;           //是否允许提供递归查询服务

    dnssec-enable yes;       //启用DNS安全

    dnssec-validation yes;      //启用DNS安全校验

};

zone  "区域名"  IN  {

    type  master;            //设置区域类型(master、hint、slave、forward)

    file  地址库文件名或者绝对路径;

};

include   xxxx文件;     //需要在主配置文件中包含xxxx文件

# named-checkconf  //查错工具

TTL,Time To Live,存活时间(DNS解析记录的有效期)

SOA,Start Of Authority,授权记录的开始(管理的区域的信息,以及提供给从DNS服务器用的一些参数)

#### 地址库文件 /var/named/*,设置具体的地址记录(域名->IP地址)

# vim  /var/named/地址库文件名

$TTL   有效记录的生存时间

@  IN  SOA  区域名    管理邮箱地址.  (

    序列号               //十位以内的整数

    刷新时间

    重试时间

    过期时间

    无效记录的生存时间

)

@      NS     当前区域的DNS服务器的域名.

           MX   优先级   当前区域的邮件服务器的域名.

www A      IP地址

mail   A      IP地址

servera       A      IP地址

.. ..

# named-checkzone   区域名    地址库文件的路径和名称           //查错

work(客户机) ==》servera(权威DNS)

实验拓扑:

    servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com)

    work(客户机):向servera查询域名serverc.lab.example.com的IP地址

1)安装bind包

[root@servera ~]# yum  -y  install  bind

2)调整配置

[root@servera ~]# vim  /etc/named.conf        //修改主配置文件

options {

        listen-on port 53 { any; };           //在本机所有IPv4接口监听

        listen-on-v6 port 53 { any; };        //在本机所有IPv6接口监听

       directory       "/var/named";          //zone地址库文件的默认存放路径

       allow-query     { localhost; 172.25.250.0/24; };        //允许哪些客户机查询

       .. ..

};

       zone "lab.example.com" {               //定义DNS区域

           type master;         //类型为主区域

           file "lab.example.com.zone";       //指定地址库文件名

       };

[root@servera ~]# named-checkconf         //检查主配置文件(无输出即无错)

[root@servera ~]#

[root@servera ~]# vim  /var/named/lab.example.com.zone      //创建正向区域地址库文件

$TTL 1D

@  IN  SOA  @     root.lab.example.com. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

@       NS      servera.lab.example.com.

servera       A       172.25.250.10

serverb       A       172.25.250.11

serverc       A       172.25.250.12

serverd       A       172.25.250.13

[root@servera ~]# chmod  640  /var/named/lab.example.com.zone

[root@servera ~]# chown  :named  /var/named/lab.example.com.zone

[root@servera ~]# named-checkzone  lab.example.com  /var/named/lab.example.com.zone  //检查区域地址文件(OK即无错)

.. ..

OK

3)启动named服务

[root@servera ~]# firewall-cmd  --permanent  --add-service=dns        //开放DNS访问

[root@servera ~]# firewall-cmd  --reload      //重载防火墙

[root@servera ~]# systemctl  enable  named  --now       //启用named服务

4)域名查询测试 —— 向servera查询serverc的IP地址

[root@work ~]# host  serverc.lab.example.com  servera 

Using domain server:

Name: servera

Address: 172.25.250.10#53

Aliases:

serverc.lab.example.com has address 172.25.250.12

四、权威DNS服务器-bind反向域设置

针对网段172.25.250/24,

对应的反向区域的名称 250.25.172.in-addr.arpa

然后在主配置文件中也需要定义也这个区域,并且提供相应的地址库文件

对应的反向地址记录:

12     PTR           完整的域名.

work(客户机) ==》servera(权威DNS)

实验拓扑:

    servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa)

    work(客户机):向servera查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名

1)修改主配置文件,添加反向域设置

[root@servera ~]# cp  -p  /etc/named.conf{,.bak}     //备份主配置文件

[root@servera ~]# vim  /etc/named.conf

 .. ..

    zone "250.25.172.in-addr.arpa" IN {       //注意反向区域名中网段的倒序写法

        type master;

        file "172.25.250.zone";

    };

2)创建反向区域地址库文件

[root@servera ~]# vim  /var/named/172.25.250.zone

$TTL 300

@       IN SOA  @    root.example.com. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

@        NS      servera.lab.example.com.

10      PTR     servera.backend.lab.example.com.

11      PTR     serverb.backend.lab.example.com.

12      PTR     serverc.backend.lab.example.com.

13      PTR     serverd.backend.lab.example.com.

[root@servera ~]# chmod  640  /var/named/172.25.250.zone

[root@servera ~]# chown  :named  /var/named/172.25.250.zone

[root@servera ~]# named-checkzone  250.25.172.in-addr.arpa /var/named/172.25.250.zone  //检查反向区域地址文件(OK即无错)

.. ..

OK

3)重启named服务

[root@servera ~]# systemctl  restart  named

4)域名查询测试 —— 向servera查询IP地址172.25.250.12的域名

[root@work ~]# host  172.25.250.12  servera 

Using domain server:

Name: servera

Address: 172.25.250.10#53

Aliases:

12.250.25.172.in-addr.arpa domain name pointer serverc.lab.example.com.

扩展小知识(解析库的应用) ——

DNS解析记录的轮询(负载均衡,一个站点对应多个IP地址):

serverd       A       172.25.250.13

serverd       A       72.25.250.13

别名解析记录的设置(一个IP对应多个站点):

servera       A       172.25.250.10

www               CNAME   servera

泛域名解析记录的设置(只查询域名或错误的站点名,也能有结果):

@       NS      servera.lab.example.com.

           A       172.25.250.10

*          A       172.25.250.10

五、缓存DNS服务器-unbound缓存/转发设置

work(客户机) ==》serverb(缓存DNS) ==》servera(权威DNS)

实验拓扑:

    servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa)

    serverb.lab.example.com,缓存DNS,代理客户端查询,将来自客户端的所有查询请求转发给servera

    work(客户机):向serverb查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名

1)安装unbound包

[root@serverb ~]# yum  -y  install  unbound

2)调整配置

[root@serverb ~]# cp  -p  /etc/unbound/unbound.conf{,.bak}     //备份主配置文件

[root@serverb ~]# vim  /etc/unbound/unbound.conf        //修改主配置文件

server:

       .. ..

       interface: 172.25.250.11        //在指定接口(可以是0.0.0.0,表示本机所有IP地址)提供监听

        access-control: 172.25.250.0/24 allow    //允许哪些网段的客户机使用(可以配置多行),缺省为refuse拒绝

       access-control: 127.0.0.0/8 allow

       domain-insecure:  "lab.example.com"           //标记不安全区域(允许转发查询,避免对客户端做DNSSEC安全验证)

       unblock-lan-zones: yes  //允许查询本地区域

       insecure-lan-zones: yes     //允许查询不安全的本地区域

forward-zone:

       name: "lab.example.com"            //将针对xx区域的查询转发给指定DNS(其余区域走auth-zone上游DNS服务器)

       forward-addr: 172.25.250.10        //指定另一台DNS服务器的IP地址

forward-zone:

        name: "250.25.172.in-addr.arpa"       //将针对xx反向区域的查询转发给指定DNS

        forward-addr: 172.25.250.10

auth-zone:

       name: "."         //对于未设置转发的其他区域,默认从根域开始查询

       for-downstream: no

       for-upstream: yes

       fallback-enabled: yes

       master: b.root-servers.net

       master: c.root-servers.net

       .. ..

[root@serverb ~]# unbound-checkconf       //检查配置文件

unbound-checkconf: no errors in /etc/unbound/unbound.conf

[root@serverb ~]# unbound-control-setup  //首次起服务前,执行此命令生成密钥文件

.. ..

3)启动unbound服务

[root@serverb ~]# firewall-cmd  --permanent  --add-service=dns        //开放DNS访问

[root@serverb ~]# firewall-cmd  --reload      //重载防火墙

[root@serverb ~]# systemctl  enable  unbound  --now         //启用unbound服务

4)客户端查询DNS记录

[student@work ~]$ host  serverc.lab.example.com  serverb  //向serverb查询serverc的IP地址

.. ..

serverc.lab.example.com has address 172.25.250.12

5)管理缓存的DNS数据

[root@serverb ~]# unbound-control   dump_cache       //查看缓存的解析记录

[root@serverb ~]# unbound-control  flush  work.lab.example.com  //清除缓存的某个域名的解析记录

[root@serverb ~]# unbound-control  flush  lab.example.com  //清除缓存的某个区域的所有解析记录

http://www.xdnf.cn/news/16850.html

相关文章:

  • 【嵌入式汇编基础】-ARM架构基础(三)
  • 宝塔配置文件缺失导致无法正常启动
  • Java 集合框架: LinkedHashSet
  • 进程 Vs 线程
  • 【OpenGL】LearnOpenGL学习笔记01 - 环境配置、窗口创建
  • Flask + YARA-Python*实现文件扫描功能
  • 开源列式分布式数据库clickhouse
  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发
  • Redisson高并发实战:Netty IO线程免遭阻塞的守护指南
  • 算法提升之数学(快速幂+逆元求法)
  • 【20min 急速入门】使用Demucs进行音轨分离
  • Redis7 String类型数据
  • 【iOS】KVO
  • MyBatisPlus之CRUD接口(IService与BaseMapper)
  • 28Rsync免密传输与定时备份
  • 关于Web前端安全防御XSS攻防的几点考虑
  • Spring Boot 全 YAML 配置 Liquibase 教程
  • C++之vector类的代码及其逻辑详解 (中)
  • DockerFile文件执行docker bulid自动构建镜像
  • CMake指令:mark_as_advanced
  • Python序列去重高级指南:保持顺序的高效去重技术
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 类似 Pixso 但更侧重「网页 / 软件界面设计」「前后端可视化开发」的工具
  • 【贪心】P11112 [ROI 2024] 机器人物流 (Day 1)|普及+
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • Java函数式编程之【Stream终止操作】【下】【二】【收集器toMap()】【叁参数收集操作collect()】
  • Maven项目和Spring项目的异同
  • 企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)