自学内容网 自学内容网

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


原文地址:https://blog.csdn.net/weixin_58519482/article/details/142918822

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!