DNS服务
DNS:Domain Name Service 应用层协议 C/S,53/udp, 53/tcp BIND:Bekerley Internat Name Domain ISC (www.isc.org) 本地名称解析配置文件:hosts /etc/hosts %WINDIR%/system32/drivers/etc/hosts 93.46.8.89 www.google.com 根域: . 一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域 二级域名,三级域名,最多127级域名 ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理 DNS类型: 递归查询 迭代查询 名称服务器:域内负责解析本域内的名称的主机 根服务器:13组服务器 解析类型: 正向解析:FQDN --> IP 反向解析:IP --> FQDN 注意:正反向解析是两个不同的名称空间,是两棵不同的解析树 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server(recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS… 解析答案: 肯定答案: 否定答案:请求的条目不存在等原因导致无法返回结果 权威答案: 非权威答案:
区域zone的资源记录(RR)
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX, SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录 A:internet Address,作用,FQDN --> IP AAAA: FQDN --> IPv6 PTR: PoinTeR,IP --> FQDN NS: Name Server,专用于标明当前区域的DNS服务器 CNAME:Canonical Name,别名记录 MX: Mail eXchanger,邮件交换器 #资源记录定义的格式: 语法:name [TTL] IN rr_type value 注意: (1) TTL可从全局继承 (2) @可用于引用当前区域的名字 (3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应 (4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
FQDN--->IP /var/named/ZONE_NAME.zone 文件格式
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. (
0 ; Serial #序列号,主从服务器同步更新的条件,最多4294967296(2^32)
1D ; Refresh #刷新时间,slave 会去向 master 要求数据更新的判断的时间定义
1H ; Retry #重试时间
1W ; Expire #过期时间
3H ) ; minimum
NS dns1.feng.com. #省略写法,dns1.feng.com. 1D IN NS dns1.feng.com.
dns1 A 192.168.1.8 #省略写法,dns1.feng.com. 1D IN A 192.168.1.8
master A 192.168.1.200 #省略写法,master.feng.com. 1D IN A 192.168.1.100
$GENERATE 1-254 HOST$ A 192.168.1.$ #对应192.168.1.{1..254}的主机对应记录
*.feng.com A 192.168.1.200 #泛域名解析
websrv A 192.168.1.10
websrv A 192.168.1.11
websrv A 192.168.1.12
www CNAME websrv #别名解析,实现负载均衡。
SOA数据的说明:
Serial < 2^32 = 4294967296 Refresh >= Retry *2 Refresh + Retry < Expire Expire >= Rrtry * 10 Expire >= 7D
一般来说,如果 DNS RR 资料变更情况频繁的,那么上述的相关数值可以订定的小一些,如果 DNS RR 是很稳定的, 为了节省带宽,则可以将 Refresh 设定的较大一些 .
IP --->FQDN /var/named/ZONE_NAME.zone文件格式
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
dns1.feng.com. A 192.168.1.9
8 PTR websrv.feng.com. #省略写法, 8.1.168.192.in-addr.arpa. IN PTR websrv.feng.com.
6 PTR appsrv.feng.com.
100 PTR mailsrv.feng.com.
子域
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权,资源记录如下:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
bind服务器(base源)
后附bind编译安装配置
yum install -y bind
文件:
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ ZONE_NAME.ZONE
解析库文件必须存在named.ca文件,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
测试命令dig
dig [-t type] name [@SERVER][query options] dig只用于测试dns系统,不会查询hosts文件进行解析 查询选项: +[no]trace:跟踪解析过程 : dig +trace feng.com +[no]recurse:进行递归解析 测试反向解析: dig -x IP = dig –t ptr reverseip.in-addr.arpa 模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr feng.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net
host测试命令
host [-t type] name [SERVER]
host –t NS feng.com 172.16.0.1
host –t soa feng.com
host –t mx feng.com
host –t axfr feng.com
host 1.2.3.4
nslookup命令及DNS动态更新
nslookup命令: nslookup [-option][name | -] [server] 交互式模式: nslookup> server IP: 指明使用哪个DNS server进行查询 set q=RR_TYPE: 指明查询的资源记录类型 NAME: 要查询的名称
指定的zone语句块中或者全局的options配置文件中:
Allow-update {any;};
远程主机端:
]#chmod 770 /var/named
]#setsebool -P named_write_master_zones on
]#nsupdate
>server 192.168.1.9
>zone feng.com
>update add ftp.feng.com 88888 IN A 8.8.8.8
>send
>update delete www.feng.com A
>send
测试:dig ftp.feng.com @192.168.1.9
在DNS服务器端会生成一个日志文件feng.com.zone.jnl
]#ll /var/named/feng.com.zone.jnl
]#cat /var/named/feng.com.zone
将feng.com.zone的文件格式规划好了
客户端的设定
架设好DNS服务器后,都需要进行测试,所以这里需要有客户端进行配置好。
/etc/hosts #这个是最早的 hostname 对应 IP 的档案;
/etc/resolv.conf #这个重要!就是 ISP 的 DNS 服务器 IP 记录处;
/etc/nsswitch.conf #这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!
]#vim /etc/resolv.conf
nameserver DNS_IP #供实验的DNSip地址,一定是第一个
nameserver 8.8.8.8
nameserver 223.5.5.5
nameserver 223.6.6.6
rndc命令
rndc ---> rndc(953/tcp)
]#rndc status
version: 9.9.4-RedHat-9.9.4-61.el7 id:8f9657aa
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 103
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
reload: 重载主配置文件和区域解析库文件 reload zonename: 重载区域解析库文件 retransfer zonename: 手动启动区域传送,而不管序列号是否增加 notify zonename: 重新对区域传送发通知 reconfig: 重载主配置文件 querylog: 开启或关闭查询日志文件/var/log/message trace: 递增debug一个级别 trace LEVEL: 指定使用的级别 notrace:将调试级别设置为 0 flush:清空DNS服务器的所有缓存记录
实验1.实现www.feng.com
正向反向DNS配置
1.在服务器上进行配置/etc/named.conf
]# vim /etc/named.conf
options {
listen-on port 53 { localhost; }; #允许localhost连接named进程
listen-on-v6 port 53 { ::1; };
directory "/var/named"; #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 { localhost;any; }; #允许any所有的client进行DNS解析服务
allow-transfor { none;}; #禁止任何人转发
···
include "/etc/named.rfc1912.zones"; #当然,zone文件也可以放在.conf文件里面。
include "/etc/named.root.key";
2.配置/etc/named.rfc1912.zones文件
]# vim /etc/named.rfc1912.zones #加入两条正向反向解析的域名
zone "feng.com" IN {
type master;
file "feng.com.zone";
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
};
3.解析域zone文件的配置
]# touch /var/named/{feng.com.zone,192.168.1.zone} #建立两套解析域资源
]# chgrp named /var/named/{feng.com.zone,192.168.1.zone} #改变文件的属组
]# chmod 640 /var/named/{feng.com.zone,192.168.1.zone} #改变文件的权限
]# vim /var/named/192.168.1.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
dns1.feng.com. A 192.168.1.9
8 PTR websrv.feng.com.
6 PTR appsrv.feng.com.
100 PTR mailsrv.feng.com.
]# vim /var/named/feng.com.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
dns1 A 192.168.1.9
websrv A 192.168.1.10
websrv A 192.168.1.11
www CNAME websrv
]#systemctl start named #至此,DNS正向反向解析库配置完成,客户端使用dig即可完成DNS解析。
实验2.实现DNS的主从服务器配置
要点: 1、应该为一台独立的名称服务器 2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器 3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中 4、主服务器得允许从服务器作区域传送 5、主从服务器时间应该同步,可通过ntp进行; 6、bind程序的版本应该保持一致;否则,应该从高,主低 定义从服务器的方法:
#主服务器的主配置文件options中(影响全局,若只影响局部,可以在/etc/named.rfc1912.zones添加):
]#vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { localhost;any; };
allow-transfer { 192.168.1.8; }; #只允许slave_ip传输
]#vim /etc/named.rfc1912.zones
zone "feng.com" IN {
type master;
file "feng.com.zone";
};
]#vim /var/named/feng.com.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
NS dns2.feng.com.
dns1 A 192.168.1.9
dns2 A 192.168.1.8
websrv A 192.168.1.10
websrv A 192.168.1.11
www CNAME websrv
]#chmod 640 /var/named/feng.com.zone
]#chgrp named /var/named/feng.com.zone
]#systemctl start named #配置完毕,启动服务
#从服务器:
]#vim /etc/named.conf
options {
listen-on port 53 { localhost; };
allow-query { localhost;any; };
allow-transfer { none;};
···
};
]#vim /etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type slave;
masters { 192.168.1.9; };
file "slaves/feng.com.zone";
};
]#systemctl start named
]#ll /var/named/slaves/ #重启服务后立即生成配置的文件
实验3.实现DNS的转发
中间DNS服务器192.168.1.8(全局/局部)
options {
···
listen-on port 53 { localhost; };
allow-query { localhost;any; };
forward first|only; #first首先转发forward IP;only只转发forward IP;
forwarders { 192.168.1.9;};
···
dnssec-enable no;
dnssec-validation no; #关闭dnssec功能
中间DNS服务器(局部域名转发)
zone "feng.com" IN {
type forward;
forward first|only;
forwarders { 192.168.1.9;};
};
192.168.1.9的DNS正向服务器解析配置参照实验1配置即可。
实验4.子域的配置
有三个方法:
1.当成父域的一条记录
2.子域,本机的独立域名
3.委派给另一台主机维护子域(主要应用)
父域:192.168.1.9 www.feng.com 子域:192.168.1.8 www.bj.feng.com
]# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { localhost;any; };
dnssec-enable no;
dnssec-validation no; #关闭dnssec功能
···
]#vim /etc/named.rfc1912.zones
zone "feng.com" IN {
type master;
file "feng.com.zone";
};
]#vim /var/named/feng.com.zone
$TTL 86400
@ IN SOA dns1.feng.com. admin.feng.com. (1 1D 2H 1W 3H)
NS dns1.feng.com.
bj NS dns2.feng.com. ##增加这条ns
sh NS dns3.feng.com.
dns1 A 192.168.1.9
dns2 A 192.168.1.8 ##增加这条A记录
dns3 A 192.168.1.7
]#systemctl start named #配置完毕,启动服务
在子域192.168.1.8配置bj.feng.com域名即可
在子域192.168.1.7配置sh.feng.com域名即可,参照实验1即可
实验5.实现智能DNS
DNS服务器:192.168.1.9/24 ; 172.20.1.24/16
需求:
192.168.1.0/24 本地的网段访问www.feng.com的时候,DNS解析为192.168.1.10
非192.168.1.0/24 外部的网段访问www.feng.com的时候,DNS解析为192.168.1.11
注意:view语句块必须包含所有的zone,所有需要把.(root)域转移到/etc/named.rfc1912.zones。进行模块化的管理。
]#vim /etc/named.conf
acl bjnet { 192.168.1.0/24;};
acl othernet {!192.168.1.0/24;any;};
/*
zone "." IN {
type hint;
file "named.ca";
};
*/
view "bjnet" {
match-clients {"bjnet";};
include "/etc/named.rfc1912.zones.bj";
};
view "othernet" {
match-clients {"othernet";};
include "/etc/named.rfc1912.zones";
};
// include "/etc/named.rfc1912.zones";
]#cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
]#vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "feng.com" IN {
type master;
file "feng.com.zone.bj";
};
]#vim /etc/named.rfc1912.zones
zone "." IN {
type hint;
file "named.ca";
};
zone "feng.com" IN {
tpye master;
file "feng.com.zone";
};
]#vim /var/named/feng.com.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
dns1 A 192.168.1.9
websrv A 192.168.1.10
www CNAME websrv
]#vim /var/named/feng.com.zone.bj
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
dns1 A 192.168.1.9
websrv A 192.168.1.11
www CNAME websrv
]#systemctl start named #配置好,启动服务
实验6.搭建互联网模型的dns
场景:.(root)服务器,com.服务器,feng.com服务器,www.feng.com主机,电信转发服务器,clinets
主机:centos7.4
.(root):192.168.1.1
com.:192.168.1.2
feng.com.:192.168.1.3 从:192.168.1.33 高可用
www.feng.com.: 192.168.1.4 负载均衡备用主机:192.168.1.44
DNStrans:192.168.1.5
clients:192.168.1.6
1.根服务器的配置192.168.1.1
]# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { localhost;any; };
dnssec-enable no;
dnssec-validation no; #关闭dnssec功能,需要委派
···
/*
zone "." IN {
tpye hint;
file "named.ca";
};
*/
]#vim /etc/named.rfc1912.zones
zone "." IN {
type master;
file "root.zone";
};
]#vim /var/named/root.zone
$TTL 86400
@ IN SOA dns1. admin. (1 1D 2H 1W 3H)
NS dns1
com NS dns2 #委派子域com.
dns1 A 192.168.1.1
dns2 A 192.168.1.2
]#systemctl start named #配置完毕,启动服务
2.搭建区域dns服务器192.168.1.5
]# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { localhost;any; };
dnssec-enable no;
dnssec-validation no; #关闭dnssec功能,需要转发
···
]#vim /var/named/named.ca
; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17380
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 3600000 IN A 192.168.1.1 #把CDN服务器指向已经搭好的根服务器IP
]#systemctl start named
3.搭建com.服务器:192.168.1.2
]# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query { localhost;any; };
dnssec-enable no;
dnssec-validation no; #关闭dnssec功能,需要委派
]#vim /etc/named.rfc1912.zones
zone "com" IN {
type master;
file "com.zone"
};
]#vim /var/named/com.zone
$TTL 86400
@ IN SOA dns1.com. admin.com. (1 1D 2H 1W 3H)
NS dns1
feng NS dns2 #委派子域feng.com.
feng NS dns3
dns1 A 192.168.1.2
dns2 A 192.168.1.3
dns3 A 192.168.1.33
4.搭建feng.com.服务器:主:192.168.1.3 从:192.168.1.33
前面的操作类似实验1,不赘述
]#vim /var/named/feng.com.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1.feng.com.
NS dns2.feng.com.
dns1 A 192.168.1.3
dns2 A 192.168.1.33
websrv A 192.168.1.4
websrv A 192.168.1.44
www CNAME websrv
5.搭建www.feng.com主机:192.168.1.4 备:192.168.1.44
]#yum install httpd -y
]#setenforce 0
]#echo welcome to my website! >> /var/www/html/index.hmtml
]#systemctl start httpd
]#systemctl stop firewalld
6.clients访问
dig或者host命令是bind包
]#rpm -qf /usr/bin/dig
bind-utils-9.9.4-61.el7.x86_64
]#rpm -q bind &> /dev/null || yum install -y bind
]#dig www.feng.com @192.168.1.5
]#host www.feng.com 192.168.1.5
]#curl www.feng.com
编译安装bind
1.编译安装bind及启动rndc服务DNS服务
开启dns服务,启用rndc服务
]#useradd -r -d /var/named -u 25 -s /sbin/nologin -m named
]#./configrue --prefix=/app/bind
]#make -j 4 && make install
]#yum groupinstall "devlopment tools"
]#yum install openssl-devel -y
]#vim /etc/profile.d/bind.sh
PATH=/app/bind/bin:/app/bind/sbin:$PATH
]#vim /app/bind/etc/named.conf
options {
directory "/var/named";
};
zone "feng.com" {
type master;
file "feng.com.zone";
};
zone "." {
type hint;
file "named.ca";
};
]#chgrp named /app/bind/etc/named.conf
]#chmod 640 /app/bind/etc/named.conf
]#mkdir /var/named/
]#dig -t ns . @a.root-servers.net > /var/named/named.ca
]#vim /var/named/feng.com.zone
$TTL 1D
@ IN SOA dns1.feng.com. admin.feng.com. ( 1 1D 1H 1W 3H )
NS dns1
dns1 A 192.168.1.9
websrv A 192.168.1.10
websrv A 192.168.1.11
www CNAME websrv
]#named -u named -g -d 3
]#named -u named -d 3 #dns基本配置完成,后台启用服务
]#rndc-confgen > /app/bind/etc/rndc.conf
]#grep '^#' /app/bind/etc/rndc.conf >> /app/bind/etc/named.conf
]#vim /app/bind/etc/named.conf #去掉rndc配置的相关的#号
key "rndc-key" {
algorithm hmac-sha256;
secret "sTvCPeQfkCmaObjPsnXXpqqryxkse4EmWUQylO4Wl5M=";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
]#killall -HUP named #重新加载配置文件,dns服务重启成功
2.querperf测试
]#cd /root/bind-9.13.0/contrib/queryperf
]#./configure
]#make
]#cp queryperf /app/bind/bin/
]#vim /root/dnstest.txt
www.feng.com A
feng.com NS
feng.com SOA
feng.com MX
]#cat >> /root/dnstest.txt < /root/dnstest.txt #生成大文件
]#sed -i '100000,$d' /root/dnstest.txt #取前100000行
]#queryperf -d /root/dnstest.txt
Statistics:
Parse input file: once
Ended due to: reaching end of file
Queries sent: 4055040 queries
Queries completed: 4055040 queries
Queries lost: 0 queries
Queries delayed(?): 0 queries
RTT max: 1.629313 sec
RTT min: 0.000057 sec
RTT average: 0.004647 sec
RTT std deviation: 0.008495 sec
RTT out of range: 0 queries
Percentage completed: 100.00%
Percentage lost: 0.00%
Started at: Sat Jun 2 23:03:40 2018
Finished at: Sat Jun 2 23:19:26 2018
Ran for: 945.913922 seconds
Queries per second: 4286.901700 qps