使用bind架设内网dns
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用bind架设内网dns相关的知识,希望对你有一定的参考价值。
参考技术A 在之前的spark on yarn集群配置中,感觉最麻烦的就是各个机器之间的网络配置了,一直想简化这部分的工作。一开始的办法是一台机器一台机器的编辑 /etc/network/interfaces 文件和 /etc/hosts 文件使各台机器都有固定的ip和通过机器名称可以转换成对应的ip,这样一旦集群中一台机器发生变动,各台机器都要过一遍,很是麻烦。
现在一般的家用路由器上都有根据mac地址分配固定ip的功能,所以只要在路由器上配置dhcp分配的规则,将各个机器的网卡mac地址填入就可以将机器的ip固定住了。
接下来就是机器之间互相识别的事了,这里我们在集群内选定一台主机,作为dns服务器,其他的机器只要将dns服务设定为这台机器,就可以识别其他机器名称所对应的ip了。
按惯例,给出操作环境:
首先安装bind
安装完毕之后开始配置。
先要说一些基本认知:
然后我们开始配置bind,参照 ubuntu的bind中文wiki 。
修改 named.conf.local
添加一个zone节点,这里我们的zone名字是“mwnet”:
然后将“db.local”文件复制成“db.mwnet”,并修改之:
其中第5、11行就是将"localhost"修改成了自己的zone名称。
第12行是必须的,指定默认的域名解析到的ip,包括“ns.mwnet”的解析。
从第13行开始就是机器名称的解析了。
接着增加一个反向解析的配置,这一步必须要做,否则hdfs的datanode启动会失败。
同样修改 named.conf.local
添加一个zone节点:
然后将 db.127 文件复制成 db.192.168.3 ,并修改之:
注意这里PTR记录和 db.mwnet 里面的A记录是一一对应的。
保存修改之后重启服务。
接下来修改各台机器的dns服务器设置,需要改动 /etc/resolvconf/resolv.conf.d/base 文件:
第1行写search是为了在寻找主机的时候,自动在主机名称后面加上“.mwnet”,以便dns服务器解析。
第2行写domain是为了让本机加入"mwnet"域,这样完整的主机名就变成了设备名称+“.mwnet”。
第3行指定了dns服务器的地址。
需要注意的是这个改动必须重启机器后生效。
如果之前没有改动过 /etc/hosts 文件,需要注意一点就是把系统自动添加机器名称解析到127.0.1.1的记录删除,很多事情都坏在这条记录上。
CentOS7上使用bind9搭建DNS主从服务器
一、bind简介
一、bind简介
Linux中通常使用bind来实现DNS服务器的架设,bind软件由isc(https://www.isc.org/downloads/bind/)维护。在yum仓库中可以找到软件,配置好yum源,直接使用命令yum install bind就可以安装。当前bind的稳定版本为bind9,bind的服务名称为named,监听的端口为53号端口。bind的主要配置文件为/etc/named.conf,此文件主要用于配置区域,并指定区域数据库文件名称。区域数据库文件通常保存于/var/named/目录下,用于定义区域的资源类型。
二、使用bind架设DNS服务器
1.实例操作:以域名example.com为例配置一个DNS服务器,实现正向解析与反向解析。
Master DNS(FQDN:dns1.example.com/IP: 192.168.100.199) Slave DNS(FQDN:dns2.example.com/IP: 192.168.100.198) OS:CentOS Linux release 7.3.1611 (Core) Kernel:3.10.0-514.10.2.el7.x86_64 Bind: bind-license-9.9.4-38.el7_3.2.noarch bind-9.9.4-38.el7_3.2.x86_64 binutils-2.25.1-22.base.el7.x86_64 bind-libs-lite-9.9.4-38.el7_3.2.x86_64 bind-libs-9.9.4-38.el7_3.2.x86_64 bind-utils-9.9.4-38.el7_3.2.x86_64
这里就不再赘述如何使用VM(VirtualBox/VMware/etc),如何配置网络IP等。
bind直接用YUM安装(yum install epel-release; yum install bind)
2、主DNS服务器bind配置文件为/etc/named.conf,此文件用于定义区域。每个区域的数据文件保存在/var/named目录下。
named.conf各参数项说明:
options { //全局选项 } zone "ZONE name"{ //定义区域 } logging{ //定义日志系统 }
named.conf文件内容如下:
options { listen-on port 53 { 127.0.0.1; }; #定义监听端口及IP地址 listen-on-v6 port 53 { ::1; }; #定义监听的IPv6地址 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 { localhost; };#允许查询的IP地址 recursion yes; #是否允许递归查询 dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
注意:bind的配置文件/etc/named.conf里必须要定义的三个区域是:根、127.0.0.1和127.0.0.1的反解。
以上options选项中有许多是我们用不到,我们先把它们注释掉。结果如下:
[[email protected] ~]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator‘s Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { //listen-on port 53 { 127.0.0.1; }; //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; }; //allow-query { 192.168.0.0/16; }; //forward first; //forwarders{ //202.106.196.115; //219.141.136.10; //114.114.114.114; //}; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; //dnssec-enable yes; //dnssec-validation yes; //dnssec-enable no; //dnssec-validation no; //dnssec-lookaside no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; [[email protected] ~]# hostname dns1.example.com
3、打开/etc/named.rfc1912.zones文件,添加一个区域。
[[email protected] ~]# cat /etc/named.rfc1912.zones // named.rfc1912.zones: // // Provided by Red Hat caching-nameserver package // // ISC BIND named zone configuration for zones recommended by // RFC 1912 section 4.1 : localhost TLDs and address zones // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt // (c)2007 R W Franks // // See /usr/share/doc/bind*/sample/ for example named configuration files. // zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; //############################### //自定义example.com正向解的区域 //############################### zone "example.com" IN { type master; file "example.com.zone"; allow-transfer{ 127.0.0.1;192.168.100.199;192.168.100.198; }; }; //############################# //自定义反向解析 //############################# zone "100.168.192.in-addr.arpa" IN { type master; file "100.168.192.in-addr-arpa"; allow-transfer{ 127.0.0.1;192.168.100.199;192.168.100.198; }; }; [[email protected] ~]#
说明:
type: 用于定义区域类型,此时只有一个DNS服务器,所以为master,type可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
file:用于定义区域数据文件路径,默认该文件保存在/var/named/目录。
区域添加好后,使用命令:named-checkconf 或 service named configtest测试配置文件语法格式。
[[email protected] ~]# named-checkconf
没有提示则表示文件语法正常。
4、新建数据库文件/var/named/example.com.zone,并添加资源记录。
说明:
资源记录的格式:
name [ttl] IN RRtype Value
资源记录名 有效时间 IN 类型 资源记录的值
SOA: 只能有一个,而且必须是第一个
name: 只能是区域名称,通常可以简写为@
value: 主DNS服务器的FQDN
NS: 可以有多条
name: 区域名称,通常可以简写为@
value: DNS服务器的FQDN(可以使用相对名称)
A: 只能定义在正向区域文件中
name: FQDN(可以使用相对名称)
value: IP
MX: 可以有多个
name: 区域名称,用于标识smtp服务器
value: 包含优先级和FQDN
优先级:
0
-
99
,数字越小,级别越高;
CNAME:
name: FQDN
value: FQDN
PTR: IP --> FQDN, 只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.
in
-addr.arpa.后缀组成
name: IP, 逆向的主机地址,主机地址反过来写加上.
in
-addr.arpa.
value: FQDN
[[email protected] ~]# cat /var/named/example.com.zone $TTL 300 ; @ IN SOA dns1.example.com admin.example.com( 2017032800 ; Serial 300 ; Refresh 1800 ; Retry 604800 ; Expire 300 ; TTL ) ; IN NS dns1 IN NS dns2 dns1 IN A 192.168.100.199 dns2 IN A 192.168.100.198 ; ; agent IN A 192.168.100.102 puppet IN A 192.168.100.101 [[email protected] ~]#
说明:
$TTL为定义的宏,表示下面资源记录ttl的值都为600秒。
@符号可代表区域文件/etc/named.conf里面定义的区域名称,即:"wubinary.com."。
每个区域的资源记录第一条必须是SOA,SOA后面接DNS服务器的域名和电子邮箱地址,此处电子邮箱地址里的@因为有特殊用途,所以此处要用点号代替。SOA后面小括号里的各值所代表的意义如下所示:
@ IN SOA dns.example.com admin.example.com ( 2017032800 ;标识序列号,十进制数字,不能超过10位,通常使用日期 2H ;刷新时间,即每隔多久到主服务器检查一次,此处为2小时 4M ;重试时间,应该小于刷新时间,此处为4分钟 1D ;过期时间,此处为1天 2D ;主服务器挂后,从服务器至多工作的时间,此处为2天)
区域数据文件配置好后,可以使用命令named-checkzone检查语法错误。
命令格式:
[[email protected] ~]# named-checkzone "example.com.zome" /var/named/example.com.zone zone example.com.zome/IN: loaded serial 2017032800 OK [[email protected] ~]#
5、两个文件都配置好后,记得查看一下文件的所属组。因为bind程序的服务名称为named,bind默认是使用named组的身份操作文件,所以我们新建的文件所属组都要改为named,并且为了安全起见不能让别人有修改的权限,权限最好改为640。
[[email protected] ~]# ll /var/named/ total 24 -rw-r--r-- 1 root named 463 Mar 28 10:46 100.168.192.in-addr-arpa drwxrwx---. 2 named named 23 Mar 27 13:28 data drwxrwx---. 2 named named 60 Mar 28 13:28 dynamic -rw-r--r-- 1 root named 403 Mar 28 10:45 example.com.zone -rw-r-----. 1 root named 2076 Jan 28 2013 named.ca -rw-r-----. 1 root named 152 Dec 15 2009 named.empty -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost -rw-r-----. 1 root named 168 Dec 15 2009 named.loopback drwxrwx---. 2 named named 6 Feb 15 21:16 slaves [[email protected] ~]#
6、设置妥当当后我们就可以开启服务了。
[[email protected] ~]# systemctl restart named.service [[email protected] ~]# systemctl status named.service ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2017-03-28 13:33:15 CST; 10s ago Process: 5001 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) Process: 5012 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS) Process: 5010 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z /etc/named.conf; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS) Main PID: 5014 (named) CGroup: /system.slice/named.service └─5014 /usr/sbin/named -u named Mar 28 13:33:15 dns1.example.com named[5014]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 Mar 28 13:33:15 dns1.example.com named[5014]: zone localhost/IN: loaded serial 0 Mar 28 13:33:15 dns1.example.com named[5014]: zone 100.168.192.in-addr.arpa/IN: loaded serial 2017032800 Mar 28 13:33:15 dns1.example.com named[5014]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN...rial 0 Mar 28 13:33:15 dns1.example.com named[5014]: zone example.com/IN: loaded serial 2017032800 Mar 28 13:33:15 dns1.example.com named[5014]: zone localhost.localdomain/IN: loaded serial 0 Mar 28 13:33:15 dns1.example.com named[5014]: all zones loaded Mar 28 13:33:15 dns1.example.com named[5014]: running Mar 28 13:33:15 dns1.example.com named[5014]: zone 100.168.192.in-addr.arpa/IN: sending notifies (serial 2017032800) Mar 28 13:33:15 dns1.example.com named[5014]: zone example.com/IN: sending notifies (serial 2017032800) Hint: Some lines were ellipsized, use -l to show in full. [[email protected] ~]#
7、使用dig命令测试DNS。
命令格式:
dig [-t type] [-x addr] [name] [@server]
-t: 指定资源类型,用于正解
-x: 指定IP地址,用于反解
[[email protected] ~]# dig -t A puppet.example.com @192.168.100.199 ; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> -t A puppet.example.com @192.168.100.199 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17827 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;puppet.example.com. IN A ;; ANSWER SECTION: puppet.example.com. 300 IN A 192.168.100.101 ;; AUTHORITY SECTION: example.com. 300 IN NS dns2.example.com. example.com. 300 IN NS dns1.example.com. ;; ADDITIONAL SECTION: dns1.example.com. 300 IN A 192.168.100.199 dns2.example.com. 300 IN A 192.168.100.198 ;; Query time: 0 msec ;; SERVER: 192.168.100.199#53(192.168.100.199) ;; WHEN: Tue Mar 28 14:14:02 CST 2017 ;; MSG SIZE rcvd: 133
[[email protected] ~]# dig -x 192.168.100.102 @192.168.100.199 ; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> -x 192.168.100.102 @192.168.100.199 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58688 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;102.100.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 102.100.168.192.in-addr.arpa. 300 IN PTR agent.example.com. ;; AUTHORITY SECTION: 100.168.192.in-addr.arpa. 300 IN NS dns2.example.com. 100.168.192.in-addr.arpa. 300 IN NS dns1.example.com. ;; ADDITIONAL SECTION: dns1.example.com. 300 IN A 192.168.100.199 dns2.example.com. 300 IN A 192.168.100.198 ;; Query time: 0 msec ;; SERVER: 192.168.100.199#53(192.168.100.199) ;; WHEN: Tue Mar 28 14:15:31 CST 2017 ;; MSG SIZE rcvd: 158 [[email protected] ~]#
测试成功!
注意:通常在应用中,DNS的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果IP地址不能反解成一个域名则视为垃圾邮件。
三、使用bind架设辅助DNS服务器,实现主从数据同步
DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就会宕机罢工,其次如果这台服务器出现了硬件故障那么服务器管理的区域的域名将无法访问。为了解决这些问题,最好的办法就是使用多个DNS服务器同时工作,并实现数据的同步,这样两台服务器就都可以实现域名解析操作。
主DNS服务器架设好后,辅助的DNS服务器的架设就相对简单多了。架设主从DNS服务器有两个前提条件,一是两台主机可以不一定处在同一网段,但是两台主机之间必须要实现网络通信;二,辅助DNS服务器必须要有主DNS服务器的授权,才可以正常操作。
1、从DNS服务器bind配置文件为/etc/named.conf,此文件用于定义区域。每个区域的数据文件保存在/var/named目录下。
[[email protected] named]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator‘s Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { //listen-on port 53 { 127.0.0.1; }; //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; }; //allow-query { 192.168.0.0/16; }; //forward first; //forwarders{ //202.106.196.115; //219.141.136.10; //114.114.114.114; //}; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; //dnssec-enable yes; dnssec-validation yes; //dnssec-enable no; //dnssec-validation no; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; [[email protected] named]#
2、打开辅助DNS服务器的/etc/named.rfc1912.zones文件,添加两个区域记录,这两个记录是主DNS服务器配置文件里已经存在的记录,一个是正向解析记录,一个是反向解析记录。
//////////////////////////// //从服务器正解配置 //////////////////////////// zone "example.com." IN { type slave; masters { 192.168.100.199; }; file "slaves/example.com.zone"; allow-transfer { none;}; }; ///////////////////////// //从DNS服务器反解设置 ///////////////////////// zone"100.168.192.in-addr.arpa." IN { type slave; masters { 192.168.1.199; }; file"slaves/100.168.192.in-addr.zone"; allow-transfer{ none; }; //作为从服务器不应该让其他服务器zone传送。 };
说明:type: slave,表示此时DNS服务器为辅助DNS服务器,于是下面一行就要定义主DNS服务器的IP地址,辅助DNS服务器才知道去哪里同步数据。辅助DNS服务器的资源类型数据文件通常保存在slaves目录,只需定义一个名称,文件内容通常是自动生成。
配置好后,直接开启DNS服务,然后再回到主DNS服务器上。
3、修改主DNS服务器的数据文件,添加一条辅助DNS服务器记录,给辅助DNS服务器授权。
修改正向解析文件/var/named/example.com.zone。
[[email protected] ~]# cat /var/named/example.com.zone $TTL 300 ; @ IN SOA dns1.example.com admin.example.com( 2017032800 ; Serial 300 ; Refresh 1800 ; Retry 604800 ; Expire 300 ; TTL ) ; IN NS dns1 IN NS dns2 dns1 IN A 192.168.100.199 dns2 IN A 192.168.100.198 ; ; agent IN A 192.168.100.102 puppet IN A 192.168.100.101 [[email protected] ~]#
说明:添加了一条NS记录,值为,dns2.example.com.,对应的A记录也要增加一条,把IP地址指向对应的辅助DNS服务器的IP地址。修改完成后,记得要把序列号的值加1,用于通知辅助DNS服务器自动更新数据文件。
4、重新加载主DNS服务器的配置文件,这时再到回辅助DNS服务器,在/var/named/slaves/目录下会多了两个文件。
[[email protected] named]# ll /var/named/slaves/ total 4 -rw-r--r-- 1 named named 392 Mar 28 14:34 example.com.zone [[email protected] named]#
5、测试辅助DNS服务器。
[[email protected] slaves]# dig -t A puppet.example.com @192.168.100.198 ; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> -t A puppet.example.com @192.168.100.198 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53695 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;puppet.example.com. IN A ;; ANSWER SECTION: puppet.example.com. 300 IN A 192.168.100.101 ;; AUTHORITY SECTION: example.com. 300 IN NS dns1.example.com. example.com. 300 IN NS dns2.example.com. ;; ADDITIONAL SECTION: dns1.example.com. 300 IN A 192.168.100.199 dns2.example.com. 300 IN A 192.168.100.198 ;; Query time: 0 msec ;; SERVER: 192.168.100.198#53(192.168.100.198) ;; WHEN: Tue Mar 28 15:10:43 CST 2017 ;; MSG SIZE rcvd: 133 [[email protected] slaves]# [[email protected] slaves]# [[email protected] slaves]# [[email protected] slaves]# dig -x 192.168.100.102 @192.168.100.198 ; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> -x 192.168.100.102 @192.168.100.198 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55340 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;102.100.168.192.in-addr.arpa. IN PTR ;; Query time: 0 msec ;; SERVER: 192.168.100.198#53(192.168.100.198) ;; WHEN: Tue Mar 28 15:10:50 CST 2017 ;; MSG SIZE rcvd: 57 [[email protected] slaves]#
四、主从同步数据的安全性
DNS服务器的数据同步默认是没有限定主机的,也就是说,网络上只要有一台DNS服务器向你的DNS服务器请求数据,都能实现数据同步,那么这样就相当的不安全了。我们可以使用一个选项allow-transfer,指定可以同步数据的主机IP。主DNS服务器的数据可以给别的服务器同步,相对的,辅助DNS服务器的数据也是可以给其它辅助DNS服务器同步,于是,所有的主从DNS服务器都要设置该参数。
1. 指定可以从主DNS服务器上同步数据的主机。
修改/etc/named.rfc1912.zones文件:
[[email protected] named]# cat /etc/named.rfc1912.zones // named.rfc1912.zones: // // Provided by Red Hat caching-nameserver package // // ISC BIND named zone configuration for zones recommended by // RFC 1912 section 4.1 : localhost TLDs and address zones // and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt // (c)2007 R W Franks // // See /usr/share/doc/bind*/sample/ for example named configuration files. // zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; //////////////////////////// //从服务器正解配置 //////////////////////////// zone "example.com." IN { type slave; masters { 192.168.100.199; }; file "slaves/example.com.zone"; allow-transfer { none;}; }; ///////////////////////// //从DNS服务器反解设置 ///////////////////////// zone"100.168.192.in-addr.arpa." IN { type slave; masters { 192.168.1.199; }; file"slaves/100.168.192.in-addr.zone"; allow-transfer{ none; }; //作为从服务器不应该让其他服务器zone传送。 }; [[email protected] named]#
说明:
我们只有一台辅助DNS服务器,所以根本不会有主机从这台机器同步数据,所以我们设置成不允许任何人同步。
在每块区域上添加参数allow-transfer,花括号内填写可以同步的主机IP,一般填写辅助DNS服务器的IP地址。可以使用dig命令测试,区域同步:
dig -t axfr ZONE_NAME @DNS_SERVCER_IP
[[email protected] named]# dig -t axfr example.com @192.168.100.199 ; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> -t axfr example.com @192.168.100.199 ;; global options: +cmd example.com. 300 IN SOA dns1.example.com.example.com. admin.example.com.example.com. 2017032800 300 1800 604800 300 example.com. 300 IN NS dns1.example.com. example.com. 300 IN NS dns2.example.com. agent.example.com. 300 IN A 192.168.100.102 dns1.example.com. 300 IN A 192.168.100.199 dns2.example.com. 300 IN A 192.168.100.198 puppet.example.com. 300 IN A 192.168.100.101 example.com. 300 IN SOA dns1.example.com.example.com. admin.example.com.example.com. 2017032800 300 1800 604800 300 ;; Query time: 1 msec ;; SERVER: 192.168.100.199#53(192.168.100.199) ;; WHEN: Tue Mar 28 14:31:02 CST 2017 ;; XFR size: 8 records (messages 1, bytes 239) [[email protected] named]#
非指定IP不可以同步数据。
[[email protected] slaves]# dig -t axfr example.com @192.168.100.102 ;; Connection to 192.168.100.102#53(192.168.100.102) for example.com failed: host unreachable.
2.指定可以从辅助DNS服务器上同步数据的主机。
修改/etc/named.rfc1912.zones文件:
//////////////////////////// //从服务器正解配置 //////////////////////////// zone "example.com." IN { type slave; masters { 192.168.100.199; }; file "slaves/example.com.zone"; allow-transfer { none;}; }; ///////////////////////// //从DNS服务器反解设置 ///////////////////////// zone"100.168.192.in-addr.arpa." IN { type slave; masters { 192.168.1.199; }; file"slaves/100.168.192.in-addr.arpa.zone"; allow-transfer{ none; }; };
我们只有一台辅助DNS服务器,所以根本不会有主机从这台机器同步数据,所以我们设置成不允许任何人同步。
五、测试DNS解析的其它命令
测试DNS解析的命令不只是dig可以实现,还有两个命令也可以实现相同的效果。
1、host命令
host命令格式:
# host [-t type] {name} [server]
2、nslookup命令
这个命令很神奇,在windows的dos里面也可以使用:
nslookup> server DNS_SERVER_IP set q=TYPE {name}
Refer: http://www.cnblogs.com/fatt/p/4494695.html
本文出自 “YichenYoung” 博客,请务必保留此出处http://yichenyang.blog.51cto.com/12732997/1911098
以上是关于使用bind架设内网dns的主要内容,如果未能解决你的问题,请参考以下文章