DNS服务器 - 实践
1. 正向解析
根据域名查询IP地址
- 准备两台虚拟机,分别用作服务器和客户端
分类 | ip | hostname |
---|---|---|
服务器 | 192.168.70.70 | k8s-node-03 |
客户端 | 192.168.70.183 | swarm-worker |
-
服务器端下载bind和bind-utils,这是dns的服务软件
yum install -y bind bind-utils
客户端安装bind-utils,用于验证DNS
yum install -y bind-utils
-
查看配置文件位置
[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
-
修改配置文件
- 编辑 /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
- 编辑 /etc/named.conf 文件
实例 | 分类 | 说明 |
---|---|---|
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
-
编辑网卡文件( /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改为本机
-
关闭防火墙,重启network和named服务
[root@k8s-node-03 named]# systemctl restart network [root@k8s-node-03 named]# systemctl restart named
-
验证
[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
-
客户端验证
[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
-
问题
-
- ** 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 文件修改一下就行
-
修改/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"; };
-
新建/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.
-
重启服务
[root@k8s-node-03 named]# systemctl restart named
-
验证
[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 |
在从服务器配置,如下:
- 在从服务器安装bind
yum install -y bind bind-utils
- 把主服务器配置文件拷贝到从服务器(也可以手动修改)
[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
- 修改 /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; };
- 修改 /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; };};
- 从服务器从重启服务,查看 /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
- 修改/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.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)是域名查询工具
- 不带选项
[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
- 选项
@指定进行域名解析的域名服务器。
-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 中的服务器声明实现。
- 对目标 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 命令