一. DNS理论:
DNS:域名服务(domain nsme service)
作用:将域名解析成IP(正向解析)或者把IP解析成域名(反向解析)
DNS顶级域的分类:
组织域:.com .net .org .....
国家域:.cn .tw .jp .....
反向域:将ip解析为域名
DNS记录类型:
A:正向解析条目
PTR:反向解析条目
NS:代表域内的DNS服务器
MX:代表域内的邮件服务器
CNAME:别名
SOA:用于标识域内的DNS服务器
注意:每添加一条NS记录,就应该为其添加一条相应的A记录
DNS服务器的类型:
主DNS服务器:master
从DNS服务器:slave
根DNS服务器:hint
DNS缓存服务器:生活中接触最多的,一般都是作为我们的默认DNS(localDNS).
默认DNS服务器:
一般都是可以为我们进行迭代查询的DNS服务器
在Internet中,顶级域的DNS服务器不会为我们进行迭代查询,所有一般只要DNS缓存服务器会为我们进行迭代
DNS的查询类型:
迭代查询(tcp:53)
递归查询(udp:53)
DNS的查询顺序:
1.DNS缓存
2.本地host文件
3.DNS服务器
IP和FQDN的对应关系:(FQDN:完全限定域名)
ICANN:名称分配机构,他以及其下辖机构管理Internet上的所有域名
一个IP可以有多个域名(http虚拟主机的实现原理之一)
一个域名可以有多个ip(集群的负载均衡实现的原理之一)
从DNS的作用:
1.实现DNS的负载均衡
2.当主服务器出现故障时可以代替主服务器的工作
子域和委派:
委派:当区域中子域过多时,在一台服务器上不能很好的维护,就可以将一些子域分配给指定服务器进行维护
子域:解析文件存放在父域
委派:有独立的区域文件
检查工具(由bind-utils软件包提供)
检查DNS服务主配置文件是否有错误:named-checkconf 配置文件路径
检查DNS服务正反向文件是否有错误:named-checkzone 域名 与之对应的反向解析文件
二. DNS配置:
###主根DNS服务器配置:
三.配置文件
/etc/named.conf:DNS的主配置文件
/bind/named:此目录下存放DNS的区域数据文件
/bind/named/named.root 存放DNS的区域声明文件
###配置文件详解:
named.conf 主配置文件详解:
options //全局配置区域
directory //区域数据文件的默认存放位置
pid-file //pid文件存放位置。向运行的DNS服务器发送信号的程序使用的。
dump-file //缓存文件存放路径,named的数据文件存放位置。
request-ixfr yes;
//决定本地服务器是否作为辅域名服务器,会向主域名服务器发送域的增量传送请求。
recursion yes; //允许所有客户机递归(默认)
statistics-file //统计信息的文件路径。
memstatistics-file //内存使用统计文件的路径名
allow-transfer {none;};
//设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。
allow-query {any;}; //允许哪些客服机使用本DNS查询信息,可以是IP网段,或any。
listen-on port 53 { any; };
//DNS服务器的ip地址或any, 监听的ipv4和端口,(any:任意,53:udp53和tcp:53)
zone区域部分解释:
allow-transfer {none;};
//设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。
allow-update { none; }; //是否允许"从服务器"更新DNS信息(none:拒绝)
masterIP: 192.168.1.1
slaveIP: 192.168.1.2
北京localDNS: 192.168.1.4
山西localDNS: 192.168.1.5
GSLB地址: 192.168.1.41
修改主配置named.conf文件:
[root@master~]# vim /etc/named.conf
options {
directory "/bind/named";
pid-file "/var/run/named/named.pid";
dump-file "/var/named/dump.named";
request-ixfr yes; // save bandwidth
recursion yes; // please restrict this
allow-transfer {none;};
listen-on { any; }; // listen on all IPv4 interfaces
listen-on-v6 { any; }; // listen on all IPv6 interfaces
};
/************* zone info *************/
// main zone
zone "." in { //定义根域。
type master; //域类型.
file "named.root"; //定义根域解析文件。
allow-transfer { 192.168.1.2; };
notify yes; //根DNS修改一个域后,notify消息会被发送到在域NS记录的上的服务器。
};
##主根DNS服务器区域声明文件配置:
[root@master~]# vim /bind/named/named.root
$ORIGIN . //权威解析DNS服务器
@ 1D IN SOA @ root ( //域名
2018070402 //序列号,每一次修改都往上加,否则从根DNS不同步
1H //刷新时间,重新下载地址数据的间隔。
15M //重试间隔时间,下载失败之后的重试间隔。
1W //失效时间,超过该时间任无法下载则放弃。
5M ) //无法解析记录的生存期.1D也可以,表示1天。
. 518400 IN NS we.yuan.net.jp //DNS域名(NS域名服务器).
we.yuan.net.jp 518400 IN A 192.168.1.1 //主根DNS服务器。
. 518400 IN A 192.168.1.1
. 518400 IN NS slave.we.yuan.net.jp
slave.we.yuan.net.jp 518400 IN A 192.168.1.2 //从根DNS服务器。
. 518400 IN A 192.168.1.2 //从根DNS服务器。
;GSLB地址。
ly.we.yuan.net.jp 518400 IN NS ns1.ly.we.yuan.net.jp
ns1.ly.we.yuan.net.jp 518400 IN A 192.168.1.41
;主根和从根DNS地址。
. 518400 IN NS we.
we. 518400 IN A 192.168.1.1
. 518400 IN A 192.168.1.1
. 518400 IN NS slave.we.
slave.we. 518400 IN A 192.168.1.2
. 518400 IN A 192.168.1.2
ly.we. 518400 IN NS ns3.ly.we.
ns3.ly.we. 518400 IN A 192.168.1.41
;山西
sx.we.yuan.net.jp 518400 IN NS ns5.sx.we.yuan.net.jp
ns5.sx.we.yuan.net.jp 518400 IN A 192.168.1.5
;北京
bj.we.yuan.net.jp 518400 IN NS ns6.bj.we.yuan.net.jp
ns6.bj.we.yuan.net.jp 518400 IN A 192.168.1.4
###从根DNS服务器配置:
#vim /etc/named.conf
options {
directory "/bind/named/slave";
pid-file "/var/run/named/named.pid";
dump-file "/var/named/dump.named"; // cache file
request-ixfr yes; // save bandwidth
recursion yes; // please restrict this
allow-transfer {none;};
allow-query {any;};
listen-on { any; }; // listen on all IPv4 interfaces
listen-on-v6 { any; }; // listen on all IPv6 interfaces
};
/************* zone info *************/
zone "." in {
type slave;
file "slave.root.hint";
masters { 192.168.1.1; }; //主根DNS地址
notify yes;
};
##从根DNS服务器区域声明文件配置:
#vim /bind/named/slave.root.hint
$ORIGIN .
$TTL 86400 ; 1 day //生命周期
@ IN SOA . root. (
2018070402 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
604800 ; expire (1 week)
300 ; minimum (5 minutes)
)
$TTL 518400 ; 6 days //生命周期
NS we.
NS we.yuan.net.jp
NS slave.we.
NS slave.we.yuan.net.jp
A 192.168.1.2
A 192.168.1.1
we.yuan.com.cn A 192.168.1.1
$ORIGIN we.yuan.net.jp
ly NS ns1.ly
$ORIGIN ly.we.yuan.net.jp
ns1 A 192.168.1.41
$ORIGIN we.yuan.net.jp
slave A 192.168.1.2
;山西localDNS
sx NS ns3.sx
$ORIGIN sx.we.yuan.net.jp
ns3 A 192.168.1.5
;北京localDNS
$ORIGIN we.yuan.net.jp
bj NS ns4.bj
$ORIGIN bj.we.yuan.net.jp
ns4 A 192.168.1.4
$ORIGIN .
we A 192.168.1.1
$ORIGIN we.
ly NS ns3.ly
$ORIGIN ly.we.
ns3 A 192.168.1.41
$ORIGIN we.
slave A 192.168.1.2
###山西localDNS配置:
#vim /etc/named.conf
options {
directory "/var/named";
allow-query { any; };
listen-on port 53 { any; }; // listen on all IPv4 interfaces
recursion yes;
#dnssec-enable yes;
#dnssec-validation yes;
#dnssec-lookaside auto;
};
zone "we.yuan.net.jp" IN {
type forward;
forwarders {192.168.1.2; };
};
zone "sx.we.yuan.net.jp" IN {
type master;
file "sx.we.yuan.net.jpzone";
};
zone "1.168.192-in-addr.arpa" IN {
type master;
file "1.168.192.zone";
};
##
##vim /var/named/sx.we.yuan.net.jpzone
$TTL 1D
@ IN SOA dns root.tj.we.yuan.net.jp (
0;serial
1D;refresh
1H;retry
1W;expire
3H);minimum
@ NS ns5
ns5 A 192.168.1.5
test A 192.168.1.5
#vim /var/named/1.168.192.zone
$TTL 1D
@ IN SOA dns root.abc.sx.we.yuan.net.jp (
0;serial
1D;refresh
1H;retry
1W;expire
3H);minimum
NS abc.sx.we.yuan.net.jp
5 PTR abc.sx.we.yuan.net.jp
###北京localdns配置:
#vim /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";
allow-query { any; };
recursion yes;
#dnssec-enable yes;
#dnssec-validation yes;
#dnssec-lookaside auto;
};
//DNS日志系统,语法
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "bj.we.yuan.net.jp" IN {
type master;
file "bj.we.yuan.net.jpzone";
};
zone "1.168.192-in-addr.arpa" IN {
type master;
file "1.168.192.zone";
};
zone "we.yuan.net.jp" IN {
type forward;
forwarders { 192.168.1.2; };
};
#vim bj.we.yuan.net.jpzone
$ORIGIN bj.we.yuan.net.jp
@ 1D IN SOA @ root (
2009082604
3H
15M
1W
1D )
1D IN NS @
IN A 192.168.1.4
test IN A 192.168.1.4
###调试命令:
named -g -u named
named -g -u named -t 配置文件(named.conf)目录 -c 指定配置文件路径named.conf
三.转发器配置:
1.在需要做转发的服务器上做转发,一般都是在子域服务去上,将他转发给父域服务器
区域声明文件配置:
1.可以在主配置文件中的全局配置中配置,在全局配置中配置的对整个DNS服务器生效
2.在区域声明文件中声明转发域,这里是第二种方法:
zone "we.yuan.net.jp" IN { //将we.yuan.net.jp的解析请求转发给we.yuan.net.jp
type forward; //服务器类型
forward first; //指定转发类型
forwarders { 192.168.1.2; }; //转发给指定域
};
转发域类型:
first:转发给指定域,如果指定域没有给出解析则进行迭代查询
only:转发给指定域,如果指定域没有给出解析则返回给客户机无法解析的结果
主配置文件:
全局选项修改:
dnssec-enable no;
dnssec-validation no;
删除:dnssec-lookaside auto;
四.ACL
ACL的概念:通过将指令编写在ACL中,可以实现同样的指令重复使用,类似于函数的功能(acl一般配合智能DNS使用)
dns默认有两个ACL:any和none
acl的编写原则:一般都编写在文件的最前面,因为acl必须先声明,再调用的
语法:
acl acl名 {
指令;
指令;
....;
};
如果不明白,请看图:

