赞
踩
在Linux系统上安装能提供DNS服务的程序包,其程序包名为 bind,程序名为 named
yum install -y bind bind-libs bind-utils
安装完成后,主要配置文件位置如下
/etc/named.conf,默认配置和字段意义解释如下
# options 为全局配置
options {
# 监听端口 53 在 127.0.0.1 上
listen-on port 53 { 127.0.0.1; };
# 监听端口 53 在 ipv6 回环接口上
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";
# 允许进行DNS查询客户机的地址
allow-query { localhost; };
# 是否允许客户机进行递归查询
recursion yes;
# 是否开启 dnssec,建议测试时关闭
dnssec-enable yes;
# 是否开启 dnssec 验证
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
# 管理密钥文件的位置
managed-keys-directory "/var/named/dynamic";
};
# logging 为日志
logging {
# channel 定义通道名
channel default_debug {
# 日志文件 位于 /var/named/data/named.run
file "data/named.run";
# 控制日志级别
severity dynamic;
};
};
# 定义 区域名为"."
zone "." IN {
# 类型为 根
type hint;
# 区域解析库文件名,此处为默认根服务器地址
file "named.ca";
};
# 扩展区域配置文件
include "/etc/named.rfc1912.zones";
# 根区域的 key
include "/etc/named.root.key";
进行编辑,结果如下,此时一个最基本的DNS服务器就已搭建完成。(缓存DNS服务器)
options {
// listen-on port 53 { 127.0.0.1; };
// 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";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
/* 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";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
注意
1. 一台物理服务器可同时为多个区域提供解析
2. 必须要有根区域文件 named.ca
3. 应该有两个(如果包括IPv6,应该更多)实现 localhost 和 本地回环地址的解析库
在 /etc/named.rfc1912.zones,中实现 IPv4 和 IPv6 的本地回环地址 的 正反解析区域
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
这里对区域定义,进行简单解释
# ZONE_NMAE 为定义的区域名
zone "ZONE_NAME" IN {
# type 定义区域类型
# master 为主
# slave 为从
# hint 为根
# forward 为转发
type {master|slave|hint|forward};
# file 定义区域解析库文件名
# 存放位置 绝对路径为 /var/named/[ZONE_NAME.zone]
file "ZONE_NANE.zone";
}
开启DNS服务时,运行如下命令
named-checkconf
命令检查 主配置文件 配置是否无误 service named start
开启DNS服务rndc status
查看DNS服务状态,确定DNS服务已经开启ss -tlunp | grep ':53'
查看DNS服务 53端口 是否绑定在合适的IP地址上使用 dig 命令,测试命令如下
dig -t A www.bing.com @127.0.0.1
结果如下,表示成功解析 www.bing.com 域名 并获取其 IP地址
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.3 <<>> -t A www.bing.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42652
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.bing.com. IN A
;; ANSWER SECTION:
www.bing.com. 300 IN CNAME cn.a-0001.a-msedge.net.
cn.a-0001.a-msedge.net. 240 IN A 202.89.233.103
cn.a-0001.a-msedge.net. 240 IN A 202.89.233.104
;; AUTHORITY SECTION:
a-msedge.net. 172793 IN NS ns2.a-msedge.net.
a-msedge.net. 172793 IN NS ns1.a-msedge.net.
;; ADDITIONAL SECTION:
ns1.a-msedge.net. 172793 IN A 204.79.197.1
ns2.a-msedge.net. 172793 IN A 131.253.21.1
;; Query time: 837 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 13 06:54:07 2017
;; MSG SIZE rcvd: 166
注意
FQDN:FULL Qualified Domain Name (完全合格域名)
语法
name [TTL] IN rr+type value
注意
1. TTL可从全局继承
2. @可用于引用当前区域的名字
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
vim /etc/named.conf
中 添加如下内容
zone "test.com" IN {
type master;
file "test.com.zone";
};
在 /var/named/ 目录下,创建 test.com.zone,解析库文件
/var/named/test.com.zone
中添加如下内容
$TTL 86400
$ORIGIN test.com.
@ IN SOA ns1.test.com. admin.test.com. (
2017011301
1H
5M
7D
1D
)
IN NS ns1
ns1 IN A 192.168.80.130
www IN A 192.168.80.130
IN A 192.168.80.130
* IN A 192.168.80.130
需要注意的是,在 /var/named 目录下创建文件的默认所属组属于root,named用户将无法读取,这里我们将属组改为named
chown :named /var/named/test.com.zone
对添加的内容解释如下
- $TTL 86400
宏定义 TTL 值为 86400 秒,记录省略未填写的 TTL值的记录,将自动代入该TTL值
- $ORIGIN test.com.
宏定义 ORIGIN(当前区域的名字),以便于 @ 引用,或 自动代入
;@ 引用当前区域名
;SOA 指明 ns1.test.com. 为当前区域权威服务器(主DNS服务器)
;admin.test.com 当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用 . 替换
@ IN SOA ns1.test.com. admin.test.com (
2017011301 ;序列号
1H ;刷新时间
5M ;重试时间
7D ;过期时间
1D ;否定答案的TTL值
)
注意
1. 区域解析库文件中 第一条必须为 SOA,一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录
2. 在资源记录定义的 代表为 根的 . (点号)必不可少
vim /etc/named.conf
中 添加如下内容。通常反向解析区域名,约定俗成的规则为该 网络地址反写 拼接 “.in-addr.arpa”,如下
zone "80.168.192.in-addr.arpa" IN {
type master;
file "192.168.80.zone";
};
在 /var/named/ 目录下,创建 192.168.80.zone,解析库文件
/var/named/192.168.80.zone
中添加如下内容
$TTL 86400
$ORIGIN 80.168.192.in-addr.arpa.
@ IN SOA ns1.test.com. admin.test.com. (
2017011301
1H
5M
7D
1D
)
IN NS ns1.test.com.
130 IN PTR ns1.test.com.
130 IN PTR www.test.com.
同上,这里我们也要将属组改为named
chown :named /var/named/192.168.80.zone
named-checkconf
named-checkzone "test.com" /var/named/test.com.zone
named-checkzone "80.168.192.in.addr.arpa" /var/named/192.168.80.zone
service named start
ss -tlunp | grep ":53"
dig -t A www.test.com @127.0.0.1
dig -x 192.168.80.130 @127.0.0.1
实验目标
实验环境
首先分别为主和从服务器安装提供DNS服务的bind程序包
yum install -y bind bind-libs bind-utils
编辑 /etc/named.conf,结果如下
options {
listen-on port 53 { 192.168.80.130; };
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; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
/* 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 "test.com" IN {
type master;
file "test.com.zone";
allow-transfer { 192.168.80.131; };
};
zone "80.168.192.in-addr.arpa" IN {
type master;
file "192.168.80.zone";
allow-transfer { 192.168.80.131; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
注意
allow-transfer { 192.168.80.131; };
必不可少, 为防止内网服务器部署情况泄露,限制可以进行同步的服务器。在 /var/named/ 目录下 新增正反区域解析库文件,test.com.zone 和 192.168.80.zone,并添加如下内容
/var/named/test.con.zone
$TTL 86400
$ORIGIN test.com.
@ IN SOA ns1.test.com. admin.test.com. (
2017011301
1H
5M
7D
1D
)
IN NS ns1
IN NS ns2
ns1 IN A 192.168.80.130
ns2 IN A 192.168.80.131
www IN A 192.168.80.130
IN A 192.168.80.130
* IN A 192.168.80.130
/var/named/192.168.80.zone
$TTL 86400
$ORIGIN 80.168.192.in-addr.arpa.
@ IN SOA ns1.test.com. admin.test.com. (
2017011301
1H
5M
7D
1D
)
IN NS ns1.test.com.
IN NS ns2.test.com.
130 IN PTR ns1.test.com.
131 IN PTR ns2.test.com.
130 IN PTR www.test.com.
最后对配置进行检查
named-checkconf
named-checkzone "test.com" /var/named/test.com.zone
named-checkzone "80.168.192.in-addr.arpa" /var/named/192.168.80.zone
关闭 iptables
service stop iptables
确认配置无误后开启DNS服务
service named start
注意
1. 主服务器应该为一台独立的名称服务器
2. 主服务器的区域解析库文件中必须有一条NS记录是指向从服务器
3. 主服务器必须允许从服务器作区域传送复制
编辑 /etc/named.conf,结果如下
options {
listen-on port 53 { 192.168.80.131; };
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; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "test.com" IN {
type slave;
masters { 192.168.80.130; };
file "slaves/test.com.zone";
};
zone "80.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.80.130; };
file "slaves/192.168.80.130.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
对配置进行检查
named-checkconf
开启DNS服务
systemctl
命令开启服务 systemctl start named.service
关闭SELinux 和 防火墙
- /etc/sysconfig/selinux
- systemctl stop firewalld.service
最后在 /var/named/slaves/ 目录能看到已经同步区域解析库文件
[root@localhost ~]# ls /var/named/slaves/
192.168.80.130.zone test.com.zone
注意
1. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
2. bind程序的版本应该保持一致;否则,应该从高,主低
3. 如果未能同步,请检查主服务器的位于/var/named/目录下区域解析库的所属组权限是否正确,
4. 如果未能同步,注意检查主和从服务器的防火墙和SELinux是否设置得当,在本博文配置中,均是关闭状态
5.学会使用 tail -f /var/log/message
查看DNS服务日志来解决问题
dig命令语法
dig [-t type] name [@SERVER] [query options]
dig -t A www.test.com @192.168.80.131
host命令语法
host [-t type] name [SERVER]
示例
host -t A www.test.com 192.168.80.131
nslookup命令语法
nslookup [-option] [name | -] [server]
常使用于交互式模式
nslookup >
server IP:指明使用哪个DNS server进行查询
set q=RR_TYPE:指明查询的资源记录类型
NAME:要查询的名称
示例
[root@localhost ~]# nslookup
> server 192.168.80.131
Default server: 192.168.80.131
Address: 192.168.80.131#53
> set q=A
> www.test.com
Server: 192.168.80.131
Address: 192.168.80.131#53
Name: www.test.com
Address: 192.168.80.130
>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。