DNS动态更新

  • 什么是DNS动态更新
  • DNS动态更新与BIND软件的关系
  • 如何使用DNS动态更新
  • bind9环境nsupdate工具动态更新权威区数据举例
    • nsupdate入门
    • nsupdate使用细节
    • 实现基于TSIG的DNS动态更新

什么是DNS动态更新

RFC 2136描述了这样一种机制:它允许通过授权的更新者updater对权威DNS服务器的区数据动态的增加、删除资源记录。它给DNS系统日常运维带来了一种更加方便的变更区数据手段,管理员不再通过手工修改配置文件的方式变更数据。同时,它也提供了DHCP服务器分配IP地址后可通过DNS动态更新的机制自动在DNS权威区中添加IP与域名的对应记录(DDNS)的手段。

DNS动态更新与BIND软件的关系

BIND8和BIND9都支持RFC 2136所描述的DNS动态更新功能,但不是BIND软件独有,Windows Server作为DNS服务器时也是支持这个机制的。

如何使用DNS动态更新

  1. 一些程序内部已经具备此功能的函数调用,例如dhcpd这个软件它会通过ns_update()创建更新消息。
  2. 命令行工具nsupdate(此程序已经包含在BIND软件包中,安装后在bin目录下)可实现手动通过nsupdate命令创建更新消息,这个在DNS系统运维的时候比较常用。在对DNS系统的二次开发时可调用包装这个工具。

bind9环境nsupdate工具动态更新权威区数据举例

nsupdate入门

nsupdate工具是一个交互式的命令工具,在服务器上执行nsupdate然后Enter进入,先尝试一下如下:

[root@localhost ~]# nsupdate
> server 127.0.0.1
> update add xxx.test.com 300 A 3.3.3.3
> send
update failed: REFUSED
>quit

上面执行结果显然是失败了,但通过这些命令我们可以看到大概使用的思路:通过server制定DNS服务器的IP地址、通过update add命令向test.com区新增一个域名xxx.test.com、通过send命令提交、通过quit命令退出。
当然,这个失败的原因是named.conf文件中没有开启update,需要在对应的区配置部分显示的配置allow-update语句,简单的举例如下:

zone "test.com" {type master;allow-update { any; };file "test.com.zone";
};

重新测试一遍上面失败的nsupdate命令,没有报错。

[root@localhost ~]# nsupdate
> server 127.0.0.1
> update add xxx.test.com 300 A 3.3.3.3
> send
> quit

bind的相关日志打印如下:
19-Jun-2020 22:09:51.370 update: info: client @0x7f22a400a2b0 127.0.0.1#26718: updating zone 'test.com/IN': adding an RR at 'xxx.test.com' A 3.3.3.3
使用dig命令测试解析正常。

[root@localhost bind]# dig @192.168.3.160 xxx.test.com +short
3.3.3.3

查看test.com.zone文件内容发现没有这个xxx.test.com域名。

[root@localhost run]# cat test.com.zone
$TTL 3h@   IN SOA dns1.test.com. manager.test.com. (1  ;Serial3h   ;Refresh after 3 hours1h    ;Retry after 1 hour1w   ;Expire after 1 week1h) ;Negative caching TTL of 1 hour
;
@  IN NS dns1.test.com.
@  IN NS dns2.test.com.;server domain
;
dns1    3600    IN  A   111.10.10.10
dns2    3600    IN  A   111.10.10.20
www 300     IN  A   101.10.10.10
hello   20      IN  A   101.10.10.20
a   20      IN  CNAME   hello
mail    300     IN  A   101.10.10.30
time        IN  A   2.2.2.2

而存放zone文件的目录下多了一个test.com.zone.jnl 的文件,文件内容是乱码,无法查看。
综上,nsupdate的入门使用貌似不难,但有一些现象和配置我们还是没有根本了解,下面我们就来详细的说说这些细节。

nsupdate使用细节

  • 关于jnl文件的细节
    动态更新的区变化会保持在jnl文件中,此文件是二进制格式,不能手动编辑。更新的数据会定期的从jnl文件转存到zone文件中,但这个转存不是更新后立即执行,因为如果是立即执行那么一个大的区在频繁更新时候会导致服务器变动很慢。经测试,bind9这个转存的默认时间是15分钟,转存过程中可能还能临时看到jnw和jbk文件,但这些都不需要我们关注。
    在上面的test.com例子中,如果我们希望将目前jnl文件中的数据先转存到zone文件中,可以执行rndc sync test.com命令,此时会立即转存。
    - 转存后zone文件的格式会变
    动态更新成功且jnl配置转存成功后,我们再查看原来的zone文件会发现文件的内容格式变了,貌似给我们大扫除了一遍。真是让人激动,上面test.com的例子中转存后的zone文件内容如下,大家可自己对比看看。