注意:
需要在防火墙开放DNS,TCP53和UDP53端口。
如果是山西localDNS服务器,采用的是GSLB负载均衡器,将山西的一部分域名转发给GSLB,那么必须要在主根DNS服务器配置一条A记录指向GSLB地址。
北京的从根DNS服务器需要与北京localdns和山西localdns互通,可以ping通。
结论:
在北京localdns服务器可以解析到山西的域名。在山西localdns可以解析到北京localdns的域名。
用nslookup和dig命令解析。
nslookup test.sx.we.yuan.net.jp命令返回192.168.1.5的地址。
nslookup test.bj.we.yuan.net.jp命令返回192.168.1.4的地址。
linux用rndc flush命令 清空DNS缓存。
dig命令输出详解:
#dig www.baidu.com
下面说明各项意义:
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> baidu.com
;; global options: printcmd
dig程序的版本号,和要查询的域名
Dig的部分输出告诉我们一些有关于它的版本信息(version 9.2.3)和全局的设置选项,如果+nocmd在命令行下
是第一个参数的话,那么这部分输出可以通过加+nocmd的方式查询出来
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54864
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
在这里,Dig告诉我们一些从DNS返回的技术信息,这段信息可以用选项 +[no]comments来控制显示,但是小心
,禁止掉comments也可能关闭一些其它的选项。
opcode 操作码,QUERY,代表是查询操作
status 状态,NOERROR,代表没有错误
id 编号,54864,16bit数字,在dns协议中,通过编号匹配返回和查询。
flags 标志,如果出现就表示有标志,如果不出现就未设置标志:
qr query,查询标志,代表是查询操作
rd recursion desired, 代表希望进行递归(recursive)查询操作
ra recursive available 在返回中设置,代表查询的服务器支持递归(recursive)查询操作。
aa Authoritative Answer 权威回复,如果查询结果由管理域名的域名服务器而不是缓存服务器提供的,则称为权威回复。
QUERY 查询数,1代表1个查询,对应下面的QUESTION SECTION中的记录数
ANSWER 结果数,4代表有4项结果,对应下面ANSWER SECTION中的记录数
AUTHORITY 权威域名服务器记录数,0代表该域名有0个权威域名服务器,可供域名解析用。
ADDITIONAL 格外记录数,0代表有0项格外记录。
;; QUESTION SECTION:
;baidu.com. INA
在这个查询段中,Dig显示出我们查询的输出,默认的查询是查询A记录,你可以显示或者禁止掉这些用+[no]question
查询部分,从左到右各部分意义:
1、要查询的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名
2、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。
3、type,要查询的记录类型,A记录(Address),代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。
;; ANSWER SECTION:
baidu.com. 600IN A 123.125.114.144
baidu.com. 600IN A 180.149.132.47
baidu.com. 600IN A 111.13.101.208
baidu.com. 600IN A 220.181.57.217
最后,我们得到我们查询的结果。baidu.com的地址是123.125.114.144,但是你可以用+[no]answer来保留或不保留这些选项。
回应部分,回应都是A记录,A记录从左到右各部分意义:
1、对应的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名
2、TTL,time ro live,缓存时间,单位秒。600,代表缓存域名服务器,可以在缓存中保存76秒该记录。
3、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。
4、type,要查询的记录类型,A记录,代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。
5、域名对应的ip地址。
;; Query time: 2 msec
查询耗时
;; SERVER: 192.168.132.1#53(192.168.132.1)
查询使用的服务器地址和端口
;; WHEN: Mon Jul 18 16:31:03 2016
查询的时间
;; MSG SIZE rcvd: 91
回应的大小。收到(rcve, recieved)91字节
以上仅为测试使用,具体需要根据生产环境而定。 仅为个人工作经验总结,如有错误之处,希望各位博友可以指正错误之处。谢谢各位博友。
linux的DNS服务详解
原文:http://blog.51cto.com/liyuanjie/2140340