BIND
- 安装
NS服务器软件:bind,powerdns,unbound
BIND相关程序包:yum list all bind*
bind:服务器
bind-libs:相关库
bind-utils:客户端
bind-chroot: /var/named/chroot/
BIND程序名:named - bind服务器
端口号:53/udp 用于解析地址FQDN <-- --> IP,主从服务器数据同步(用于对主服务器数据库进行查询)
53/tcp 用于主从服务器同步
- 服务脚本和名称:
/etc/rc.d/init.d/named(centos 6)
/etc/named.conf(centos 7) – 修改下面两项
listen-on … {localhost;}
allow-query {any;}
/usr/lib/systemd/system/named.service - 主配置文件:
/etc/named.conf
/etc/named.rfc1912.zones
/etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE (修改文件属组chgrp named ZONE_NAME.ZONE) - 注意:
一台物理服务器可同时为多个区域提供解析
必须要有根区域文件;named.ca
应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
rndc:remote name domain controller默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
提供辅助性的管理功能;953/tcp - 配置文件
主配置文件:
全局配置:options {};
日志子系统配置:logging {};
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone “ZONE_NAME” IN {};
注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
缓存名称服务器的配置:
监听外部地址即可
dnssec: 建议关闭dnssec,设为no
-
配置主DNS服务器
主DNS名称服务器:
在主配置文件中定义区域
ZONE_NAME<---->IP
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
file “ZONE_NAME.zone”;
};
定义区域解析库文件
出现的内容
宏定义
资源记录
主配置文件语法检查
named-checkconf
解析库文件语法检查:
named-checkzone “123.com” /var/named/123.com.zone
配置生效:
rndc reload 或 service named reload
主区域示例$TTL 86400 $ORIGIN 123.com. @ IN SOA ns1.123.com. admin.123.com ( 2015042201 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 172.16.100.11 ns2 IN A 172.16.100.12 mx1 IN A 172.16.100.13 mx2 IN A 172.16.100.14 websrv IN A 172.16.100.11 websrv IN A 172.16.100.12 www IN CNAME websrv
-
测试命令
- dig [-t type] name [@SERVER] [query options]
dig只用于测试dns系统,不会查询hosts文件进行解析
查询选项:
+[no]trace:跟踪解析过程 : dig +trace 123.com
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP = dig –t ptr reverseip.in-addr.arpa
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr 123.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 [-t type] name [SERVER]
host –t NS 123.com 172.16.0.1
host –t soa 123.com
host –t mx 123.com
host –t axfr 123.com
host 1.2.3.4 - nslookup命令: nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
- dig [-t type] name [@SERVER] [query options]
-
反向区域
反向区域:
区域名称:网络地址反写.in-addr.arpa.
172.16.100. --> 100.16.172.in-addr.arpa.
定义区域
zone “ZONE_NAME” IN {
type {master|slave|forward};
file “网络地址.zone”
};
定义区域解析库文件
注意:不需要MX,以PTR记录为主
反向区域示例$TTL 86400 $ORIGIN 100.16.172.in-addr.arpa. @ IN SOA ns1.123.com. admin.123.com. ( 2015042201 1H 5M 7D 1D ) IN NS ns1.123.com. IN NS ns2.123.com. 11 IN PTR ns1.123.com. 11 IN PTR www.123.com. 12 IN PTR mx1.123.com. 12 IN PTR www.123.com. 13 IN PTR mx2.123.com.
-
从服务器
应该为一台独立的名称服务器
主服务器的区域解析库文件中必须有一条NS记录指向从服务器
从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
主服务器得允许从服务器作区域传送
主从服务器时间应该同步,可通过ntp进行;
bind程序的版本应该保持一致;否则,应该从高,主低
定义从区域的方法:zone "ZONE_NAME" IN { type slave; masters { MASTER_IP; }; file "slaves/ZONE_NAME.zone"; };
-
rndc命令:
rndc --> rndc (953/tcp)
rndc COMMAND
COMMAND:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录 -
子域
子域授权:分布式数据库
正向解析区域子域方法
定义一个子区域:ops.123.com. IN NS ns1.ops.123.com. ops.123.com. IN NS ns2.ops.123.com. ns1.ops.123.com. IN A 1.1.1.1 ns2.ops.123.com. IN A 1.1.1.2 fin.123.com. IN NS ns1.fin.123.com. fin.123.com. IN NS ns2.fin.123.com. ns1.fin.123.com. IN A 3.1.1.1 ns2.fin.123.com. IN A 3.1.1.2
-
转发服务器
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器Options { forward first|only; forwarders { ip;}; };
特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { ip;}; };
first 先转发到指定的dns查找,如果找不到在自己去查找
only 只进行转发到指定的dns查找
注意:关闭dnssec功能
dnssec-enable no;
dnssec-validation no;
示例:
能连网的dns:
修改namd.conf禁用下面两项
// listen-on port 53 …
// allow-query …
不能联网的dns
修改namd.conf
禁用:// listen-on port 53 ... // allow-query ...
添加:
forward only; forwarders {ip;};
-
bind实现智能dns
bind中ACL
bind中基础的安全相关的配置:
acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
格式:acl acl_name { ip; net/prelen; …… };
示例:
acl mynet { 172.16.0.0/16; 10.10.10.10; };
bind有四个内置的acl:
one 没有一个主机
any 任意主机
localhost 本机
localnet 本机的IP同掩码运算后得到的网络地址
注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面
访问控制
allow-query {}: 允许查询的主机;白名单
allow-transfer {}:允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机,建议全局使用
allow-update {}: 允许更新区域数据库中的内容
GSLB
GSLB:Global Server Load Balance全局负载均衡
GSLB是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证
GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式
bind view
CDN: Content Delivery Network内容分发网络
服务商:蓝汛,网宿,帝联等
智能DNS:dnspod 、dns.la
view:视图:实现智能DNS
一个bind服务器可定义多个view,每个view中可定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
注意:
一旦启用了view,所有的zone都只能定义在view中
仅在允许递归请求的客户端所在view中定义根区域
客户端请求到达时,是自上而下检查每个view所服务的客户端列表
格式:view VIEW_NAME { match-clients { testacl; }; zone "123.com" { type master; file "123.com.zone"; }; include "/etc/named.rfc1912.zones"; };
示例:
在dns服务器的named.confacl beijingnet { 192.168.61.0/24; }; acl shanghainet { 172.16.0.0/16; }; acl othernet {any;};
touch 123.com.zone.bj 属组 named 权限640
$TTL 86400 @ IN SOA ns1.123.com. admin.123.com. ( 2015042201 1H 5M 7D 1D ) NS ns1 ns1 A 192.168.61.46 www A 192.168.61.100
touch 123.com.zone.sh 属组 named 权限640
$TTL 86400 @ IN SOA ns1.123.com. admin.123.com. ( 2015042201 1H 5M 7D 1D ) NS ns1 ns1 A 192.168.61.46 www A 172.16.61.100
touch 123.com.zone.other 属组 named 权限640
$TTL 86400 @ IN SOA ns1.123.com. admin.123.com. ( 2015042201 1H 5M 7D 1D ) NS ns1 ns1 A 192.168.61.46 www A 8.8.8.8
在named.rfc1912.zone中添加
zone "." IN { type hint; file "named.ca"; }; zone "123.com" { type master; file "123.com.zone.other"; };
cp -p named.rfc1912.zone named.rfc1912.zone.sh
zone "123.com" { type master; file "123.com.zone.sh"; };
cp -p named.rfc1912.zone named.rfc1912.zone.sh
zone "123.com" { type master; file "123.com.zone.bj"; }; 在named.conf 中 view view_beijing { match-clients {beijingnet;}; include "/etc/named.rfc1912.zones.bj" } view view_shanghai { match-clients {shanghainet;}; include "/etc/named.rfc1912.zones.sh" } view view_beijing { match-clients {othernet;}; include "/etc/named.rfc1912.zones" }
-
DNS排错
#dig A example.com
<<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
global options: +cmd
Got answer:
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
…
SERVFAIL:The nameserver encountered a problem while processing the query.
可使用dig +trace排错,可能是网络和防火墙导致
NXDOMAIN:The queried name does not exist in the zone
可能是CNAME对应的A记录不存在导致
REFUSED:The nameserver refused the client’s DNS request due to policy restrictions.
可能是DNS策略导致
NOERROR不代表没有问题,也可以是过时的记录
查看是否为权威记录,flags:aa标记判断
被删除的记录仍能返回结果,可能是因为记录存在如:*.example.com. IN A 172.25.254.254
注意"."的使用
避免CNAME指向CNAME记录,可能产生回环
test.example.com. IN CNAME lab.example.com.
lab.example.com. IN CNAME test.example.com.
正确配置PTR记录,许多服务依赖PTR,如sshd,MTA
正确配置轮询round-robin记录 -
一个完全的DNS配置流程
1.在67机器上启动httpd
systemctl start httpd
2.配DSN 主(47)从(57)
47:vim namd.conf //listen-on port 53 ... //allow-query ... allow-transfer {192.168.61.57;}; vim named.rfc1912.zone zone "dnstest.com" { type master; file "dnstest.com.zone"; }; vim dnstest.com.zone SOA ... NS ns1 NS ns2 ns1 A 192.168.61.47 ns2 A 192.168.61.57 www A 192.168.61.67
57:
vim named.conf //listen-on port 53 ... //allow-query ... allow-tranfer {none;}; vim named.rfc1912.zone zone "dnstest.com" { type slave; masters { 192.168.61.47; }; file "slaves/dnstest.com.zone"; };
3 父域dns
37:vim named.com //listen-on port 53 ... //allow-query ... vim named.rfc1912.zone zone "com" { type master ; file "com.zone"; }; vim com.zone SOA... NS ns1 dnstest NS ns2 dnstest NS ns3 ns1 A 192.168.61.37 ns2 A 192.168.61.47 ns3 A 192.168.61.57
4 根域
27:vim named.conf //listen-on port 53 ... //allow-query ... zone "." IN { type hint; file "root.zone"; }; vim named.rfc1912.zones zone "." { type master; file "root.zone"; }; vim root.zone SOA NS ns1 com NS ns2 ns1 A 192.168.61.27 ns2 A 192.168.61.37
5 本地dns
17:vim named.ca a.root-servers.net. 360000 IN A 192.168.61.27 vim named.conf //listen-on port 53 ... //allow-query ... dnssec ... no dnssec ... no
6 forward
7:vim named.conf //listen-on port 53 ... //allow-query ... dnssec ... no dnssec ... no forward only; forwarders {192.168.61.17;};