关键词: 正向解析 反向解析 主从复制 自域受权 视图
1、DNS基本原理web
1.1 什么是DNS?BIND又是什么?
DNS:Domain Name Service,它是一个基于应用层的协议,是C/S构架的,监听在 53/udp和 53/tcp。
BIND: Berkerley Internet Name Domain, 它是DNS域名解析的一种实现方式。数据库
1.2 DNS发展
早期的域名解析方式:
可是随着互联网的普及,全世界的电脑太多了,要解析就很不容易,因此如今的互联网是分层树状结构的去解析,结构图以下
vim
2、DNS基本概念centos
2.1 DNS服务器的类型有哪些? 有主DNS服务器、辅助DNS服务器、缓存DNS服务器、转发器 2.2 解析类型有哪些? 有正向区域解析和反向区域解析,正向解析为name --> IP, 反向解析为IP--> Name 2.3 主DNS服务器和从DNS服务器有什么区别? 主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理员维护 从DNS服务器:从主DNS服务器或其余的从DNS服务器那里复制(区域传递)一份解析库 2.4 区域传送有哪些? 全量传送:传送整个解析库 增量传送:传送解析库变化的那部份内容 2.5 DNS查询类型有哪些? 递归查询: 一次请求就获得正确答案 迭代查询: 一次请求获得一个答案,而后根据答案再去发送请求,通过屡次请求后获得正确答案的过程 2.5 一次完整的查询请求通过的流程 client --> hosts文件 --> dns service (local cache --> dns server)(recursion递归) --> server cache --> iteration(迭代) 2.6 bind是什么? bind是dns协议的一种实现 2.7 bind如何进行解析? bind解析是经过区域解析库来实现 2.8 区域解析库是什么? 区域解析库表现形式是由众多RR(Resource Record )组成,RR在配置文件中进行定义 2.9 资源记录 2.9.1 资源记录类型有哪些? 记录类型有: A、AAAA、PTR、SOA、NS、CNAME、MX 2.9.2 资源记录各种型含义? SOA: Start Of Authority, 起始受权记录:一个区域解析库有且仅能有一个SOA记录,并且必须为解析库的第一条记录。 A: internet Address, 做用就是提供正向解析: FQDN --> IP AAAA: ipv6地址正向解析: FQDN --> IPv6 PTR: PoinTeR, 反向解析:Ip --> FQDN NS: Name Server, 标明当前区域的DNS服务器 CNAME: Canonical Name, 别名记录 MX:Mail eXchanger, 邮件服务器 2.9.3 资源记录定义的格式及定义示例 语法: name [TTL] IN rr_type value 注意: a. TLL可从全局继承 b. @可用于引用当前区域的名字 SOA: name: 当前区域的名字,如“baidu.com.” value: 有多部分组成 1. 当前区域的主DNS服务器的FQDN,也可使用当前区域的名字 2. 当前区域管理员的游戏地址,地址中不能使用@符号,通常用.替换,如 alen.chengkaihua.com 3. (主从服务协调属性的定义以及否认的答案的统一TTL值) 例如: alen.com. IN SOA ns1.alen.com. nsadmin.alen.com. ( 2015042201 ; 序列号 2H ;刷新时间 10M ;重试时间 1W ; 过时时间 1D ;否认答案的TTL值 ) NS: name: 当前区域的名字 value: 当前区域的某DNS服务器的名字 注意: 一个区域能够有多个NS记录 例如: alen.com. IN NS ns1.alen.com. alen.com. IN NS ns2.alen.com. 注意:1.相邻的两个资源记录的name相同时,后续的可省略 2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录 MX: name: 当前区域的名字 value: 当前区域的某邮件服务器的主机名 一个区域内,MX记录可有多个;但每一个记录的value以前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高。 例如: alen.com. IN MX 10 mx1.alen.com. alen.com. IN MX 20 mx2.alen.com 注意: 对MX记录而言,每个MX记录后面的服务器名字,都应该在后续有一个A记录 A: name: 某主机的FQDN value: 主机名对应主机的IP地址 例如: ns1.alen.com. IN A 1.1.1.1 ns2.alen.com. IN A 1.1.1.2 MX1.alen.com. IN A 1.1.1.3 MX2.alen.com. IN A 1.1.1.4 注意: *.alen.com. IN A 1.1.1.5 避免用户写错答案时给错误答案,可经过泛域名解析进行解析至某特定地址 AAAA: name: FQDN value: IPv6 PTR: name: IP,有特定格式,IP地址反过来写,1.1.1.2要写成2.1.1.1.in-addr.arpa. value: FQDN 例如: 4.3.2.1.in-addr.arpa. IN PTR www.alen.com. CNAME: name: 别名的FQDN value: 正式名字的FQDN 例如: web.alen.com. IN CNAME www.alen.com.
3、前期准备缓存
3.1 实验目标
以域名alen.com.为例,配置一台主DNS服务器一台从服务器:
192.168.1.102 主DNS服务器
192.168.1.103 从DNS服务器
实现正反向解析、主从同步功能安全
3.2 安装包及配置文件 查看bind服务相关包,安装所须要的包便可: # yum list bind* 安装bind服务及其依赖包,主要安装这三个包: bind、bind-libs、bind-utils # yum install bind bind-libs bind-utils bind相关配置文件: 服务脚本:/etc/rc.d/init.d/named 主配置文件: /etc/named.conf, /etc/named.rfc1912.zones 解析库文件:/var/named/ZONE_NAME.ZONE(须要本身定义) 日志文件: /var/log/messages
4、首先搭建一台主DNS服务器服务器
4.1 主DNS实现正向解析和反向解析 4.1.1 配置缓存名称服务器 4.1.1.1 监听外部地址便可 4.1.1.2 dnssec: 建议测试时关闭dnssec cp /etc/named.conf{,.bak} vim /etc/named.conf options { // listen-on port 53 { 192.168.1.102; 127.0.0.1; }; //能够设置ip也能够直接注释整行 // 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; }; //能够设置为any也能够直接注释掉 recursion yes; //关闭dnssec // dnssec-enable yes; // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; 4.1.2 在缓存dns服务器的基础上,配置主DNS服务器 cp /etc/named.rfc1912.zones{,.bak} vim /etc/named.rfc1912.zones 4.1.2.1 在最后一行添加正向解析区域和反向解析区域: zone "alen.com" IN { type master; // 正向区域类型 file "alen.com.zone"; //相对于/var/named而言,输入区域相对路径 }; zone "1.168.192.in-addr.arpa" IN { //反向解析区域 type master; file "192.168.1.zone"; }; 定义区域正向解析库文件 在/var/named建立 alen.com.zone正向解析库文件并配置 $TTL 86400 $ORIGIN alen.com. @ IN SOA ns1.alen.com. admin.alen.com. ( 2010010101 ;序列号 1H ;刷新时间 5M ;重试时间 7D ;七天过时 1D ) ;否认答案的统一TTL值 IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.1.102 ns2 IN A 192.168.1.103 mx1 IN A 192.168.1.104 mx2 IN A 192.168.1.105 www IN A 192.168.1.102 www IN A 192.168.1.103 ftp IN CNAME www alen.com. IN A 192.168.1.102 * IN A 192.168.1.102 ;泛域名解析 定义区域反向解析库文件 在/var/named目录下建立 192.168.1.zone反向解析库文件并配置 $TTL 1D $ORIGIN 1.168.192.in-addr.arpa. @ IN SOA ns1.alen.com. admin.alen.com. ( 2015041101 ;序列号 2H ;刷新时间 5M ;重试时间 1W ;过时时间一周 1D ) ;否认答案的统一TTL值 IN NS ns1.alen.com. IN NS ns2.alen.com. 102 IN PTR ns1.alen.com. 103 IN PTR ns2.alen.com. 102 IN PTR www.alen.com. 103 IN PTR www.alen.com. 104 IN PTR mx1.alen.com. 105 IN PTR mx2.alen.com.
5、测试网络
5.1 测试工具介绍 5.1.1 dig的使用 dig [-t type] name [@SERVER] [query options] 用于测试DNS系统,不会查询hosts文件进行解析 好比: dig -t A ns1.alen.com @192.168.1.102 查询选项: +[no]trace: 跟踪解析过程 +[no]recurse: 递归解析 测试反向解析: dig -x IP @SERVER 好比: dig -x 192.168.1.102 @ 192.168.1.102 模拟区域传送: dig -t axfr ZONE_NAME @SERVER 5.1.2 host命令 host [-t type] name [SERVER] 好比: host -t A ns1.alen.com 192.168.1.102 5.1.3 nslookup命令 nsloopup [-option] [name | - ] [server] 交互式模式: server IP: 指明使用哪一个DNS server 进行查询 set q=RR_TYPE: 指明查询的资源记录类型 NAME: 要查询的名称 好比: nsloopup > server 192.168.1.102 > set q=A > ns1.alen.come 5.2 测试 修改 alen.com.zone和192.168.1.zone文件属组 # chown :named alen.com.zone # chown :named 1.168.192.zone 修改 alen.com.zone和192.168.1.zone权限 # chmod 640 alen.com.zone # chmod 640 192.168.1.zone 检查区域配置文件有无错误: # named-checkconf //检查主配置文件 # named-checkzone "alen.com" alen.com.zone # named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone 重启named服务 # service named restart 测试资源记录 # dig -t NS alen.com @192.168.1.102 # dig -t A ns1.alen.com @192.168.1.102 # dig -t A www.alen.com @192.168.1.102 # dig -t A pop.alen.com @192.168.1.102 # dig -t A alen.com @192.168.1.102 # host -t A ns2.alen.com 192.168.1.102 测试反向解析: # dig -x 192.168.1.102 @192.168.1.102 至此,一台主DNS服务器就配置好了,且支持正反向解析功能。
6、主从复制架构
上面咱们配置了一台主DNS服务器,下面把192.168.1.103这台电脑做为辅助DNS服务器,来实现两台电脑的主从架构 从服务器上进行配置: 1. 先模拟传送测试是否能够正常传送 # dig -t axfr alen.com @192.168.1.102 2.若是能够正常传送,再进行配置从服务器 # yum install bind //centos6默认安装了libs和utils包,因此只须要安装bind包就能够 3. 从服务只须要配置区域,不须要配置资源记录 vim /etc/named.conf 配置缓存服务器,和上面同样 options { listen-on port 53 { 192.168.1.103; 127.0.0.1; }; //监听对外ip // 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; }; recursion yes; // dnssec-enable yes; // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; vim /etc/named.rfc1912.zones zone "alen.com" IN { type slave; masters { 192.168.1.102; }; file "slaves/alen.com.zone"; }; zone "1.168.192.in-addr.arpa" IN { type slave; masters { 192.168.1.102; }; file "slaves/192.168.1.zone"; }; 配置完后检查语法错误 # named-checkconf 重载服务 # rndc reload 查看日志 # tail /var/log/messages 传送成功后在/var/named目录下会自动建立一个192.168.1.zone文件和alen.com.zone文件 rndc工具总结 rndc COMMAND reload: 重载主配置文件和区域解析库文件 reload zone: 重载区域解析库文件 retransfer zone: 手动启动区域传送过程,而无论序列号是否增长 notify zone:从新对区域传送发通知 reconfig:重载主配置文件 querylog:开启或关闭查询日志,注意只在定位错误的时候开启 trace:递增debug使用的级别,生产环境中切莫开启,很影响性能 trace LEVEL:指定使用的级别
7、子域受权tcp
1.1 自域受权架构
1.2 为什么要转发? 从上面的架构图中能够看到:客户端 --> ns1 客户端请求解析的主机在alen域内的ns1主机, 客户端给父域ops发送请求,可是ops是找不到alen域内的ns1的,它只会从根域进行迭代去找,因此这种状况就要考虑转发。从而让客户端能够直接向alen域发送请求找到ns1主机。 1.3 如何定义转发服务器: 7.3.1 所有转发: 凡是对非本机全部负责解析的区域的请求,都转发给指定服务器 options { forward { first|only } forwarders } 1.3.2 区域转发:仅抓发对特定区域的请求至某服务器 zone "ZONE_NAME" IN { type forward; forward { first|only }; forwarders } 要点: first: 先转发,没有获得响应结果就本身去寻找根域 only: 转发后没有响应结果就放弃继续寻找根域 1.4 定义子域并实现转发功能实例 1.4.1 定义子域 在父域(192.168.1.102)中: vim /var/named/alen.com.zone ops IN NS ns1.ops ns1.ops IN A 192.168.1.103 在子域(192.168.1.103)中: 添加子域: vim /etc/named.rfc1912.zones zone "ops.alen.com" IN { type master; file "ops.alen.com.zone"; }; 添加子域的资源记录 vim /var/named/ops.alen.com.zone $TTL 1d $ORIGIN ops.alen.com. @ IN SOA ns1.ops.alen.com. admin.ops.alen.com. ( 2015041001 1H 10M 3D 1D ) IN NS ns1 ns1 IN A 192.168.1.103 www IN A 192.168.1.103 * IN A 192.168.1.103 1.4.2 实现转发 1. 所有转发 在 父域192.168.1.102上实现 vim /etc/named.conf 在options中添加两行: forward first; forwarders { 192.168.1.1; }; 测试: # dig -t A www.baidu.com @192.168.1.102 注意: 关掉dnssec验证机制 dnssec-enable no; dnssec-validation no /*include "/etc/named.root.key"; 此配置保存根域名服务器的私钥文件,根域名解析服务器为了防止DNS劫持,采用一种DNSSEC安全扩展技术,采用证书认证机制保证数据安全。 若是注释此配置则DNS服务器与根域名服务器之间传递解析不须要通过认证。 若是开启此配置若是根的私钥不匹配则没法正常解析,因此有时候咱们配置缓存转发服务器的时候能够选择注释此项。 2 区域转发 在子域 192.168.1.103上实现 vim /etc/named.rfc1912.zones 在最后一行添加: zone "alen.com" IN { type forward; forward only; forwarders { 192.168.1.102; }; //子域指向父域 }; 关掉dnssec验证机制 dnssec-enable no; dnssec-validation no 1.5 bind中安全相关的配置 acl: 把一个或多个ip地址归并为一个集合,并经过一个统一的名称进行调用 示例: acl mynet { 192.168.1.102; 192.168.1.103; 192.168.1.0/24; } 1.5.1 bind中四个内置的acl none: 没有一个主机 any: 任意主机 local: 本机 localnet: 本机的IP同掩码运算后获得的网络地址 1.5.2 访问控制的命令 allow-query {} : 容许查询的主机,白名单,注意:定义在zone中只控制一个zone,定义在options中控制全部的zone allow-transfer {}: 容许区域传送的主机: 白名单 allow-recursion {}: 容许递归的主机 allow-update {}: 容许更新区域数据库的内容 1.5.3 实例: 1.5.3.1 192.168.1.102: vim /etc/named.conf 添加acl acl slaves { //定义访问控制列表slaves 192.168.1.103; 192.168.1.102; 1127.0.0.1; } 在/etc/named.rfc1912.zones中: zone "alen.com" IN { type master; file "alen.com.zone"; allow-query { 127.0.0.1; }; //只容许本机查询 }; # dig -t A www.alen.com @127.0.0.1 // 其余任何ip都不能进行查询 1.5.3.2 添加: allow-transfer { slaves; }; # dig -t axfr alen.com @192.168.1.103 //只容许本机及子域传送 1.5.3 全局配置中: vim /etc/named.conf 注释 recursion {}; 添加咱们本身定义的容许递归的主机 allow-recursion { 192.168.1.102; 127.0.0.1; }; //只容许本机进行递归 1.5.3.4 为了安全,通常allow-update都设为none vim /etc/named.rfc1912.zones zone "alen.com" IN { type master; file "alen.com.zone"; // allow-query { 127.0.0.1; }; //只容许本机查询 allow-update { none; }; // 不容许任何主机更新 };
2、视图
2.1 view是什么? view是bind配置逻辑上的一个容器 2.2 为何要使用视图? 不一样网络(好比联通和电信),或者不一样区域(客户的来源距离),为了更好的客户体验,因此根据不一样客户来源进行不一样的zone配置,进而获得不一样的请求结果。简单点说,为了实现不一样客户请求获得不一样的结果,因此用到view这个功能。 2.3 view的特色 一个bind服务器可定义多个view,每一个view中可定义一个或多个zone; 每一个view用来匹配一组客户端 多个view内可能须要对同一个区域进行解析,但使用不一样的区域解析库文件 2.4 view的示例 view VIEW_NAME { match-clients { }; //匹配不一样的客户来源 zone; } 注意: 1. 一旦启用了view,全部的zone都只能定义在view中 2. 仅有必要在匹配到容许递归请求的客户所在view中定义根区域 3.客户端请求到达时,是自上而下检查每一个view所服务的客户端列表 2.5 如何实现view的不一样客户来源 使用acl来实现: 好比:acl inet { 192.168.0.0/24; 127.0.0.1/8; };
至此,DNS基本知识点介绍这些。DNS的经常使用架构不仅仅是一个主一个从,还有其余架构方式,应该在实际应用中视状况选择。