[关闭]
@mrz1 2018-01-22T13:08:14.000000Z 字数 10203 阅读 1016

2017-1-17(DNS)

笔记


DNS服务

DNS域名

DNS域名结构

DNS域名结构

DNS解析

DNS服务器类型

区域传输

DNS解析

一次完整的查询请求经过的流程:Client -->hosts文件-->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS...

解析答案:
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:
非权威答案:

资源记录

  1. 区域解析库:由众多RR组成:
  2. 资源记录:Resource Record, RR
  3. 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
  4. SOAStart Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
  5. Ainternet Address,作用,FQDN --> IP
  6. AAAA: FQDN --> IPv6
  7. PTR: PoinTeRIP --> FQDN
  8. NS: Name Server,专用于标明当前区域的DNS服务器
  9. CNAMECanonical Name,别名记录
  10. MX:Mail eXchanger,邮件交换器
  11. 资源记录定义的格式:
  12. 语法:name[TTL]IN rr_type value
  13. 注意:
  14. (1) TTL可从全局继承
  15. (2) @可用于引用当前区域的名字
  16. (3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
  17. (4) 同一个值也可能有多个不同的定义名字;通过多个不同的名c字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

SOA记录

  1. name: 当前区域的名字,例如“magedu.com.”
  2. value: 有多部分组成
  3. (1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
  4. (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com
  5. (3) 主从服务区域传输相关定义以及否定的答案的统一的TTL
  6. 例如:
  7. magedu.com. 86400 IN SOA ns.magedu.com.
  8. nsadmin.magedu.com. (
  9. 2015042201 ;序列号
  10. 2H ;刷新时间
  11. 10M ;重试时间
  12. 1W ;过期时间
  13. 1D ;否定答案的TTL
  14. )

NS记录

  1. name: 当前区域的名字
  2. value: 当前区域的某DNS服务器的名字,例如
  3. ns.magedu.com.
  4. 注意:一个区域可以有多个NS记录
  5. 例如:
  6. magedu.com. IN NS ns1.magedu.com.
  7. magedu.com. IN NS ns2.magedu.com.
  8. 注意:
  9. (1) 相邻的两个资源记录的name相同时,后续的可省略
  10. (2) NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

MX记录

  1. name: 当前区域的名字
  2. value: 当前区域的某邮件服务器(smtp服务器)的主机名
  3. 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
  4. 例如:
  5. magedu.com. IN MX 10 mx1.magedu.com.
  6. IN MX 20 mx2.magedu.com.
  7. 注意:
  8. (1) MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

A记录

  1. name: 某主机的FQDN,例如www.magedu.com.
  2. value: 主机名对应主机的IP地址
  3. 例如:
  4. www.magedu.com. IN A 1.1.1.1
  5. www.magedu.com. IN A 2.2.2.2
  6. mx1.magedu.com. IN A 3.3.3.3
  7. mx2.magedu.com. IN A 4.4.4.4
  8. $GENERATE 1-254 HOST$ A 1.2.3.$*.
  9. magedu.com. IN A 5.5.5.5
  10. magedu.com. IN A 6.6.6.6
  11. 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

其它记录

  1. AAAA:
  2. name: FQDN
  3. value: IPv6
  4. PTR:
  5. name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.value: FQDN
  6. 例如:
  7. 4.3.2.1. in-addr.arpa. IN PTR www.magedu.com.
  8. 1.2.3为网络地址,可简写成:
  9. 4 IN PTR www.magedu.com.
  10. 注意:网络地址及后缀可省略;主机地址依然需要反着写

别名记录

  1. CNAME
  2. name: 别名的FQDN
  3. value: 真正名字的FQDN
  4. 例如:
  5. www.magedu.com. IN CNAME websrv.magedu.com.

子域

  1. .com. IN NS ns1.com.
  2. .com. IN NS ns2.com.ns1
  3. .com. IN A 2.2.2.1ns2
  4. .com. IN A 2.2.2.2
  1. magedu.com. IN NS ns1.magedu.com.
  2. magedu.com. IN NS ns2.magedu.com.
  3. magedu.com. IN NS ns3.magedu.com.
  4. ns1.magedu.com. IN A 3.3.3.1
  5. ns2.magedu.com. IN A 3.3.3.2
  6. ns3.magedu.com. IN A 3.3.3.3

互联网域名

域名注册:代理商:万网, 新网, godaddy
注册完成以后,想自己用专用服务来解析
管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址

BIND安装

  1. BIND的安装配置:
  2. dns服务程序包:bindunbound
  3. 程序名:namedunbound
  4. 程序包:yum list all bind*
  5. bind:服务器
  6. bind-libs:相关库
  7. bind-utils:客户端
  8. bind-chroot: /var/named/chroot/

bind服务器

  1. 服务脚本和名称:
  2. /etc/rc.d/init.d/named (centos6)
  3. /usr/lib/systemd/system/named.service (centos7)
  4. 主配置文件:
  5. /etc/named.conf
  6. /etc/named.rfc1912.zones
  7. /etc/rndc.key
  8. 解析库文件:
  9. /var/named/ZONE_NAME.ZONE
  10. 注意:
  11. (1) 一台物理服务器可同时为多个区域提供解析
  12. (2) 必须要有根区域文件;/var/named/named.ca
  13. (3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
  14. rndc: remote name domain controller
  15. 默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
  16. 提供辅助性的管理功能;953/tcp

bind配置文件

  1. 主配置文件:
  2. 全局配置:options {};
  3. 日志子系统配置:logging {};
  4. 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
  5. zone "ZONE_NAME" IN {};
  6. 注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
  7. 缓存名称服务器的配置:
  8. 监听外部地址即可
  9. dnssec: 建议关闭dnssec,设为no

配置主DNS服务器

  1. DNS名称服务器:
  2. (1) 在主配置文件中定义区域
  3. zone "ZONE_NAME" IN {
  4. type {master|slave|hint|forward};
  5. file "ZONE_NAME.zone";
  6. };
  7. (2) 定义区域解析库文件
  8. 出现的内容
  9. 宏定义
  10. 资源记录
  11. 主配置文件语法检查:
  12. named -checkconf
  13. 解析库文件语法检查:
  14. named -checkzone "magedu.com" /var/named/magedu.com.zone
  15. rndc status|reload;service named reload
主区域示例
  1. $TTL 86400
  2. $ORIGIN magedu.com.
  3. @ IN SOA ns1.magedu.com. admin.magedu.com (
  4. 2015042201
  5. 1H
  6. 5M
  7. 7D
  8. 1D )
  9. IN NS ns1
  10. IN NS ns2
  11. IN MX 10 mx1
  12. IN MX 20 mx2
  13. ns1 IN A 172.16.100.11
  14. ns2 IN A 172.16.100.12
  15. mx1 IN A 172.16.100.13
  16. mx2 IN A 172.16.100.14
  17. websrv IN A 172.16.100.11
  18. websrv IN A 172.16.100.12
  19. www IN CNAME websrv

测试命令dig

  1. dig [-t type] name [@SERVER] [query options]
  2. dig只用于测试dns系统,不会查询hosts文件进行解析
  3. 查询选项:
  4. +[no]trace:跟踪解析过程: dig +trace magedu.com
  5. +[no]recurse:进行递归解析
  6. 测试反向解析:
  7. dig -x IP = dig t ptrreverseip.in-addr.arpa
  8. 模拟区域传送:
  9. dig -t axfr ZONE_NAME @SERVER
  10. dig -t axfr magedu.com @10.10.10.11
  11. dig t axfr 100.1.10.in-addr.arpa @172.16.1.1
  12. dig -t NS . @114.114.114.114
  13. dig -t NS . @a.root-servers.net

测试命令

  1. host [-t type] name [SERVER]
  2. host t NS magedu.com 172.16.0.1
  3. host t soa magedu.com
  4. host t mx magedu.com
  5. host t axfr magedu.com
  6. host 1.2.3.4
  7. nslookup命令:nslookup[-option] [name | -] [server]
  8. 交互式模式:
  9. nslookup>
  10. server IP: 指明使用哪个DNS server进行查询
  11. set q=RR_TYPE: 指明查询的资源记录类型
  12. NAME: 要查询的名称

反向区域

  1. 反向区域:
  2. 区域名称:网络地址反写.in-addr.arpa.
  3. 172.16.100. --> 100.16.172.in-addr.arpa.
  4. (1) 定义区域
  5. zone "ZONE_NAME" IN {
  6. type {master|slave|forward};
  7. file "网络地址.zone"
  8. };
  9. (2) 定义区域解析库文件
  10. 注意:不需要MX,以PTR记录为主

反向区域示例:

  1. $TTL 86400
  2. $ORIGIN 100.16.172.in-addr.arpa.
  3. @ IN SOA ns1.magedu.com. admin.magedu.com. (
  4. 2015042201
  5. 1H
  6. 5M
  7. 7D
  8. 1D )
  9. IN NS ns1.magedu.com.
  10. IN NS ns2.magedu.com.
  11. 11 IN PTR ns1.magedu.com.
  12. 11 IN PTR www.magedu.com.
  13. 12 IN PTR mx1.magedu.com.
  14. 12 IN PTR www.magedu.com.
  15. 13 IN PTR mx2.magedu.com.

允许动态更新

  1. 指定的zone语句块中:Allow-update {any;};
  2. chmod 770 /var/named
  3. setsebool -P named_write_master_zones on
  4. nsupdate
  5. >server 127.0.0.1
  6. >zone magedu.com
  7. >update add ftp.magedu.com 88888 IN A 8.8.8.8
  8. >send
  9. >update delete www.magedu.com A
  10. >send
  11. 测试:dig ftp.magedu.com @127.0.0.1
  12. ll /var/named/magedu.com.zone.jnl
  13. cat /var/named/magedu.com.zone

从服务器

1、应该为一台独立的名称服务器
2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
4、主服务器得允许从服务器作区域传送
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低

  1. 定义从区域的方法:
  2. zone "ZONE_NAME" IN {
  3. type slave;
  4. masters { MASTER_IP; };
  5. file "slaves/ZONE_NAME.zone";
  6. };

rndc命令

  1. rndc
  2. rndc--> rndc(953/tcp)
  3. rndc COMMAND
  4. COMMAND:
  5. reload: 重载主配置文件和区域解析库文件
  6. reload zonename: 重载区域解析库文件
  7. retransfer zonename: 手动启动区域传送,而不管序列号是否增加
  8. notify zonename: 重新对区域传送发通知
  9. reconfig: 重载主配置文件
  10. querylog: 开启或关闭查询日志文件/var/log/messagetrace: 递增debug一个级别trace LEVEL: 指定使用的级别notrace:将调试级别设置为0flush:清空DNS服务器的所有缓存记录

子域

  1. 子域授权:分布式数据库
  2. 正向解析区域子域方法
  3. 定义一个子区域:
  4. ops.magedu.com. IN NS ns1.ops.magedu.com.
  5. ops.magedu.com. IN NS ns2.ops.magedu.com.
  6. ns1.ops.magedu.com. IN A 1.1.1.1
  7. ns2.ops.magedu.com. IN A 1.1.1.2
  8. fin.magedu.com. IN NS ns1.fin.magedu.com.
  9. fin.magedu.com. IN NS ns2.fin.magedu.com.
  10. ns1.fin.magedu.com. IN A 3.1.1.1
  11. ns2.fin.magedu.com. IN A 3.1.1.2
  12. 注意:关闭dnssec功能:
  13. dnssec-enable no;
  14. dnssec-validation no;

转发服务器

  1. 注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
  2. (1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
  3. Options {
  4. forward first|only;
  5. forwarders { ip;};
  6. };
  7. (2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高 zone "ZONE_NAME" IN {
  8. type forward;
  9. forward first|only;
  10. forwarders {ip;};
  11. };
  12. 注意:关闭dnssec功能:
  13. dnssec-enable no;
  14. dnssec-validation no;

bind中ACL

  1. bind中基础的安全相关的配置:
  2. acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
  3. 格式:
  4. aclacl_name{
  5. ip;
  6. net/prelen;......
  7. };
  8. 示例:
  9. aclmynet{
  10. 172.16.0.0/16;
  11. 10.10.10.10;
  12. };
  13. bind有四个内置的acl:
  14. none: 没有一个主机
  15. any: 任意主机
  16. localhost: 本机
  17. localnet: 本机的IP同掩码运算后得到的网络地址
  18. 注意:只能先定义,后使用;因此一般定义在配置文件中,处于options的前面

访问控制

访问控制的指令:

  1. allow-query {}:允许查询的主机;白名单
  2. allow-transfer {}:允许区域传送的主机;白名单
  3. allow-recursion {}: 允许递归的主机,建议全局使用
  4. allow-update {}: 允许更新区域数据库中的内容

智能DNS

智能DNS

bind view

  1. CDN: Content Delivery Network内容分发网络
  2. 服务商:蓝汛,网宿,帝联等
  3. 智能DNS:
  4. dnspod
  5. dns.la
  6. view:视图:实现智能DNS
  7. 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
  8. 每个view用来匹配一组客户端
  9. 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
  10. 注意:
  11. (1) 一旦启用了view,所有的zone都只能定义在view
  12. (2) 仅在允许递归请求的客户端所在view中定义根区域
  13. (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
  14. 格式:
  15. view VIEW_NAME {
  16. match-clients { testacl; };
  17. zone magedu.com {
  18. type master;
  19. file magedu.com.zone”;};
  20. include “/etc/named.rfc1912.zones”;
  21. };

编译安装bind

  1. 下载bind:
  2. isc.org:
  3. bind-9.10
  4. bind-9.11
  5. bind-10
  6. 编译安装
  7. bind tar xvf bind-9.11.0a3.tar.gz
  8. cd bind-9.11.0a3/
  9. groupadd -r -g 53 named
  10. useradd -r -u 53 -g 53 named
  11. ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --without-openssl--disable-ipv6 --disable-chroot--enable-threads
  12. make
  13. make install

编译安装bind

  1. 环境变量:
  2. vim /etc/profile.d/named.sh
  3. export PATH=/usr/local/bind9/bin:
  4. /usr/local/bind9/sbin/:$PATH
  5. 库和头文件
  6. vim /etc/ld.so.conf.d/named.conf/
  7. usr/local/bind9/lib
  8. ldconfig v
  9. ls -sv/usr/local/bind9/include /usr/include/named
  10. man帮助
  11. vim /etc/man.config | /etc/man_db.conf
  12. MANPATH /usr/local/bind9/share/man
  13. man named.conf

编译安装bind

  1. vim /etc/named/named.conf
  2. options {
  3. directory "/var/named/"
  4. };
  5. zone "." IN {
  6. type hint;
  7. file "named.ca";
  8. };
  9. zone "localhost" IN {
  10. type master;
  11. file named.localhost";
  12. allow-update {none;};
  13. };
  14. zone “1.0.0.127.in-addr.arpa" IN {
  15. type master;
  16. file "named.loopback";
  17. allow-update {none;};
  18. };
  19. 区域数据库
  20. mkdir /var/named
  21. named -checkconf
  22. dig +norec@a.root-servers.net > /var/named/named.ca
  23. vim /var/named/named.localhost
  24. $TTL 1d
  25. @ IN SOA localhost. admin.localhost. (
  26. 2016061801
  27. 1h
  28. 5m
  29. 7d
  30. 1d)
  31. IN NS localhost.
  32. localhost. IN A 127.0.0.1
  33. vim /var/named/named.loopback
  34. $TTL 1d
  35. @ IN SOA localhost. admin.localhost. (
  36. 2016061801
  37. 1h
  38. 5m
  39. 7d
  40. 1d)
  41. NS @
  42. A 127.0.0.1
  43. PTR localhost.
  44. 编译安装bind
  45. 设置权限
  46. chmod 640 /var/named/*
  47. chmod 640 /etc/named/named.conf
  48. chgrp -R named /var/named/
  49. chgrp named /etc/named/named.conf
  50. 启动服务和测试
  51. man named
  52. named -u named -f -g -d 3 前端级别3方式运行
  53. named -u named 后台运行
  54. killall named
  55. ss -tuln
  56. tail /var/log/message
  57. named -u named
  58. 支持rndc
  59. rndc reload 观察错误提示
  60. rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key
  61. tail /etc/named/rndc.conf >> /etc/named/named.conf
  62. killall -SIGHUP named
  63. rndc status

压力测试

  1. /root/bind-xxx/contrib/scripts
  2. 编译压力测试工具
  3. cd /root/bind-xxx/contrib/queryperf
  4. ./configure
  5. make
  6. cp queryperf /usr/local/bind9/bin
  7. queryperf -h
  8. vim test.txt
  9. www.magedu.com A
  10. magedu.com NS
  11. magedu.com MX
  12. pop3.magedu.com A
  13. web.magedu.com A
  14. queryperf -d test.txt -s 127.0.0.1
  15. 打开日志功能
  16. rndc querylog
  17. rndc status
  18. queryperf -d test.txt -s 127.0.0.1
  19. wc -l /var/log/message

DNS排错

  1. #dig A example.com
  2. ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A
  3. example.com
  4. ;; global options: +cmd
  5. ;; Got answer:
  6. ;; ->>HEADER<<-opcode: QUERY, status: NOERROR, id: 30523
  7. ...
  8. SERVFAIL:Thenameserverencountered a problem while processing the query.
  9. 可使用dig +trace排错,可能是网络和防火墙导致
  10. NXDOMAINThe queried name does not exist in the zone.
  11. 可能是CNAME对应的A记录不存在导致
  12. REFUSEDThe nameserverrefused the client's DNS request due to policy restrictions.
  13. 可能是DNS策略导致
  14. NOERROR不代表没有问题,也可以是过时的记录
  15. 查看是否为权威记录,flags:aa标记判断
  16. 被删除的记录仍能返回结果,可能是因为*记录存在
  17. 如:*.example.com.INA172.25.254.254
  18. 注意“.”的使用
  19. 避免CNAME指向CNAME记录,可能产生回环test.example.com. IN CNAME lab.example.com.lab.example.com. IN CNAME test.example.com.
  20. 正确配置PTR记录,许多服务依赖PTR,如sshd,MTA
  21. 正确配置轮询round-robin记录
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注