如何解決跨境DNS解析失敗問(wèn)題?
問(wèn)題
公司使?的是阿?云基礎(chǔ)設(shè)施,DNS解析使?的是境外的Akamai作為域名的DNS解析服務(wù)商。
當(dāng)前有部分應(yīng)?需要被第三?應(yīng)?調(diào)?,同時(shí)也有主動(dòng)調(diào)?第三?應(yīng)?的需求。最近突發(fā)了很多調(diào)?失敗問(wèn)題。
應(yīng)?調(diào)?失?。?/p>
Gitlab拉取失?。?/p>
故障排查
1. 在ECS上進(jìn)?循環(huán)抓包并修改resolv.conf配置
抓包命令:tcpdump -i any -s 0 port 53 and host 【域名】 -C 100 -W 50 -w
/tmp/dns.pcap
參數(shù)說(shuō)明:
-i:指定要過(guò)濾的?卡接?,如果要查看所有?卡,可以-i any
-s: tcpdump 默認(rèn)只會(huì)截取前96字節(jié)的內(nèi)容,要想截取所有的報(bào)?內(nèi)容,可以使?-s
number,number就是你要截取的報(bào)?字節(jié)數(shù),如果是 0 的話,表示截取報(bào)?全部?jī)?nèi)容
-C:file-size,tcpdump 在把原始數(shù)據(jù)包直接保存到?件中之前, 檢查此?件??是否超過(guò)file-size。如果超過(guò)了, 將關(guān)閉此?件,另創(chuàng)?個(gè)?件繼續(xù)?于原始數(shù)據(jù)包的記錄,新創(chuàng)建的?件名與-w 選項(xiàng)指定的?件名?致,但?件名后多了?個(gè)數(shù)字。該數(shù)字會(huì)從1開(kāi)始隨著新創(chuàng)建?件的增多?增加。file-size的單位是百萬(wàn)字節(jié)(nt: 這?指1,000,000個(gè)字節(jié),并?1,048,576個(gè)字節(jié),后者是以1024字節(jié)為1k,1024k字節(jié)為1M計(jì)算所得,即1M=1024 *1024 = 1,048,576)。這?是100M
-W參數(shù):與-C參數(shù)?起使?時(shí),可以達(dá)到循環(huán)寫(xiě)??件的作?。這?是抓50個(gè)?件
-w ?件路徑和?件名 ?于指定保存?件的路徑和名稱,沒(méi)有指定路徑默認(rèn)在系統(tǒng)默認(rèn)路徑下;
標(biāo)準(zhǔn)默認(rèn)resolv.conf標(biāo)準(zhǔn)配置:
options timeout:2 attempts:3 rotate single-request-reopen
#這條配置使得在解析域名時(shí)在所有的nameserver中進(jìn)? 隨機(jī) 的選擇。
nameserver 100.100.x.xxx
nameserver 100.100.x.xxx
2. 頻繁執(zhí)?git pull命令等待報(bào)錯(cuò)出現(xiàn)
3. 確認(rèn)DNS的出?IP地址
多次執(zhí)?命令:dig whoami.ds.akahelp.net txt +short
"ns" "106.xx.xxx.8"
"ns" "106.xx.xxx.8"
"ns" "106.xx.xxx.7"
"ns" "106.xx.xxx.6"
"ns" "106.xx.xxx.6"
"ns" "106.xx.xxx.7"
"ns" "106.xx.xxx.1"
"ns" "106.xx.xxx.6"
"ns" "106.xx.xxx.8"
"ns" "106.xx.xxx.6"
"ns" "106.xx.xxx.6"
"ns" "106.xx.xxx.7"
4.通過(guò)云?商服務(wù)端檢查發(fā)現(xiàn)問(wèn)題原因
原因如下:
a. ?先阿?云的DNS服務(wù)沒(méi)有緩存
b. 當(dāng)?戶或應(yīng)?發(fā)起域名解析后
c. 如果阿?云DNS服務(wù)器?有請(qǐng)求過(guò)的地址且TTL時(shí)間未過(guò)期的話就直接返回結(jié)果
d. 否則阿?云DNS服務(wù)器將去境外Akamai去請(qǐng)求解析記錄,但由于從國(guó)內(nèi)到境外的?絡(luò)
波動(dòng)會(huì)導(dǎo)致部分請(qǐng)求失敗
臨時(shí)解決方案
在?期解決?案未落地前我們使?了2個(gè)臨時(shí)解決?案。
1. 如果是A記錄的通過(guò)臨時(shí)綁定Hosts解決
2. 如果是CNAME記錄或其它的則使?阿?云的Private Zone臨時(shí)內(nèi)?DNS解析服務(wù)解決
長(zhǎng)期解決方案
為了能?期解決這個(gè)問(wèn)題,我們還是準(zhǔn)備把域名解析服務(wù)放到阿?云的云解析上。保證國(guó)內(nèi)訪問(wèn)沒(méi)有問(wèn)題。同時(shí)應(yīng)?也要做兩個(gè)變更:
1. 要設(shè)置調(diào)?失敗的重試機(jī)制,?如失敗后重試3次每次間隔3秒
2. 要設(shè)置重試后任然失敗的補(bǔ)償機(jī)制,這個(gè)需要業(yè)務(wù)負(fù)責(zé)?去制定具體的補(bǔ)償規(guī)則