開發與維運

跨region的智能DNS解决方案(二)-运维

对named进行CRUD操作

上文介绍了如何完整的安装named服务,如果有安装不明白的地方请参考:跨region的智能DNS解决方案(一)
本章将对之前部署完毕的named服务进行域名记录的CRUD操作。

通过shell脚本来进行CRUD

通过bash命令或者shell脚本来进行CRUD操作的核心命令为nsupdate
构造命令如下:

nsupdate [ -d ] [ [ -y keyname:secret ] [ -k keyfile ] ] [ -v ]
[ filename ]
-d 调试模式.
-k 从keyfile文件中读取密钥信息.
-y keyname是密钥的名称,secret是以base64编码的密钥.
-v 使用TCP协议进行nsupdate.默认是使用UDP协议.
依照上文所部署的情况,key文件所在路径为/etc/named/keys/keys
执行命令为:
cat >> hangzhou.sre.so-zhangjiakou << EOF
server 10.1.0.100
update add hangzhou.sre.so. 1 A 10.3.3.3
send
quit
EOF
cat >> hangzhou.sre.so-hangzhou << EOF
server 10.1.0.100
update add hangzhou.sre.so. 1 A 10.4.3.3
send
quit
EOF
#指定张家口的key将域名添加到张家口的view上
nsupdate -k /etc/named/keys/keys/Kkey_sreso_zhangjiakou-cloud.+157+34623.key hangzhou.sre.so-zhangjiakou
#指定杭州的key将域名添加到杭州的view上
nsupdate -k /etc/named/keys/keys/Kkey_sreso_hangzhou-cloud.+157+57601.key hangzhou.sre.so-hangzhou

通过python来进行CRUD

dnspython是Python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以代替nslookup及dig等工具,轻松做到与现有平台的整合。

pip install dnspython 

具体使用请参考github

# 添加transfer.key内容 key名称key内容


import sys
import dns.update
import dns.query
import dns.resolver
import dns.tsigkeyring

keyring = dns.tsigkeyring.from_text({
    'key_sreso_hangzhou-cloud': 'mu+qLSESeR4AHbFdEiUs73xx1ODWeb9WzhfcNPSO0r/8OqTTNrnahHpe/4peySKMbhnJCnqsZxAzPjiVOPNHlg=='
#    'key_sreso_default': 'rkUWa/RQB+Rnil5kWvP/vBMEmEETx3NPmuuxSWbWLHsCp+fI93HqMdpqIm/zSKcvNsts1NYsnzulNW7nqyIVtg=='
#     'key_sreso_zhangjiakou-cloud': 'mspmOPCmYFQuDWJYoauzIT8rPXCP+RTUHW0sDwM++IzLt/syidjSrQ5SjsOqeO+LJNGKhR3g+hO7FDzN04b2gQ=='
    })

# 实例化一个DNS对象
update = dns.update.Update('sre.so.', keyring=keyring)
update.replace('aliyun', 1, 'A', sys.argv[1])

response = dns.query.tcp(update, '10.1.0.100', timeout=10)

源码解析:
replace方法传参第一个必须是name(也就是域名)后面依次可以为
记录值
ttl+记录值
ttl+记录类型+记录值

如何检测DNS

通过dig命令加指定key的方式可以返回对应的记录结果。
也可以通过dig axfr 加指定key的方式可以返回根域所有记录结果。

dig命令详解

dig(选项)(参数)

选项

@<服务器地址>:指定进行域名解析的域名服务器;
-b:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x:执行逆向域名查询;
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。







参数

1 主机:指定要查询域名主机;
2 查询类型:指定DNS查询的类型;
3 查询类:指定查询DNS的class;
4 查询选项:指定查询选项。


dig -k /etc/named/keys/keys/Kkey_sreso_hangzhou-cloud.+157+57601.key mvp.sre.so @10.1.0.100
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -k /etc/named/keys/keys/Kkey_sreso_hangzhou-cloud.+157+57601.key mvp.sre.so @10.1.0.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54843
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mvp.sre.so.            IN    A

;; ANSWER SECTION:
luolmvpi.sre.so.        1    IN    A    1.1.3.41

;; TSIG PSEUDOSECTION:
key_sreso_hangzhou-cloud. 0    ANY    TSIG    hmac-md5.sig-alg.reg.int. 1568890339 300 16 p9ctS8CcZcbzwUA+q1UOoA== 54843 NOERROR 0

;; Query time: 0 msec
;; SERVER: 10.1.0.100#53(10.1.0.100)
;; WHEN: Thu Sep 19 18:52:19 CST 2019
;; MSG SIZE  rcvd: 151

dig axfr -k /etc/named/keys/keys/Kkey_sreso_hangzhou-cloud.+157+57601.key sre.so @10.1.0.100
;; global options: +cmd
sre.so.            600    IN    SOA    sre.so. root.sre.so. 2019012811 28800 14400 3600000 86400
sre.so.            600    IN    NS    ns1.sre.so.
mvp.sre.so.        1    IN    A    1.1.3.41
ns1.sre.so.        600    IN    A    10.1.0.100
mvp.sre.so.sre.so.    1    IN    A    1.1.3.41
pytho11n.sre.so.sre.so.    300    IN    A    1.1.1.1
pytho11nasfa.sre.so.sre.so. 1    IN    A    1.1.1.1
python.sre.so.sre.so.    300    IN    A    1.1.1.1
wangmvp.sre.so.sre.so. 1    IN    A    1.1.1.4
sre.so.            600    IN    SOA    sre.so. root.sre.so. 2019012811 28800 14400 3600000 86400
key_sreso_hangzhou-cloud. 0    ANY    TSIG    hmac-md5.sig-alg.reg.int. 1568891019 300 16 +gfZ2D9TorSB+2m4mQ3DaQ== 7853 NOERROR 0
;; Query time: 0 msec
;; SERVER: 10.1.0.100#53(10.1.0.100)
;; WHEN: Thu Sep 19 19:03:39 CST 2019
;; XFR size: 10 records (messages 1, bytes 394)

Q&A

  • 日志返回deny 请检查key的权限是否为600
  • dig axfr 不能正常返回,请确认所在服务器是否在view的acl范围内

Leave a Reply

Your email address will not be published. Required fields are marked *