跨region的智能DNS解決方案(二)-CRUD

跨region的智能DNS解決方案(二)-CRUD

對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範圍內
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章