Ubuntu下DNS服务搭建

时间:2022-07-22
本文章向大家介绍Ubuntu下DNS服务搭建,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

DNS介绍

DNS(domain name system 域名系统):基于C/S模式的域名解析服务,监听在53/udp,53/tcp端口,其中tcp用来区域传送,udp用来解析,其实是一个数据库,用于TCP/IP程序的分布式数据库,同时也是一种重要的网络协议,DNS储存了网络中的IP地址与对应主机的信息,邮件路由信息,还有其他网络应用方面的信息,它所提供的服务是用来将主机名和域名转换为IP,就像一个翻译官

DNS查询过程

dns的解析分为两种类型

  • 递归
  • 迭代

递归查询:

客户端向本地设置的DNS服务器发起请求,然后DNS服务器响应该请求,如果本地缓存记录中有该查询记录,则直接返回,如果没有,DNS服务器则会向中介或者代理一样依次去向根名称服务器、顶级名称服务器,权威名称服务器发出请求,例如,DNS服务器向根名称服务器发出请求,询问该域名所对应的IP地址,根名称服务器会查询本地是否有记录,有则直接返回给DNS服务器,然后DNS服务器则告诉客户端所查找的IP地址,如果根也不知道,则继续由DNS服务器发出请求,依次询问,一直到找到该域名对应的IP地址,最后返回给客户端的一个过程

迭代查询:

和递归查询最大的差别是,所有的询问过程都由客户端自己完成,没有中间商赚差价,直接自己去向根服务器,顶级服务器。。。。等依次询问,直到有一个结果。

解析方式

  • 正向解析
    • 名称 ——> IP
  • 反向解析
    • IP ——> 名称

域名分类

  • 根域 .
  • 顶级域
    • 组织域:.com .net .org .gov
    • 国家域:.iq .tw .hk .jp .cn
  • 二级域
    • 在顶级域上个人或组织申请的名称,例如baidu.com. devilf.cc.
  • 子域

DNS记录类型

  • A记录
    • 将域名指向一个IP地址
  • AAAA记录
    • 将主机名解析到一个指定的IPv6的IP上
  • CNAME记录
    • 别名解析,指将不同的域名都转到一个域名记录上,由这个域名记录统一解析管理,也就是当前解析的域名是另一个域名的跳转
  • NS记录
    • 域名服务记录,用来指定该域名由哪个DNS服务器来解析,一般设置为多个,一个为主,其余为辅,且只能写域名的形式
  • MX记录
    • 邮件交换记录
  • TXT记录
    • 指某个主机名或域名的说明,通常用来做SPF记录(反垃圾邮件)
  • PTR记录
    • 反向解析,主要用于IP —> FQDN,一般用于邮件服务器

简单搭建

安装

1

sudo apt install bind9 bind9utils bind9-doc

配置

修改主配置文件named.conf

1 2 3 4

include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.log”;     #增加日志记录

修改named.conf.local文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

#添加一个zone,配置写法可以参考zones.rfc1918,我们这里指定义一条正向解析 $ cat 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"; zone "tianchiapi.com” {    #指定域名         type master;         file "/etc/bind/zone-internal-tianchiapi/db.dns”;  #创建zone-internal-tianchiapi目录,指定区域记录文件位置         forwarders {}; }; //如果是有多个域名需要解析,则依次往下写 zone "tianchitest1.com" { type master; file "/etc/bind/zone-internal-tianchiapi/test.dns"; forwarders {}; };

修改named.conf.options文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

#该文件是DNS服务器的全局配置 $ cat named.conf.options options {         directory "/var/cache/bind”;  #数据文件位置         forwarders {               #设置转发请求的递归名称服务器的IP地址                 114.114.114.114;                 8.8.8.8;         };         allow-query { any;};         recursion yes;     #启用递归寻址         allow-transfer  { any; };         dnssec-enable no;         dnssec-validation no;         auth-nxdomain no;    #符合RFC1035 };

修改named.conf.log文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

