> 文章列表 > DNS服务器 - 实践

DNS服务器 - 实践

DNS服务器 - 实践

DNS服务器

    • 1. 正向解析
    • 2. 反向解析
    • 3. 主从服务器配置
    • 4. 常用命令及工具
      • 4.1 常用命令
      • 4.2 域名查询工具 - dig

1. 正向解析

根据域名查询IP地址

  1. 准备两台虚拟机,分别用作服务器和客户端
分类 ip hostname
服务器 192.168.70.70 k8s-node-03
客户端 192.168.70.183 swarm-worker
  1. 服务器端下载bind和bind-utils,这是dns的服务软件

    yum install -y bind bind-utils
    

    客户端安装bind-utils,用于验证DNS

    yum install -y bind-utils
    
  2. 查看配置文件位置

    [root@node1 ~]# rpm -qc bind
    /etc/logrotate.d/named
    /etc/named.conf					#需修改
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones		#需修改
    /etc/named.root.key
    /etc/rndc.conf
    /etc/rndc.key
    /etc/sysconfig/named
    /var/named/named.ca
    /var/named/named.empty
    /var/named/named.localhost		#需修改
    /var/named/named.loopback
    
  3. 修改配置文件

    • 编辑 /etc/named.conf 文件
      监听服务器:any
      运行查询:any
    		[root@node1 ~]# cat /etc/named.conf//...options {listen-on port 53 { any; };								#改成anylisten-on-v6 port 53 { ::1; };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; };								#改成any/*
    • 编辑 /etc/named.rfc1912.zones 文件
      添加自己的域名文件,file “yzcn.com.zone”;
    //
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //zone "yzcn.com" IN {					#修改type master;file "yzcn.com.zone";			#修改};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };
    };
    • 进入 /var/named 目录,新建一个 yzcn.com.zone 文件(复制named.localhost),就是1912文件中 file 的参数
    [root@node1 ~]# cp /var/named/named.localhost /var/named/yzcn.com.zone
    [root@node1 ~]# cat /var/named/yzcn.com.zone
    $TTL 1D
    @       IN SOA  @ rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      @A       127.0.0.1AAAA    ::1
    
实例 分类 说明
0 serial 表示更新系列号,范围0-10
1D refresh 表示刷新时间,重新下载地址数据的间隔
1H retry 表示重试延迟,下载失败后的重试间隔
1W expire 表示失效时间,超过该时间仍无法下载则放弃下载
3H ) minimum 表示无效解析记录的生存周期

修改后

			[root@k8s-node-03 named]# cat yzcn.com.zone$TTL 1D@       IN SOA  master  rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      mastermaster  A       192.168.70.70www     A       192.168.70.70mail    A       192.168.70.183
  1. 编辑网卡文件( /etc/sysconfig/network-scripts/ifcfg-ens33)

    [root@node1 ~]# tail -2 /etc/sysconfig/network-scripts/ifcfg-ens33
    PEERDNS=yes
    DNS=192.168.70.70
    

    由于本机做DNS服务器,所以DNS改为本机

  2. 关闭防火墙,重启network和named服务

    [root@k8s-node-03 named]# systemctl restart network
    [root@k8s-node-03 named]# systemctl restart named
  3. 验证

    [root@k8s-node-03 named]# nslookup www.yzcn.com
    Server:         192.168.70.70
    Address:        192.168.70.70#53Name:   www.yzcn.com
    Address: 192.168.70.70[root@k8s-node-03 named]# nslookup mail.yzcn.com
    Server:         192.168.70.70
    Address:        192.168.70.70#53Name:   mail.yzcn.com
    Address: 192.168.70.183
    
  4. 客户端验证

    [root@swarm-worker ~]# nslookup www.yzcn.com
    Server:         192.168.70.70
    Address:        192.168.70.70#53Name:   www.yzcn.com
    Address: 192.168.70.70[root@swarm-worker ~]# cat /etc/resolv.conf
    #nameserver 8.8.8.8
    #nameserver 114.114.114.114
    nameserver 192.168.70.70
    
  5. 问题

    1. ** server can’t find yzcn.com.zone: SERVFAIL
     [root@k8s-node-03 ~]# nslookup yzcn.com.zone
    Server:         192.168.70.70
    Address:        192.168.70.70#53** server can't find yzcn.com.zone: SERVFAIL
    

    原因:由于yzcn.com.zone是root创建,而named账号无权访问。所以可以改属主或者改访问权限
    解决:

    	chown named:named yzcn.com.zone
    

