相关理论介绍:
什么是DNS?
DNS( Domain Name System)是“域名系统”的英文缩写,是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS 使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNS域名空间:
整个DNS架构是一颗倒置的树状层次结构,这个树状结构称为DNS域名空间(DNS domain namespace)。自顶而下依次是根域,顶级域,二级域,其种二级域是供公司和个人申请使用。
FQDN:(Full Qualified Domain Name)完全合格限定域名,是指包含全路径的主机名(列出了所有域),保证可以在DNS空间中准确定位主机,也就是主机名的一种完全表示形式。
DNS软件:实现DNS服务的程序
BIND:Berkely Internet Name Domain ,ISC (www.isc.org) ,使用最广方的DNS软件
DNS服务器:域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
解析类型:
Name-->IP 正向解析
IP-->Name 反向解析
注意:正反向解析是完全不同的两颗解析树,不必在同一个服务器上,正反向区域记录也没必要完全对应
DNS查询模式:
递归(Recursion):一次询问就要得到结果的查询方式,客户端本地指向的DNS服务器,多工作在此种模式,它收到客户端请求后,会全权负责代替客户端去做解析,知道得到答案回复给客户端。
迭代(Interactive):每次查询得到的是一个相对答案,需要多次询问,才能得到最终答案,互联网上DNS之间的查询模式多是迭代查询。每个DSN只专门负责自己改解析的区域。
主DNS服务器:维护所负解析的域内解析库服务器;解析库由管理员维护
从 DNS服务器:从主DNS服务器或其它DNS服务器那里"复制"(区域传递)一份解析库
序列号:解析库的版本号,前提,任何时候,主服务器解析库发生变化,其序列递增
刷新时间:从服务器从主服务器请求同步的时间间隔
重试时长:从服务器请求同步失败时,再次尝试的时间间隔(小于刷新间隔)
过期时长:从服务器始终联系不上主服务器时候,多久之后放弃服务器角色,停止提供服务
"通知"机制:即便下次同步时间没到,如果主服务器记录有变更,会主动通知从服务器过来同
步数据区域传送:
全量传送:传递整个解析库
增量传送:传送解析库变化的那部分内容
区域解析库:由众多资源记录组成
资源记录:Resource Record (RR)
记录类型:A, PTR, SOA, NS, CNAME, MX...
SOA: Start Of Authority, 起始授权记录,一个区域解析库有且仅有一个SOA记录,且必须为解析库的第一条记录
A: Internet Address,作用 FQDN-->IP
AAAA: FQDN-->IPV6
PTR: PoinTeR, IP-->FQDN
NS: Name Server, 专用于标明当前区域的DNS服务器
CNAME: Canonical Name,别名记录
MX: Mail Exchanger, 邮件交换器,标明当前域内谁是邮件服务器
资源记录定义的格式:
语法:name [TTL] IN RR_type value
注意:
1.TTL可以全局集成,TTL是指允许其他服务器将数据在缓存中存放TTL 所指定的时间。如果你的数据不是经常变动或变动不大,可以考虑将TTL默认
值设为几天
2.@可用于引用当前区域的名字
3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4.同一个值也可能有过个不同的定义名字,通过多个不同的名字指向同一个值定义,仅表示通过多个不同的名字找到同一个主机
注:为了方便描述,下文所用到的 hsp.com. 是一个虚拟的域名
SOA:(Satart Of Authorization 起始授权记录)
name: 当前区域的名字,例如“hsp.com.”
value: 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
1.当前区域的主DNS服务器FQDN,也可以使用当前区域的名字
2.当前区域的管理员的邮箱地址,但邮箱地址中不可使用@,一般用.替换,如admin.hsp.com
3.(主从服务协调的属性以及否定的答案的统一的TTL)
如:
hsp.com.86400IN SOA ns.hsp.com. nsadmin.hsp.com. (
201509100;序列号
2H;刷新时间
10M;重试时间
1W ;过期时间
1D ;否定答案的TTL值
)
NS:Name Server
name:当前区域的名字
value:当前区域的某DNS服务器的名字,例如:ns.hsp.com.
注意:一个区域可以有多个NS记录
例如:
hsp.com.IN NS ns1.hsp.com.
hsp.com.IN NS ns2.hsp.com.
注意:
1.相邻的两个资源记录的name相同时,后续的可省略,上述示列中第二行的name hsp.com. 可以省略不写
2.对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX: Mail Exchanger
name:当前区域的名字
value:当前区域的某邮件服务器(smtp)的主机名
一个区域内,MX记录可以有多个,但是每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小,优先级越高
例如:
hsp.com.IN MX 10 mx1.hsp.com.
IN MX 20 mx2.hsp.com.
注意:
1.对于MX记录而言,任何一个MX记录后面的服务器名字,都应在后续有一个A记录
A:Address
name:某主机的FQDN名,如www.hsp.com.
value:主机名对应的主机的IP地址
例如:
www.hsp.com.IN A 1.1.1.1
www.hsp.com.IN A1.1.1.2
mx1.hsp.com.IN A 1.1.1.3
mx2.hsp.com.IN A 1.1.1.3
注:一下两种书写代表泛域名解析,避免用户写错名称时给错误答案,可通过泛域名解析至某特定地址
*IN A 1.1.1.4
hsp.com.IN A 1.1.1.4
AAA: IPv6的A纪录
name:FQDN
value:IPv6,同上,只是IP地址是IPv6格式的地址
PRT:
name:IP地址,遵循固定格式,IP地址需反向书写,1.2.3.4 要写做4.3.2.1,且特定后缀是in-addr.arpa.,完整写法为4.3.2.1-in-addr.arpa.
value:FQDN
例如:
4.3.2.1.in-addr.arpa.IN PRT www.hsp.com.
简写成:4IN PTR www.hsp.com.
注意:网络地址及后缀可以省略,主机地址依然需要反向书写
CNAME:
name:别名的FQDN
value:正式名字的FQDN
如下配置:如果访问www.hsp.co.cn ,则会被引导至www.hsp.com.
www.hsp.com.cn IN CNAME www.hsp.com.
实验目标:搭建DNS服务器,实现正向,反向解析,及DNS服务器主从复制功能 ,子域授权,视图。
实验环境:
1.主机S1 IP地址为:172.17.0.10
主机S2 IP地址为:172.17.0.30
主机S7 IP地址为: 172.17.0.20
实验步骤:
首先在S1上实现缓存服务器设置
一:检查bind软件包有无安装如下软件包,如果没有,使用yum install安装
~]$rpm -qa bind* bind-libs-9.8.2-0.37.rc1.el6.x86_64 #库文件 bind-9.8.2-0.37.rc1.el6.x86_64 #bind 程序 bind-utils-9.8.2-0.37.rc1.el6.x86_64 #工具包 bind的相关文件路径: /etc/named.conf #主配置文件 /etc/named.rfc1912.zones #区域配置文件 /var/named #保存区解析库文件的目录
二:编辑主机S1的bind的配置文件(etc/named.conf,/etc/named.rfc1912.zones)
配置文件中可以使用//或/* */ 来注释 options { Opions 里定义的全局配置,会对所有区域生效,如监听端口扥等 // listen-on port 53 { 127.0.0.1; }; #监听的网卡,注释掉代表监听主机上所有网卡 // 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 { localhost; }; #允许查询的客户端,可以使用any ;none;localhost,IP等来做限制 recursion yes; #是否认允许给客户端递归查询,本地DNS这个一定要开启 dnssec-enable no; #dnssec 安全相关的高级配配置,关闭dnssec功能 dnssec-validation no; #dnssec 安全相关的高级配置,关闭dnssec功能 // 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; #hint 是根区域类型, 可选类型有hint|master|slave 分别代表根区域|主区域|从区域 file "named.ca"; #区域解析库文件 }; include "/etc/named.rfc1912.zones"; #代表会读取/etc/named.rfc1912.zones中定义的区域文件 //include "/etc/named.root.key"; ]#named-checkconf #检查配置文件是否有语法错误,没有任何输出则代表语法正确 [root@S1 ~]# service named start #尝试启动bind 服务 Generating /etc/rndc.key: [ OK ] Starting named: [ OK ] [root@S1 ~]# ss -tuan | grep 53 #检查默认端口53有没有正常监听 udp UNCONN 0 0 172.17.0.10:53 *:* ...省略了其它不相关的N行输出 注:至此,S1 server 172.17.0.10 已经可以作为一个缓存服务器工作。
三:修改主机S1的区域配置文件 (/etc/named.rfc1912.zones),添加如下zone
zone "hsp.com" IN { type master; file "hsp.com.zone"; allow-update { none; }; }; ]$named-checkconf #检查配置文件是否有语法错误 四:创建区正向解析库文件 ]$cd /var/named/ [root@S1 named]# vim hsp.com.zone #创建区域数据文件hsp.com.zone,文件内容如下 [root@S1 named]# chmod 640 hsp.com.zone #修改权限为640 [root@S1 named]# chown .named hsp.com.zone #改变属组为named [root@S1 named]# ll hsp.com.zone #验证权限和属组 -rw-r----- 1 root named 374 Sep 20 21:57 hsp.com.zone [root@S1 named]# named-checkzone "hsp.com" hsp.com.zone #检查区域数据文件是否有语法错误 zone hsp.com/IN: loaded serial 3940705495 OK [root@S1.hsp.com /var/named]$chown :named hsp.com.zone #修改hsp.com.zone的属组为named(因named服务会以named用户来运行服务) root@S1.hsp.com /var/named]$ll hsp.com.zone #验证文件权限为640,属组为named -rw-r----- 1 root named 330 Sep 17 00:02 hsp.com.zone [root@S1.hsp.com /var/named]$service named start #启动named服务 Starting named: [ OK ] [root@S1 named]# host -t A ns1.hsp.com 172.17.0.10 #使用host 命里测试能否成功正向解析ns1.hsp.com, Using domain server: Name: 172.17.0.10 Address: 172.17.0.10#53 Aliases: ns1.hsp.com has address 172.17.0.10 #对照hsp.com.zone数据文件,可知解析成功 #同理,解析mx1.hsp.com,对照hsp.com.zone文件,可知解析成功 [root@S1 named]# dig -t A mx1.hsp.com. 172.17.0.10 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A mx1.hsp.com. 172.17.0.10 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14750 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;mx1.hsp.com.INA ;; ANSWER SECTION: mx1.hsp.com.86400INA172.17.0.40 #此处可见解析成功 ;; AUTHORITY SECTION: hsp.com.86400INNSns1.hsp.com. hsp.com.86400INNSns2.hsp.com. ;; ADDITIONAL SECTION: ns1.hsp.com.86400INA172.17.0.10 ns2.hsp.com.86400INA172.17.0.30 ;; Query time: 3 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Mon Sep 21 00:15:18 2015 ;; MSG SIZE rcvd: 113 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45733 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;172.17.0.10.INA ;; AUTHORITY SECTION: .10783INSOAa.root-servers.net. nstld.verisign-grs.com. 2015092000 1800 900 604800 86400 ;; Query time: 3 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Mon Sep 21 00:15:18 2015 ;; MSG SIZE rcvd: 104 测试泛域名解析: [root@S1 named]# host -t A 88.hsp.com 172.17.0.10 #尝试正向解析不存在的主机88.hsp.com Using domain server: Name: 172.17.0.10 Address: 172.17.0.10#53 Aliases: 88.hsp.com has address 172.17.0.99 #解析到了172.17.0.99 ,正是在区域文件的添加的泛域名解析的IP,所以成功。
注:至此主DNS正向解析成功完成 ;接下来,将在S1上创建反向解析区域和解析库文件。
]$vim /etc/named.rfc1912.zones #修改区域配置文件,在文件末尾添加如下反向解析区域"0.17.172.in-addr.arpa" zone "0.17.172.in-addr.arpa" IN { type master; file "0.17.172.zone"; }; ~]$cd /var/named/
[root@S1 named]# vim 0.17.172.zone #创建如下反向解析文件
[root@S1 named]# chmod 640 0.17.172.zone #修改权限为640 [root@S1 named]# chown .named 0.17.172.zone #修改其属组为named [root@S1 named]# ll 0.17.172.zone #验证权限,属组修改成功 -rw-r----- 1 root named 347 Sep 21 00:31 0.17.172.zone [root@S1 named]# named-checkzone "0.17.172.in-addr.arpa" 0.17.172.zone #检查反向解析文件有无语法错误 zone 0.17.172.in-addr.arpa/IN: loaded serial 3940705495 OK [root@S1 named]# rndc reload #重新加载配置文件 server reload successful [root@S1 named]# dig -x 172.17.0.40 @172.17.0.10 #反向解析IP 172.17.0.40 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 172.17.0.40 @172.17.0.10 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3858 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;40.0.17.172.in-addr.arpa.INPTR ;; ANSWER SECTION: 40.0.17.172.in-addr.arpa. 86400INPTRmx1.hsp.com. #解析正确 ;; AUTHORITY SECTION: 0.17.172.in-addr.arpa.86400INNSns1.hsp.com. ;; ADDITIONAL SECTION: ns1.hsp.com.86400INA172.17.0.10 ;; Query time: 1 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Wed Sep 30 02:00:21 2015 ;; MSG SIZE rcvd: 101 也可以使用nslookup 来做测试: [root@S1 named]# nslookup > 172.17.0.10 #指定DNS服务器 Server:172.17.0.10 Address:172.17.0.10#53 10.0.17.172.in-addr.arpaname = ns1.hsp.com. 10.0.17.172.in-addr.arpaname = www.hsp.com.0.17.172.in-addr.arpa. > 172.17.0.40 Server:172.17.0.10 Address:172.17.0.10#53 40.0.17.172.in-addr.arpaname = mx1.hsp.com. #解析成功
至此,主DNS服务器正反向解析成功
小结一下以上测试用到过的的命令有dig, nslook,host
dig [-t type] name [@SERVER] [query options]
dig用于测试dns系统,因此,不会查询hosts文件进行解析; 查询选项: +[no]trace:跟踪解析过程 +[no]recurse:进行递归解析 测试反向解析: dig -x IP @SERVER 模拟区域传送: dig -t axfr ZONE_NAME @SERVER [root@S2 slaves]# dig -t axfr hsp.com @172.17.0.10 #可传送整个解析区域 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t axfr hsp.com @172.17.0.10 ;; global options: +cmd hsp.com.86400INSOAns1.hsp.com. admin.hsp.com. 3940705495 7200 600 604800 86400 hsp.com.86400INNSns1.hsp.com. hsp.com.86400INMX10 mx1.hsp.com. *.hsp.com.86400INA172.17.0.99 ftp.hsp.com.86400INCNAMEwww.hsp.com. mx1.hsp.com.86400INA172.17.0.40 ns1.hsp.com.86400INA172.17.0.10 www.hsp.com.86400INA172.17.0.10 hsp.com.86400INSOAns1.hsp.com. admin.hsp.com. 3940705495 7200 600 604800 86400 ;; Query time: 2 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Thu Sep 24 22:23:30 2015 ;; XFR size: 9 records (messages 1, bytes 229)
host命令:
host [-t type] name [SERVER]
[root@S2 slaves]# host -t A www.hsp.com 172.17.0.10 Using domain server: Name: 172.17.0.10 Address: 172.17.0.10#53 Aliases: www.hsp.com has address 172.17.0.1
nslookup命令:
nslookup [-option] [name | -] [server] 交互式模式: nslookup> server IP: 指明使用哪个DNS server进行查询; set q=RR_TYPE: 指明查询的资源记录类型; NAME: 要查询的名称;
然后实现从DNS服务器配置
一:如上文创建主DNS服务器时一样,编辑主配置文件/etc/named.conf, 注释掉不需要的配置,关闭dnssec等等。
二:编辑/etc/named/named.rfc ,添加如下两个区域文件:
zone "hsp.com" IN { type slave; #类型为slaves masters {172.17.0.10;}; #指定它的主DNS服务器 file "slaves/hsp.com.zone"; #路径必须在slaves下,区域名和主DNS中的区域名必须对应 }; zone "0.17.172.in-addr.arpa" IN { type slave; #类型为slaves masters {172.17.0.10;}; #指定它的主DNS服务器 file "slaves/0.17.172.zone"; #路径必须在slaves下,区域名和主DNS中的区域名必须对应 };
三:启动named 服务
[root@S2 slaves]# named-checkconf #检查配置文件有无语法错误,没有任何输出代表语法正确 [root@S2 slaves]# service named restart #重启named服务 Stopping named: [ OK ] Generating /etc/rndc.key: [ OK ] Starting named: [ OK ] [root@S2 slaves]# ls #可以发现区域文件已经自动传送过来了 0.17.172.zone hsp.com.zone [root@S2 slaves]# host -t A www.hsp.com 172.17.0.30 #正解www.hsp.com Using domain server: Name: 172.17.0.10 Address: 172.17.0.10#53 Aliases: www.hsp.com has address 172.17.0.10 #正解成功 [root@S2 slaves]# host -t PTR ftp.hsp.com 172.17.0.30 #通过从DNS服务器正解ftp.hsp.com Using domain server: Name: 172.17.0.30 Address: 172.17.0.30#53 Aliases: ftp.hsp.com is an alias for www.hsp.com.
四:验证主从同步功能,主DNS服务器S1的修改,能否自动传送到从DNS服务器S2
修改主DNS服务器,添加一条A记录 172.17.0.66,并将版本号+1
[root@S1 named]# rndc reload server reload successful #tail /var/log/messages #查看系统日志
查看DNS服务器区域文件是否有刚刚添加的新记录
至此: 主从,同步完成。
创建子域并实现子域授权:
此时将创建子域ops.hsp.com,并将S7作为子域的DNS服务器
S7 172.17.0.20
一:创建子域ops.hsp.com DNS服务器
[root@s7 named]# vim /etc/named.rfc1912.zones #创建如下区域 zone "ops.hsp.com" IN { type master; file "ops.hsp.com.zone"; }; [root@s7 named]# named-checkconf #检查配置文件语法 [root@s7 named]# vim /var/named/ops.hsp.com.zone #区域解析库文件内容如下
[root@s7 named]# named-checkzone "ops.hsp.com" ops.hsp.com.zone #检查解析库文件语法 zone ops.hsp.com/IN: loaded serial 2015092000 OK [root@s7 named]# systemctl restart named.service #重启服务 [root@s7 named]# systemctl status named.service #查看服务状态 named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled) Active: active (running) since Mon 2015-09-21 18:37:43 CST; 11s ago.... ...此处略去N行输出信息... www.ops.hsp.com has address 172.17.0.23 [root@s7 named]# host -t A ns1.ops.hsp.com 172.17.0.20 Using domain server: Name: 172.17.0.20 Address: 172.17.0.20#53 Aliases: ns1.ops.hsp.com has address 172.17.0.20
二:验证能否解析子域本身
[root@s7 named]# host -t A www.ops.hsp.com 172.17.0.20 #可以解析ops区域 Using domain server: Name: 172.17.0.20 Address: 172.17.0.20#53 Aliases: www.ops.hsp.com has address 172.17.0.23
三:在主DNS服务器S1授权子域ops.hsp.com
如下图所示,在主DNS服务器上添加
四:在主DNS服务器测试能否解析子域
[root@S1 named]# dig -t A ns1.ops.hsp.com @172.17.0.10 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A ns1.ops.hsp.com @172.17.0.10 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1483 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;ns1.ops.hsp.com.INA ;; ANSWER SECTION: ns1.ops.hsp.com.86099INA172.17.0.20 #成功解析 ;; AUTHORITY SECTION: ops.hsp.com.86099INNSns1.ops.hsp.com. ;; Query time: 4 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Wed Sep 30 03:14:38 2015 ;; MSG SIZE rcvd: 63
五:测试在子域能否解析父域
[root@s7 named]# dig -t A ftp.hsp.com @172.17.0.20 ; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A ftp.hsp.com @172.17.0.20 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33341 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ftp.hsp.com.INA ;; ANSWER SECTION: ftp.hsp.com.86400INCNAMEwww.hsp.com. #解析成功 www.hsp.com.85911INA172.17.0.10 ;; AUTHORITY SECTION: hsp.com.85911INNSns1.hsp.com. ;; ADDITIONAL SECTION: ns1.hsp.com.85911INA172.17.0.10 ;; Query time: 145 msec ;; SERVER: 172.17.0.20#53(172.17.0.20) ;; WHEN: Wed Sep 30 03:15:41 CST 2015 ;; MSG SIZE rcvd: 108
视图
Bind View:为了实现来自不同区域的客户,解析到不同的之地址,返回到不同的结果
试图:
一个bind服务器可以定义多个view,每个view中可以定义一个或多个zone 每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同区域解析库文件
view VIEW_NAME {
match-clients {};
}
注意:
1.一旦启用了view,使用zone都只能定义在view中
2.仅有必要在匹配到允许递归请求的客户所在的view中定义根区域
3.客户端请求到达时,是自上而下
利用视图,实现分离解析:(不同客户端请求解析同一主机,得到不同的解析结果)
重新规划S1,S2的IP地址如下图所示
S1有两张网卡,地址分别为192.168.1.110,172.17.0.10
S2IP地址为192.168.1.111
期望172.17网段客户机和其它网段客户机对www.hsp.com解析出不同结果
一:先在主配置文件中定义一个acl方便后续使用
二:创建视图internal,external
view internal { #视图internal的起始标记 match-clients { mynet; }; allow-recursion { mynet; }; zone "." IN { #所有需要查询的ZONE,都必须放置于视图中,所有,将/etc/named.conf 中的根区域移动至此处 type hint; file "named.ca"; }; 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 "hsp.com" IN { type master; file "hsp.com.zone"; zone "0.17.172.in-addr.arpa" IN { type master; file "0.17.172.zone"; notify yes; also-notify {172.17.0.30;}; }; }; #视图internal的结束标记 view external { #视图external,用来为S2 192.168.1.111提供单独解析,因为其IP并不会被上面internal 中的acl匹配到,所以用此视图中的区域解析库文件 match-clients { any; }; zone "hsp.com" in { type master; file "hsp.com.external"; #单独的及解析库文件 allow-update { none; }; }; }; [ root@S1 named]# named-checkconf #检查语法
[root@S1 named]# cp -a hsp.com.zone hsp.com.external #复制原解析库作为模板 并做如下修改
[root@S1 named]# rndc reload #重载配置文件 server reload successful
三:验证解析结果
[root@S2 ~]# dig -t A music.hsp.com @192.168.1.110 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A music.hsp.com @192.168.1.110 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18864 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;music.hsp.com.INA ;; ANSWER SECTION: music.hsp.com.86400INA172.17.0.166 #它用的hsp.com.external库文件解析的,实验成功 ;; AUTHORITY SECTION: hsp.com.86400INNSns1.hsp.com. ;; ADDITIONAL SECTION: ns1.hsp.com.86400INA172.17.0.10 ;; Query time: 5 msec ;; SERVER: 192.168.1.110#53(192.168.1.110) ;; WHEN: Wed Sep 30 04:54:35 2015 ;; MSG SIZE rcvd: 81 [root@s7 ~]# dig -t A music.hsp.com @172.17.0.10 ; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> -t A music.hsp.com @172.17.0.10 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4712 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;music.hsp.com.INA ;; ANSWER SECTION: music.hsp.com.86400INA172.17.0.66 #解析出来的仍旧是172.17.0.66,因为它被Internal view匹配到了 ;; AUTHORITY SECTION: hsp.com.86400INNSns1.hsp.com. ;; ADDITIONAL SECTION: ns1.hsp.com.86400INA172.17.0.10 ;; Query time: 5 msec ;; SERVER: 172.17.0.10#53(172.17.0.10) ;; WHEN: Wed Sep 30 05:00:43 CST 2015 ;; MSG SIZE rcvd: 92
补充:
bind中基础的安全相关的配置:
acl:把一个或多个主机归并为一个集合,并通过一个统一的名称调用:
acl acl_name {
ip;
ip
net/prelen;
};
示列:
acl mynet {
172.17.0.0/16;
};
bind 有四个内置的acl;
none:没有一个主机
any:任意主机
local:本机
localnet:本机的IP同掩码运算后得到的网络地址
注意:acl 只能先定义后使用,因此,其一般定义在配置文件的options前面
访问控制的指令
allow-query {}: 允许查询的主机,白名单,如果不指定主机,所有被拒接
allow-transfer {}: 允许区域传送的主机,白名单,如果不指定主机,所有被拒接
allow-recursion {}:允许递归的主机
allow-update {}: 允许更新的主机,比较危险,一般情况是拒绝所有 allow-update {none}
注:访问控制指令放在zone 中,只对zone生效,如果放在options中,对所有zone生效
Linux学习笔记之 DNS原理介绍、DNS搭建、主从复制、子域授权和视图
原文地址:http://siyuan710.blog.51cto.com/10648912/1699487