天天看點

跨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範圍内