2. 反向解析

根据IP地址查询域名

具体步骤和正向解析一样的,只是将 /etc/named.rfc1912.zone 和 /var/named/yyh.com.zone 文件修改一下就行

  1. 修改/etc/named.rfc1912.zone

    [root@k8s-node-03 named]# cat /etc/named.rfc1912.zones
    // named.rfc1912.zones:
    ...
    // See /usr/share/doc/bind*/sample/ for example named configuration files.
    //
    zone "70.168.192.in-addr.arpa" IN {type master;file "nczy.com.zone";
    };zone "yzcn.com" IN {type master;file "yzcn.com.zone";
    };
    
  2. 新建/var/named/yyh.com.zone,并修改

    [root@k8s-node-03 named]# cat nczy.com.zone
    $TTL 1D
    @       IN SOA  master  rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      master
    master  A       192.168.70.70
    80      IN      PTR     www.nczy.com.
    25      IN      PTR     mail.nczy.com.
    
  3. 重启服务

    [root@k8s-node-03 named]# systemctl restart named
  4. 验证

    
    [root@k8s-node-03 named]# host 192.168.70.25
    25.70.168.192.in-addr.arpa domain name pointer mail.nczy.com.
    [root@k8s-node-03 named]# host 192.168.70.70
    Host 70.70.168.192.in-addr.arpa. not found: 3(NXDOMAIN)
    [root@k8s-node-03 named]# host 192.168.70.80
    80.70.168.192.in-addr.arpa domain name pointer www.nczy.com.
    

3. 主从服务器配置

此时我们把原客户端服务器升级为DNS从服务器,新增一个客户端服务器

分类 ip hostname
主服务器 192.168.70.70 k8s-node-03
从服务器 192.168.70.183 swarm-worker
客户端 192.168.71.189 node2

