一、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 选项中有许多是我们用不到,我们先把它们注释掉。结果如下:
- [ ~]# 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";
- [ ~]# hostname
- dns1.example.com
3、打开 / etc/named.rfc1912.zones 文件,添加一个区域。
- [ ~]# 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; };
- };
- [ ~]#
说明:
type: 用于定义区域类型,此时只有一个 DNS 服务器,所以为 master,type 可选值为:hint(根的)|master(主的)|slave(辅助的)|forward(转发)
file:用于定义区域数据文件路径,默认该文件保存在 / var/named / 目录。
区域添加好后,使用命令:named-checkconf 或 service named configtest 测试配置文件语法格式。
- [ ~]# 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
- [ ~]# 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
- [ ~]#
说明:
$TTL 为定义的宏,表示下面资源记录 ttl 的值都为 600 秒。
@符号可代表区域文件 / etc/named.conf 里面定义的区域名称,即:"wubinary.com."。
每个区域的资源记录第一条必须是 SOA,SOA 后面接 DNS 服务器的域名和电子邮箱地址,,�代表的意义如下所示:
- @ IN SOA dns.example.com admin.example.com (
- 2017032800 ;标识序列号,十进制数字,不能超过10位,通常使用日期
- 2H ;刷新时间,即每隔多久到主服务器检查一次,此处为2小时
- 4M ;重试时间,应该小于刷新时间,此处为4分钟
- 1D ;过期时间,此处为1天
- 2D ;主服务器挂后,从服务器至多工作的时间,此处为2天)
区域数据文件配置好后,可以使用命令 named-checkzone 检查语法错误。
命令格式:
- [ ~]# named-checkzone "example.com.zome" /var/named/example.com.zone
- zone example.com.zome/IN: loaded serial 2017032800
- OK
- [ ~]#
5、两个文件都配置好后,记得查看一下文件的所属组。因为 bind 程序的服务名称为 named,bind 默认是使用 named 组的身份操作文件,所以我们新建的文件所属组都要改为 named,并且为了安全起见不能让别人有修改的权限,权限最好改为 640。
- [ ~]# 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
- [ ~]#
6、设置妥当当后我们就可以开启服务了。
- [ ~]# systemctl restart named.service
- [ ~]# 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.
- [ ~]#
7、使用 dig 命令测试 DNS。
命令格式:
- dig [-t type] [-x addr] [name] [@server]
-t: 指定资源类型,用于正解
-x: 指定 IP 地址,用于反解
- [ ~]# 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
- [ ~]# 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
- [ ~]#
测试成功!
注意:通常在应用中,DNS 的反向解析并不是很重要,可以不配置,当服务器中有域名作为邮件服务器时,此时可以配置反向解析,因为邮件中过滤垃圾邮件的技术通常是解析邮箱地址,如果 IP 地址不能反解成一个域名则视为垃圾邮件。
三、使用 bind 架设辅助 DNS 服务器,实现主从数据同步
DNS 从服务器也叫辅服 DNS 服务器,如果网络上某个节点只有一台 DNS 服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就会宕机罢工,其次如果这台服务器出现了硬件故障那么服务器管理的区域的域名将无法访问。为了解决这些问题,最好的办法就是使用多个 DNS 服务器同时工作,并实现数据的同步,这样两台服务器就都可以实现域名解析操作。
主 DNS 服务器架设好后,辅助的 DNS 服务器的架设就相对简单多了。架设主从 DNS 服务器有两个前提条件,一是两台主机可以不一定处在同一网段,但是两台主机之间必须要实现网络通信;二,辅助 DNS 服务器必须要有主 DNS 服务器的授权,才可以正常操作。
1、从 DNS 服务器 bind 配置文件为 / etc/named.conf,此文件用于定义区域。每个区域的数据文件保存在 / var/named 目录下。
- [ 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";
- [ 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。
- [ ~]# 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
- [ ~]#
说明:添加了一条 NS 记录,值为,dns2.example.com.,对应的 A 记录也要增加一条,把 IP 地址指向对应的辅助 DNS 服务器的 IP 地址。修改完成后,记得要把序列号的值加 1,用于通知辅助 DNS 服务器自动更新数据文件。
4、重新加载主 DNS 服务器的配置文件,这时再到回辅助 DNS 服务器,在 / var/named/slaves / 目录下会多了两个文件。
- [ named]# ll /var/named/slaves/
- total 4
- -rw-r--r-- 1 named named 392 Mar 28 14:34 example.com.zone
- [ named]#
5、测试辅助 DNS 服务器。
- [ 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
- [ slaves]#
- [ slaves]#
- [ slaves]#
- [ 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
- [ slaves]#
四、主从同步数据的安全性
DNS 服务器的数据同步默认是没有限定主机的,也就是说,网络上只要有一台 DNS 服务器向你的 DNS 服务器请求数据,都能实现数据同步,那么这样就相当的不安全了。我们可以使用一个选项 allow-transfer,指定可以同步数据的主机 IP。主 DNS 服务器的数据可以给别的服务器同步,相对的,辅助 DNS 服务器的数据也是可以给其它辅助 DNS 服务器同步,于是,所有的主从 DNS 服务器都要设置该参数。
1. 指定可以从主 DNS 服务器上同步数据的主机。
修改 / etc/named.rfc1912.zones 文件:
- [ 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传送。
- };
- [ named]#
说明:
我们只有一台辅助 DNS 服务器,所以根本不会有主机从这台机器同步数据,所以我们设置成不允许任何人同步。
在每块区域上添加参数 allow-transfer,花括号内填写可以同步的主机 IP,一般填写辅助 DNS 服务器的 IP 地址。可以使用 dig 命令测试,区域同步:
- dig -t axfr ZONE_NAME @DNS_SERVCER_IP
- [ 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)
- [ named]#
非指定 IP 不可以同步数据。
- [ 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
来源: http://www.bubuko.com/infodetail-1999385.html