$ cat named.conf.log logging {     channel query_log {         file "query.log" versions 3 size 1g;    #versions表示允许同时存在多少个版本的该文件         severity info;     #日志级别         print-time yes;    #在日志中写入时间         print-severity yes; #设定在日志中是否写入消息级别         print-category yes; #设定在日志中是否需要写入日志类别     };     category queries {         query_log;     };     channel update_log {         file "update.log" versions 3 size 1g;         severity debug;         print-time yes;         print-category yes;     };     category update {         update_log;     };     channel client_log {         file "client.log" versions 3 size 1g;         severity debug;         print-time yes;         print-category yes;     };     category client {         client_log;     };     channel network_log {         file "network.log" versions 3 size 1g;         severity debug;         print-time yes;         print-category yes;     };     category network {         network_log;     };     channel resolver_log {         file "resolver.log" versions 3 size 1g;         severity debug;         print-time yes;         print-category yes;     };     category resolver {         resolver_log;     };     channel lame-servers_log {         file "lame-servers.log" versions 3 size 1g;         severity debug;         print-time yes;         print-category yes;     };     category lame-servers {         lame-servers_log;     }; };

创建目录并设置解析

```

sudo mkdir zone-internal-tianchiapi vim zone-internal-tianchiapi/db.dns $TTL   600 @       IN      SOA      ns1 root (                          3              ; Serial                          3600         ; Refresh                          86400         ; Retry                          86400         ; Expire                          86400 )       ; Negative Cache TTL

; @                        IN      NS     ns1 @ IN NS ns2 ns1                      IN      A      10.1.1.11 test1-live               IN      A      10.1.1.61 test1-storage            IN      A      10.1.1.61 test1-admin              IN      A      10.1.1.61 test1-gateway            IN      A      10.1.1.61 test1-turbine            IN      A      10.1.1.61 test1-zipkin             IN      A      10.1.1.61 test1-eureka             IN      A      10.1.1.61 test1-video              IN      A      10.1.1.61 test1-file               IN      A      10.1.1.61 test1-image              IN      A      10.1.1.61 test1-kibana             IN      A      10.1.1.61 test1-live               IN      A      10.1.1.61

1 2 3 4 5 6

## 重启服务

sudo systemctl restart bind9

1 2 3 4 5 6 7 8 9 10 11 12 13 14

## 验证 在另一台服务器上指定DNS服务器为我们刚创建好的IP地址,例如: ``` cat /etc/resolv.conf nameserver 10.1.1.13 search tianchiapi.com

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

$ dig test1-gateway.tianchiapi.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> test1-gateway.tianchiapi.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62031 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;test1-gateway.tianchiapi.com.  IN      A ;; ANSWER SECTION: test1-gateway.tianchiapi.com. 600 IN    A       10.1.1.61 ;; AUTHORITY SECTION: tianchiapi.com.         600     IN      NS      10.1.1.11. ;; Query time: 1 msec ;; SERVER: 10.1.1.13#53(10.1.1.13) ;; WHEN: Sun Nov 25 14:57:28 CST 2018 ;; MSG SIZE  rcvd: 96

通过dig我们可以看到A,NS等记录,我们也可以使用dig +trace来看下查询过程

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

$ dig +trace www.devilf.cc ; <<>> DiG 9.10.3-P4-Ubuntu <<>> +trace www.devilf.cc ;; global options: +cmd . 18143 IN NS e.root-servers.net. . 18143 IN NS g.root-servers.net. . 18143 IN NS k.root-servers.net. . 18143 IN NS m.root-servers.net. . 18143 IN NS d.root-servers.net. . 18143 IN NS i.root-servers.net. . 18143 IN NS c.root-servers.net. . 18143 IN NS h.root-servers.net. . 18143 IN NS l.root-servers.net. . 18143 IN NS f.root-servers.net. . 18143 IN NS b.root-servers.net. . 18143 IN NS a.root-servers.net. . 18143 IN NS j.root-servers.net. ;; Received 850 bytes from 10.1.1.13#53(10.1.1.13) in 1 ms cc. 172800 IN NS ac1.nstld.com. cc. 172800 IN NS ac2.nstld.com. cc. 172800 IN NS ac3.nstld.com. cc. 172800 IN NS ac4.nstld.com. cc. 86400 IN DS 519 8 1 7285EF05E1B4E679D4F072EEA9B00953E01F3AE2 cc. 86400 IN DS 519 8 2 E1EC6495ABD34562E6F433DEE201E6C6A52CB10AF69C04D675DA692D 2D566897 cc. 86400 IN RRSIG DS 8 1 86400 20181208050000 20181125040000 2134 . K30W90xWPofSP+kgBIBCMDncJ7ewr9k504cL+nrFrq/A0VjLAGTxGHRe M+K0hG1xBV+0ZhLpaAVy++rZECpn9XEOpoqf7EXJtbT2R27X36IrzvvB z4Hsp/AEMYaMmU665PkEftdk3RgA5u156UH8LeG0gGuhTn9AmaYEuYiY gg54FSa1nw/7e2fho0KWxGzZIE8gEPnXVuk30s+0tbJ2qi/Gu4x75pmV 49Rro/xNRNZUtrXfvWNOneKwiK1S0TndbGlGydibBjRKETyg1Iob6uu6 tlTDu20NhsWHEFyAW0e4xC+7A+NdxZLn6PbCmB1MCM6Wxj2oug8Tq8QL WxjC3A== ;; Received 670 bytes from 198.97.190.53#53(h.root-servers.net) in 271 ms devilf.cc. 172800 IN NS dns29.hichina.com. devilf.cc. 172800 IN NS dns30.hichina.com. RQGAP5UF6Q1NGVCKFNO8RANVDN5ILRIN.cc. 86400 IN NSEC3 1 1 0 - RR9VRBALT8EOD9SAK335LVITNSQII5FL NS SOA RRSIG DNSKEY NSEC3PARAM RQGAP5UF6Q1NGVCKFNO8RANVDN5ILRIN.cc. 86400 IN RRSIG NSEC3 8 2 86400 20181201140301 20181124140301 349 cc. slpKbVNxyTgp7EM1F0hkdSW53W3pul2lgxj55a4mixDncbST6kWyDrIo NWPzFl1zrFbq7HKXFfWZcCiZyJ9ZGw74oAeUSWUAfph44UUYY5CSXdlU 2ItzDNvv5mJV9Klu9IF5UqO8ebTQzeY9V835OoCTnx7rt5fs2iAc7xFE pcE= BL6MKB1NQG0IVOHTRSFV88164C1K8BPB.cc. 86400 IN NSEC3 1 1 0 - BLDPDNVR5GT167DKC1R82138PE3U59QI NS DS RRSIG BL6MKB1NQG0IVOHTRSFV88164C1K8BPB.cc. 86400 IN RRSIG NSEC3 8 2 86400 20181201083817 20181124083817 349 cc. N8wcEys1fVypSVlZnQGh7fpcvYLKwC0x7RFiHm9XXZ/aFkJkWhl6hiT3 GnLeKIGNf3C7odEUz2fLsY6+0nJwkoW16zSbKtvcyLv5xK7VJteSKRyo AzD1LP8BgA3bs1hjGuUeDo9aNAG6dJjpoTO1jPpiFEKbVSB/JgrN6OcL Zss= ;; Received 576 bytes from 192.42.176.30#53(ac4.nstld.com) in 284 ms www.devilf.cc. 600 IN CNAME www.devilf.cc.w.kunlunar.com. ;; Received 84 bytes from 140.205.81.19#53(dns29.hichina.com) in 29 ms

可以看到,先去找13个根服务器,然后根服务器告诉10.1.1.13让它去问.com顶级域名服务器,然后再去问权威域名服务器tianchiapi.com.,最后返回对应的IP。

查看bind的服务日志方法

1 2 3 4 5 6 7 8 9 10 11 12

$ cd /var/cache/bind $ ll -h -rw-r--r--  1 bind bind  528 Nov 25 10:23 client.log -rw-r--r--  1 bind bind 1.7K Nov 25 15:01 lame-servers.log -rw-r--r--  1 bind bind  221 Jul 17 15:31 managed-keys.bind -rw-r--r--  1 bind bind  609 Nov 25 14:04 network.log -rw-r--r--  1 bind bind 830M Nov 25 15:10 query.log -rw-r--r--  1 bind bind 1.1G Nov 25 15:02 query.log.0 -rw-r--r--  1 bind bind 1.1G Nov 25 14:53 query.log.1 -rw-r--r--  1 bind bind 1.1G Nov 25 14:45 query.log.2 -rw-r--r--  1 bind bind 3.6M Nov 25 15:10 resolver.log -rw-r--r--  1 bind bind    0 Nov 25 10:04 update.log

1

sudo systemctl -u bind9 -b debug -f

注:

```

BIND 9 中可用的类别名(category_name)有: 类别 说明 client 处理客户端请求。 config 配置文件分析和处理。 database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录。 default 匹配所有未明确指定通道的类别。 dnssec 处理 DNSSEC 签名的响应。 general 包括所有未明确分类的 BIND 消息。 lame-servers 发现错误授权,即残缺服务器。 network 网络操作。 notify 区更新通知消息。 queries 查询日志 resolver 名字解析,包括对来自解析器的递归查询信息。 security 批准/非批准的请求。 update 动态更新事件。 xfer-in 从远程名字服务器到本地名字服务器的区传送。 xfer-out 从本地名字服务器到远程名字服务器的区传送。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

<p> </p>