在从服务器配置,如下:

  1. 在从服务器安装bind
    yum install -y bind bind-utils
    
  2. 把主服务器配置文件拷贝到从服务器(也可以手动修改)
    [root@swarm-worker ~]# scp root@192.168.70.70:/etc/named.conf /etc/named.conf
    named.conf                                                                                            100% 1794     2.0MB/s   00:00
    [root@swarm-worker ~]# scp root@192.168.70.70:/etc/named.rfc1912.zones /etc/
    named.rfc1912.zones                                                                                   100% 1098     1.2MB/s   00:00
    
  3. 修改 /etc/named.conf 文件(复制过来的可不修改)
    [root@swarm-worker ~]# cat /etc/named.conf
    //
    ...options {listen-on port 53 { any; };listen-on-v6 port 53 { ::1; };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; };
    
  4. 修改 /etc/named.rfc1912.zone 文件
    				[root@swarm-worker ~]# cat /etc/named.rfc1912.zones...//zone "yzcn.com" IN {type slave;						#类型为slavefile "slaves/yzcn.com.zone";	#位于/var/named/masters {192.168.70.70;};		#masters 为主服务器地址};zone "localhost.localdomain" IN {type master;file "named.localhost";allow-update { none; };};
    
  5. 从服务器从重启服务,查看 /etc/named/slaves目录下的文件
    [root@swarm-worker ~]# ll /var/named/slaves/
    total 4
    -rw-r--r--. 1 named named 281 Apr 17 23:38 yzcn.com.zone
  6. 修改/etc/resolv.conf
    [root@node2 ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    #search 253
    # nameserver 219.148.204.66
    #nameserver 192.168.70.183
    nameserver 192.168.70.70
    
  7. 测试
    [root@node2 ~]# nslookup mail.yzcn.com
    Server:         192.168.70.70
    Address:        192.168.70.70#53Name:   mail.yzcn.com
    Address: 192.168.70.183
    

    修改/etc/resolv.conf

    [root@node2 ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    #search 253
    # nameserver 219.148.204.66
    nameserver 192.168.70.183
    #nameserver 192.168.70.70
    [root@node2 ~]# nslookup mail.yzcn.com
    Server:         192.168.70.183
    Address:        192.168.70.183#53Name:   mail.yzcn.com
    Address: 192.168.70.183

4. 常用命令及工具

4.1 常用命令

  • 主配置文件语法检查:
	named-checkconf
  • 检查数据库文件:
[root@k8s-node-03 ~]# named-checkzone "yzcn" /var/named/yzcn.com.zone
zone yzcn/IN: loaded serial 0
OK
  • 配置生效:
    rndc reload 或 service named reload
[root@k8s-node-03 ~]# rndc reload
server reload successful
  • 解析域名
[root@k8s-node-03 ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 220.181.38.150
www.a.shifen.com has address 220.181.38.149

4.2 域名查询工具 - dig

dig(domain information groper)是域名查询工具

  1. 不带选项
[root@k8s-node-03 ~]# dig www.baidu.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42310
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 10;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.                 IN      A;; ANSWER SECTION:
www.baidu.com.          682     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       300     IN      A       220.181.38.150
www.a.shifen.com.       300     IN      A       220.181.38.149;; AUTHORITY SECTION:
a.shifen.com.           683     IN      NS      ns5.a.shifen.com.
a.shifen.com.           683     IN      NS      ns3.a.shifen.com.
a.shifen.com.           683     IN      NS      ns4.a.shifen.com.
a.shifen.com.           683     IN      NS      ns2.a.shifen.com.
a.shifen.com.           683     IN      NS      ns1.a.shifen.com.;; ADDITIONAL SECTION:
ns4.a.shifen.com.       683     IN      A       111.20.4.28
ns4.a.shifen.com.       683     IN      A       14.215.177.229
ns3.a.shifen.com.       683     IN      A       36.152.45.198
ns3.a.shifen.com.       683     IN      A       112.80.255.253
ns5.a.shifen.com.       683     IN      A       180.76.76.95
ns2.a.shifen.com.       683     IN      A       220.181.33.32
ns1.a.shifen.com.       683     IN      A       110.242.68.42
ns5.a.shifen.com.       83      IN      AAAA    240e:bf:b801:1006:0:ff:b04f:346b
ns5.a.shifen.com.       83      IN      AAAA    240e:940:603:a:0:ff:b08d:239d;; Query time: 92 msec
;; SERVER: 192.168.70.70#53(192.168.70.70)
;; WHEN: Tue Apr 18 13:29:14 CST 2023
;; MSG SIZE  rcvd: 359
  1. 选项
@指定进行域名解析的域名服务器。
-b <address>[#<port>]使用指定的本机 IP 地址向域名服务器发送域名查询请求。
-c <class>缺省查询类(IN for internet)由选项 -c 重设。class 能够是任何合法类,比如查询 Hesiod 记录的 HS 类或查询 CHAOSNET 记录的 CH 类。
-f <file>指定 dig 以批处理的方式运行,文件中保存着需要批处理查询的 DNS 任务信息。
-k <keyfile>要签署由 dig 发送的 DNS 查询连同对他们使用事务签名(TSIG)的响应,用选项 -k 指定 TSIG 密钥文档。
-p <port>指定域名服务器所使用端口号。
-t <type>指定要查询的 DNS 数据类型(默认为 A)。
-x <addr>执行逆向域名查询。
-4使用 ipv4(默认)
-6使用 ipv6。
-h显示命令帮助信息。
-y [hmac:]name:key您能够通过命令行上的 -y 选项指定 TSIG 密钥;name 是 TSIG 密码的名称,key 是实际的密码。密码是 64 位加密字符串,通常由 dnssec-keygen(8)生成。当在多用户系统上使用选项 -y 时应该谨慎,因为密码在 ps(1) 的输出或 Shell 的历史文档中可能是可见的。当同时使用 dig 和 TSCG 认证时,被查询的名称服务器需要知道密码和解码规则。在 BIND 中,通过提供正确的密码和 named.conf 中的服务器声明实现。
  1. 对目标 IP 进行反向解析查询。
[root@k8s-node-03 ~]# dig -x 111.20.4.28; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> -x 111.20.4.28
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 15762
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;28.4.20.111.in-addr.arpa.      IN      PTR;; Query time: 1047 msec
;; SERVER: 192.168.70.70#53(192.168.70.70)
;; WHEN: Tue Apr 18 13:32:13 CST 2023
;; MSG SIZE  rcvd: 53

具体请参考 Linux 命令(197)—— dig 命令