Linux - DNS 服务
目录
bind
实验环境:
- 系统:CentOS7.6.1810
- 内核:3.10.0-123.el7.x86_64
- 程序:bind-9.9.4-73.el7_6.x86_64
安装
yum -y install bind
注意事项:关闭防火墙或者开放 bind 的端口以防无法通讯。
设置 named.conf 主配置文件
allow-query 允许谁能来这台服务器查记录,默认的客户端地址为 localhos(这样设别人查不了)。可以设置为网段、所有、具体 IP,这 3 种情况。下面是配置文件的默认设置:
any 表示允许所有,如允许 192.168.1.0 网段,设置为 192.168.1.0/24,具体的主机设为“主机的IP”。
#全局配置
options {
#允许所有人查询
allow-query { any; };
#定义区域文件路径(默认保持不动)。
directory "/var/named";
#只监听本地环回和172.16.12.131发来的解析请求。
listen-on port 53 { 127.0.0.1; 172.16.12.131; };
#实现轮训 cyclic是循环 random随机给一个,但是它不能检测服务器状态,宕机了还是会解析过去。
#如果不配置,测试结果像是随机状态。
rrset-order { order cyclic; };
#不关闭无法使用区域传输,双斜杠代表注释。
// dnssec-enable yes;
// dnssec-validation yes;
}
# 日志配置段
logging{...}
# 区域配置段
zone{...}
区域配置(zone)
编辑 /etc/named.rfc1912.zones
,也可以在 named.conf
中定义。
zone "gbb.com" IN { #区域名
type master;
file "gbb.com.zone"; #区域配置文件名
allow-update { none ;}; #不允许使用工具更新此区域记录(nsupdate)
};
设置区域配置文件
编辑 /var/named/file_name
,文件名区域配置中 file 的 value 保持一致。中文注释不要复制进去。
// TTL缓存时间/s
$TTL 86400
// 设置默认域名,在做记录指向时只用填主机名就自动加上域名,不填默认找 zone 名字。
$ORIGIN gbb.com.
/*
@ 等同于上面 $ORIGIN 值,IN SOA是资源记录(Resource record),dns.gbb.com. 指定 master 域,mail.gbb.com. 管理员邮箱(.代替@)。
2019050302 是 sn(序列号),当你有更新区域资源记录,这个值必须要增加(开启区域传输才会使用到),yyyymmddss格式(年月日次数)。
2H 叫 ref(刷新)。
配置的这几个数值,只有用到子域才需严谨对待!
*/
@ IN SOA dns.gbb.com. mail.gbb.com. (
2019050302
2H
10M
7D
6H )
/*
NS 记录放第一位
@ 代表域,dns.gbb.com. 代表域内 DNS 服务器,可随意取名。
*/
@ IN NS dns.gbb.com.
/*
其他记录靠边站
*/
dns IN A 172.16.12.131 // 给DNS服务器设置一个地址
www IN A 172.16.13.78
简介写法可替换成。
// 简洁写法
$TTL 86400
$ORIGIN gbb.com.
@ IN SOA dns.gbb.com. mail.gbb.com. (2019050302 2H 10M 7D 6H)
@ IN NS dns.gbb.com.
dns IN A 172.16.13.169
www IN A 172.16.13.5
www IN A 172.16.13.186
写完后将文件设置正确的属组和权限,避免区域传输无权限读取。
[root@dns ~]# chown root:named /var/named/gbb.com.zone
[root@dns ~]# chmod 640 /var/named/gbb.com.zone
域名记录介绍:https://blog.csdn.net/silentpebble/article/details/44196083
- SOA(Start Of Authority)起始授权机构,指定哪台 DNS 才是 Master;
- NS(Name Server)域名服务器记录,用那台 DNS 服务器来进行解析域名;
- 泛解析 *.Domain.com,任何主机名都跳转到对应 value 上;
- TTL(Time-To-Live)在服务器缓存多久。
检测配置配置文件,没有任何报错就正确。
named-checkconf #检查named.conf主配置文件
named-checkzone '区域名' file #检查zone配置文件,区域配置(zone)时定义的区域名。
开启服务 systemctl start namd
。
测试解析结果
dig、host、nslookup 等常用域名记录解析工具系统上默认没有,可以安装 bind-utils
工具包,里面包含这些工具。
指定一台 dns 来解析域名 www.xzq.com 的 A 记录。
host -t A www.xzq.com 172.16.12.131
配置查询日志
bind设置日志的通道(channel)和类别(category),第一发给谁这是通道,第二发什么这是类别。
logging {
channel query_info {
file "data/query.log"
severity info;
print-category yes;
};
category queries {
query_info; #设置等级
};
};
配置区域传送
配置一主多辅,两台查询,一台用来写映射记录。
slave 配置
在 named.conf
添加
zone "gbb.com" IN { #区域名称要和master一致啊!!!
type slave; #类型各位大爷不要设错。
file "gbb.com.zone"; #缓存到本地,填了file还会保存到文件中,master挂了还可以从文件中读。
masters { Master IP; }; #master就是主DNS的IP地址
};
slave 每次重启都会自动完成一次区域传送,区域传送意思是去 master 上取区域配置文件。
slave日志(/var/log/message)
May 4 00:29:56 centos named[3512]: zone gbb.com/IN: Transfer started.
May 4 00:29:56 centos named[3512]: transfer of 'gbb.com/IN' from 172.16.13.169#53: connected using 172.16.13.73#41369
May 4 00:29:56 centos named[3512]: zone gbb.com/IN: transferred serial 2019050303
May 4 00:29:56 centos named[3512]: transfer of 'gbb.com/IN' from 172.16.13.169#53: Transfer completed: 1 messages, 8 records, 208 bytes, 0.001 secs (208000 bytes/sec)
May 4 00:29:56 centos named[3512]: zone gbb.com/IN: sending notifies (serial 2019050303)
master日志(/var/log/message)
AXFR 表示完全区域传送,IXFR 增量区域传送(只传新增数据)。
May 4 00:29:56 centos named[13871]: client 172.16.13.73#41369 (gbb.com): transfer of 'gbb.com/IN': AXFR started
May 4 00:29:56 centos named[13871]: client 172.16.13.73#41369 (gbb.com): transfer of 'gbb.com/IN': AXFR ended
master配置
slave 重启服务每次都是完整传输,想要传输新增数据别忘在 master 配上 slave地址,不在 master 中指定 slave 服务器地址,重启 master 它找不到 slave,无法把自己的数据传给 slave。
$TTL 86400
$ORIGIN gbb.com.
@ IN SOA dns.gbb.com. mail.gbb.com. (2019050302 2H 10M 7D 6H) #每次更改记录不要忘了修改序列号次数
@ IN NS dns.gbb.com.
@ IN NS slave.gbb.com. #设置NS记录,让master知道还有其他DNS服务器。
dns IN A 172.16.13.169
dns IN A 172.16.13.73 #给NS设置A记录
www IN A 172.16.13.5
www IN A 172.16.13.186
www IN A 172.16.113.23 #新增记录
此时重启服务就能将自己新增记录传给 slave,传是传了但是过多久 slave 去 master 上取一次数据呢?这是看 master 区域配置文件中 refresh 设定的时间。
我在主 DNS 中增加记录并没有定时取(更改过序列号),待我试试 rndc 重新加载配置文件(待修正)。
master 日志
May 4 01:20:55 centos named[14071]: zone gbb.com/IN: sending notifies (serial 2019050304)
May 4 01:20:55 centos named[14071]: client 172.16.13.109#33897 (gbb.com): transfer of 'gbb.com/IN': AXFR-style IXFR started
May 4 01:20:55 centos named[14071]: client 172.16.13.109#33897 (gbb.com): transfer of 'gbb.com/IN': AXFR-style IXFR ended
May 4 01:20:56 centos named[14071]: client 172.16.13.73#46475 (gbb.com): transfer of 'gbb.com/IN': AXFR-style IXFR started
May 4 01:20:56 centos named[14071]: client 172.16.13.73#46475 (gbb.com): transfer of 'gbb.com/IN': AXFR-style IXFR ended
slave 日志。
May 4 01:20:56 centos named[13092]: client 172.16.13.169#43891: received notify for zone 'gbb.com'
May 4 01:20:56 centos named[13092]: client 172.16.13.169#43891: received notify for zone 'gbb.com'
May 4 01:20:56 centos named[13092]: zone gbb.com/IN: notify from 172.16.13.169#43891: refresh in progress, refresh check queued
May 4 01:20:56 centos named[13092]: zone gbb.com/IN: Transfer started.
May 4 01:20:56 centos named[13092]: transfer of 'gbb.com/IN' from 172.16.13.169#53: connected using 172.16.13.109#33897
May 4 01:20:56 centos named[13092]: zone gbb.com/IN: transferred serial 2019050304
May 4 01:20:56 centos named[13092]: transfer of 'gbb.com/IN' from 172.16.13.169#53: Transfer completed: 1 messages, 11 records, 261 bytes, 0.001 secs (261000 bytes/sec)
May 4 01:20:56 centos named[13092]: zone gbb.com/IN: sending notifies (serial 2019050304)
May 4 01:20:57 centos named[13092]: client 172.16.13.73#11121: received notify for zone 'gbb.com'
May 4 01:20:57 centos named[13092]: zone gbb.com/IN: refused notify from non-master: 172.16.13.73#11121
三种情况会传输数据
- master 重启(传输部分数据)
- slave 重启(完整传输)
- refresh 时间到了,slave 会取 master 上取数据,比对序列号不一致就去拉数据。
区域传输过程梳理:
master 服务器重启 DNS 服务时,则发送 notify 给所有 slave 服务器来更新区域数据,slave 服务器接收到 notify 后响应 master 服务器告知它已经收到了通知,下一步时 slave 服务器向 master 服务器发起查询,以确定 notify 声明中所通告的区 SOA 记录是否改变(序列号),SOA 改变了则开始区域传送(),没有改变则不传送,至于是 IXFR 或 AXFR 由 bind 自己决定。
对区域传输做限制
谁都可以拉到 master 数据?这就是区域传输漏洞了(顺手把版本号关闭吧),在 master 上做一个限制访问就能防住。
zone "gbb.com" IN {
type master;
file "gbb.com.zone";
allow-update { none; };
allow-transfer { 172.16.13.73; 172.16.13.109; }; #只允许定义的ip可以取数据,any是任何人都可以取,none不让任何人取。
};
为了防止 slave 数据被偷,也需要设置 none。
# 在 named.conf 中设置
options {
allow-transfer { none; };
allow-update { none; };
}
被拒绝的日志信息。
May 4 13:07:18 centos named[13773]: client 172.16.13.169#47004: received notify for zone 'gbb.com'
May 4 13:07:18 centos named[13773]: zone gbb.com/IN: Transfer started.
May 4 13:07:18 centos named[13773]: transfer of 'gbb.com/IN' from 172.16.13.169#53: connected using 172.16.13.109#32951
May 4 13:07:18 centos named[13773]: transfer of 'gbb.com/IN' from 172.16.13.169#53: resetting
May 4 13:07:18 centos named[13773]: transfer of 'gbb.com/IN' from 172.16.13.169#53: connected using 172.16.13.109#45341
May 4 13:07:18 centos named[13773]: transfer of 'gbb.com/IN' from 172.16.13.169#53: failed while receiving responses: REFUSED
May 4 13:07:18 centos named[13773]: transfer of 'gbb.com/IN' from 172.16.13.169#53: Transfer completed: 0 messages, 0 records, 0 bytes, 0.040 secs (0 bytes/sec)
rndc 远程管理 DNS 服务器
安装管理工具。
root@gbb:~# apt -y install bind9utils
生成配置文件。
root@gbb:~# mkdir /etc/bind && /etc/bindrndc-confgen >/etc/bind/rndc.conf
配置文件介绍。
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "To1VNHKlIm/Fguh4aNLQnA==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
server 172.16.13.169 {
key "rndc-key";
port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "To1VNHKlIm/Fguh4aNLQnA==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
将上文中注释部分写入要控制的 DNS 服务器 /etc/named.conf
中
key "rndc-key" {
algorithm hmac-md5;
secret "To1VNHKlIm/Fguh4aNLQnA==";
};
controls {
#监听169这张网卡953端口,通过它连接进来,地址填*允许接受系统上任何网卡连接。
inet 172.16.13.169 port 953
allow { 127.0.0.1; 192.168.2.252; } keys { "rndc-key"; }; #允许这两个ip可以管理
};
测试链接
-s指定服务器 -c制定配置文件位置 -p指定端口默认953
root@gbb:~# rndc -s 172.16.13.169 status
常用操作。
reload #重新加载配置文件及区域解析文件
reload zone #加载指定区域解析文件
retransfer zone #在不检查序列号的情况下直接传送一个区域数据文件(完整区域传输)
notify zone #重新通知区域数据文件
reconfig #只重新装载配置文件及新增的区域
stop #将更新信息发送给服务器,然后关闭DNS服务器
flush #清除服务器缓存
status #显示服务器状态
dnsmasq
DNS 服务器搭建,首先要把 selinux 和 Firewalls 关闭,或者开放指定端口。
dnsmasq 解析过程:
- dnsmasq先去解析 hosts 文件
- 再去解析 /etc/dnsmasq.d/ 下的 *.conf 配置文件
/etc/resolv.conf
只有在本地 hosts 和缓存中查不到才会去 resolv 中找其他 DNS 服务器查。
服务配置文件。
# 不转发域名格式不正确的信息(域名要带 .域名)
domain-needed
# 不在路由表中的地址不转发
bogus-priv
#不向外部DNS服务器查询本地没有的记录,也就是说不解析公网域名,默认是注释起来。
no-resolv
#不使用默认hosts文件(不解析本地域名),这时可不能再开启no-resolv,不然本地不解析外部DNS也不解析服务器就成了摆设。
no-hosts
#no-hosts开启后要想使用就再指定一个hosts
add-hosts=具体文件路径
#启用主机名扩展,
#配置hosts时写192.168.1.1 www,会自动把.traingray.com域名给你补上,变成www.traingray.com。
expand-hosts
#指定域名
domain=traingray.com
# 启用日志
log-queries
log-facility=/var/log/dnsmasq.log
服务器 hosts 中上要解析的地址和域名,因为在 dnsmsqa.conf
开启了主机名扩展,访问主机名时就自动带上域名,就写主机名就好。
[root@centos7 ~]# cat /etc/hosts
192.168.1.1 www
192.168.1.2 blog
另外服务器要想顺带解析公网域名就要在/etc/resolv.conf
写上其他域名服务器地址,本地找不到对应ip时就会去问resolve中的服务器。如果不想解析也可以开启配置文件中no-resolv
,就会停止读取resolve地址来解析公网域名了。
[root@centos7 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 223.5.5.5
服务器配置完了,需要将客户端的DNS地址修改成服务器地址。
root@gbb:~# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.138
用 nslookup
来测试一下前面配置的域名吧,server 是指定用哪台 DNS 来查询。
root@gbb:~# nslookup
> server 192.168.1.138
Default server: 192.168.1.138
Address: 192.168.1.138#53
> www
Server: 192.168.1.138
Address: 192.168.1.138#53
Name: www
Address: 192.168.1.1
> blog
Server: 192.168.1.138
Address: 192.168.1.138#53
Name: blog
Address: 192.168.1.2
> www.raingray.com
Server: 192.168.1.138
Address: 192.168.1.138#53
Non-authoritative answer:
Name: www.raingray.com
Address: 47.93.48.46
root@gbb:~# nslookup #开启了no-resolve无法找到在hosts中找到www.baidu.com
> www.baidu.com
Server: 192.168.1.138
Address: 192.168.1.138#53
** server can't find www.baidu.com: REFUSED
分析服务器上 dnsmasqa 日志。
#解析本地成功
Apr 11 18:36:31 dnsmasq[30720]: query[A] www from 192.168.4.7
Apr 11 18:36:31 dnsmasq[30720]: /etc/hosts www is 192.168.1.1
Apr 11 18:36:31 dnsmasq[30720]: query[AAAA] www from 192.168.4.7
Apr 11 18:36:31 dnsmasq[30720]: config www is NODATA-IPv6
Apr 11 18:37:06 dnsmasq[30720]: query[A] blog from 192.168.4.7
Apr 11 18:37:06 dnsmasq[30720]: /etc/hosts blog is 192.168.1.2
Apr 11 18:37:06 dnsmasq[30720]: query[AAAA] blog from 192.168.4.7
Apr 11 18:37:06 dnsmasq[30720]: config blog is NODATA-IPv6
#开启了no-resolv解析失败
Apr 11 18:44:18 dnsmasq[30821]: query[A] www.baidu.com from 192.168.4.7
Apr 11 18:44:18 dnsmasq[30821]: query[AAAA] www.baidu.com from 192.168.4.7
Apr 11 18:44:18 dnsmasq[30821]: query[A] www.baidu.com from 192.168.4.7
Apr 11 18:44:18 dnsmasq[30821]: query[AAAA] www.baidu.com from 192.168.4.7
#解析成功
Apr 11 18:45:31 dnsmasq[30857]: query[A] www.baidu.com from 192.168.4.7
Apr 11 18:45:31 dnsmasq[30857]: forwarded www.baidu.com to 223.5.5.5
Apr 11 18:45:31 dnsmasq[30857]: query[AAAA] www.baidu.com from 192.168.4.7
Apr 11 18:45:31 dnsmasq[30857]: forwarded www.baidu.com to 223.5.5.5
Apr 11 18:45:31 dnsmasq[30857]: reply www.baidu.com is <CNAME>
Apr 11 18:45:31 dnsmasq[30857]: reply www.a.shifen.com is 180.97.33.107
Apr 11 18:45:31 dnsmasq[30857]: reply www.a.shifen.com is 180.97.33.108
Apr 11 18:45:31 dnsmasq[30857]: reply www.baidu.com is <CNAME>
Apr 11 18:45:31 dnsmasq[30857]: reply www.a.shifen.com is NODATA-IPv6
Apr 11 18:45:31 dnsmasq[30857]: query[PTR] 107.33.97.180.in-addr.arpa from 192.168.4.7
Apr 11 18:45:31 dnsmasq[30857]: forwarded 107.33.97.180.in-addr.arpa to 223.5.5.5
Apr 11 18:45:31 dnsmasq[30857]: reply 180.97.33.107 is NXDOMAIN
参考链接
- DNS日志记录以及VIEW视图
- Bind日志配置。
- Start of Authority Resource Record (SOA RR),详解SOA
- Chapter 8 - $ORIGIN Directive,$ORIGIN含义
- https://www.zcplayground.cc/2018/03/19/tcpip-11-DNS,UQDN非限定域名
- WINDOWS与LINUX下的DNS轮询配置
- Root Zone Database,全球顶级域概览
- 第7章 DNS & bind从基础到深入,深度好文。
- 系统运维:LVS实现DNS负载均衡,实现高可用keepalived
- 用 BIND 搭建高可用性 DNSSEC Hidden Master Server - 2016 年版,DNS安全扩展DNSSec
- BIND简易教程(3):DNSSec配置
- 如何用dnsmasq配置DNS?
最近更新:
发布时间: