时间:2018.1.23
作者:李强
参考:man,info,magedu讲义,万能的internet
实验环境:VMware® Workstation 12 Pro ,Centos 6.9,Centos 7.4,SecureCRT Version 8.1.4
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
版本:v1-2018.1.23
官方资料
[ https://www.isc.org/downloads/bind/doc/]
1、安装软件包
1.1 安装DNS服务器端
getent services domain
getent services | grep domain
可以提供DNS服务的软件有许多,历史悠久的有isc组织的bind
yum install bind (bind(Berkeley Internet Name Domain))
==配置文件==
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/rwtab.d/named
/etc/sysconfig/named
/run/named
==库文件==
/usr/lib/systemd/system/named-setup-rndc.service
/usr/lib/systemd/system/named.service
/usr/lib/tmpfiles.d/named.conf
/usr/lib64/bind
/usr/libexec/generate-rndc-key.sh
==二进制文件==
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-checkds
/usr/sbin/dnssec-coverage
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-importkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/dnssec-verify
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc
/usr/sbin/rndc-confgen
==帮助文件==
/usr/share/doc/bind-9.9.4/..
/usr/share/man/man{1,5,8}/..
==日志文件==
/var/log/named.log
==数据库文件==
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves
1.2 安装DNS客户端相关软件包
yum install bind-utils //客户端工具,例如diag、host、nslookup等。
yum install bind-chroot //会将所有的named服务的文件通过文件挂载的方式,生成一个新的根对于named服务来说。
2、相关概念,工作原理
FQDN:Full Qualified Domain Name
根域:13组根域,ICANN(The Internet Corporation for Assigned Namesand Numbers)互联网名称与数字地址分配机构,
负责在全球范围内对互联网通用*域名(gTLD)以及国家和地区*域名(ccTLD)系统的管理、以及根服务器系统的管理
-
查询方式(递归和迭代)
递归,我问你,你回答我
迭代,我问你,我不知道,你去问甲,甲说我知道,你去问乙,乙说我知道,你去找丙,丙说我知道,xxx是ipxxx,
一般我们就是递归到DNS服务器,然后DNS服务器去迭代查找,然后将查询的结果,回复给客户端请求。根不提供递归操作。
DNS缓存机制。因为我们不可能总是去询问DNS服务器,所以会将你访问的DNS缓存到本地,设置一个老化时间。
DNS请求,先决定我去×××啊,首先是nsswitch.conf 名称服务交换服务,去决定我们从哪里去查找名称解析。对于hosts而言默认是files然后是dns
files定义在/etc/hosts中,dns定义在/etc/resolve.conf中。 - DNS解析过程:
graph LR
A[DNS客户端]-->B[DNS客户端hosts文件]
B[DNS客户端hosts文件]-->|如果没找到|C[DNS客户端本地DNS缓存]
C[DNS客户端本地缓存]-->|没找到|D[DNS服务器]
D[DNS服务器]-->|是否属于本地zone|E[DNS服务器本地数据库]
E[DNS服务器本地数据库]-->|是否存在于本地缓存|F[DNS本地缓存]
F[DNS本地缓存]-->|没找到|G[DNS服务器iteration迭代查询]
- Qustion:DNS如何查看本地缓存和清除缓存?
windows下可以通过ipconfig /displaydns 和ipconfig /flushdns
linux 下客户端默认不存在dns缓存信息,需要安装nscd软件包来管理dns缓存信息,但是只是能某种程度上提高dns解析的速度,但是其记录是data所以无法通过cat或者nscd命令本身查看,只能用nscd -i hosts 来清除dns的缓存。
DNS server 通过rndc flush 来清除缓存,具体看man rndc
2.1 Resource record
- 资源记录
SOA:start of authority 起始授权,表明查询此区域从这里指定的DNS解析服务器开始
NS: name server 域名服务器,告诉我们这个区域有哪些DNS解析服务器,有哪些子域的DNS服务器
MX:mail exchanger 邮件交换器
A: address FQDN-IP,此区域下有哪些IPV4主机记录
PTR:pointer(指针) IP-FQDN 此记录在反向解析的区域中和正向解析的A记录作用一样
AAAA:address FQDN-IPV6,这个是针对IPV6的解析,和A记录一样,表示当前区域下有哪些IPV6主机
CNAME:canonical(正确) name 正确的记录,记录别名
资源记录放置在DNS的数据库文件(区域数据文件,区域有自己的名称)中,通常数据库文件是文本格式,
- 资源记录格式:
name [ttl] class RRtype(资源记录类型) Value
1、ttl值可以从全局继承
$TTL 1D
2、@表示应用当前区域文件的区域名
3、 当相同的name对应多个不同的value值,采用轮询的方式来响应dns请求。
4、 多个不同的name对应相同的value值,仅代表能通过不同的名称找到这个主机ip而已
5、class 有三种常用IN ,HS,CH
SOA记录格式
$TTL 1D
@ IN SOA xxx (
;serial
;refresh //从服务器同步时间
;retry //从服务器同步失败后,再次尝试的时间
;expire //当主服务器挂了,我尝试多久判断主服务器停止服务,我也停止服务,
;minimum //否定结果的缓存有效期
)
NS记录格式
MX记录格式
A记录格式
name 可以有多种表示方式
@ 表示区域名zone.
可以简写,也可以写全就是name.zone.
当大量连续相似的可以使用
$GENERATE 1-127 表示连续的1-127 然后之后用$ 来调用这个1-127
$ORIGIN EXAMPLE.
$GENERATE 1-127 HOST-$ A 1.2.3.$
表示
HOST-1.EXAMPLE. A 1.2.3.1.EXAMPLE.
...........................
...........................
HOST-127.EXAMPLE. A 1.2.3.127.EXAMPLE.
PTR记录格式
CNAME记录格式
3、 dig 和host 和nslookup客户端测试工具 ,rndc和named
-
服务器端工具
- rndc
SYNOPSIS
rndc [-b source-address] [-c config-file] [-k key-file] [-s server] [-p port] [-V] [-y key_id] {command}
用法:
command常用如下
reload:从新加载配置文件和区域数据
flush:清除服务器的缓存
- named
SYNOPSIS
named [-4] [-6] [-c config-file] [-d debug-level] [-E engine-name] [-f] [-g] [-m flag] [-n #cpus]
[-p port] [-s] [-S #max-socks] [-t directory] [-U #listeners] [-u user] [-v] [-V] [-x cache-file]
- named-checkconf (检查named的配置文件语法)
SYNOPSIS
named-checkconf [-h] [-v] [-j] [-t directory] {filename} [-p] [-z]
用法:
filename不指定默认是/etc/named.conf
-p:如果检查没有错误,以规范的格式删除/etc/named.conf和其中include的文件内容
-z:
-t:
- named-checkzone(检查named的zone配置文件语法)
-
arpaname (将ip地址生成反向解析的arpa格式)
-
客户端工具
- dig(domain information groper域名信息搜索器)
SYNOPSIS
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m] [-p port#] [-q name] [-t type]
[-x addr] [-y [hmac:]name:key] [-4] [-6] [name] [type] [class] [queryopt...]
dig [-h]
dig [global-queryopt...] [query...]
用法:
我们以百度www.baidu.com来查询
1、我们先找根服务器
dig NS .
然后去找负责com.区域的服务器
2、dig NS com. @a.root-servers.net.(192.5.5.241)
;; QUESTION SECTION:
;com. IN NS
;; AUTHORITY SECTION:
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
;; ADDITIONAL SECTION:
a.gtld-servers.net. 172800 IN A 192.5.6.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
m.gtld-servers.net. 172800 IN A 192.55.83.30
3、然后去找负责baidu.com.区域的服务器
dig NS baidu.com. @a.gtld-servers.net.(192.5.6.30)
查找负责解析baidu.com.区域的DNS服务器有以下
;; QUESTION SECTION:
;baidu.com. IN NS
;; AUTHORITY SECTION:
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.
;; ADDITIONAL SECTION:
dns.baidu.com. 172800 IN A 202.108.22.220
ns2.baidu.com. 172800 IN A 61.135.165.235
ns3.baidu.com. 172800 IN A 220.181.37.10
ns4.baidu.com. 172800 IN A 220.181.38.10
ns7.baidu.com. 172800 IN A 119.75.219.82
4、然后去找www.baidu.com
dig NS www.baidu.com @202.108.22.220
;; QUESTION SECTION:
;www.baidu.com. IN NS
;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; AUTHORITY SECTION:
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
;; ADDITIONAL SECTION:
ns1.a.shifen.com. 1200 IN A 61.135.165.224
ns2.a.shifen.com. 1200 IN A 180.149.133.241
ns3.a.shifen.com. 1200 IN A 61.135.162.215
ns4.a.shifen.com. 1200 IN A 115.239.210.176
ns5.a.shifen.com. 1200 IN A 119.75.222.17
它说www.name.com 是www.a.shifen.com 的别名,那么负责shifen.com的DNS服务器是哪个。有好多,然后又有好多可解析a.shifen.com的DNS服务器地址
dig NS shifen.com. @192.5.6.30
;shifen.com. IN NS
;; AUTHORITY SECTION:
shifen.com. 172800 IN NS dns.baidu.com.
shifen.com. 172800 IN NS ns2.baidu.com.
shifen.com. 172800 IN NS ns3.baidu.com.
shifen.com. 172800 IN NS ns4.baidu.com.
;; ADDITIONAL SECTION:
dns.baidu.com. 172800 IN A 202.108.22.220
ns2.baidu.com. 172800 IN A 61.135.165.235
ns3.baidu.com. 172800 IN A 220.181.37.10
ns4.baidu.com. 172800 IN A 220.181.38.10
好我就去问a.shifen.com区域是谁负责解析的。
;; QUESTION SECTION:
;a.shifen.com. IN NS
;; AUTHORITY SECTION:
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
;; ADDITIONAL SECTION:
ns1.a.shifen.com. 1200 IN A 61.135.165.224
ns2.a.shifen.com. 1200 IN A 180.149.133.241
ns3.a.shifen.com. 1200 IN A 61.135.162.215
ns4.a.shifen.com. 1200 IN A 115.239.210.176
ns5.a.shifen.com. 1200 IN A 119.75.222.17
5、那么解析 www.a.shifen.com
dig A www.a.shifen.com @61.135.165.224
;; QUESTION SECTION:
;www.a.shifen.com. IN A
;; ANSWER SECTION:
www.a.shifen.com. 300 IN A 61.135.169.125
www.a.shifen.com. 300 IN A 61.135.169.121
;; AUTHORITY SECTION:
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 ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
;; ADDITIONAL SECTION:
ns1.a.shifen.com. 600 IN A 61.135.165.224
ns2.a.shifen.com. 600 IN A 180.149.133.241
ns3.a.shifen.com. 600 IN A 61.135.162.215
ns4.a.shifen.com. 600 IN A 115.239.210.176
ns5.a.shifen.com. 600 IN A 119.75.222.17
- nslookup (交互式查询域名工具)
SYNOPSIS
nslookup [-option] [name | -] [server]
用法:
nslookup 不加参数进入交互式模式
nslookup host server 指定dns解析host
交互式选项主要有set和ls,exit退出交互式模式
- host
SYNOPSIS
host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type] [-W wait] [-m flag] [-4] [-6] {name}
[server]
用法:
简单查询域名的工具,不加参数列出用法
host [name] [server] 指定用哪个域名服务器去查询主机,可以正向查询,也可以反向查询,name指定为FQDN或者ip即可。
4、DNS服务器类型,主从方式,转发,master|slave|forward
- 主DNS服务器
options{
allow-transfer {slaverdns_ip;};
};
zone "magedu.com" IN {
type master;
file "named.magedu.com"
};
- 从DNS服务器
options{
allow-transfer {none;};
};
zone "magedu.com" IN {
type slave;
masters {masterdns_ip;};
file "slaves/named.magedu.com";
};
sequenceDiagram
主服务器->>从服务器:小弟来给你库
从服务器->>主服务器:好的大哥
从服务器->>主服务器:大哥数据库更新了没
主服务器->>从服务器:小弟没有更新
- 转发服务器
全局转发:
options {
forward first|only; //only只转发,找到找不到都不去找根;first,先找ip,ip找不到去找根
forwarders {ip;};
};
区域转发:
zone xxx IN { //指定哪个区域需要转发
forward first|only; //only只转发,找到找不到都不去找根;first,先找ip,ip找不到去找根
forwarders {ip;};
};
5、子域
vim /var/named.magedu.com
zhengzhou IN NS zhengzhou
zhengzhou IN A 192.168.23.72
6、view(视图,智能DNS)和 acl
-
步骤
- 首先要创建acl匹配用户端ip(可以不使用acl,直接写1.0.0.0/16在match-clients中)
- 然后要开启view,所有的zone和include 配置的zone数据都要移动到view视图配置中
- 为不同的acl提供不同的数据库文件,返回的解析地址也更符合用户的需求。就是只能dns,因此这里重要的是acl中数据的精准和快速的匹配。
以下就是针对不同地域的客户端主机,分配不同的dns解析数据库,去解析离客户端最近的服务器地址。通常配合CDN使用。 acl chinet {1.0.0.0/16;}; acl cmcc {2.0.0.0/16;}; acl unicom {3.0.0.0/16;}; acl other {any;}; view view_chinet{
match-clients {chinet; };
zone "magedu.com"{
type master;
file "named.magedu.com";
};
include "/etc/named.xxx"; //这里通常放置的公共的配置数据
};
view view_cmcc{match-clients {chinet; };
zone "magedu.com"{
type master;
file "named.magedu.com";
};
include "/etc/named.xxx"; //这里通常放置的公共的配置数据
};
等其他视图
注意
DNS 使用udp 53 监听查询,主从区域数据同步需使用tcp 53 和udp 53
7、bind编译安装
前提:准备编译环境,开发工具等
-
1、下载源码,并解压,进入编译安装目录
[https://www.isc.org/downloads/xxx] tar xf bind-9.10.6-P1.tar.gz cd bind-9.10.6-P1
-
2、执行编译操作
mkdir -pv /home/lq/program/bind ./configure --prefix=/home/lq/program/bind --sysconfdir=/etc/named/ --without-openssl yum groupinstall Development tools yum install openssl-devel make && make install
-
3、创建用户
groupadd -r -g 53 named useradd -r -s /sbin/nologin -u 53 -g 53 named
-
4、创建相关配置文件,及添加程序执行路径到PATH变量
echo 'export PATH='/home/lq/program/bind/bin:$PATH'' > /etc/profile.d/named.sh man -M /home/lq/program/share/man named.conf vim /etc/named.conf options { dirname=/var/named; }; zone "." IN { type hint; file "named.ca"; }; mkdir /var/named vim /var/named/named.ca chmod 640 chown root:named
- 5、创建服务启动脚本
# 8、dns全局环境搭建测试
- 实验目的:
模拟客户端-运营商服务器-根域(.)-根的一级子域(com)-一级子域的一级子域(magedu.com)-(magedu.com的主从服务器)-服务器主机(www.magedu.com)的解析过程。
- 地址规划:
编号 | 主机 | ip地址
---|---|---
1 | 根(.)| 192.168.23.71/24
2 | com域(dns.com.) | 192.168.23.72/24
3 | magedu.com主域(dnsmaster.magedu.com.) | 192.168.23.72/24
4 | magedu.com备域(dnsslave.magedu.com.) | 192.168.23.74/24
5 | www网站(www.magedu.com) | 192.168.23.75/24
6 | 运营商服务器 | 192.168.23.76/24
7 | 客户端 | 192.168.32.77/24
- 根配置:
vim /etc/named.conf
options{
directory "/var/named";
recursion no;
};
zone "." IN {
type hint;
file "named.ca";
};
vim /var/named/named.ca
$TTL 1D
@ IN SOA @ ( 0 1D 3H 1W 2H)
@ IN NS a.root-servers.net.
a.root-servers.net. IN A 192.168.23.71
chmod 640 /var/named/*
chmod 640 /etc/named/named.conf
chgrp -R named /var/named/
chgrp named /etc/named/named.conf
- com.域配置:
vim /etc/named.conf
options{
directory "/var/named";
recursion no;
};
zone "." IN {
type hint;
file "named.ca";
};
zone "com." IN {
type master;
file "named.com";
};
dig NS . @ 192.168.23.71 > /var/named/named.ca
vim /var/named/named.com
$TTL 1D
@ IN SOA dns ( 0 1D 3H 1W 2H)
@ IN NS dns
magedu IN NS dnsmaster.magedu
magedu IN NS dnsslave.magedu
dns IN A 192.168.23.72
dnsmaster.magedu IN A 192.168.23.73
dnsslave.magedu IN A 192.168.23.74
chmod 640 /var/named/*
chmod 640 /etc/named/named.conf
chgrp -R named /var/named/
chgrp named /etc/named/named.conf
- magedu.com.主域配置:
vim /etc/named.conf
options{
directory "/var/named";
recursion no;
};
zone "magedu.com." IN {
type master;
file "named.magedu.com";
};
vim /var/named/named.com
$TTL 1D
@ IN SOA dnsmaster ( 0 1D 3H 1W 2H)
@ IN NS dnsmaster
@ IN NS dnsslave
dnsmaster IN A 192.168.23.73
dnsslave IN A 192.168.23.74
chmod 640 /var/named/*
chmod 640 /etc/named/named.conf
chgrp -R named /var/named/
chgrp named /etc/named/named.conf
- magedu.com.备域配置:
vim /etc/named.conf
options{
directory "/var/named";
recursion no;
};
zone "magedu.com." IN {
type slave;
masters {192.168.23.73;};
file "named.magedu.com";
};
vim /var/named/named.com
$TTL 1D
@ IN SOA dnsslave ( 0 1D 3H 1W 2H)
@ IN NS dnsmaster
@ IN NS dnsslave
dnsmaster IN A 192.168.23.73
dnsslave IN A 192.168.23.74
www IN A 192.168.23.75
chmod 640 /var/named/*
chmod 640 /etc/named/named.conf
chgrp -R named /var/named/
chgrp named /etc/named/named.conf
- 运营商域配置:
vim /etc/named.conf
options{
directory "/var/named";
allow-recursion {any;};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "com." IN {
type master;
file "named.com";
};
dig NS . @ 192.168.23.71 > /var/named/named.ca
chmod 640 /var/named/*
chmod 640 /etc/named/named.conf
chgrp -R named /var/named/
chgrp named /etc/named/named.conf
- 客户端配置:
echo -n 'nameserver 192.168.23.76' > /etc/resolv.conf
服务测试:
压力测试:
# 9、注意事项