目录

1.0 简介

2.0 域名

域名的分类

域名服务器的分类

3.0 解析流程

4.0 DNS小实验

文件解读

查找配置文件

主配置文件

区域配置文件

DNS映射信息文件

正向解析

服务端

客户端

反向解析

服务端

客户端

主从同步

主服务端

从服务端

客户端

主从增量

主服务端

从服务端

客户端


1.0 简介

🔭DNS基本信息

  1. 什么是DNS:Domain Name System(域名系统)

  2. 产生原因 : 因为ip太多了,记不住,所以搞一个域名跟ip进行绑定,方便记忆,随着时代发着ip慢慢拥有了商标属性,具有庞大的商业价值

  3. 连接方式:知名端口号53,通常DNS是以UDP这个较快速的数据传输协议来查询的,但是UDP没有查询到完整的信息时,就会再次以TCP这个协议来重新查询,所以启动DNS时,会同时启动TCP以及UDP的port53。

2.0 域名

域名的分类

  • 国家顶级域名:采用ISO3166的规定,cn-->中国,us-->美国,uk-->英国……;国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码country-code)

  • 通用顶级域名:最常见的通用顶级域名有7个,com-->公司企业,net-->网络服务机构,org-->非营利组织,int-->国际组织,gov-->美国的政府部门,mil-->美国的军事部门

  • 基础结构域名:这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名

域名服务器的分类

  • 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。他负责告诉用户那些管理顶级域名(.com .net ....)服务器的ip是在哪里

  • 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。问 顶级域名 的管理xxxx.xxx 的权威域名解析服务器地址是多少

  • 权威域名服务器:负责一个“区”的域名服务器。问 权威域名服务器 具体url对应ip地址是多少

  • 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

  • 主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(master),负责解析至少一个域。其他的是辅助(从)DNS服务器(slave):负责解析至少一个域,是主DNS服务器的辅助。

  • 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。

🔭

  • 不同域只知道自己下级的域的IP地址

  • 当主域名服务器出故障时,辅助域名服务器(从)可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性(主从服务器)

3.0 解析流程

🔭解析流程

递归查询、迭代查询

4.0 DNS小实验

🔭

这实验大部分都是改文件,命令执行很少

在这重申一下,做实验的时候防上网方式是手动(ipv4.method manual)、火墙、selinux都是关的。

正向解析:域名------------->IP

反向解析:IP---------------->域名

文件解读

查找配置文件

 # 查找bind软件生成的软件
 [root@Server ~]# rpm -ql bind |grep /etc
 /etc/logrotate.d/named
 /etc/named
 /etc/named.conf     # 主配置文件
 /etc/named.rfc1912.zones        # 域配置文件
 /etc/named.root.key
 /etc/rndc.conf
 /etc/rndc.key
 /etc/rwtab.d/named
 /etc/sysconfig/named
 /usr/share/doc/bind/sample/etc
 /usr/share/doc/bind/sample/etc/named.conf
 /usr/share/doc/bind/sample/etc/named.rfc1912.zones

主配置文件

/etc/named.conf

 [root@Server ~]# vim /etc/named.conf
  10 options {
  11     listen-on port 53 { 127.0.0.1; };       # DNS监听的端口和IP,如果网卡有多个IP,想全部监听可以写any
  12     listen-on-v6 port 53 { ::1; };      # 监听的IPv6地址
  13     directory   "/var/named";       # 加载、保存DNS映射信息的目录文件
  14     dump-file   "/var/named/data/cache_dump.db";    # 缓存数据库
  15     statistics-file "/var/named/data/named_stats.txt";  # 数据分析文件
  16     memstatistics-file "/var/named/data/named_mem_stats.txt";   # 内存分析文件
  17     secroots-file   "/var/named/data/named.secroots";   # 全域根域名文件
  18     recursing-file  "/var/named/data/named.recursing";  # 递归文件
  19     allow-query     { localhost; };     # 允许的请求,可以是IP网段和any
 ---------
  31     recursion yes;  #yes:递归查询 no:迭代查询
  32
  33     dnssec-validation yes;  # 加密通讯
  34
  35     managed-keys-directory "/var/named/dynamic";
  36     geoip-directory "/usr/share/GeoIP";
  37
  38     pid-file "/run/named/named.pid";    # 当前dns服务的进程id号
  39     session-keyfile "/run/named/session.key";   # 通话密钥
  40
  41     /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
  42     include "/etc/crypto-policies/back-ends/bind.config";
  43 };
  
  # 以下部分是写区域的格式,不建议在主配置文件中写域,建议在专门配域的文件中写,不容易乱,好管理。
  52 zone "." IN {
  53     type hint;
  54     file "named.ca";
  55 };
  
  # 以下是主配置文件会加载的文件
  57 include "/etc/named.rfc1912.zones";     # 区域配置文件
  58 include "/etc/named.root.key";

