Bind服务器:
bind(Berkeley Internet Name Domain Service),它是一款实现DNS服务器的开源软件,现在为最广泛的DNS服务器软件
Socket: 套接字,及IP:port(IP地址端口对) 端口: TCP:0~65535 UDP:0~65535
注: 小于1024的端口为知名端口,只有root用户有权限开放和关闭。
1.bind的安装
包名: bind
进程: named
协议: dns
使用端口: 53(tcp,udp)
相关的包:
[root@localhost ~]
# rpm -qa bind*
bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64
#提供一些客户端工具
bind-9.8.2-0.37.rc1.el6_7.4.x86_64
#bind主程序包
bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64
#服务器端和客户端使用的公共库文件
bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64
#将named进程的活动范围限定在chroot目录中,保证安全性
bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64
#开发使用的头文件和库文件(编译安装时使用)
[root@localhost ~]# yum install bind*
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* c6-media:
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
解决依赖关系
--> 执行事务检查
---> Package bind.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-chroot.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-devel.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
---> Package bind-dyndb-ldap.x86_64 0:2.3-8.el6 will be 安装
---> Package bind-libs.x86_64 32:9.8.2-0.30.rc1.el6 will be 升级
---> Package bind-libs.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be an update
---> Package bind-sdb.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be 安装
--> 处理依赖关系 libpq.so.5()(64bit),它被软件包 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64 需要
---> Package bind-utils.x86_64 32:9.8.2-0.30.rc1.el6 will be 升级
---> Package bind-utils.x86_64 32:9.8.2-0.37.rc1.el6_7.4 will be an update
--> 执行事务检查
---> Package postgresql-libs.x86_64 0:8.4.20-3.el6_6 will be 安装
--> 完成依赖关系计算
依赖关系解决
==========================================================================================
软件包 架构 版本 仓库 大小
==========================================================================================
正在安装:
bind x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 4.0 M
bind-chroot x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 74 k
bind-devel x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 383 k
bind-dyndb-ldap x86_64 2.3-8.el6 base 72 k
bind-sdb x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 311 k
正在升级:
bind-libs x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 886 k
bind-utils x86_64 32:9.8.2-0.37.rc1.el6_7.4 updates 186 k
为依赖而安装:
postgresql-libs x86_64 8.4.20-3.el6_6 updates 202 k
事务概要
==========================================================================================
Install 6 Package(s)
Upgrade 2 Package(s)
总下载量:6.0 M
确定吗?[y/N]:y
下载软件包:
(1/8): bind-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 4.0 MB 00:04
(2/8): bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 74 kB 00:00
(3/8): bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 383 kB 00:00
(4/8): bind-dyndb-ldap-2.3-8.el6.x86_64.rpm | 72 kB 00:00
(5/8): bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 886 kB 00:01
(6/8): bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 311 kB 00:00
(7/8): bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64.rpm | 186 kB 00:00
(8/8): postgresql-libs-8.4.20-3.el6_6.x86_64.rpm | 202 kB 00:00
------------------------------------------------------------------------------------------
总计 677 kB/s | 6.0 MB 00:09
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
Package: centos-release-6-6.el6.centos.12.2.x86_64 (@anaconda-CentOS-201410241409.x86_64/6.6)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
确定吗?[y/N]:y
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在升级 : 32:bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64 1/10
正在安装 : 32:bind-9.8.2-0.37.rc1.el6_7.4.x86_64 2/10
正在安装 : postgresql-libs-8.4.20-3.el6_6.x86_64 3/10
正在安装 : 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64 4/10
正在安装 : 32:bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64 5/10
正在安装 : bind-dyndb-ldap-2.3-8.el6.x86_64 6/10
正在升级 : 32:bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64 7/10
正在安装 : 32:bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64 8/10
清理 : 32:bind-utils-9.8.2-0.30.rc1.el6.x86_64 9/10
清理 : 32:bind-libs-9.8.2-0.30.rc1.el6.x86_64 10/10
Verifying : 32:bind-utils-9.8.2-0.37.rc1.el6_7.4.x86_64 1/10
Verifying : 32:bind-devel-9.8.2-0.37.rc1.el6_7.4.x86_64 2/10
Verifying : 32:bind-chroot-9.8.2-0.37.rc1.el6_7.4.x86_64 3/10
Verifying : 32:bind-9.8.2-0.37.rc1.el6_7.4.x86_64 4/10
Verifying : 32:bind-sdb-9.8.2-0.37.rc1.el6_7.4.x86_64 5/10
Verifying : 32:bind-libs-9.8.2-0.37.rc1.el6_7.4.x86_64 6/10
Verifying : bind-dyndb-ldap-2.3-8.el6.x86_64 7/10
Verifying : postgresql-libs-8.4.20-3.el6_6.x86_64 8/10
Verifying : 32:bind-utils-9.8.2-0.30.rc1.el6.x86_64 9/10
Verifying : 32:bind-libs-9.8.2-0.30.rc1.el6.x86_64 10/10
已安装:
bind.x86_64 32:9.8.2-0.37.rc1.el6_7.4
bind-chroot.x86_64 32:9.8.2-0.37.rc1.el6_7.4
bind-devel.x86_64 32:9.8.2-0.37.rc1.el6_7.4
bind-dyndb-ldap.x86_64 0:2.3-8.el6
bind-sdb.x86_64 32:9.8.2-0.37.rc1.el6_7.4
作为依赖被安装:
postgresql-libs.x86_64 0:8.4.20-3.el6_6
更新完毕:
bind-libs.x86_64 32:9.8.2-0.37.rc1.el6_7.4 bind-utils.x86_64 32:9.8.2-0.37.rc1.el6_7.4
完毕!
安装完成后bind会自动创建用户named系统用户
注: 由于早期的linux都为root用户权限,服务的复杂导致BUG越来越多,黑客利用漏洞入侵系统,获得root权限后控制了整个系统,为了防止类似事件发生,服务软件用root权限启动,启动后自动放弃root.由低权限的系统用户(named)来运行进程,如果黑客入侵也只有很低级的权限而不至于控制整个系统。
2.bind 的配置文件:
[root@localhost ~]
# rpm -qc bind
/etc/logrotate
.d
/named
/etc/named
.conf
#主配置文件
/etc/named
.iscdlv.Key
/etc/named
.rfc1912.zones
#区域配置文件
/etc/named
.root.Key
#根区域的key文件实现数字签名
/etc/rndc
.conf
#远程服务控制器的配置文件
/etc/rndc
.Key
#远程控制器加密密钥
/etc/sysconfig/named
/var/named/named
.ca
#13个根文件存放位置
/var/named/named
.empty
/var/named/named
.localhost
/var/named/named
.loopback
主配置文件: /etc/named.conf
定义区域
定义各区域的全局配置
定义视图
定义日志
注释省略:
options { #服务器的全局配置选项及一些默认设置
listen-on port 53 { any; }; #监听端口,也可写为 { 127.0.0.1; 192.168.139.46; }
listen-on-v6 port 53 { ::1; }; #对ip6支持
directory "/var/named"; #区域文件存储目录
dump-file "/var/named/data/cache_dump.db"; #dump cach的目录directory
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
pid-file "/var/run/named/named.pid"; #存着named的pid
forwarders { 168.95.1.1; 139.175.10.20; }; # 如果域名服务器无法解析时,将请求交由168.95.1.1; 139.175.10.20来解析
allow-query { any; }; #指定允许进行查询的主机,当然是要所有的电脑都可以查啦
allow-transfer { none; }; #指定允许接受区域传送请求的主机,说明白一点就是辅dns定义,比如辅dns的ip是192.168.139.5,那么可以这样定义{ 192.168.139.5; },要不然主辅dns不能同步,当然,{}里的也可以用下面提到的acl。
// those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
};
logging { #指定服务器日志记录的内容和日志信息来源
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
#这里定义一个acl列表
acl "acl1" {
192.168.139.0/200; 192.168.1.0/200
};
view localhost_resolver { #定义一个视图
match-clients { any; }; #查询者的源地址,any表示localhost_resolver视图对任何主机开放,如果写成{ acl1; },那么就只有acl1表里的ip可以递归查询了
match-destinations { any; }; #查询者的目标地址,这里也可以写成{ localhost; acl1; }
recursion yes; 3设置进行递归查询
include "/etc/named.rfc1912.zones"; #包含文件,这里也就是载入/etc/named.rfc1912.zones
};
bind客户端工具:
[root@localhost ~]
# rpm -ql bind-utils
/usr/bin/dig
#常用的DNS服务器测试工具
/usr/bin/host
#轻量级DNS测试工具
/usr/bin/nslookup
#DNS查询工具,在众多平台都有使用
/usr/bin/nsupdate
#更新工具
/usr/share/man/man1/dig
.1.gz
#以上工具的man文档
/usr/share/man/man1/host
.1.gz
/usr/share/man/man1/nslookup
.1.gz
/usr/share/man/man1/nsupdate
.1.gz
host命令: host -t 资源记录类型 名称
[root@localhost ~]
# host -t A www.baidu.com #baidu的A记录
www.baidu.com is an
alias
for
www.a.shifen.com.
www.a.shifen.com has address 119.75.217.109
www.a.shifen.com has address 119.75.218.70
3.dig命令的使用:
语法: dig -t 资源记录类型(如NS A )名称@server-IP
工作机制: 不加“@server-ip” 的话根据/etc/resolv.conf文件解析查询
[root@localhost ~]
# cat /etc/resolv.conf
# Generated by NetworkManager
domain DHCP
search DHCP HOST
nameserver 124.207.160.106
nameserver 219.239.26.42
nameserver 144.144.144.144
#通过这些ip来查询DNS
[root@localhost ~]# dig -t NS www.baidu.com #查询百度的NS记录
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48075
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 # 表示权威应答
;; QUESTION SECTION:
;www.baidu.com. IN NS
;; ANSWER SECTION:
www.baidu.com. 506 IN CNAME www.a.shifen.com. #别名为a.shifen.com
;; AUTHORITY SECTION:
a.shifen.com. 523 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1509110003 5 5 86400 3600#起始授权
;; Query time: 6 msec
;; SERVER: 124.207.160.106#53(124.207.160.106)# 通过第一个ip:124.207.160.106查询,ip按顺序来查询
;; WHEN: Wed Sep 16 23:17:02 2015
;; MSG SIZE rcvd: 115
如果后边加@server-ip则会跳过/etc/resole.conf配置文件,用指定DNS服务ip查询
[root@localhost ~]# dig -t NS www.baidu.com @8.8.8.8
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS www.baidu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9503
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN NS
;; ANSWER SECTION:
www.baidu.com. 291 IN CNAME www.a.shifen.com.
;; AUTHORITY SECTION:
a.shifen.com. 599 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1509110003 5 5 86400 3600
;; Query time: 154 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) #指定的DNS查询,ip 8.8.8.8
;; WHEN: Wed Sep 16 23:26:09 2015
;; MSG SIZE rcvd: 115
查询反向解析: dig -x server-ip
[root@localhost ~]# dig -x 8.8.8.8 #反向解析google的域名服务
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12388
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2#权威应答
;; QUESTION SECTION:
;8.8.8.8.in-addr.arpa. IN PTR
;; ANSWER SECTION:
8.8.8.8.in-addr.arpa. 62709 IN PTR google-public-dns-a.google.com.#google公共dns
;; AUTHORITY SECTION:
8.8.8.in-addr.arpa. 692 IN NS ns3.google.com. #google的反向解析
8.8.8.in-addr.arpa. 692 IN NS ns1.google.com.
8.8.8.in-addr.arpa. 692 IN NS ns4.google.com.
8.8.8.in-addr.arpa. 692 IN NS ns2.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 292900 IN A 216.239.32.10 #google的A记录
ns3.google.com. 263708 IN A 216.239.36.10
;; Query time: 19 msec
;; SERVER: 124.207.160.106#53(124.207.160.106)
;; WHEN: Wed Sep 16 23:30:39 2015
;; MSG SIZE rcvd: 186
追踪解析过程: dig -t 资源记录类型 名称 +trace
[root@localhost ~]# dig -t A www.baidu.com +trace
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.baidu.com +trace
;; global options: +cmd
. 247435 IN NS i.root-servers.net.
. 247435 IN NS m.root-servers.net.
. 247435 IN NS f.root-servers.net.
. 247435 IN NS k.root-servers.net.
. 247435 IN NS b.root-servers.net.
. 247435 IN NS c.root-servers.net.
. 247435 IN NS a.root-servers.net.
. 247435 IN NS e.root-servers.net.
. 247435 IN NS h.root-servers.net.
. 247435 IN NS j.root-servers.net.
. 247435 IN NS l.root-servers.net.
. 247435 IN NS g.root-servers.net.
. 247435 IN NS d.root-servers.net. #首先找13台根域
;; Received 496 bytes from 124.207.160.106#53(124.207.160.106) in 1193 ms
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net. #然后找.com.一级域
;; Received 503 bytes from 192.5.5.241#53(192.5.5.241) in 115 ms
baidu.com. 172800 IN NS dns.baidu.com.
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com. #再找baidu.com.二级域
;; Received 201 bytes from 192.42.93.30#53(192.42.93.30) in 252 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com. #接着找到www三级域及到达。www.baidu.com.
;; Received 228 bytes from 61.135.165.235#53(61.135.165.235) in 12 ms
DNS(bind)服务的具体配置:
配置主要有:
正向解析
反向解析
辅助解析
主辅区域传送
配置域主服务器
阶段
1.在bind的主配置文件中添加该域
2.在/var/named中创建该域的zone文件
3.编辑zone文件添加需要的信息
4.测试是否有语法错误
5.设置区域文件的权限
6.检测防火墙或selinux设置
7.启动bind服务
8.使用host或nslookup命令 检测域信息是否正常
首先在配置文件中添加域:vim /etc/named.conf
options {
listen-on port 53 { any; }; #把127.0.0.1本地修改为any;
listen-on-v6 port 53 { ::1; };#ipv6不用,删除此行
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";
allow-query { any; };#localhost改为any;
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "hong.com" IN { #添加正向解析域
type master;
file "hong.com.zone";
};
zone "0.168.192.in-addr.arpa" IN { #添加反向解析域
type master;
file "0.168.192.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
接下来配置正向区域文件:
目录位于; /var/named/
[root@localhost ~]
# cd /var/named/
[root@localhost named]
# ls
chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]
# cp named.localhost hong.com.zone #拷贝本地模板编辑到正向区域文件
[root@localhost named]
# vim hong.com.zone #vim编辑正向区域文件
$TTL 86400 #缓存时间
@ IN SOA ns.hong.com. admin.hong.com. ( #DNS服务器名
0 ; serial #序列号
1D ; refresh #服务器更新时间
1H ; retry #重新更新时间间隔
1W ; expire #多久之后提示失败
3H ) ; minimum #缓存记忆时间
@ IN NS ns.hong.com.
@ IN MX 10 mail.hong.com. #10为优先级,必须指定
ns IN A 192.168.0.107
mail IN A 192.168.0.107
www IN A 192.168.0.107
ftp IN CNAME mail
编辑反向区域文件:
[root@localhost named]# cp named.localhost 0.168.192.zone
[root@localhost named]# vim 0.168.192.zone
$TTL 86400
@ IN SOA ns.hong.com. admin.hong.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.hong.com.
107 IN NS ns.hong.com.
107 IN PTR mail.hong.com.
107 IN PTR www.hong.com. #反向区域不需要指定CNAME记录
配置好正向,反向区域文件后,我们检查一下是否有语法错误:
named-checkconf
named-checkzone "反向区域名" /PATH/TO/反向区域名称
[root@localhost named]
# named-checkconf
[root@localhost named]
# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone
zone 0.168.192.zone
/IN
: 107.0.168.192.zone
/NS
'ns.hong.com'
(out of zone) has no addresses records (A or AAAA)
zone 0.168.192.zone
/IN
: loaded serial 0
OK
显示OK说明配置语法没有问题,这个OK很重要啊。。我的心都跟着跳啊。。。
接下来我们设置区域文件的权限:
文件属主: root
文件属组: named
权限为: 640
[root@localhost named]
# chown root:named /var/named/hong.com.zone
[root@localhost named]
# chown root:named /var/named/0.168.192.zone
[root@localhost named]
# chmod 640 /var/named/hong.com.zone
[root@localhost named]
# chmod 640 /var/named/0.168.192.zone
[root@localhost named]
# ll hong.com.zone 0.168.192.zone
-rw-r-----. 1 root named 236 9月 17 00:50 0.168.192.zone
-rw-r-----. 1 root named 282 9月 17 00:40 hong.com.zone
配置防火墙(iptables)和selinux设置:
可用命令:getenforce #查询selinux状态
setenforce 0 #设置selinux
[root@localhost named]
# getenforce
Enforcing
#强制
[root@localhost named]
# setenforce 0
[root@localhost named]
# getenforce
Permissive
#现在表示selinux不起作用
设置防火墙: /etc/sysconfig/iptables
添加三条记录把53和953端口放开
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-AINPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT #添加记录通过53和952端口
-AINPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-AINPUT -m state --state NEW -m tcp -p tcp --dport 953 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
重启防火墙: service iptables restart 即可
启动bind服务:
service named start
配置host 文件:
/etc/resolv.conf 添加服务器ip地址
# Generated by NetworkManager
domain DHCP
search DHCP HOST
nameserver 124.207.160.106
nameserver 219.239.26.42
nameserver 144.144.144.144
nameserver 192.168.0.107
至此搭建成功,测试一下
我们使用本地windows系统测试一下
C:\Users\f>nslookup
默认服务器: bjdns.drpeng.com.cn
Address: 124.207.160.106
> server 192.168.0.108
默认服务器: [192.168.0.108]
Address: 192.168.0.108
> set q=PTR
> 192.168.0.108
服务器: [192.168.0.108]
Address: 192.168.0.108
108.0.168.192.in-addr.arpa name = mail.hong.com #反向解析成功
108.0.168.192.in-addr.arpa name = ns.hong.com
108.0.168.192.in-addr.arpa name = www.hong.com
0.168.192.in-addr.arpa nameserver = ns.hong.com
ns.hong.com internet address = 192.168.0.108
>#解析成功
> server 192.168.0.108
默认服务器: [192.168.0.108]
Address: 192.168.0.108
> set q=A
> www.hong.com
服务器: [192.168.0.108]
Address: 192.168.0.108
> set q=NS #查询NS记录
> hong.com
服务器: [192.168.0.108]
Address: 192.168.0.108
hong.com nameserver = ns.hong.com
ns.hong.com internet address = 192.168.0.108
>
> set q=CNAME #别名记录
> ftp.hong.com
服务器: [192.168.0.108]
Address: 192.168.0.108
ftp.hong.com canonical name = mail.hong.com
hong.com nameserver = ns.hong.com
ns.hong.com internet address = 192.168.0.108
>
测试没有问题,即可正向解析又可以反向解析。。
rndc的使用:
rndc(Remote Name Domain Controller)远程名称域控制器
rndc 通过一个 TCP 连接与名字服务器通信,发送经过数字签名认证的命令。在当前版本的rndc 和 named 中,唯一
支持的认证算法是 HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认
证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名。
监听端口:tcp:953
语法:
rndc [-b address] [-c config] [-s server] [-p port][-k key-file ] [-y key] [-V] command
command is one of the following:
reload Reload configuration file and zones. #重新加载配置文件和区域文件
reconfig Reload configuration file and new zones only. #重新加载配置文件和新的区域文件
freeze Suspend updates to all dynamic zones.
stats Write server statistics to the statistics file. #将服务器统计信息写入统计文件中
stop Save pending updates to master files and stop the server.
halt Stop the server without saving pending updates.
flush Flushes all of the server's caches. #清空DNS缓存
status Display status of the server. #显示bind服务器的工作状态
rndc的调试和日志:
调试:显示程序运行中的详细信息(会产生I/O,正常情况下建议关闭)
调试级别:0,1,2,3...
提升调试级别:
rndc trace
rndc trace LEVEL
rndc notrace
打开查询日志:记录查询动作(会增加磁盘I/O)
ndc querylog
[root@localhost named]
# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4
CPUs found: 1
worker threads: 1
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries
in
progress: 0
query logging is OFF
recursive clients: 0
/0/1000
tcp clients: 0
/100
server is up and running
辅助DNS配置:
新建一个虚拟机,这里还是用CentOS6.6作为辅助DNS
1. 同样在辅助DNS服务器安装bind服务并做相应的配置: 编辑/etc/named.rfc1912.zones,添加以下记录:
zone "hong.com" IN {
type slave;
file "slaves/hong.com.zone";
masters{ 192.168.0.108; };
};
zone "0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/0.168.192.zone";
masters{ 192.168.0.108; };
};
检测一下语法是否有错:
[root@localhost slaves]
# named-checkconf #没有提示信息说明没有错误
2. 编辑主DNS服务器所在的ns1主机上的区域文件/var/named/hong.com.zone 和/var/named/0.168.192.zone中添加相应记录:
正向区域:
$TTL 86400
@ IN SOA ns1.hong.com. admin.hong.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1
@ IN NS ns2 #添加NS记录
@ IN MX 10 mail
ns1 IN A 192.168.0.108
ns2 IN A 192.168.0.106 #添加ns2的A记录
mail IN A 192.168.0.108
www IN A 192.168.0.108
www IN A 192.168.0.106
ftp IN CNAME www
反向区域:
$TTL 86400
@ IN SOA ns1.hong.com. admin.hong.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.hong.com.
@ IN NS ns2.hong.com.#添加NS记录
108 IN PTR ns1.hong.com.
106 IN PTR ns2.hong.com.#添加ns2PTR记录
108 IN PTR www.hong.com.
106 IN PTR www.hong.com.#www记录
108 IN PTR mail.hong.com.
添加完记录同样检测一下语法:
[root@localhost named]
# named-checkconf
[root@localhost named]
# named-checkzone "hong.com.zone" /var/named/hong.com.zone
zone hong.com.zone
/IN
: loaded serial 0
OK
[root@localhost named]
# named-checkzone "0.168.192.zone" /var/named/0.168.192.zone
zone 0.168.192.zone
/IN
: loaded serial 0
OK
[root@localhost named]
#
没有问题,在主DNS上测试一下是否有记录
[root@localhost named]# dig -t NS hong.com @192.168.0.108
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t NS hong.com @192.168.0.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24224
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
;; QUESTION SECTION:
;hong.com. IN NS
;; ANSWER SECTION:
hong.com. 86400 IN NS ns1.hong.com.
hong.com. 86400 IN NS ns2.hong.com. #已经有ns2记录
;; ADDITIONAL SECTION:
ns1.hong.com. 86400 IN A 192.168.0.108 #A记录也已经存在
ns2.hong.com. 86400 IN A 192.168.0.106
;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Thu Sep 17 06:34:08 2015
;; MSG SIZE rcvd: 94
反向解析:
[root@localhost named]# dig -x 192.168.0.108 @192.168.0.108
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 192.168.0.108 @192.168.0.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15453
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;108.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
108.0.168.192.in-addr.arpa. 86400 IN PTR ns1.hong.com.
108.0.168.192.in-addr.arpa. 86400 IN PTR www.hong.com.
108.0.168.192.in-addr.arpa. 86400 IN PTR mail.hong.com.
;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS ns2.hong.com.#辅助ns2已经存在
0.168.192.in-addr.arpa. 86400 IN NS ns1.hong.com.
;; ADDITIONAL SECTION:
ns1.hong.com. 86400 IN A 192.168.0.108
ns2.hong.com. 86400 IN A 192.168.0.106 #对应的A记录
;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Thu Sep 17 06:36:23 2015
;; MSG SIZE rcvd: 171
辅助DNS上查看一下是否同步
[root@localhost slaves]# dig -t axfr hong.com @192.168.0.108
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t axfr hong.com @192.168.0.108
;; global options: +cmd
hong.com. 86400 IN SOA ns1.hong.com. admin.hong.com. 0 86400 3600 604800 10800
hong.com. 86400 IN NS ns1.hong.com.
hong.com. 86400 IN NS ns2.hong.com.
hong.com. 86400 IN MX 10 mail.hong.com.
ftp.hong.com. 86400 IN CNAME www.hong.com.
mail.hong.com. 86400 IN A 192.168.0.108
ns1.hong.com. 86400 IN A 192.168.0.108
ns2.hong.com. 86400 IN A 192.168.0.106 #可以看到都已经同步过来
www.hong.com. 86400 IN A 192.168.0.108
www.hong.com. 86400 IN A 192.168.0.106
hong.com. 86400 IN SOA ns1.hong.com. admin.hong.com. 0 86400 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.0.108#53(192.168.0.108)
;; WHEN: Wed Sep 16 18:42:44 2015
;; XFR size: 11 records (messages 1, bytes 263)
我们可以查看到辅助DNS服务器上是否有区域文件
[root@localhost slaves]
# ls
0.168.192.zone hong.com.zone
#正向反向区域文件已经存在
进入区域文件:
$ORIGIN .
$TTL 86400 ; 1 day
hong.com IN SOA ns1.hong.com. admin.hong.com. (
0 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS ns1.hong.com.
NS ns2.hong.com.
MX 10 mail.hong.com.
$ORIGIN hong.com. #ORIGIN意思为每个资源记录末尾自动附加所定义的内容
ftp CNAME www
mail A 192.168.0.108
ns1 A 192.168.0.108
ns2 A 192.168.0.106
www A 192.168.0.108
A 192.168.0.106
#辅助DNS里的区域文件是不能手动修改的。。由主DNS服务器同步而来。。
到此我们的服务配置完成。。。
DNS服务器的基本配置就这么多哈,下面来简单总结下:
1、每个DNS服务器必须要有一个对应的NS资源记录;
2、创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 IP地址 ;
3、可以使用dig -t axfr test.com @server_IP 从主DNS服务器拉取所有解析库资源记录;
4、主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,这些区域文件是从主DNS同步过来的,一般为只读,不建议更改slave的zone文件;
5、在主DNS上修改区域文件时,必须将SOA记录的serial加1 因为slave是通过serial值来进行判断更新的(windows系统上是自动完成的);
6、DNS的日志默认全部保存在/var/log/messege 文件中;
7、DNS的解析依赖于解析库,所以就算是所配置的内容是完全不存在的也可以解析(且正向解析和反向解析的解析库是各自独立的)。需要注意,正向解析里没有PTR记录,而反向解析库里不需要A记录、MX记录和CNAME记录