赞
踩
1.1 DNS 服务介绍
DNS(Domain Name System,域名系统),因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS 协议运行在UDP和TCP之上,使用53号端口
其中在DNS解析查询时用到UDP协议,而在主从传递区域数据库文件时,用到TCP协议
1.2 互联网域名结构
一般结构
主机名.二级域名.顶级域名.根
www.wsescape.com.
管理方式
Internet 的顶级域名由 Internet 网络协会域名注册查询负责网络地址分配的委员会进行登记和管理
它还为 Internet 的每一台主机分配唯一的 IP 地址
1.3 DNS 的功能
每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了。
主机名到 IP 地址映射的两种方式
静态映射
/etc/hosts文件
在每台设备上都有主机到IP的映射关系,只供此设备使用
动态映射
/etc/resolv.conf文件
指通过DNS服务器配置主机到IP的映射关系
- # cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
-
- # cat /etc/resolv.conf
- nameserver 172.16.242.2
解析方式 - FQDN(Full Qualified Domain Name)
正向 ==> FQDN --> IP
反向 ==> IP --> FQDN
权威
非权威
解析顺序
在解析域名时,首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法
一次完整的查询请求经过的流程
1.4 技术实现
DNS通过允许一个名称服务器把他的一部分名称服务,众所周知的zone,委托给子服务器而实现了一种层次结构的名称空间,成为子域授权机制
DNS还提供了一些额外的信息,例如系统别名、联系信息以及哪一个主机正在充当系统组或域的邮件枢纽
任何一个使用IP的计算机网络可以使用DNS来实现他自己的私有名称系统
实现 DNS 的软件
BIND
DJBDNS
MaraDNS
Name Server Daemon
PowerDNS
Dnsmasq
DNS 查询类型
迭代查询
递归查询
1.5 DNS 的类型
(1)Primary DNS Server(Master)
一个域的主服务器保存着该域的zone配置文件,该域所有的配置、更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个域的主DNS服务器。
(2)Secondary DNS Server(Slave)
域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步。
(3)Caching only Server(Cache)
DNS缓存服务器不存在任何的zone配置文件,仅仅依靠缓存来为客户端提供服务,通常用于负载均衡及加速访问操作。
(4)转发服务器
只负责转发功能
注解说明
主 DNS 服务器
维护所负责解析的区域内解析库服务器
解析库由管理维护,可以是手工也可以是自动的
通知机制
一旦主 DNS 服务器解析库发生改变会立即通知从服务器
从 DNS 服务器
从主DNS服务器或其他的从DNS服务器那里复制(区域传送)一份解析库
序列号:来表示解析库的版本号,前提是,主服务器解析库内容发生改变,其序列递增
刷新时间:从服务器从主服务器请求同步解析库的时间间隔
重试时间:从服务器从服务器请求同步解析库失败的时候,再次尝试的时间间隔
过期时长:从服务器始终联系不到主服务器时,多久多后放弃从服务器角度,停止提供服务
区域传送
全量传送:传送整个解析库
增量传送:传送解析库变化的那部分内容
1.6 资源记录类型
DNS 系统中,常见的资源记录类型:
主机记录(A记录)
FQDN --> IP
A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上
指针记录(PTR记录)
IP --> FQDN
引导至一个规范名称(Canonical Name),最常用来运行反向DNS查找
权威记录的起始(SOA记录)
一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录
名称服务器记录(NS记录)
专用于标明当前区域的DNS服务器
别名记录(CNAME记录)
CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录
MX 记录(MX记录)
引导域名到该域名的邮件传输代理(Message Transfer Agents)列表
IPv6 主机记录(AAAA记录)
FQDN --> IP
与 A 记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
服务位置记录(SRV记录)
用于定义提供特定服务的服务器的位置,如主机hostname,端口port
NAPTR 记录
它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。
1.7 资源记录格式
语法
name [TTL] IN rr_type value
(1) TTL如果从全局继承可以省略,为缓存时长
(2)IN表示Internet
(3)rr_type表示资源记录类型
(4) @可用于引用当前区域的名字
(5) 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应
(6) 同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机而已
SOA
name: 当前区域的名字,例如wsescape.com.
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
(2) 当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用.替换,例如linuxmail.wsescape.com
(3) 主从服务协调属性的定义以及否定的答案的统一的TTL
- # 86400为TTL值,单位为秒钟
- # 主DNS服务器地址为ns.wsescape.com.
- # 邮箱地址为nsadmin.wsescape.com.
- # 第一版为2016052201,标识版本号
- wsescape.com.86400INSOAns.nsadmin.wsescape.com.(
- 2016052201 ;序列号
- 2H ;刷新时间,2小时
- 10M;重试时间,10分钟
- 1W;过期时间,一周
- 1D;否定答案的TTL值,一天
- )
NS
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.wsescape.com.
注意
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录
- # 一个区域可以有多个NS记录
- # ns1.wsescape.com.和ns2.wsescape.com.都应该在后续有一个A记录
- wsescape.com.INNS ns1.wsescape.com.
- wsescape.com.INNS ns2.wsescape.com.
MX
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可以有多个
但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级
数字越小优先级越高
注意
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
- # mx1.wsescape.com.和mx2.wsescape.com.都应该在后续有一个A记录
- wsescape.com.IN MX 10 mx1.wsescape.com.
- INMX 20 mx2.wsescape.com.
A
name: 某主机的FQDN,例如www.wsescape.com.
value: 主机名对应主机的 IP 地址;
注意
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
- # 轮询
- www.wsescape.com.IN A1.1.1.1
- www.wsescape.com.IN A 1.1.1.2
-
- # 一个主机有多个名称而已
- mx1.wsescape.com.IN A 1.1.1.3
- mx2.wsescape.com. IN A 1.1.1.3
-
- # 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
- *.wsescape.com.IN A 1.1.1.4
- wsescape.com.IN A 1.1.1.4
AAAA
与A记录类似,这是只是表示IPv6地址而已
- # 轮询
- www.wsescape.com.IN AAAA1.1.1.1
- www.wsescape.com.IN AAAA 1.1.1.2
-
- # 一个主机有多个名称而已
- mx1.wsescape.com.IN AAAA 1.1.1.3
- mx2.wsescape.com. IN AAAA 1.1.1.3
-
- # 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
- *.wsescape.com.IN AAAA 1.1.1.4
- wsescape.com.IN AAAA 1.1.1.4
PTR
name: 这里的name表示的是IP地址
IP地址有特定格式,把IP地址反过来写,如果是1.2.3.4需要写作4.3.2.1
还有特定后缀in-addr.arpa.,完整写法为4.3.2.1.in-addra.arpa.
value: 这里的value值为FQDN
注意
网络地址及后缀可省略,主机地址依然需要反着写
- # 实例
- 4.3.2.1.in-addr.arpa.INPTRwww.wsescape.com.
-
- # 如果3.2.1是网络地址简写成为
- 4 IN PTRwww.wsescape.com.
-
- # 如果2.1是网络地址简写成为
- 4.3 IN PTRwww.wsescape.com.
CNAME
name: 别名的FQDN
value: 正工名字的FQDN
web.escapelife.com.IN CNAME www.escapelife.com.
1.8 个人使用
子域授权就是每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
类似根域授权tld
- .com.INNS ns1.com.
- .com. IN NSns2.com.
- ns1.com.INA 2.2.2.1
- ns2.com. INA2.2.2.2
这里以wsescape.com为例
- # wsescape.com. 在.com的名称服务器上,解析库中添加资源记录
- wsescape.com.INNSns1.wsescape.com.
- wsescape.com.INNSns2.wsescape.com.
- wsescape.com.INNSns3.wsescape.com.
- ns1.wsescape.com.INA 3.3.3.1
- ns2.wsescape.com.INA 3.3.3.2
- ns3.wsescape.com.INA 3.3.3.3
域名注册
代理商
万网
新网
godaddy
绑定服务器
注册完成以后,想自己用专用服务来解析?
管理后台,把 NS 记录指向的服务器名称和 A 记录指向的服务器地址
2.1 dig命令
dig用于测试dns系统,因此不会查询hosts文件进行解析
用于询问 DNS 域名服务器的灵活的工具
除非被告知请求特定域名服务器,dig将尝试 /etc/resolv.conf中列举的任何服务器
当未指定任何命令行参数或选项时,dig将对.(根)执行NS查询
格式
dig [-t type] name [@SERVER] [query options]
语法
类型查询
- dig -t NS wsescape.com @172.16.242.178
- dig -t MX wsescape.com @172.16.242.178
- dig -t A www.baidu.com
查询选项:
- +[no]trace:跟踪解析过程
- +[no]recurse:进行递归解析
- 测试反向解析:
- dig -x IP @SERVER
- dig -x 172.16.100.11 @172.16.242.178
模拟区域传送:
- dig -t axfr ZONE_NAME @SERVER
- dig -t axfr wsescape.com @172.16.242.178
2.2 host命令
host命令用于查询DNS的工具
它通过常转换指定主机名称的主机名称为 IP 地址
当不指定参数时,它显示host命令的帮助信息
格式
host [-t type] name [SERVER]
语法
-a 等同于-v -t
-C 在需要认证的域名服务器上查找 SOA 记录
-l 列出一个域内所有的主机
-i 反向查找
-r 不使用递归处理
-v 运行时显示详细的处理信息
-4 用于 IPv4 的查询
-6 用于 IPv6 的查询
-t <类型> 指定类型,包括a、all、mx、ns等
实例展示
- [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
- Using domain server:
- Name: 172.16.242.178
- Address: 172.16.242.178#53
- Aliases:
- www.wsescape.com has address 172.16.100.11
- www.wsescape.com has address 172.16.100.12
-
- [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
- Using domain server:
- Name: 172.16.242.178
- Address: 172.16.242.178#53
- Aliases:
- www.wsescape.com has address 172.16.100.12
- www.wsescape.com has address 172.16.100.11
-
- [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
- Using domain server:
- Name: 172.16.242.178
- Address: 172.16.242.178#53
- Aliases:
- www.wsescape.com has address 172.16.100.11
- www.wsescape.com has address 172.16.100.12
-
- [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
- Using domain server:
- Name: 172.16.242.178
- Address: 172.16.242.178#53
- Aliases:
- www.wsescape.com has address 172.16.100.12
- www.wsescape.com has address 172.16.100.11
2.3 nslookup命令
nslookup 命令用于查找域名服务器的程序,有两种模式为互交和非互交
格式
nslookup [-option] [name | -] [server]
语法
非交互模式
直接查询即可
交互式模式
- nslookup>
- server IP: 指明使用哪个DNS server进行查询;
- set q=RR_TYPE: 指明查询的资源记录类型;
- NAME: 要查询的名称;
实例展示
- [root@localhost ~]# nslookup
- > server 172.16.242.178
- Default server: 172.16.242.178
- Address: 172.16.242.178#53
- > set q=A
- > www.wsescape.com
- Server:172.16.242.178
- Address:172.16.242.178#53
-
- Name:www.wsescape.com
- Address: 172.16.100.11
- Name:www.wsescape.com
- Address: 172.16.100.12
- > set q=NS
- > wsescape.com
- Server:172.16.242.178
- Address:172.16.242.178#53
-
- wsescape.comnameserver = ns2.wsescape.com.
- wsescape.comnameserver = ns1.wsescape.com.
-
- # 非交互模式查询
- [root@rudder ~]# nslookup baidu.com
- Server: 8.8.8.8
- Address: 8.8.8.8#53
-
- Non-authoritative answer:
- Name: baidu.com
- Address: 123.125.114.144
- Name: baidu.com
- Address: 220.181.111.85
- Name: baidu.com
- Address: 220.181.111.86
-
- # 非交互模式查询
- [root@rudder ~]# nslookup
- > www.baidu.com
- Server:172.17.0.254
- Address:172.17.0.254#53
-
- Non-authoritative answer: #非权威答案,表明是在缓存中读取的
- www.baidu.comcanonical name = www.a.shifen.com.
- Name:www.a.shifen.com
- Address: 61.135.169.105 #返回第一个IP地址
- Name:www.a.shifen.com
- Address: 61.135.169.125 #返回第二个IP地址
- > server 8.8.8.8 #设置域名服务器为 8.8.8.8
- Default server: 8.8.8.8
- Address: 8.8.8.8#53
- > www.baidu.com #再次请求百度的IP地址
- Server:8.8.8.8
- Address:8.8.8.8#53
-
- Non-authoritative answer:
- www.baidu.comcanonical name = www.a.shifen.com.
- Name:www.a.shifen.com
- Address: 220.181.111.147 #不同的DNS获取的IP地址是不同的。
2.4 rndc命令
rndc客户端是通过建立套接字连接服务端,监听在TCP的953端口,来对服务端的named进行修改操作,但由于安全考虑,所以rndc的客户端和服务端安装在同一台主机之上。
语法 1
-b:source-address 使用 source-address 作为连接服务器的源地址允许多个实例设置 IPv4 和 IPv6 源地址
-c config-file:使用config-file 作为缺省的配置文件/etc/rndc.conf 的替代
-k key-file:使用 key-file 作为缺省的密钥文件/etc/rndc.key 的替代、如果config-file 不存在,/etc/rndc.key 中的密钥将用于认证发向服务器的命令
-s server server:是与rndc的配置文件中server语句匹配的服务器的名字或地址、如果命令行没有提供服务器,会使用rndc配置文件中options语句中的default-server子句所命名的主机
-p port:发送命令到TCP端口port,以取代BIND 9的缺省控制通道端口 953
-V:打开冗余日志
-y key_id:使用配置文件中的密钥key_id
语法 2
reload:重载主配置文件和区域解析库文件
reload zone:重重载区域解析库文件
refresh zone:安排区域的立即维护
retransfer zone:手动启动区域传送过程,而不管序列号是否增加
notify zone:重新对区域传送发通知
reconfig:重载主配置文件
status:将服务器统计信息写入统计文件中
querylog:开启或关闭查询日志、建议调试的时候开启,否则日志消耗太多性能
dumpdb:将高速缓存转储到转储文件 (named_dump.db)
stop:将暂挂更新保存到主文件并停止服务器
halt:停止服务器,但不保存暂挂更新
trace:将调试级别增加一级、建议调试的时候开启,否则日志消耗太多性能
trace level:更改调试级别
notrace:将调试级别设置为0
flush:刷新服务器的所有高速缓存
status:显示服务器的状态
restart:重新启动服务器
实例展示
- # rndc工具能够帮助我们输出系统信息
- [root@localhost ~]# rndc status
- version: 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6
- CPUs found: 1
- worker threads: 1
- number of zones: 20
- debug level: 0
- xfers running: 0
- xfers deferred: 0
- soa queries in progress: 0
- query logging is OFF
- recursive clients: 0/0/1000
- tcp clients: 0/100
- server is up and running
-
- # rndc不重启加载区域文件
- [root@localhost ~]# rndc reload
DNS服务,程序包名bind,程序名named。
3.1 程序包
只需要安装bind、bind-libs和bind-utils即可
bind:主包
bind-libs:依赖的库文件,包括 32 位和 64 位
bind-utils:提供客户端工具,例如dig、host、nslookup和nsupdate
bind-chroot:建立不要安装,很容易被入侵
bind-chroot包的作用是提高安全性,将 DNS 服务的配置文件/etc/named.conf 等,创建一个硬链接转到/var/named/chroot/etc/ 文件夹下面,而且使用服务帐号登录,不使用root用户登录
注意,修改配置文件要修改/etc/下面的,这样会自动同步到chroot下面的链接文件中
bind-sdb
bind-dyndb-ldap
以上这两种方式,是将解析库文件放在不同的数据库中进行存储
3.2 BIND配置文件
配置文件
服务启动脚本在CentOS6下/etc/rc.d/init.d/named
主配置文件/etc/named.conf、/etc/rndc.key、为rndc的秘钥共享文件,提供认证用的
rndc是什么?远程名称控制器、默认与bind安装在同一主机,且只能通过本地回环地址127.0.0.1来连接named进程、提供辅助性的管理功能,如查看解析状态等、默认工作在 953/tcp 端口上、/etc/named.rfc1912.zones、请求注解文档
解析库文件/var/named/ZONE_NAME.ZONE、在/var/named/目录下存在多个解析库文件/var/named/named.ca、指向根DNS该文件不需要管理员更改,而是系统自带/var/named/named.local、本地子域解析,将localhost反向解析为127.0.0.1
注意
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件,在named.ca中包含13根节点地址,由dig命令生成而来的
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
- # 在CentOS6下
- [root@localhost ~]# rpm -ql bind | less
- /etc/NetworkManager/dispatcher.d/13-named
- /etc/logrotate.d/named
- /etc/named
- /etc/named.conf
- /etc/named.iscdlv.key
- /etc/named.rfc1912.zones
- /etc/named.root.key
- /etc/portreserve/named
- /etc/rc.d/init.d/named
- /etc/rndc.conf
- /etc/rndc.key
- /etc/sysconfig/named
- /usr/lib64/bind
- /usr/sbin/arpaname
- ......
- # @表示当前区域的区域名称,在主配置文件/etc/named.conf中定义的
- # TTL的值没写,因为定义了宏$TTL 1D,直接继承
- # rname.invalid.表示管理员的邮箱地址
- # 后面的如NS、A等缺省,因为继承前者的
-
- [root@localhost named]# cat /var/named/named.localhost
- $TTL 1D
- @IN SOA@ rname.invalid. (
- 0; serial
- 1D; refresh
- 1H; retry
- 1W; expire
- 3H ); minimum
- NS@
- A127.0.0.1
- AAAA::1
-
- [root@localhost named]# cat /var/named/named.loopback
- $TTL 1D
- @IN SOA@ rname.invalid. (
- 0; serial
- 1D; refresh
- 1H; retry
- 1W; expire
- 3H ); minimum
- NS@
- A127.0.0.1
- AAAA::1
- PTRlocalhost.
主配置文件
全局配置:options {}
日志子系统配置:logging {}
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone如zone "ZONE_NAME" IN {}
注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
- [root@localhost ~]# cat /etc/named.conf
- options {
- 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; };
- 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";
- # localhost.localdomain就是区域名称,也就是@
- [root@localhost ~]# cat /etc/named.rfc1912.zones
- 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; };
- };
3.3 缓存名称服务器配置
安装上安装上bind之后,其实就算的上是一个缓存名称服务器,只需要进行少许的配置即可完成
修改listen-on port 53
修改allow-query
修改recursion
(1)安装
[root@localhost ~]#yum install bind
(2)启动
- [root@localhost ~]# service named start
- Generating /etc/rndc.key: [ OK ]
- Starting named: [ OK ]
(3)查看
- # 为了安全,安装上bind之后,默认只会监听本地,不对外提供服务
- # 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的`IP`地址上
- # 编辑主配置文件即可
-
- [root@localhost ~]# ss -tunlp | grep :53
- udp UNCONN 0 0 127.0.0.1:53 *:* users:(("named",39822,512))
- udp UNCONN 0 0 ::1:53 :::* users:(("named",39822,513))
- tcp LISTEN 0 3 ::1:53 :::* users:(("named",39822,21))
- tcp LISTEN 0 3 127.0.0.1:53 *:* users:(("named",39822,20))
(4)修改
- # 修改之前先备份一下
- # 逗号之前没有内容,默认为前一个的名称,后面为复制的内容
-
- [root@localhost ~]# cp /etc/named.conf{,.bak}
- [root@localhost ~]# ll /etc/named*
- -rw-r-----. 1 root named 984 11月 20 2015 /etc/named.conf
- -rw-r-----. 1 root root 984 6月 20 21:53 /etc/named.conf.bak
- # //表示单行注释,注释ipv6
- # /**/表示多行注释
- # 修改的时候必须以;结尾且{}的两端必须有空格,否则为语法错误
- # directory用来定义区域解析库文件存放位置
-
- # 建议关闭dnssec功能
- # 将dnssec-enable和dnssec-validation改为no,并注释key文件即可
-
- # 把能够以外网进行通信的地址写在listen-on port 53之后,如果有多个可以多个添加,不能省略
- # 如果将listen-on port 53进行注释或者删除,默认是监听在所有
- # 将allow-query注释或改为allow-query { any; };
- # 是否允许递归recursion,必须为yes
-
- [root@localhost ~]# vim /etc/named.conf
- options {
- listen-on port 53 { 172.16.242.178; 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; };
- recursion yes;
- dnssec-enable no;
- dnssec-validation no;
- /* Path to ISC DLV key */
- // bindkeys-file "/etc/named.iscdlv.key";
- // managed-keys-directory "/var/named/dynamic";
- };
(5)重启生效
- # 重启之后才能生效配置
- [root@localhost ~]# service named restart
- Stopping named: . [ OK ]
- Starting named: [ OK ]
-
- [root@localhost ~]# ss -tunlp | grep :53
- udp UNCONN 0 0 172.16.242.178:53 *:* users:(("named",40086,513))
- udp UNCONN 0 0 127.0.0.1:53 *:* users:(("named",40086,512))
- udp UNCONN 0 0 ::1:53 :::* users:(("named",40086,514))
- tcp LISTEN 0 3 ::1:53 :::* users:(("named",40086,22))
- tcp LISTEN 0 3 172.16.242.178:53 *:* users:(("named",40086,21))
- tcp LISTEN 0 3 127.0.0.1:53 *:* users:(("named",40086,20))
3.4 主 DNS 名称服务器配置
主 DNS 名称服务器配置就是在缓存DNS服务器的基础之上增加zone配置文件就可以了
在/etc/named.rfc1912.zones添加zone记录
在/var/named/增加zone文件
(1) 在主配置文件中定义区域
格式
- # master表示主DNS
- # slave表示从DNS
- # hint表示根
- # forward做转发
- # file使用的是主配置文件directory定义的路径
- zone "ZONE_NAME" IN {
- type {master|slave|hint|forward};
- file "ZONE_NAME.zone";
- };
修改配置
- # 在/etc/named.rfc1912.zones文件内定义域名
- # named-checkconf用来检查语法错误
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.zone";
- };
-
- [root@localhost ~]# named-checkconf
(2) 定义区域解析库文件
格式
- 出现的内容:
- 宏定义;
- 资源记录;
修改配置
- # 这里$TTL用于定义TTL的值,86400为秒,可以使用1D来代替
- # $ORIGIN用于指定域名词尾,如ns以及mx都为缺省了
- # named-checkzone
- # 两个www,在访问的时候会进行轮询操作的
- # 泛域名解析这里的*,表示无论用户输入什么都不报错
- # 或者写成* IN A 172.16.100.11,因为CNAME不能输入ip地址
-
- [root@localhost ~]# cd /var/named/
- [root@localhost named]# vim wsescape.com.zone
- $TTL 86400
- $ORIGIN wsescape.com.
- @ IN SOA ns1.wsescape.com. admin.wsescape.com (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS ns1
- IN NS ns2
- IN MX 10 mx1
- IN MX 20 mx2
- ns1 IN A172.16.100.11
- ns2 IN A172.16.100.12
- mx1 IN A172.16.100.13
- mx2 IN A172.16.100.14
- www IN A172.16.100.11
- www IN A172.16.100.12
- ftp INCNAMEwww
- * IN CNAME www
-
- [root@localhost named]# named-checkzone "wsescape.com" /var/named/wsescape.com.zone
- zone wsescape.com/IN: loaded serial 2016042201
- OK
更改权限
- # 可以查出进程是以named运行的
- # 其中/etc/named.conf文件的属主为root,属组为named
- # 为了安全起见,对自己创建的文件进行权限修改
-
- [root@localhost named]# ps -aux | grep named
- named 40086 0.0 1.1 160072 11736 ? Ssl 22:07 0:00 /usr/sbin/named -u named
- root 40785 0.0 0.0 103324 864 pts/0 S+ 23:19 0:00 grep named
-
- [root@localhost named]# ll /etc/named.conf
- -rw-r-----. 1 root named 1004 6月 20 22:23 /etc/named.conf
-
- [root@localhost named]# id named
- uid=25(named) gid=25(named) 组=25(named)
-
- [root@localhost named]# ll
- 总用量 32
- drwxrwx---. 2 named named 4096 6月 20 21:45 data
- drwxrwx---. 2 named named 4096 6月 20 21:45 dynamic
- -rw-r-----. 1 root named 3171 1月 11 22:12 named.ca
- -rw-r-----. 1 root named 152 12月 15 2009 named.empty
- -rw-r-----. 1 root named 152 6月 21 2007 named.localhost
- -rw-r-----. 1 root named 168 12月 15 2009 named.loopback
- drwxrwx---. 2 named named 4096 5月 11 07:07 slaves
- -rw-r--r--. 1 root root 408 6月 20 22:53 wsescape.com.zone
-
- [root@localhost named]# chmod 640 wsescape.com.zone
- [root@localhost named]# chown :named wsescape.com.zone
-
- [root@localhost named]# ll
- 总用量 32
- drwxrwx---. 2 named named 4096 6月 20 21:45 data
- drwxrwx---. 2 named named 4096 6月 20 21:45 dynamic
- -rw-r-----. 1 root named 3171 1月 11 22:12 named.ca
- -rw-r-----. 1 root named 152 12月 15 2009 named.empty
- -rw-r-----. 1 root named 152 6月 21 2007 named.localhost
- -rw-r-----. 1 root named 168 12月 15 2009 named.loopback
- drwxrwx---. 2 named named 4096 5月 11 07:07 slaves
- -rw-r-----. 1 root named 408 6月 20 22:53 wsescape.com.zone
重启生效
- [root@localhost ~]# service named restart
- Stopping named: . [ OK ]
- Starting named: [ OK ]
-
- # 使用dig命令来帮助我们验证信息
- # 因为之前的配置,这里会进行轮询操作
- [root@localhost ~]# dig -t A wsescape.com @172.16.242.178
3.5 反向区域
反向解析和正向解析各为独立的系统,所以可以部署在不同的或者是相同的机器之上,都是可以
一个区域只能有一个主服务器,无论是正向还是反向
一个主服务器可以有多个从服务器
根据配置文件中定义的主机地址,来确定网络地址
如果都为172.16.100内的主机,那么网络地址就是172.16.100.
存在多种地址,如172.16.100.12、172.16.200.121等,那么网络地址就是172.16.
以此类推
什么是反向区域
不变的部分用来当做区域名称,变化的部分用来当做实现解析时候的name
格式
区域名称:网络地址反写.in-addr.arpa.
如172.16.100. ==> 100.16.172.in-addr.arpa.
如何定义反向区域
(1) 定义区域
- # file同样是一个相对路径,/var/named/
- # 如果有多个正向域对应同一个网络的话,多个区域就重名了,所以这里的网络地址其实自己可以随意定义,如"网络地址1.zone"、"网络地址2.zone"等
- # 如果只有一个反向区域的话,就只需要书写一个反向解析库,就可以"网络地址.zone"这样命名了
- zone "ZONE_NAME" IN {
- type {master|slave|forward};
- file "网络地址.zone";
- };
-
- # 因为172.16.242.178和我们的其他服务器(172.16.100.12/172.16.100.11),所以只能写成"16.172.in-addr.arpa"和"172.16.zone"
- # 最后添加如下内容
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "16.172.in-addr.arpa" IN {
- type master;
- file "172.16.zone";
- };
(2) 区域解析库文件
以PTR记录为主
不需要MX和A以及AAAA记录
- # $TTL表示宏定义的TTL值
- # $ORIGIN这里表示反向区域的名称
- # 反向的主机名称不能省略
- # 这里的11和12会自动补充上16.172.in-addr.arpa.
- # 别名记录不用反解,所以ftp没有书写反向解析
- # 这里可以使用vim -o wsescape.com.zone 16.172.zone来同时编辑两个文件的
-
- [root@localhost ~]# cd /var/named/
- [root@localhost named]# vim 100.16.zone
- $TTL 86400
- $ORIGIN 16.172.in-addr.arpa.
- @IN SOAns1.wsescape.com. admin.wsescape.com. (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NSns1.wsescape.com.
- IN NSns2.wsescape.com.
- 11.100IN PTRns1.wsescape.com.
- 11.100IN PTRwww.wsescape.com.
- 12.100IN PTRmx1.wsescape.com.
- 12.100IN PTRwww.wsescape.com.
- 13.100IN PTRmx2.wsescape.com.
- # 反向解析如果没有$ORIGIN的情况下,也可以这样写
- [root@localhost named]# vim 100.16.zone
- $TTL 86400
- @IN SOAns1.wsescape.com. admin.wsescape.com. (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- 16.172.in-addr.arpa.IN NSns1.wsescape.com.
- IN NSns2.wsescape.com.
- 11.100IN PTRns1.wsescape.com.
- 11.100IN PTRwww.wsescape.com.
- 12.100IN PTRmx1.wsescape.com.
- 12.100IN PTRwww.wsescape.com.
- 13.100IN PTRmx2.wsescape.com.
(3) 修改权限并重启
- [root@localhost named]# chmod 640 16.172.zone
- [root@localhost named]# chmod :named 16.172.zone
-
- # 语法
- [root@localhost named]# named-checkconf
- [root@localhost named]# named-checkzone "16.172.inaddr-addr" 16.172.zone
- ok
- [root@localhost named]# service named reload
-
- # 检测
- [root@localhost named]# host -t PRT 172.16.100.12 172.16.242.178
- [root@localhost named]# dig -x 172.16.100.12 @172.16.242.178
3.6 从 DNS 名称服务器配置
定义从 DNS 服务器就是在缓存服务器的基础上,进行修改配置
在/etc/named.rfc1912.zones添加zone记录
主从复制
(1)应该为一台独立的名称服务器
(2)主服务器的区域解析库文件中必须有一条 NS 记录是指向从服务器
(3)从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
(4)主服务器得允许从服务器作区域传送
(5)主从服务器时间应该同步,可通过ntp进行
(6)bind程序的版本应该保持一致;否则,应该从高主低
定义从区域的方法
正向从服务器格式
- # 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
- zone "ZONE_NAME" IN {
- type slave;
- masters { MASTER_IP; };
- file "slaves/ZONE_NAME.zone";
- };
反向从服务器格式
- # 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
- zone "Reverse_Net_Addr.in-addr.arpa" IN {
- type master;
- file "SOMEFILE.zone";
- };
(1)正向从服务器的实例
- # 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
- # 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的
-
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "wsescape.com" IN {
- type slave;
- masters { 172.16.242.178; };
- file "slaves/wsescape.com.zone";
- };
-
- # 重起服务即可成效
- [root@localhost ~]# rndc reload
-
- # 可以通过log进行查看
- [root@localhost ~]# tail /var/log/messages
(2)反向从服务器的实例
- # 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
- # 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的
-
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "16.172.in-addr.arpa" IN {
- type slave;
- masters { 172.16.242.178; };
- file "slaves/172.16.zone";
- };
-
- # 重起服务即可成效
- [root@localhost ~]# rndc reload
-
- # 可以通过log进行查看
- [root@localhost ~]# tail /var/log/messages
4.1 子域授权的特点
子域授权其实就是在你有域名的情况下,进行细分的状况。比如说,你注册了wsescap.com这个域名,由于业务关系等,你需要分开为ops部门和fin部门,分别使用自己的DNS服务器,这个时候你就需要进行子域授权了。
特点
分布式数据库
正向解析区域的子域授权比较常见,而反向的相对来说比较难做
4.2 子域授权的方法
正向解析区域子域方法
- # 定义一个子区域
- # 在/var/named/下的指定文件中进行配置,如这里的/var/named/wsescape.com.zone
- # 在我们授权了wsescape.com的前提下,定义两个子域,分别为ops和fin两个
-
- ops.wsescape.com.INNSns1.ops.wsescape.com.
- ops.wsescape.com.INNSns2.ops.wsescape.com.
- ns1.ops.wsescape.com.INA1.1.1.1
- ns2.ops.wsescape.com.INA1.1.1.2
-
- fin.wsescape.com.INNSns1.fin.wsescape.com.
- fin.wsescape.com.INNSns2.fin.wsescape.com.
- ns1.fin.wsescape.com.INA3.1.1.1
- ns2.fin.wsescape.com.INA3.1.1.2
4.3 解析方式
前提:如果在wsescape.com下,定义了一个子域为ops,并在ops下创建了一个www的服务。
外部解析
(1)当www.test.org中的一台主机需要访问ops下的www主机时,就需要进过以下几个阶段:
先找根(.),根说你去找com
再找com,com说你去找wsescape
再找wsescape,wsescape说你去找ops
最后ops返回需要的信息
内部解析
(1)当wsescape.com下的一台主机需要访问ops下的www主机时,虽然wsescape.com的DNS主机不给于解析,但是它知道子域的位置,所以会立即指向ops的DNS服务器。
(2)当ops下的一台主机需要访问wsescape.com下的www主机时,就需要进过以下几个阶段:
先找ops,ops说你找根
再找根(.),根说你去找com
再找com,com说你去找wsescape
最后wsescape返回需要的信息
我们会发现这个饶了一大圈,为了避免这样的问题,就需要定义转发服务器。
4.4 定义转发服务器
注意
(1)关闭dnssec功能
dnssec-enable no
dnssec-validation no
(2)被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
(3)即定义了全局转发有定义了区域转发,优先级为能够精确匹配到的先通过区域转发,不能再通过全局转发
转发模式
(1) 全局转发
凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器
- # forward定义转发模式
- # first表示先转发给指定解析服务器,如无响应的话再找根服务器,即先递归在迭代
- # only表示金转发给指定解析服务器,仅仅递归
- # fowwarders定义转发给谁
-
- Options {
- forward { first|only };
- forwarders;
- }
(2) 区域转发
仅转发对特定的区域的请求至某服务器、需要自己定义区域和区域类型等信息
- # forward定义转发模式
- # first表示先转发给指定解析服务器,如无响应的话再找根服务器,即先递归在迭代
- # only表示金转发给指定解析服务器,仅仅递归
- # fowwarders定义转发给谁
-
- zone "ZONE_NAME" IN {
- type forward;
- forward { first|only };
- forwarders;
- }
4.5 子域父域配置
前提:
父域IP地址 ==> 172.16.100.11
子域IP地址 ==> 172.16.100.12
能访问互联网的IP地址 ==> 172.16.0.1
(1)父域服务器配置
- # 一台独立的主机,这里配置父域就是在主服务器配置的基础上,添加子域而已
- # 注释的话,默认监听所有
- # 如果发现测试无法成功,查看/etc/named.conf中的dnssec改为no而非注释掉,否则导致本地客户端不接受
- [root@localhost ~]# yum installl -y bind
-
- [root@localhost ~]# vim /etc/named.conf
- options {
- // listen-on port 53 { 172.16.242.178; 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; };
- recursion yes;
- dnssec-enable no;
- dnssec-validation no;
- /* Path to ISC DLV key */
- // bindkeys-file "/etc/named.iscdlv.key";
- // managed-keys-directory "/var/named/dynamic";
- };
- [root@localhost ~]# service named start
- [root@localhost ~]# ss -tunl | grep :53
- udp UNCONN 0 0 127.0.0.1:53 *:*
- udp UNCONN 0 0 ::1:53 :::*
- tcp LISTEN 0 3 ::1:53 :::*
- tcp LISTEN 0 3 127.0.0.1:53 *:*
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.zone";
- };
- # ops、ns2.ops和ns1.ops都会自动补全wsescape.com.
- # 这里没有定义ns2.ops的A记录,是因为ns2.ops我们没有配置主机
- # 如果父域需要查找子域的时候,可能会跑到我们这个没有配置的机器上,导致服务解析,所以这就是没有定义的原因
-
- [root@localhost ~]# vim /var/named/wsescape.com.zone
- $TTL 1D
- $ORIGIN wsescape.com.
- @ IN SOA ns1.wsescape.com. admin.wsescape.com (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS ns1
- IN NS ns2
- ns1 IN A 172.16.100.11
- ns2 IN A 172.16.100.18
- www IN A 172.16.100.11
- * IN A 172.16.100.11
- ops IN NS ns1.ops
- ops IN NS ns2.ops
- ns1.ops IN A 172.16.100.12
- [root@localhost ~]# cd /var/named/
-
- [root@localhost named]# chown :named wsescape.com.zone
- [root@localhost named]# chmod 640 wsescape.com.zone
- [root@localhost ~]# rndc reload
- server reload successful
-
- [root@localhost ~]# tail /var/log/messages
(2)子域服务器配置
- # 配置子域服务器,即一台独立的主机,和父域配置没什么大的差别
- # 注释的话,默认监听所有
- # 如果发现测试无法成功,查看/etc/named.conf中的dnssec改为no而非注释掉,否则导致本地客户端不接受
- [root@localhost ~]# yum installl -y bind
-
- [root@localhost ~]# vim /etc/named.conf
- options {
- // listen-on port 53 { 172.16.242.178; 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; };
- recursion yes;
- dnssec-enable no;
- dnssec-validation no;
- /* Path to ISC DLV key */
- // bindkeys-file "/etc/named.iscdlv.key";
- // managed-keys-directory "/var/named/dynamic";
- };
- [root@localhost ~]# service named start
- [root@localhost ~]# ss -tunl | grep :53
- udp UNCONN 0 0 127.0.0.1:53 *:*
- udp UNCONN 0 0 ::1:53 :::*
- tcp LISTEN 0 3 ::1:53 :::*
- tcp LISTEN 0 3 127.0.0.1:53 *:*
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "ops.wsescape.com" IN {
- type master;
- file "ops.wsescape.com.zone";
- };
- # ns1和ns2都会自动补全ops.wsescape.com.
- # 这里也省略了ns2的定义,因为没有这里机器,如果父域需要查找子域的时候
- # 可能会跑到我们这个没有配置的机器上,导致服务解析,所以这就是没有定义的原因
-
- [root@localhost ~]# vim /var/named/ops.wsescape.com.zone
- $TTL 1D
- $ORIGIN ops.wsescape.com.
- @ IN SOA ns1.ops.wsescape.com. admin.ops.wsescape.com (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS ns1
- IN NS ns2
- ns1 IN A 172.16.100.12
- www IN A 172.16.100.20
- * IN A 172.16.100.20
- [root@localhost ~]# cd /var/named/
-
- [root@localhost named]# chown :named wsescape.com.zone
- [root@localhost named]# chmod 640 wsescape.com.zone
- [root@localhost ~]# rndc reload
- server reload successful
-
- [root@localhost ~]# tail /var/log/messages
(3)测试配置
- # 当这里,我们会发现如下问题
-
- # 在子域服务器中,执行命令后可以查看ops的信息
- # 172.16.100.12为子域服务器
- [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.12
-
- # 在子域服务器中,执行命令后在无网络的情况下不能查看父域的信息,在有网的情况下会根据根返回的信息来定位父域信息
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
-
- # 在父域服务器中,执行命令后可以查看子域ops的信息
- # 这里dig命令默认执行一个递归操作,所以这里需要加上+norecurse非递归即可
- # 172.16.100.11为父域服务器
- [root@localhost ~]# dig -t A ops.wsescape.com @172.16.100.11 +norecurse
- [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.11 +norecurse
注意
如果发现测试无法成功,查看/etc/named.conf中的dnssec改为no而非注释掉,否则导致本地客户端不接受
如果测试应该为不能解析但是还是解析了,可能需要清空缓存rndc flush
服务配置
(1)全局转发
- # 在父域中配置
- # 全局转发,就是通通转发给172.16.0.1来查询
- # 在父域服务器上编辑/etc/named.conf,在options添加如下信息
- # 由于上述的机器没有连接互联网,所以可以通过172.16.0.1进行解析
-
- [root@localhost ~]# vim /etc/named.conf
- Options {
- forward first;
- forwarders { 172.16.0.1; };
- }
-
- [root@localhost ~]# rndc reload
- server reload successful
-
- [root@localhost ~]# tail /val/log/messages
-
- # 父域中测试可以
- [root@localhost ~]# dig -t A www.baidu.com @172.16.100.11
(2)区域转发
- # 在子域中配置
- # 区域转发,就是将wsescape.com这个域内的查询转发给172.16.100.11来查询
- # 在子域服务器上编辑/etc/named.rfc1912.zones最后添加一个zone
-
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "wsescape.com" IN {
- type forword;
- forward only;
- forwarders { 172.16.100.11; };
- };
-
- [root@localhost ~]# rndc reload
- server reload successful
-
- [root@localhost ~]# tail /val/log/messages
-
- # 子域中测试可以,成功
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
(3)测试配置
- # 父域中测试,成功
- [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.11
- [root@localhost ~]# dig -t A www.baidu.com @172.16.100.11
-
- # 子域中测试,子域知道父域在哪里,成功
- # 在子域中还是无法解析,因为指定要了定义区域wsescape.com可以解析
- # 如果在子域中,即定义了全局转发有定义了区域转发,优先级为能够精确匹配到的先通过区域转发,不能再通过全局转发
-
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
- # 子域解析失败
- [root@localhost ~]# dig -t A www.baidu.com @172.16.100.12
5.1 BIND中基础的安全相关的配置
(1)acl机制
把一个或多个地址归并为一个集合,并通过一个统一的名称调用
只能先定义后使用,其一般定义在配置文件中options的前面
(2)acl格式
- # acl表示关键字,acl_name表示自定义名称
- # ip表示单个的IP地址,net表示网络,意思就是单个IP和网络都可以定义
- acl acl_name {
- ip;
- ip;
- net/prelen;
- };
(3)四个内置的acl
因为这四个是内置的acl,所以在我们自己定义的时候不能使用这几个名称,否则会导致误用发生。
none ==> 没有一个主机
any ==> 任意主机
local ==> 本机
localnet ==> 本机的IP同掩码运算后得到的网络地址
(4)访问控制的指令
以下的这几个指令,可以用在/etc/named.conf中表示全局生效,也可以用在/etc/named.rfc1912.zones中,定义在单独的zone中表示局部生效。同时,{}内可以包含定义的acl或者主机IP地址,包括内置的和我们自己定义的。
allow-query {} ==> 允许查询的主机,即白名单
allow-transfer {} ==> 允许区域传送的主机,即白名单
allow-recursion {} ==> 允许递归的主机
allow-update {} ==> 允许更新区域数据库中的内容,建议设置为none
(5)演示示例
- # 这里我们定义的acl,可以在主配置文件/etc/named.conf中的option中使用,可以在`/etc/named.rfc1912.zones`中使用
- # 定义自己的acl
- acl mynet {
- 172.16.1.100;
- 172.16.0.0/16;
- }
- # 在/etc/named.conf中的option中使用
- [root@localhost ~]# vim /etc/named.conf
- acl mynet {
- 172.16.1.100;
- 172.16.0.0/16;
- }
- options {
- // listen-on port 53 { 172.16.242.178; 127.0.0.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 { mynet; };
- recursion yes;
- dnssec-enable no;
- dnssec-validation no;
- };
- ...
- # 在`/etc/named.rfc1912.zones`中使用
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.zone";
- allow-query { mynet; };
- };
- ...
5.2 BIND view
用途:主要适用于对于用户的分类,提高网站访问效率。
如按照内、外网指定不同访问方式来访问网站
如按照运营商类型制定不同用户访问指定的服务器来访问网站
其实 BIND view就是实现分布式缓存,类似于CDN的一直方式
解析过程
当一个用户请求接收之后,首先判断用户的来源,然后自上而下逐个与各个view自己的用户节系列表进行匹配,最终来确定view系统解析功能,返回指定的区域解析库文件
一般用view1匹配第一个网络, 用view2匹配第二个网络, 用view3匹配其余网络,保证不会有缺漏
(1)视图
一个bind服务器可定义多个view,每个view中可定义一个或多个zone区域
每个view用一来匹配一组请求的客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
(2)格式
view是自上而下,逐一匹配
大多数用在option中的指令,都可以用在view中
- view VIEW_NAME {
- match-clients { };
- }
(3)注意
(1)一旦启用了view,所有的zone都只能定义在view中,一个都不允许例外
(2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域
(3)客户端请求到达时是自上而下检查每个view所服务的客户端列表
(4)实验演示
将来自172.16网络并访问www.wsescape.com的用户,使用172.16.100.11这个DNS服务器来指定www服务器的地址
将非来自172.16网络并访问www.wsescape.com的用户,使用公网2.2.2.1这个DNS服务器来指定www服务器的地址
- # 在172.16.100.11的主机中
- # 定义acl并将/etc/named.conf中定义的根zone删除
- [root@localhost ~]# vim /etc/named.conf
-
- # 删除如下根zone
- zone "." IN {
- type hint;
- file "named.ca";
- };
-
- # 添加acl
- acl mynet {
- 172.16.0.0/16;
- 127.0.0.0/8;
- };
- # 在172.16.100.11的主机中
- # 将根移到/etc/named.rfc1912.zones中,并将所有的zone包含在view中
- # 并添加内部访问配置internal
- [root@localhost ~]# vim /etc/named.rfc1912.zones
-
- # 添加view,限制mynet用户可以访问并允许递归
- view internal {
- match-chlients { mynet; };
- allow-recursion { mynet; };
-
- # 添加根
- zone "." IN {
- type hint;
- file "named.ca";
- };
-
- # 由于之前的设置,这里是有wsescape.com,并配置了wsescape.com.zone文件
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.zone";
- }
- ...
- };
- # 在172.16.100.11的主机中
- # 如果我们在/etc/named.conf中增加192.168.0.0/24网络,就可以在192.168.0.13中可以解析,这里没有添加进去
- [root@localhost ~]# named-checkconf
- [root@localhost ~]# service named restart
-
- # 在172.16.100.11主机上,成功
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
-
- # 如果配置了,在192.168.0.13主机上,成功
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
- # 在172.16.100.11的主机中
- # 在/etc/named.rfc1912.zones中,添加外部访问配置
- # 这里对没有匹配到的主机,不进行递归,所以在external就没有添加根域
-
- [root@localhost ~]# vim /etc/named.rfc1912.zones
- view external {
- match-clents { any; };
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.external";
- allow-update { none; };
- };
- };
- [root@localhost ~]# cd /var/named/
-
- # 归档复制
- [root@localhost named]# cp -a wsescape.com.zone wsescape.com.external
-
- # 这里的2.2.2.1表示的是wsescape.com网站的公网DNS服务器
- [root@localhost named]# vim wsescape.com.external
- $TTL 1D
- $ORIGIN wsescape.com.
- @ IN SOA ns1.wsescape.com. admin.wsescape.com (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS ns1
- IN NS ns2
- ns1 IN A 172.16.100.11
- ns2 IN A 172.16.100.18
- www IN A 2.2.2.1
- * IN A 2.2.2.1
- [root@localhost ~]# service named restart
- # 在172.16.100.11主机上,成功来自172.16.100.11
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
-
- # 在192.168.0.13主机上,成功来自2.2.2.1
- [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.1
- # 最小化安装机器
- [root@localhost ~]# yum groupinstall "Development Tools" "Server Platform Development"
- # 去官网isc.org下载安装包,bind-9.10.1-P1.tar.gz
- # bind9和bind10的区别很大,而且bind10还在测试阶段
- # 创建named用户和组
- # 安装在同一目录下/usr/local/bind9,系统文件放在/etc/named/
- # 禁用IPv6功能,禁用chroot功能,启动线程多核工作
-
- # 自己手动编译安装bind可能会出现的问题
- # (1)在/etc/named/没有配置文件或者为空,需要自己创建
- # (2)没有任何区域解析库文件,即/var/named,所以也没有13个根节点,需要自己创建
- # (3)没有rndc的配置文件,需要自己创建
- # (4)没有启动脚本,没有/etc/init.d/named文件
- # 这里由于自定义安装到了/usr/local/bind9中,所以像dig、host等工具不能直接调用,需要完整路径
- [root@localhost ~]# tar xf bind-9.10.1-P1.tar.gz
- [root@localhost ~]# cd bind-9.10.1-P1
- [root@localhost ~]# groupadd -r -g 53 named
- [root@localhost ~]# useradd -r -u 53 -g 53 named
- [root@localhost ~]# ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
- [root@localhost ~]# make
- [root@localhost ~]# make install
- # 添加环境变量,就可以调用相关命令
- [root@localhost ~]# vim /etc/profile.d/named.sh
- export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
- [root@localhost ~]# . /etc/profile.d/named.sh
-
- # 导出库文件
- [root@localhost ~]# vim /etc/ld.so.conf.d/named.conf
- /usr/loacl/bind9/lib
-
- # 重新载入库文件
- [root@localhost ~]# ldconfig -v
-
- # 如果有头文件,导出头文件
- [root@localhost ~]# ln -sv /usr/local/bind9/include /usr/include/named
-
- # 之后就可以使用/usr/include/named来访问/usr/local/bind9/中的头文件了
- [root@localhost ~]# ls /usr/include/named
-
- # 在/usr/local/bind9/下有share的帮助文件,添加MANPATH将其放入man中
- [root@localhost ~]# vim /etc/man.conf
- MANPATH /usr/local/bind9/share/man
- # 添加主配置文件,这里只添加directory就可以了
- [root@localhost ~]# vim /etc/named/named.conf
- option {
- directory "/var/named"
- };
-
- zone "." IN {
- type hint;
- file "named.ca";
- };
-
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- allow-update { none; };
- };
-
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- allow-update { none; };
- };
-
- [root@localhost ~]# mkdir /var/named/{named.ca, localhost.zone, named.local}
- # 使用dig命令来生成13个根节点,172.16.0.1为网关地址,可以帮助我们连接外网的地址,获取13个根节点
- [root@localhost ~]# dig -t NS . @172.16.0.1 > /var/named/named.ca
- [root@localhost ~]# vim /var/named/localhost.zone
- $TTL 1D
- @ IN SOA localhost. admin.localhost. (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS localhost.
- localhost. IN A 172.0.0.1
-
- [root@localhost ~]# vim /var/named/named.local
- $TTL 1D
- @ IN SOA localhost. admin.localhost. (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS localhost.
- 1 IN PRT localhost.
-
- [root@localhost ~]# cd /var/named/
- [root@localhost named]# chmod 640 ./*
- [root@localhost named]# chown :named *
- [root@localhost named]# chmod 640 /etc/named/named.conf
- # 查看帮助文档
- [root@localhost ~]# man named
-
- # 启动named服务,调试
- [root@localhost ~]# named -u named -f -g -d 3
-
- # 启动named服务,不调试
- [root@localhost ~]# named -u named
-
- # 查看是否启动
- [root@localhost ~]# ss -tunl named | grep :53
-
- # 关闭named服务
- [root@localhost ~]# killall named
- # 添加解析区域
- [root@localhost ~]# vim /etc/named/named.conf
- zone "wsescape.com" IN {
- type master;
- file "wsescape.com.zone";
- allow-update { none; };
- };
-
- [root@localhost ~]# vim /var/named/wsescape.com.zone
- $TTL 1D
- $ORIGIN wsescape.com.
- @ IN SOA ns.wsescape.com. admin.wsescape.com. (
- 2016042201
- 1H
- 5M
- 7D
- 1D )
- IN NS ns
- ns IN A 172.16.100.11
- www IN A 172.16.100.11
-
- [root@localhost named]# chmod 640 wsescape.com.zone
- [root@localhost named]# chown :named wsescape.com.zone
-
- # 启动
- [root@localhost named]# named -u named
-
- # 解析正常
- [root@localhost named]# dig -t A www.wsescape.com @172.16.100.11
- # 当我们使用rndc reload等的时候,会提示我们没有配置文件
- # 想让rndc可用,使用rndc-confgen来生成配置文件
- # 如果使用rndc-confgen发生堵塞,可以使用rndc-confgen -r /dev/urandom来生成随机数
- # 用rndc-confgen生成的文件,将#Start和#End之间的配置文件放到/etc/named/rndc.conf中,之后根据提示将后续的内容放到/etc/named/named.conf中
- [root@localhost ~]# rndc-confgen
- # Start of rndc.conf
- key "rndc-key" {
- algorithm hmac-md5;
- secret "ZeE7NXZTprjARrGN/KRANQ==";
- };
-
- options {
- default-key "rndc-key";
- default-server 127.0.0.1;
- default-port 953;
- };
- # End of rndc.conf
-
- # Use with the following in named.conf, adjusting the allow list as needed:
- # key "rndc-key" {
- #algorithm hmac-md5;
- #secret "ZeE7NXZTprjARrGN/KRANQ==";
- # };
- #
- # controls {
- #inet 127.0.0.1 port 953
- #allow { 127.0.0.1; } keys { "rndc-key"; };
- # };
- # End of named.conf
-
- # 现在rndc reload可以使用了
- [root@localhost ~]# rndc reload
- # 之后就只需要给提供一个脚本来像service一样,启动和关闭服务,不难的
- # 编译安装,在bind-9.10.1-P1源码目录下,有一个contrib目录
- # 其中包含的是第三方贡献的补充增强bind的功能
- # 其中有一个目录为scripts包含一些脚本,我们可以参考
-
- # 还有一个目录为queryperf来评估查询性能的,做压测的,需要编译安装才能使用
- # 编译安装queryperf,只需要在其目录下执行./configure和make即可完成
- # 就会生成一个queryperf的可执行文件,执行下列操作就可以直接使用了
- [root@localhost queryperf]# cp queryperf /usr/local/bind9/bin/
-
- # 在测试的时候,需要指定一个测试的文件,如test
- [root@localhost ~]# vim test
- www.wsescape.com A
- wsescape.com NS
-
- [root@localhost ~]# queryperf -d test -s 172.16.100.11
作者:Escape
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。