区域配置文件

/etc/named.rfc1912.zones

 [root@Server ~]# vim /etc/named.rfc1912.zones
  # 正向解析格式的模板
  # localhost.localdomain:写域名的,管理区域叫做localhost.localdomain
  # type master:服务器类型(master==主;slave==从)。
  # file "named.localhost":加载DNS映射信息文件的路径。
  # allow-update { none; }:不允许从DNS服务器更新。
  17 zone "localhost.localdomain" IN {
  18     type master;
  19     file "named.localhost";
  20     allow-update { none; };
  21 };
  
  # 反向解析的模板
  # 1.0.0.127.in-addr.arpa 写要域名解析成的IP网络位(注意是IP的网络位),IP还得倒过来写。
  42 zone "1.0.0.127.in-addr.arpa" IN {
  43     type master;
  44     file "named.loopback";
  45     allow-update { none; };
  46 };

DNS映射信息文件

/var/named/下的文件

 [root@Server ~]# ll /var/named/
 # 注意用户组是属于named的,自己创建时记得改所属组,或者直接cp -a 复制模板
 total 16
 drwxrwx--- 2 named named    6 Jul 10 23:07 data
 drwxrwx--- 2 named named    6 Jul 10 23:07 dynamic
 -rw-r----- 1 root  named 2112 Jul 10 23:07 named.ca
 -rw-r----- 1 root  named  152 Jul 10 23:07 named.empty
 -rw-r----- 1 root  named  152 Jul 10 23:07 named.localhost      # 正向解析模板
 -rw-r----- 1 root  named  168 Jul 10 23:07 named.loopback       # 反向解析模板
 drwxrwx--- 2 named named    6 Jul 10 23:07 slaves       # 从服务器内容文件一般在这个目录下
 [root@Server named]# vim named.localhost
 # 放在修改这个文件中的域名后都加上.是没错的,不加.的话或实验可能会成功,也可能会不成功
 # $TTL 1D   生存时间1天。
 # 第一个@  表示当前域,就是这个文件要解析那一个域(域名是在/etc/named.rfc1912.zones中定义的域名,写完域名后,后面要加上.),可以保留@,不写域名
 # IN    Internet,互联网。
 # 第二个@  指的是权威域名服务器,表示当前文件授权的DNS,也就是它会去读取下面的那个NS后的@记录。
 # rname.invalid.    填邮箱为了避免@与前面第一个@冲突,所以换成点,例:admin@163.com ====> admin.163.com
 # 0   ; serial  表示这个文件中的DNS映射信息是否有更新,有的话加一,反正比原来的数字大就可以,一遍工作中是拿日期来写的
 # 1D  ; refresh     刷新时间,配置主从服务器时可能用得到(用手动刷新从服务器的命令更容易看到效果,不必在这里调这个时间)
 $TTL 1D
 @   IN SOA  @ rname.invalid. (
                     0   ; serial    # 序号 当dns配置信息更新时 序号+1
                     1D  ; refresh   # 刷新时间
                     1H  ; retry     # 重连时间
                     1W  ; expire    # 过期时间
                     3H )    ; minimum   # 缓存时间
     NS  @   # 声明用户名解析服务器
     # 在下面配域名解析,每个 解析行 间不可以空开,必须连在一起
     A   127.0.0.1       # ipv4格式
     AAAA    ::1         # ipv6格式
 ~
 ~
 ​
 ​
 [root@Client named]# vim named.loopback
 # 和正向解析一样,不做赘述
 # 值得注意的是反向解析行前的IP地址也是倒过来的
 #
 $TTL 1D
 @   IN SOA  @ rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  @
     A   127.0.0.1
     AAAA    ::1
     PTR localhost.
 ~
 ~

正向解析

服务端

 [root@Server ~]# dnf install bind -y > /dev/null
 [root@Server named]# vim /etc/named.conf
  10 options {
  11     listen-on port 53 { any; };
  19     allow-query     { any; };
  43 };
  # 不在这个文件中添加区域,在这个/etc/named.rfc1912.zones文件中添加区域
 [root@Server named]# vim /etc/named.rfc1912.zones
  17 zone "localhost.localdomain" IN {
  18     type master;
  19     file "named.localhost";
  20     allow-update { none; };
  21 };
  22
  23 zone "xixi.com" IN {
  24     type master;
  25     file "xixi.com.zone";
  26     allow-update { none; };
  27 };
 [root@Server ~]# cd /var/named/
 [root@Server named]# cp -a named.localhost xixi.com.zone
 [root@Server named]# vim xixi.com.zone
 $TTL 1D
 xixi.com.   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. IN A 192.168.126.100
 www.xixi.com. IN A 192.168.126.110
 bbs.xixi.com. IN A 192.168.126.120
 ​
 # 可以简写成以下格式
 $TTL 1D
 @   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns A 192.168.126.100
 www A 192.168.126.110
 bbs A 192.168.126.120
 [root@Server named]# systemctl start named