[root@localhost run]# cat test.com.zone
$ORIGIN .
$TTL 10800  ; 3 hours
test.com        IN SOA  dns1.test.com. manager.test.com. (3          ; serial10800      ; refresh (3 hours)3600       ; retry (1 hour)604800     ; expire (1 week)3600       ; minimum (1 hour))NS  dns1.test.com.NS    dns2.test.com.
$TTL 3600   ; 1 hourMX  10 mail.test.com.
$ORIGIN test.com.
$TTL 20 ; 20 seconds
a           CNAME   hello
$TTL 50 ; 50 seconds
b           A   1.1.1.1
$TTL 3600   ; 1 hour
dns1            A   111.10.10.10
dns2            A   111.10.10.20
$TTL 20 ; 20 seconds
hello           A   101.10.10.20
$TTL 300    ; 5 minutes
mail            A   101.10.10.30
$TTL 10800  ; 3 hours
time            A   2.2.2.2
$TTL 300    ; 5 minutes
www         A   101.10.10.10
xxx         A   3.3.3.3

- nsupdate命令参考
nsupdate命令有很多,它还具备判断类命令,例如先判断这个要添加的域名是不是存在,如果不存在则添加。

命令 功能介绍
prereq nxdomain domain name 执行更新前,必须满足指定的domain name不存在
prereq yxdomain domain name 执行更新前,指定的domain name必须存在
prereq nxrrset domain name type 执行更新前,指定的domain name的type类型的记录(RRset)必须不存在
prereq yxrrset domain name type [rdata] 执行更新前,指定的domain name的type类型的记录(RRset)必须存在,如果指定了rdata,那么也必须存在。
update add domain name ttl [class] type rdata 在区域中增加指定的记录,处理type和rdata之外还必须包含ttl,class类是可选的默认是IN
update delete domain name [type] [rdata] 删除指定的域名,例如update delete test.com MX

实现基于TSIG的DNS动态更新

上面test.com区数据动态更新举例时配置文件有allow-update { any; };这个配置,这any肯定是不安全的。虽然allow-update这里也可以添加基于IP的ACL来实现动态更新源地址的控制,但还是不够安全,因为这种基于UDP的更新很容易伪装源IP造成系统风险。所以BIND建议通过事物签名(TSIG)来加密和认证所进行的更新。举例说明如下。
首先,bind安装完毕后,在sbin目录下有tsig-keygen命令,通过这个命令对一个密钥名称进行计算得到共享密钥,如下:

[root@localhost sbin]# ./tsig-keygen --help
tsig-keygen: invalid argument --
Usage:tsig-keygen [-a alg] [keyname]-a alg:        algorithm (default hmac-sha256)
[root@localhost sbin]# ./tsig-keygen -a hmac-md5 mytest > mytest.key
[root@localhost sbin]# cat mytest.key
key "mytest" {algorithm hmac-md5;secret "7fDlWke7zAvqD+I6ubgXwA==";
};

将上面生成的密钥信息配置到named.conf文件中

key "mytest" {algorithm hmac-md5;secret "7fDlWke7zAvqD+I6ubgXwA==";
};
zone "test.com" {type master;allow-update { key mytest; };file "test.com.zone";
};

再使用nsupdate工具举例如下:

[root@localhost etc]# nsupdate -y mytest:7fDlWke7zAvqD+I6ubgXwA==
> server 127.0.0.1
> zone test.com
> update add xxx3.test.com 3000 A 6.6.6.6
> send
> quit
[root@localhost etc]# dig @192.168.3.160 xxx3.test.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @192.168.3.160 xxx3.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37724
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;xxx3.test.com.         IN  A
;; ANSWER SECTION:
xxx3.test.com.      3000    IN  A   6.6.6.6;; Query time: 0 msec
;; SERVER: 192.168.3.160#53(192.168.3.160)
;; WHEN: Fri Jun 19 23:13:34 EDT 2020
;; MSG SIZE  rcvd: 58

