向马哥致敬!!
DNS查询过程,比如访问www.test.com
1.客户机查询www.test.com
2.查询首选DNS服务器,Linux下/etc/resolv.conf, Windows下是网络设置中的
3.首选DNS服务器中没有test.com域的授权记录,将请求传递给“.”根域DNS服务器
4."."根域传递给"com"域,"com"域传递给"test.com"域,迭代查询
5."test.com"域存在记录,就将对应的IP就返回给首选DNS服务器
6.客户机的首选DNS服务器将www.test.com的IP 地址发送给客户机。
7.域名解析成功后,客户机将http请求发送给Web服务器。
8.Web服务器响应客户机的访问请求,客户机便可以访问目标主机。
L验证:
dig +trace www.sopans.com
区域(zone)和域(domain):
mageedu.com域:
FQDN-->IP
正向解析库; 区域
IP-->FQDN
反向解析库; 区域
区域数据库文件:
资源记录:Resource Record,简称rr;
记录类型有:A,AAAA,PTR,SOA,NS,CNAME,MX
**SOA**:start of Authority,起始授权记录;一个区域解析库有且只有一个SOA记录,而且只能有一个SOA记录,而且必须放在第一条;
**NS**:Name Service,域名服务记录; 一个区域解析库可以有多个NS记录;其中一个为主的;
**A**:Adress,地址记录,FQDN-->IPV4;
**AAAA**:地址记录,FQDN-->IPV6;
**CNAME**:Canonical Name,别名记录;
**PTR**:pointer ,IP-->FQDN
**MX**: Mail eXchanger, 邮件交换器;
优先级:0-99,数字越小优先级越高;
资源记录的定义格式:
语法: nane [TTL] IN RR_TPYE value
SOA:
name :当前区域的名字;例如"magedu.ocm.",或者"2.3.4.in-addr.arpa.";
vlaue: 有多部分组成
(1)当前区域名称(也可以用主DNS服务器名称);
(2)当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3)(主从服务协调属性的定义以及否定答案的TTL)
例如:
maedu.com. 86400 IN SOA magedu.com. admin.maedu.com.(
2020021301 ;serial序列号
2H ;refresh刷新时长2hours
10M ;retry重试时长10minites
1W ;expire过期时长1week
1D ;nagative answer ttl否定答案的TTL 1day
)
NS:
name:当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如:ns.magaedu.com.;
注意: 一个区域可以有多个NS记录;
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
MX:
name:当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
A:
name:某FQDN,例如:www.magedu.com.
value:某IPV4地址;
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
IN A 1.1.1.3
bbs.magedu.com. IN A 1.1.1.4
AAAA:
name:FQDN
value:IPV6
PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该记录为4.3.2.1.in-addr.arpa;
value:FQDN
例如:
4.3.2.1.addr.arpa. IN PTR www.magedu.com.
CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;
例如:
web.magedu.com. IN CNAME www.magedu.com.
注意:
(1)TTL可以从全局继承;
(2)@表示当前区域的名称;
(3)相邻的两条记录其name相同时,后面的可以省略;
(4)对于正向区域来说,MX,NS等类型的记录的value为一个FQDN,此FQDN应该有一个A记录``
bind的安装:
必备包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如:dlg,host,nslookup等;
bind: 提供的dns server程序,以及几个常用的测试程序;
bind-chroot:选装,让named运行于Jail模式下,安全应用.
#yum install -y bind
bind:
主配置文件:/etc/named.conf
或包含进来其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/va/named/目录下:
一般名字为:ZONE_NAME.zone
注意:(1)一台DNS服务器可同时为多个区域提供解析;
(2)必须要有根区域解析库文件:named.ca;
(3)还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:named.lcoalhost
反向:named.loopback
rndc:remote name domain controller 953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
centos6:service named start
centos7:systemctl start named.service
主配置文件格式:
全局配置段:
options {...}
日志配置段:
logging{...}
区域配置段:
zone{...}
那些由本机负责解析的区域,或转发的区域;
缓存名称服务器的配置:
监听能与外部主机通信的持址;
listen-on port 53;
listen-on port 53 { 172.16.3.5; } ; 注:尾部有;号{}内两端有空格
建议测试学习时不使用sec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询:
// allow-query { localhost; };
检查配置文件的语法:
#named-checkconf [/etc/named.conf]
测试工具:dig host nslookup
#dig [-t RR_TYPE] name [@server] [query options]
用于测试dns系统,因此其不会查询hosts文件;
查询选项:
+[no]trace: 跟踪解析过程;
+[no]recurse:进行递归解析;
注意:反向解析测试
#dig -x IP
模拟完全区域传送:
#dig -t axfr DOMAIN [@server]
rndc:named服务控制命令
#rndc -h
#rndc status
#rndc flush ;清空缓存,默认为2hours
配置解析一个正向区域:
A.手动创建配置文件及区域文件:
(1)定义区域
在主配置文件中或主配置文件中实现;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE"}
(2).配置区域文件(这里是系统自带的哦):
⑴编辑/var/named/named.loopback文件(如果是新建的文件要修改其相关属性):
[root@localhost ~]# vim /var/named/named.loopback
$TTL 1D@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
PTR localhost.
⑵编辑/var/named/named.localhost文件(如果是新建的文件要修改其相关属性):
[root@localhost ~]# vim /var/named/named.localhost
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
⑶编辑/var/named/xiaoma.com.zone文件(手动创建):
(4).修改named.conf属性:
1.[root@localhost named]# chown root:named
/var/named/xiaoma.com.zone
2.[root@localhost named]# chmod 640 /var/named/xiaoma.com.zone
3.[root@localhost etc]# chown root:named /etc/named.conf
4.[root@localhost etc]# chmod --reference=/etc/named.conf.origin /etc/named.conf(1)-->注意:这个(1)和(2)是一样的.
手动测试:[root@localhost etc]# named-checkconf
**B直接修改修改配置文件:named.conf:
(1)修改配置文件:named.conf:
注意:
这里只是把注释的内容贴出来了:
// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };
// allow-query { localhost; };
// dnssec-enable yes;
// dnssec-validation yes;
// dnssec-lookaside auto;
// bindkeys-file “/etc/named.iscdlv.key”;
// managed-keys-directory “/var/named/dynamic”;
//include “/etc/named.root.key”;
2).修改区域文件/etc/named.rfc1912.zones:
在文章尾部添加:
[root@localhost named]# vim /etc/named.rfc1912.zones
zone “xiaoma.com” {
type master;
file “xiaoma.com.zone”;
};
3)编辑/var/named/xiaoma.com.zone文件(手动创建):
4).修改其属性:
[root@localhost named]# chmod 640 /var/named/xiaoma.com.zone
[root@localhost named]# chown root:named /var/named/xiaoma.com.zone
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone “xiaoma.com” /var/named/xiaoma.com.zone
5).启动服务/重新加载服务:
1.[root@localhost named]# named -u named
2.[root@localhost named]# service named reload
3.[root@localhost named]# killall -1 named
配置反向解析:
1).定义区域文件/etc/named.rfc1912.zones:
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone “17.16.172.in-addr.arpa”{
type master;
file “172.16.17.zone”;
};
2).创建区域文件172.16.17.zone:
复制文件保持属组及权限:
[root@localhost named]# cp -p xiaoma.com.zone 172.16.17.zone
3).编辑区域文件172.16.17.zone:
区域传送的 主从复制
A.配置正向主从服务的实现:
1).主服务器配置 /var/named/xiaoma.com.zone:
(1)确保区域数据文件中为每个从服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A记录后面的地址为真正的从IP地正址;
注意:时间要同步; ntpdate;
2).主服务器配置 重新加载区域文件:
1.[root@host1 ~]# service named reload
2.Reloading named: [ OK ]
3).测试主从服务器是否能通信:
3).从服务器配置 /etc/named.conf:
01.注意:
02.这里只是把注释的内容贴出来了:
03.// listen-on port 53 { 127.0.0.1; };
04.// listen-on-v6 port 53 { ::1; };
05.// allow-query { localhost; };
06.// dnssec-enable yes;
07.// dnssec-validation yes;
08.// dnssec-lookaside auto;
09.// bindkeys-file “/etc/named.iscdlv.key”;
10.// managed-keys-directory “/var/named/dynamic”;
11.//include “/etc/named.root.key”;
4).从服务器配置 vim /etc/named.rfc1912.zones:
也可以在named.conf中配制定义区域:
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
注意:大括号后的;号和大括号两边的空格;
5).从服务器配置 启动并查看端口53是否启动:
1.[root@host2 ~]# named -u named
2.[root@host2 ~]# ss tunl
6).从服务器配置查看/var/named/slaves/xiaoma.com.zone是否以同步:
***
注:$ORIGIN参数后根的是默认补全参数.后面的单名默认添加补全所带参数;
7).从服务器配置 测试解析:
8).主服务器配置 重新加载并修改序列号:
I.添加一条记录并修改序列号:
II.重新加载:
1.[root@host1 ~]# service named reload
2.Reloading named: [ OK ]
9).从服务器 查看是否同步:
10).其它解析:
1.[root@host2 ~]# dig -t NS xiaoma.com @172.16.17.100
2.[root@host2 ~]# dig -t MX xiaoma.com @172.16.17.100
3.[root@host2 ~]# dig -t CNAME pop.xiaoma.com @172.16.17.100
4.[root@host2 ~]# dig -t CNAME ftp.xiaoma.com @172.16.17.100
接上(1.配置正向主从服务的实现)
配置反向主从服务的实现:
1).从服务器配置 vim /etc/named.rfc1912.zones :
2).从服务器 测试语法并重新加载:
1.[root@host2 ~]# named-checkconf
2.[root@host2 ~]# service named reload
3.Reloading named: [ OK ]
3).从服务器 查看日志:
4).从服务器 查看同步文件:
5).将主服务器的记录添加至反向记录:
我们在主服务器(/var/named/172.16.17.zone)里面加一条NS记录,告诉主服务器有一个从服务器.(ns2、img以及从服务器的记录).
6).启动服务并重新加载:
7).主服务器 查看日志:
8).从服务器 查看同步:
.区域传送的安全控制:
注意:我们都知道默认在未设置安全控制的情况下,DNS服务器的区域传送是传送所有服务器的,那么我们应该如何防范别人同步你的服务器的数据呢?
1).主服务器配置 vim /etc/named.rfc1912.zones :
2).主服务器配置 测试语法/重加载:
1.[root@host1 ~]# named-checkconf
2.[root@host1 ~]# service named reload
3.Reloading named: [ OK ]
4.[root@host1 ~]#
3).主服务器 测试区域传送:
4).从服务器 测试区域传送:
6).从服务器的安全控制 vim /etc/named.rfc1912.zones:
7).从服务器 测试语法/重加载
[root@host2 ~]# named-checkconf
[root@host2 ~]# service named reload
Reloading named:
8).从服务器 测试:
如何实现 子域授权、请求转发及ACL?
1.远程管理BIND的工具:
简单介绍:
rndc: Remote Name Domain Controller
rndc: 密钥rnc: 持有一半密钥,保存于rndc的配置文件中;
BIND:持有一半密钥,保存于主配置文件中;
常用选项:
reload : 重读
reload zone : 重加区域文件
reconfig: 重读配置文件并加载新增的区域;
querylog: 关闭或开启查询日志;
flush: 清空服务器的缓存;
flushname name: 清空指定名称相关的缓存;
trace: 打开debug,debug有级别的概念,每执行一次提升一次级别;
trace LEVEL: 指定deb②ug的级别;
如果rndc无法正常工作,可尝试使用rndc-confgen 生成/etc/rndc.conf配置文件,并将配置文件中的后半部分复制到BIND的主配置文件中并按指示启用即可.
如: # rndc-confgen -r /dev/urandom > /etc/rndc.conf
#service named reload
1).首先主服务器上生成rndc的密钥:
I.生成密钥:
1.[root@host1 ~]# rndc-confgen -r /dev/urandom > /etc/rndc.conf
II.密钥介绍:
2).在主服务器 将/etc/rndc.conf属于BIND的复制到/etc/named.conf
3).在主服务器上 查看状态:
4).再主服务器上查看端口:
1.[root@host1 ~]# ss -tunl
5).从服务器上生成密钥:
与主服务器的步骤一样:1)-2)-3)-4)-5) 这里就不贴图了哈.
6). 例子:
①第一次开启,执行第二次关闭:rndc querylog
接上:
②停止rndc:
1.[root@host2 ~]# rndc stop
2.[root@host2 ~]# ps aux | grep named
3.root 26370 1.0 0.1 103252 828 pts/0 S+ 20:45 0:00 grep named
4.[root@host2 ~]# named -u named
③trace的使用:
01.[root@host2 ~]# rndc trace
02.[root@host2 ~]# rndc trace 执行三次
03.[root@host2 ~]# rndc trace
04.[root@host2 ~]# rndc status
05.version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
06.CPUs found: 2
07.worker threads: 2
08.number of zones: 21
09.debug level: 3 符合上面的三次.
10.xfers running: 0
11.xfers deferred: 0
12.soa queries in progress: 0
13.query logging is OFF
14.recursive clients: 0/0/1000
15.tcp clients: 0/100
16.server is up and running
17.[root@host2 ~]# rndc trace 0 (指定级别)
18.[root@host2 ~]# rndc status
19.version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
20.CPUs found: 2
21.worker threads: 2
22.number of zones: 21
23.debug level: 0 0级别
24.xfers running: 0
25.xfers deferred: 0
26.soa queries in progress: 0
27.query logging is OFF
28.recursive clients: 0/0/1000
29.tcp clients: 0/100
30.server is up and running
31.[root@host2 ~]#
2.BIND子域授权的实现(主要将正向的,反向的很麻烦):
子域名和委派的区别?
子域文件在父域文件中
委派有独立的区域文件
子域授权:
正向解析区域授权子域的方法: 先在named.conf中增加新的子区域,再在(或新建)正向区域文件中添加:
ops.magedu.com. IN NS ns1.ops.magedu.com.
ops.magedu.com. IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A IP.AD.DR.ESS
ns2.ops.magedu.com. IN A IP.AD.DR.ESS
定义转发
注意:被转发的服务器必须允许为当前服务做递归;默认是允许为所有的服务器递归的.
(1)区域转发:仅转发对某特定区域的解析要求;
zone "ZONE_NAME" IN {
type forward;
forward (first|only);
forwardders { SEVER_IP;};
};
first:首先发转发;转发器不响应时自行去叠代查询;
only:只转发;
(2)全局转发:凡本地没有通过ZONE定义的区域查询请求,通通转给某转发器;
在named.conf的options中添加:
options {
forward (first|only);
forwardders { SEVER_IP;};
......
};
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集合内的所有主机实现统一调用;
acl acl_name {
ip;
net/prelen;
};
bind有四个内置的acl
none:没有一个主机;
any:任意主机;
local:本机;
localnet:本机所在的IP所属的网络;
访问控制命令:
allow-query {}; 允许查询的主机;白名单;
allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
allow-recursion {}; 允许哪些主机向当前DNS服务器发起递归查询请求;
allow-update {};DDNS,允许动态更新区域数据库文件中内容;
bind view设定细节:
- master
修改 /etc/named.conf ,內容類似如下:
acl “lan” { 10.1.2.0/24; };
options { directory { “/var/named”; }; };
view “internal” {
match-clients { !10.1.2.5; lan; }; // 這裡排除 slave 的另一位址
zone “.” IN {
type hint;
file “named.root”;
};
zone “my.domain” IN {
type master;
file “my.domain.int”;
allow-transfer { 10.1.2.4; }; //允許 slave 的 primay 位址
};
};
view “external” {
match-clients { any; };
recursion no;
zone “.” IN {
type hint;
file “named.root”;
};
zone “my.domain” IN {
type master;
file “my.domain.ext”;
allow-transfer { 10.1.2.5; }; //允許 slave 的 alias 位址
};
};
- slave
修改 /etc/named.conf ,內容類似如下:
acl “lan” { 10.1.2.0/24; };
options { directory { “/var/named”; }; };
view “internal” {
match-clients { lan; };
zone “.” IN {
type hint;
file “named.root”;
};
zone “my.domain” IN {
type slaver;
file “slave.my.domain.int”;
masters { 10.1.2.3; };
transfer-source 10.1.2.4; // 指定 primay 位址
};
};
view “external” {
match-clients { any; };
recursion no;
zone “.” IN {
type hint;
file “named.root”;
};
zone “my.domain” IN {
type master;
file “slave.my.domain.ext”;
masters { 10.1.2.3; };
transfer-source 10.1.2.5; // 指定 alias 位址
};
};