客户端

 [root@Client ~]# dnf install bind -y > /dev/null
 # 把DNS改为从服务器的IP再nslookup一下,改DNS用nmtui和nmcli都可以,改为记得起一下会议
 [root@Client ~]# nmcli c mod eth0 ipv4.dns 192.168.126.100
 [root@Client ~]# nmcli c up eth0
 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
 [root@Client ~]# nmcli device show | grep -i dns
 IP4.DNS[1]:                             192.168.126.100
 # 可以有两个命令看效果host、nslookup
 [root@Client ~]# host ns.xixi.com
 ns.xixi.com has address 192.168.126.100
 [root@Client ~]# host www.xixi.com
 www.xixi.com has address 192.168.126.110
 [root@Client ~]# host bbs.xixi.com
 bbs.xixi.com has address 192.168.126.120
 [root@Client ~]# nslookup ns.xixi.com
 Server:         192.168.126.100
 Address:        192.168.126.100#53
 ​
 Name:   ns.xixi.com
 Address: 192.168.126.100
 ​
 [root@Client ~]# nslookup www.xixi.com
 Server:         192.168.126.100
 Address:        192.168.126.100#53
 ​
 Name:   www.xixi.com
 Address: 192.168.126.110
 ​
 [root@Client ~]# nslookup bbs.xixi.com
 Server:         192.168.126.100
 Address:        192.168.126.100#53
 ​
 Name:   bbs.xixi.com
 Address: 192.168.126.120

反向解析

服务端

 [root@Server ~]# vim /etc/named.rfc1912.zones
  35 zone "1.0.0.127.in-addr.arpa" IN {
  36     type master;
  37     file "named.loopback";
  38     allow-update { none; };
  39 };
  40
  41 zone "126.168.192.in-addr.arpa" IN {
  42     type master;
  43     file "192.168.126.arpa";
  44     allow-update { none; };
  45 };
 [root@Server ~]# cd /var/named/
 [root@Server named]# cp -a named.loopback 192.168.126.arpa
 [root@Server named]# vim 192.168.126.arpa
 $TTL 1D
 126.168.192.in-addr.arpa.   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. A 192.168.126.100
 110.126.168.192.in-addr.arpa.  PTR  www.xixi.com.
 120.126.168.192.in-addr.arpa.  PTR  bbs.xixi.com.
 # 也可以简写成这样
 $TTL 1D
 @   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. A 192.168.126.100
 110 PTR www.xixi.com.
 120 PTR bbs.xixi.com.

客户端

 [root@Client ~]# nslookup 192.168.126.110
 110.126.168.192.in-addr.arpa    name = www.xixi.com.
 ​
 [root@Client ~]# nslookup 192.168.126.120
 120.126.168.192.in-addr.arpa    name = bbs.xixi.com.

主从同步