19-Jun-2020 23:13:16.323 update: info: client @0x7ff39000eef0 127.0.0.1#51058/key mytest: updating zone 'test.com/IN': adding an RR at 'xxx3.test.com' A 6.6.6.6
nsupdate工具实现DNS动态更新本文就介绍到这,实际系统运维过程中面对集群架构的DNS系统还是要涉及一些细节,这个我们后面再针对性的介绍。

构建企业级DNS系统(六)DNS动态更新相关推荐

  1. 精讲23种设计模式-基于责任链模式~构建企业级风控系统

    文章目录 一.责任链 1. 责任链基本概念 2. 定义 3. 关键要点 4. 责任链模式优缺点 5. 责任链模式类结构图 6. 网关权限控制责任链模式 二.构建企业级风控系统 2.1. 定义公共抽象任 ...

  2. [转]基于SQL Server 2008 Service Broker构建企业级消息系统

    http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroker 1.引言 Microsoft 在SQL Serve ...

  3. 在DNS服务器上动态注册失败,DNS 注册的动态更新延迟 - Windows Server | Microsoft Docs...

    DNS 注册的 DHCP 动态更新延迟或未处理 09/08/2020 本文内容 本文讨论 DHCP 域名系统 (DNS) 行为中的更改可能会延迟 DNS 注册并提供解决此问题的帮助. 适用于:  Wi ...

  4. 【计网】DNS解析 DDNS解决动态公网IP访问

    DNS服务与DDNS 前言 一.DNS服务 二.DNS域名解析 1.解析过程 2.DNS污染 三.DDNS解决动态公网IP访问 总结 前言 本篇主要记录一下DNS域名解析在我们平时上网时的使用,与DN ...

  5. ELK学习笔记之F5 DNS可视化让DNS运维更安全更高效-F5 ELK可视化方案系列(3)

    0x00 概述 此文力求比较详细的解释DNS可视化所能带来的场景意义,无论是运维.还是DNS安全.建议仔细看完下图之后的大篇文字段落,希望能引发您的一些思考. 在"F5利用Elastic s ...

  6. Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

    DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...

  7. dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录

    如何动态更新DNS记录.md 零.概述 一般来说,DNS记录都是手动更新的,通过修改配置文件,或者通过网站页面,但是如何才能简化工作,使部分DNS记录更新自动化呢? 这就是本文关注的内容. 一.通过D ...

  8. 体验了一次DNS的动态更新功能

    今天真正体验了一次DNS动态更新的功能. 场景: 已经安装了一个Forest Root Domain:mvp.com,接下来又安装了一个Child Domain:china.mvp.com,并且两个D ...

  9. 动态更新dns原理介绍

    动态DNS更新(DYNAMIC DNS UPDATES) DHCP 服务器有可以动态更新DNS的能力.在配置文件中,你可以定义如何使DNS更新,这些更新是指符合RFC 2136的DNS.支持RFC 2 ...

最新文章

  1. Python发展迅猛,如何在Python热中脱颖而出了?
  2. 软件测试实验——安装并使用junit、hamcrest和eclemma进行简单测试
  3. mysql 密码重置
  4. zookeeper 分布式锁原理
  5. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合
  6. Mysql学习笔记【一、环境安装配置】
  7. cc压力测试_中小型网站如何防范CC攻击?
  8. C语言(CED)如何用sort函数根据结构体里的某一属性进行排序
  9. Springboot的常规属性配置和类型安全配置
  10. Eigen教程(4)之Array类和元素级操作
  11. open cv+C++错误及经验总结(十一)
  12. 【数据获取】建筑轮廓数据的N种获取方法
  13. JS分割字符串常用方法总结
  14. unity3d shader之Julia集和Mandelbrot集绘制美丽图案
  15. Ant Design + React 中将分页组件的英文转为中文
  16. 老文新读 | 大数据于国内影视行业的意义及应用
  17. 知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍
  18. 第二类换元法倒代换专项训练
  19. 【C++】用递归函数实现Hermite多项式求值
  20. android背光系统,Android 的背光控制

热门文章

  1. Unity3D Shader系列之UI Image灰度化
  2. 求1到N中质数的个数
  3. python实现链表的删除_Python 实现简易版成绩管理系统
  4. rmbp装oracle11g
  5. lambda函数式接口方法引用Sream
  6. 获取一个文件夹下所有的文件名(包括文件夹名)
  7. LeetCode 77. 组合 | Python
  8. 上传文件时让弹窗显示指定格式的文件
  9. MAC怎么安装brew
  10. (亲测,十分方便!)win10下 配置python编辑器Geany配置