本文共 12727 字,大约阅读时间需要 42 分钟。
dns基本工作原理
dns: domain name servicedns udp/53 tcp/53udp 用于解析 tcp 用于区域传送由域名服务器与域名解析器组成 用于域名和ip的相互转换 dns:分布式 倒置的树状结构 最上方为根域 根域服务器世界一共有13台 根域服务器下有多个组织服务器 如 .com .org .edu .net 等 也有如表示国家的域服务器 .cn .us等等 这些域名称为顶级域 或者为 一级域 一级域下又有诸多二级域 二级域下又可以有诸多三级域 ... dns服务器的类型 1.主dns服务器 2.从dns服务器 3.唯缓存dns服务器 4.转发器原理:互联网主机通信都是通过ip,域名只不过是提供一个更易记的渠道 客户端发起dns请求流程: client --> /etc/hosts --> local cache --> DNS server(recursive 递归查询) --> dns server local cache --> lterative(迭代查询) --> 客户端请求域名解析 首先查看/etc/hosts 文件中是否有解析的内容 若无在查询缓存中时否还有上次解析的记录 若无则去查找 指定的dns服务器 (一般来说指定的dns服务器为唯缓存dns服务器) 指定的dns服务器的缓存中若无相关缓存 则去找其他dns服务器(查找方式为自顶向下) 如 刚开始从根开始查找指定的域名 如查找 www.gaoleng.com 1. 我们指派的dns服务器 去找根 根会告诉我们指派的dns 他不知道我们所说的域名是哪个ip 但是.com他知道 你应该去找.com查找 并告诉我们 .com的地址 2. 我们指派的dns服务器又回去 找.com .com说 “我也不知道 你说的域名的 ip地址到底是多少 但是baidu.com应该知道 我跟你说他的ip是多少把 ” 3. 接着dns服务器又会去找 baidu.com的dns服务器 我们所要查找的域名 确实是在baidu.com域中 baidu.com的dns服务器会说 “你要找的域名 我确实知道他的 ip是.. ” 4. 指派的dns服务器 会缓存这一信息 并且 将该域名对应的ip 返回给客户端 客户端 也会缓存这一信息 这样在缓存未到期之前 再次访问www.baidu.com 就不会再去找dns服务器 而是直接在缓存中取得 客户端 只收取最终结果 其余工作都有指派的dns服务器完成 递归查询:客户端请求一次 就可以得到最终的结果 客户端不支持迭代查询 所以依靠唯缓存服务器来帮助查询 迭代查询:服务器多次发送查找请求 多次返回
dig 命令查看dns搜寻过程
dig www.yahoo.com +trace ~]# dig www.yahoo.com +trace ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> www.yahoo.com +trace ;; global options: +cmd . 5 IN NS e.root-servers.net. . 5 IN NS m.root-servers.net. . 5 IN NS l.root-servers.net. . 5 IN NS g.root-servers.net. . 5 IN NS c.root-servers.net. . 5 IN NS k.root-servers.net. . 5 IN NS j.root-servers.net. . 5 IN NS h.root-servers.net. . 5 IN NS d.root-servers.net. . 5 IN NS i.root-servers.net. . 5 IN NS b.root-servers.net. . 5 IN NS f.root-servers.net. . 5 IN NS a.root-servers.net. ;; Received 494 bytes from 192.168.117.2#53(192.168.117.2) in 228 ms com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. ;; Received 507 bytes from 198.41.0.4#53(198.41.0.4) in 481 ms yahoo.com. 172800 IN NS ns1.yahoo.com. yahoo.com. 172800 IN NS ns5.yahoo.com. yahoo.com. 172800 IN NS ns2.yahoo.com. yahoo.com. 172800 IN NS ns3.yahoo.com. yahoo.com. 172800 IN NS ns4.yahoo.com. ;; Received 285 bytes from 192.31.80.30#53(192.31.80.30) in 304 ms www.yahoo.com. 1800 IN CNAME atsv2-fp.wg1.b.yahoo.com. wg1.b.yahoo.com. 172800 IN NS yf2.yahoo.com. wg1.b.yahoo.com. 172800 IN NS yf4.a1.b.yahoo.net. wg1.b.yahoo.com. 172800 IN NS yf3.a1.b.yahoo.net. wg1.b.yahoo.com. 172800 IN NS yf1.yahoo.com. ;; Received 178 bytes from 68.142.255.16#53(68.142.255.16) in 311 msdns 解析答案 1.肯定答案 : 肯定 有的域名解析答案 2.否定答案 : 请求不存在等原因导致的 无法返回结果 注意 :(肯定答案和否定答案在dns服务器中都会有缓存 本地没有的答案即为否定答案 这样每次请求不存在的主机就不用让主机所在区域的dns服务器每次都响应 占用资源) 3.权威答案 :由主机所在dns服务器解析出的直接得到的答案 4.非权威答案 : 不是由主机所在dns服务器解析返回的答案 而是从其他dns服务器缓存中获取的答案
区域解析库
资源记录:resource record (RR)记录类型 SOA NS PTR A AAAA CNAME MXSOA: 起始授权记录 一个解析库只能有一个 soa记录 并且 soa记录要在第一条NS:专门表明当前区域的dns服务器CNAME: 别名记录MX: 邮件交换器PTR: 反向解析 IP --> FQDN A:FQDN --> IPAAAA: FQDN -->IPv6 注意 :1. TTL可以全局继承 2. @可用于表示当前区域的名字 3. 同一个名字可以通过多个记录 定义不同的值 此时dns服务器会以轮询的方式响应 4. 同一个值也可以定义不同的名字 通过不同的名字指向同一个值 仅表示通过不同的名字可以找到一个主机而已 SOA: name :当前区域名称如 gaoleng.com value : 多个部分组成 1.当前区域的dns服务器的FQDN或者当前区域名称 可用@简写 2.当前管理员的邮箱地址,但地址中不可有@符号 一般用. 号代替 如 admin.gaoleng.com 3.主服务器协调属性的定义 以及否定答案的TTL 例: daniu.com. IN SOA dns.daniu.com. root.daniu.com. (2017120902 1H 15M 1W 1D)NS: name : 当前区域名 value : 当前区域名的 dns服务器名称 如 “ns1.gaoleng.com” 例如: @ IN NS ns1.gaoleng.comCNAME : name : 别名FQDN value : 正式的FQDN 例如: web.gaoleng.com IN CNAME www.gaoleng.comPTR : name:ip 的特定格式 如 1.2.3.4 要写成 4.3.2.1 并且加上后缀.in-addr.arpa. 例:4.3.2.1 IN PTR ns1.gaoleng.com.A : name: 某主机的FQDN value:主机对应的ip 例如: www.gaoleng.com IN A 192.168.117.131 --------------------- IN A 192.168.117.130 --------------------- (注意第三条 轮询 ) *.gaoleng.com IN A 192.168.117.131 ----------------------------------------------------(泛域名解析 避免用户写错主机名而给错误答案 )AAAA : name: 某主机的FQDN value:主机对应的ipv6MX : name:当前区域名 value:当前区域名的服务器(smtp服务器)的主机名 一个区域内MX记录可有多个,但每个记录前都应该有一个数字(0-99表示其优先级) 数越小表示其优先级越高 例如: @ IN MX 10 mx1.gaoleng.com
bind
主配置文件 /etc/named.conf /etc.named.rfc1912.zones /etc/rndc.key解析库文件 /var/named/ZONE_NAME.zone注意 : (1). 一台物理服务器 可以同时给多个区域提供解析 (2). 必须要有根区域文件 (3). 应该至少有两个(如果包括ipv6 应该更多) 实现localhost 和本地回环地址 127.0.0.1 的解析库rndc : 默认与bind 安装在同一主机 只能通过127.0.0.1 连接named进程 监听在 953/tcp端口主配置文件 全局配置 option{} 日志子系统配置 logging{} 区域定义:本机能为哪些zone进行解析 就要定义哪些zone zone "ZONE_NAME.ZONE" IN {} 注意 : 任何服务程序 想要能过通过网络与其他主机访问 至少要监听在一个能与外部主机通信的ip上 option中默认指定的监听地址为回环地址缓存名称服务器 只需要监听在一个外部地址上即可主dns服务器 1.定义zone区域 zone"ZONE_NAME.zone" IN { type {master|slave|hind|forword} ; file "..." ; }; 2.定义解析库 定义内容 如 $TTL $ORIGIN (可加可不加 用于省略当前区域名字 ) 在SOA中一般不省略当前区域名字 或FQDN 在后面省略时要注意 省略后不可有点 如 ns1.gaoleng.com 不可为写 ns1. 应写成 ns1 ;加 oridin时 用法 如 $ORIGIN gaoleng.com 资源记录 注意 : 定义完之后一般 将写的文件的 权限定为 640 其他人不可读 并且设置 named为文件的属组 因为named程序 是由named用户引导 在读取配置文件 时若为其他人 无法读取文件 chmod 640 zone_name chown :named zone_name测试命令: dig命令 dig [-t type ] name [@server] [query option] 指定资源类型 域名 指定临时dns服务器 不加则为/etc/resolv.conf定义的dns 后接可加选项 查询选项 +[no] trace :跟踪解析过程 +[no] recurse :进行递归解析 测试反向dns解析 dig -x ip @server 模拟区域传送 区域传送: 1. 全量传送 : 传送整个解析库 2. 增量传送 : 传送解析库变化的部分 dig -t axfr zone_name @server 如 dig -t axfr gaoleng.com @192.168.117.129 host 命令 host [-t type] name server nslookup 命令 nslookup [-option] [name|-] [sercer] nslookup >server 指定dns服务器 >set q=rr_type 设定类型 >NAME 要查询的域名检查区域文件和解析库文件格式是否正确 检查区域 1. named-checkconf 检查解析库文件 2.named-checkzone "解析库名ZONE_NAME" 解析库文件名 如 named-checkzone "gaoleng.com" gaoleng.com.zone 测试时建议将dnssec设置成no 不然对一些测试实施会有影响反向区域: 区域名为网络地址的反写 后接.in-addr.arpa. 192.168.117 ---> 117.168.192.in-addr.arpa. 1.定义区域 zone "ZONE_NAME" IN { type {master|slave|forword}; file"ip.zone"; }; 例如 zone "117.168.192.in-addr.arpa" IN { type master; file "192.168.117.zone"; }; 2.区域解析库文件 注意:反向解析库不需要 MX A AAAA 示例 $TTL 1D $ORIGIN 117.168.192.in-addr.arpa. @ IN SOA ns1.gaoleng.com. root.gaoleng.com ( 2018020501 1D 1H 1W 1D ) IN NS ns1.gaoleng.com. IN NS ns2.gaoleng.com. 131 IN PTR ns1.gaoleng.com. 129 IN PTR ns2.gaoleng.com. 129 IN PTR mx1.gaoleng.com. 131 IN PTR www.gaoleng.com. IN PTR gaoleng.com.
主从复制:
1.从服务器应该为一台独立的服务器2.主服务器的区域解析库必须有一条NS记录是指向从服务器 --- IN ns2.gaoleng.com ns2 IN A 192.168.117.1313.从服务器只需要定义区域 而无需提供 解析库文件 库文件应该放置于/var/named/slaves目录中4.主服务器允许进行做区域传送5.主从服务器 时间应该同步 可通过ntp进行6.bind 程序的版本应该一致 若不一致 应该主服务器版本低 从服务器版本高从服务器
只需要 定义区域 zone "ZONE_NAME" IN { type slave; masters{master_ip ;}; file "slaves/ZONE_NAME.ZONE"; };
rndc:
rndc COMMAND COMMAND: reload:重载主配置文件和区域解析库文件 reload zone:重载区域解析库文件 status:查看bind状态信息 retransfer zone:手动启动传送过程,而不管序列号是否增加 notify zone :重新对区域传送发起通知 querylog : 开启或关闭查询日志 trace:传递debug级别 trace LEVEL :设定debug级别
子域授权
1. 在父区域中定义子区域 shuai.gaoleng.com IN NS ns1.shuai.gaoleng.com IN NS ns2.shuai.gaoleng.com ns1.shuai.gaoleng.com IN A 192.168.117.131 ns2.shuai.gaoleng.com IN A 192.168.117.1322. 在相应主机上定义子区域解析库文件 $TTL 1d $ORIGIN shuai.gaoleng.com. @ IN SOA ns1.shuai.gaoleng.com. admin.shuai.gaoleng.com. ( 2018020601 1H 5M 1W 1D ) IN NS ns1 IN NS ns2 ns1 IN A 192.168.117.131 ns2 IN A 192.168.117.132 www IN A 192.168.117.129
定义转发服务器
注意:1.被指定的转发服务器需要为请求做递归,否则转发请求不进行 2.forward中 first和only first 表示若转发的服务器 不允许查询时 那自己还会去做查询操作 only表示 若转发的服务器不允许查询时 那自己也就放弃查询 3.在进行子域或转发测试时关闭dnssec 否则有的操作进行不了1.全局定义 options{ forward first|only; forwarders {FORWARD_DNS_IP;}; };2.区域转发 zone "ZONE_NAME" IN { type forward; forword first|only; forwarders {FORWARD_DNS_IP;}; };
bind 的安全相关配置
acl:将一个或多个地址归并为一个集合;并通过统一的一个名字调用
acl ACL_NAME { ip; net/per; };
示例:
acl slaves{ 192.168.117.129;192.168.117.131;127.0.0.1;};以后调用salves相当于调用里面的ipbind的4个内置acl
none:没有一个主机any:任意主机local:本机localnet:本机的ip和掩码运算后的网络地址注意:acl只能先定义后调用 其一般定义在options前面部分访问控制指令allow-query{}:允许查询的主机,白名单allow-transfer{}:允许区域传送的主机allow-resursion{}:允许递归的主机 如 allow-resursion{ slaves;}; 在zone中不能定义allow-update:允许更新区域数据库中的内容,关闭才安全
示例
zone "gaoleng.com" IN { type master;file "gaoleng.com";allow-transfer{slaves;};allow-update{none;};};view视图
用于将不同地方客户端的请求 解析到其客户端所在区域的服务器上 如 将上海用户访问此域名 将其解析到伤害的服务器上 这样响应的速度快 一个bind服务器可定义多个view 每个view可以定义多个zone 每个view用来匹配一组客户端 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件 格式: view VIEW_NAME { match-clients{}; }; 注意: 1.一旦启用了view,所有的zone都只能定义在view中 2.仅有必要在匹配到允许递归请求的客户端所在的view定义根区域 3.客户端请求到达时,是自上而下检查每个view所服务的客户端列表 示例: view localht{ match-clients{mynet;}; 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 "gaoleng.com" IN { type master; file "gaoleng.com"; }; zone "." IN { type hint; file "named.ca"; }; zone "daniu.com" IN { type master; file "daniu.com.zone"; }; }; view ext { match-clients{any;}; zone"gaoleng.com" IN { type master; file"gaoleng.com.ex.zone"; }; };
转载于:https://blog.51cto.com/13453496/2071893