主服务端

 [root@Server ~]# vim /etc/named.conf
  10 options {
  11     listen-on port 53 { any; };
  19     allow-query     { any; };
  43 };
  # 不在这个文件中添加区域,在这个/etc/named.rfc1912.zones文件中添加区域
 [root@Server ~]# vim /etc/named.rfc1912.zones
  41 zone "1.0.0.127.in-addr.arpa" IN {
  42     type master;
  43     file "named.loopback";
  44     allow-update { none; };
  45 };
  46
  47 zone "126.168.192.in-addr.arpa" IN {
  48     type master;
  49     file "192.168.126.arpa";
  50     allow-update { none; };
  51 };
 [root@Server ~]# cd /var/named/
 [root@Server named]# cp -a named.localhost xixi.com.zone
 [root@Server named]# vim xixi.com.zone
 $TTL 1D
 xixi.com.   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. IN A 192.168.126.100
 www.xixi.com. IN A 192.168.126.110
 bbs.xixi.com. IN A 192.168.126.120
 slave A 192.168.126.101     # 加这个保险一点,不加好像实验也可以成功
 ​
 [root@Server named]# cp -a named.loopback 192.168.126.arpa
 [root@Server named]# vim 192.168.126.arpa
 $TTL 1D
 @   IN SOA  ns.xixi.com. rname.invalid. (
                     0   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. A 192.168.126.100
 110 PTR www.xixi.com.
 120 PTR bbs.xixi.com.
 101 PTR slave.baidu.com.
 # 等从服务端配好文件后再起服务,从服务端会自动把主服务器/var/named/下的映射文件拉(下载)到从服务器/var/named/slaves下
 [root@Server named]# systemctl restart named

从服务端

 [root@ServerB ~]# dnf install bind -y > /dev/null
 [root@Server named]# vim /etc/named.conf
  10 options {
  11     listen-on port 53 { any; };
  19     allow-query     { any; };
  43 };
 [root@ServerB ~]# vim /etc/named.rfc1912.zones
  17 zone "localhost.localdomain" IN {
  18     type master;
  19     file "named.localhost";
  20     allow-update { none; };
  21 };
  22
  23 zone "xixi.com" IN {
  24     type slave;
  25     masters { 192.168.126.100; };
  26     file "slaves/xixi.com.zone";
  27 };
 ​
  41 zone "1.0.0.127.in-addr.arpa" IN {
  42     type master;
  43     file "named.loopback";
  44     allow-update { none; };
  45 };
  46
  47 zone "126.168.192.in-addr.arpa" IN {
  48     type slave;
  49     masters { 192.168.126.100; };
  50     file "slaves/192.168.126.arpa";
  51 };
 # 配置好后等主服务器重新加载/重启服务后再重启服务,重启后可以看到已经把主服务器的映射信息文件拉过来了
 [root@ServerB ~]# systemctl start named
 [root@ServerB ~]# ll /var/named/slaves/
 total 8
 -rw-r--r-- 1 named named 382 Nov  8 15:45 192.168.126.arpa
 -rw-r--r-- 1 named named 352 Nov  8 15:39 xixi.com.zone

客户端

 # 把DNS改为从服务器的IP再nslookup一下,改DNS用nmtui和nmcli都可以,改为记得起一下会议
 [root@Client ~]# nmcli c mod eth0 ipv4.dns 192.168.126.101
 [root@Client ~]# nmcli c up eth0
 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
 [root@Client ~]# nmcli device show | grep -i dns
 IP4.DNS[1]:                             192.168.126.101
 [root@Client ~]# nslookup www.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 Name:   www.xixi.com
 Address: 192.168.126.110
 ​
 [root@Client ~]# nslookup bbs.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 Name:   bbs.xixi.com
 Address: 192.168.126.120
 ​
 [root@Client ~]# nslookup ns.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 Name:   ns.xixi.com
 Address: 192.168.126.100
 ​
 [root@Client ~]# nslookup slave.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 Name:   slave.xixi.com
 Address: 192.168.126.101
 [root@Client ~]# nslookup 192.168.126.110
 110.126.168.192.in-addr.arpa    name = www.xixi.com.
 ​
 [root@Client ~]# nslookup 192.168.126.120
 120.126.168.192.in-addr.arpa    name = bbs.xixi.com.
 ​
 [root@Client ~]# nslookup 192.168.126.101
 101.126.168.192.in-addr.arpa    name = slave.baidu.com.

主从增量

这个很简单,主服务器添加映射信息后serial值增大,如果客户端没有效果,从服务器手动刷新一下,就可以了

主服务端

 [root@Server named]# vim xixi.com.zone
 $TTL 1D
 xixi.com.   IN SOA  ns.xixi.com. rname.invalid. (
                     1   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. IN A 192.168.126.100
 www.xixi.com. IN A 192.168.126.110
 bbs.xixi.com. IN A 192.168.126.120
 slave A 192.168.126.101
 fanyi A 192.168.126.130
 [root@Server named]# vim 192.168.126.arpa
 $TTL 1D
 @   IN SOA  ns.xixi.com. rname.invalid. (
                     1   ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
     NS  ns.xixi.com.
 ns.xixi.com. A 192.168.126.100
 110 PTR www.xixi.com.
 120 PTR bbs.xixi.com.
 101 PTR slave.baidu.com.
 130 PTR fanyi.baidu.com.
 [root@Server named]# systemctl restart named

从服务端

 # 客户端没有效果,来从服务端手动更新:"rndc refresh 区域文件中定义的管理区域的名字"
 [root@ServerB ~]# rndc refresh xixi.com
 zone refresh queued
 [root@ServerB ~]# rndc refresh 126.168.192.in-addr.arpa
 zone refresh queued

客户端

 # 重启named服务,但是从服务端没有刷新状况
 [root@Client ~]# nslookup 192.168.126.130
 ** server can't find 130.126.168.192.in-addr.arpa: NXDOMAIN
 ​
 [root@Client ~]# nslookup fanyi.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 ** server can't find fanyi.xixi.com: NXDOMAIN
 # 从服务端手动刷新后情况
 [root@Client ~]# nslookup 192.168.126.130
 130.126.168.192.in-addr.arpa    name = fanyi.baidu.com.
 ​
 [root@Client ~]# nslookup fanyi.xixi.com
 Server:         192.168.126.101
 Address:        192.168.126.101#53
 ​
 Name:   fanyi.xixi.com
 Address: 192.168.126.130
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