一種實(shí)現(xiàn)可離線化dns服務(wù)的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法及裝置,所述方法包括:根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器;DNS代理接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄;若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求;本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理;DNS代理若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,向用戶返回所述解析結(jié)果。通過本發(fā)明的技術(shù)方案,能夠?qū)崿F(xiàn)可離線化的DNS代理服務(wù),降低了DNS代理對外部DNS服務(wù)器的依賴。
【專利說明】—種實(shí)現(xiàn)可離線化DNS服務(wù)的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及域名解析領(lǐng)域,尤其涉及一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法及裝置。【背景技術(shù)】
[0002]域名解析系統(tǒng)DNS,是將域名解釋成IP地址的服務(wù)。
[0003]DNS代理,是用戶與DNS服務(wù)器的一個(gè)中間層,可接受用戶請求,向外面DNS服務(wù)器發(fā)送請求,把返回的結(jié)果發(fā)送給用戶。
[0004]離線DNS代理,指的是不依賴于外部DNS服務(wù)器的DNS代理,就是說,如果外面的DNS服務(wù)器無法正常工作時(shí),DNS代理無法從外部DNS服務(wù)得到請求的解析結(jié)果,在這情況下,離線DNS代理仍可以為用戶提供正常的DNS解析服務(wù)。
[0005]視圖,是指根據(jù)DNS請求用戶的源IP區(qū)分用戶,DNS代理可以設(shè)置視圖,如廣東電信視圖,并可把一些IP地址指向視圖,如把119.128.0.0/16的這個(gè)B類地址指向廣東電信視圖,意思就是,源IP屬于119.128.0.0/16這個(gè)地址范圍內(nèi)的請求都屬于電信視圖管的;DNS代理為每個(gè)視圖設(shè)置一個(gè)或多個(gè)的DNS服務(wù)器,如廣東電信視圖就設(shè)置幾個(gè)廣東電信的DNS服務(wù)器,如202.96.128.166,202.96.128.86等;用戶請求會根據(jù)視圖轉(zhuǎn)發(fā)給設(shè)置好的外部DNS服務(wù)器。
[0006]現(xiàn)有的DNS代理服務(wù)基本實(shí)現(xiàn)了 DNS緩存、智能視圖等功能。參考圖1、圖2所示,現(xiàn)有離線DNS代理的實(shí)現(xiàn)過程包括:
[0007]步驟1、DNS代理接收用戶DNS請求,DNS代理接收到DNS請求后,如請求www.efly.cc,先計(jì)算出對應(yīng)的視圖號。
[0008]步驟2、在本地緩存中查找是否有相應(yīng)DNS請求的結(jié)果,若有,則執(zhí)行步驟4,若無則執(zhí)行步驟3 ;
[0009]步驟3、DNS代理根據(jù)視圖號,選擇外部的DNS服務(wù)器,并向這些外部的DNS服務(wù)器發(fā)送DNS請求,獲取到與DNS請求的域名對應(yīng)的解析結(jié)果,并保存該條DNS代理記錄到本地緩存。
[0010]步驟4、將解析結(jié)果返回給用戶。
[0011]現(xiàn)有技術(shù)中,DNS代理從外部DNS服務(wù)器得到域名對應(yīng)的IP結(jié)果,把結(jié)果保存到本地緩存中,再把本地結(jié)果以字符串形式通過ssylog保存到本地硬盤。Syslog常被稱為系統(tǒng)日志或系統(tǒng)記錄,是一種用來在互聯(lián)網(wǎng)協(xié)議(TCP/IP)的網(wǎng)絡(luò)中傳遞記錄檔訊息的標(biāo)準(zhǔn)。
[0012]現(xiàn)有技術(shù)的缺點(diǎn)包括:DNS代理復(fù)位對外部DNS服務(wù)器過于依賴。即在外部DNS服務(wù)器不能正常工作的情況下,DNS代理將不能正常對用戶進(jìn)行DNS解析服務(wù),DNS代理的本地緩存是有時(shí)間限制的(緩存的每條代理記錄均有其生存時(shí)間(TT =Time To Live),當(dāng)緩存的代理記錄超過其TTL時(shí),就會自動從緩存中清出。若本地緩存沒有當(dāng)前DNS請求的代理記錄時(shí),所述DNS請求會轉(zhuǎn)發(fā)到外部的DNS服務(wù)器,此時(shí)若外部的DNS服務(wù)器不正常,則無法返回對應(yīng)的解析結(jié)果,DNS代理沒有對應(yīng)的解析結(jié)果返回給用戶,導(dǎo)致DNS代理不能正常服務(wù)。[0013]因此,現(xiàn)有技術(shù)還有待改進(jìn)。
【發(fā)明內(nèi)容】
[0014]本發(fā)明的目的在于提出一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法及裝置,能夠?qū)崿F(xiàn)當(dāng)外部DNS服務(wù)器出現(xiàn)問題后,DNS代理仍然可以正常地對用戶提供域名解析服務(wù)。
[0015]為達(dá)此目的,本發(fā)明采用以下技術(shù)方案:
[0016]一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法,包括:
[0017]根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器;
[0018]DNS代理接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄;
[0019]若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則DNS代理向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求;
[0020]本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理;
[0021]DNS代理若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;向用戶返回所述解析結(jié)果。
[0022]其中,所述根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器,包括:
[0023]DNS代理將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址;
[0024]分析所述運(yùn)營數(shù)據(jù)得出歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù);
[0025]按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫;
[0026]所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,包括:
[0027]本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址。
[0028]其中,所述分析所述運(yùn)營數(shù)據(jù)得出對應(yīng)的歷史解析記錄,包括:
[0029]按照第一時(shí)間周期對所述運(yùn)營數(shù)據(jù)進(jìn)行一次分析,以得出各用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的若干IP地址、以及域名被解析為各IP地址的次數(shù);
[0030]按照第二時(shí)間周期對所述一次分析的結(jié)果進(jìn)行二次分析,以對各域名被解析為對應(yīng)IP地址的次數(shù)進(jìn)行統(tǒng)計(jì),得出所述歷史解析記錄;
[0031]所述第二時(shí)間周期大于兩倍所述第一時(shí)間周期。
[0032]其中,所述將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),具體為:
[0033]定期將代理過的若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址以字符串形式通過syslog寫入本地硬盤,以生成運(yùn)營數(shù)據(jù)。
[0034]其中,所述本地?cái)?shù)據(jù)庫為非關(guān)系型數(shù)據(jù)庫;
[0035]所述非關(guān)系型數(shù)據(jù)庫中,將視圖號和域名作為鍵,IP地址作為值。
[0036]其中,所述本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址,包括:[0037]本地DNS服務(wù)器開啟若干線程,分別用于監(jiān)聽所述非關(guān)系型數(shù)據(jù)庫中的各視圖號的DNS請求;
[0038]所述線程分別監(jiān)聽與各視圖號對應(yīng)的UDP端口 ;
[0039]當(dāng)某一線程監(jiān)聽到UDP端口有DNS請求時(shí),提取該DNS請求中的域名,通過該域名和對應(yīng)的視圖號查詢所述非關(guān)系型數(shù)據(jù)庫,獲取對應(yīng)的IP地址。
[0040]其中,所述向用戶返回所述解析結(jié)果,具體為:
[0041]生成包含所述用戶DNS請求、所述解析結(jié)果的代理記錄;
[0042]DNS代理存儲所述解析結(jié)果到本地緩存;若所述解析結(jié)果為本地DNS服務(wù)器提供的IP地址,則隨機(jī)生成預(yù)設(shè)范圍內(nèi)的一個(gè)時(shí)間值作為該條代理記錄的生存時(shí)間,以使該代理記錄的生存時(shí)間小于等于默認(rèn)代理記錄的生存時(shí)間;
[0043]DNS代理以數(shù)據(jù)包的形式向用戶返回所述解析結(jié)果。
[0044]一種可離線化DNS服務(wù)的裝置,包括:
[0045]構(gòu)建單元,用于DNS代理的根據(jù)歷史代理記錄建立本地DNS服務(wù)器;
[0046]緩存查詢單元,用于接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄;
[0047]請求轉(zhuǎn)發(fā)單元,用于若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求;
[0048]本地解析單元,用接收本地DNS服務(wù)器返回的與該用戶DNS請求對應(yīng)的IP地址,所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回;
[0049]請求響應(yīng)單元,用于若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;以及向用戶返回所述解析結(jié)果。
[0050]其中,所述根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器,包括:
[0051]將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址;
[0052]分析所述運(yùn)營數(shù)據(jù)得出歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù);
[0053]按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫;
[0054]所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,包括:
[0055]本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址。
[0056]實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:
[0057]本發(fā)明實(shí)施例通過預(yù)先建立本地DNS服務(wù)器,接收到用戶DNS請求時(shí),先查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄;若無,則向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求;本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理;DNS代理若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果返回給用戶,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果返回給用戶。本發(fā)明的方案,當(dāng)外部DNS服務(wù)器出現(xiàn)問題,無法正常返回查詢結(jié)果時(shí),DNS代理仍然能正常為用戶提供域名解釋服務(wù),有效地降低了 DNS代理對外部DNS服務(wù)器的依賴,使DNS代理更加穩(wěn)定可靠。
【專利附圖】
【附圖說明】
[0058]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0059]圖1是現(xiàn)有技術(shù)的實(shí)現(xiàn)DNS代理的示意圖。
[0060]圖2是現(xiàn)有技術(shù)的DNS代理的實(shí)現(xiàn)流程圖。
[0061]圖3是本發(fā)明第一實(shí)施例的一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法流程示意圖。
[0062]圖4是本發(fā)明第一實(shí)施例的實(shí)現(xiàn)DNS代理的示意圖。
[0063]圖5是本發(fā)明第一實(shí)施例中建立本地DNS服務(wù)器的實(shí)現(xiàn)流程圖。
[0064]圖6是本發(fā)明第一實(shí)施例中本地DNS服務(wù)器獲取對應(yīng)IP地址的實(shí)現(xiàn)流程圖。
[0065]圖7是本發(fā)明第二實(shí)施例的一種實(shí)現(xiàn)可離線化DNS服務(wù)的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0066]下面結(jié)合本發(fā)明的附圖對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0067]結(jié)合圖3-圖6對本發(fā)明的第一實(shí)施例進(jìn)行說明。
[0068]圖3是本發(fā)明第一實(shí)施例的一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法流程圖,詳述如下:
[0069]步驟11,根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器。
[0070]在第一實(shí)施例中,將DNS代理的歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址。通過分析所述運(yùn)營數(shù)據(jù)得出對應(yīng)的歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù)。然后按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫,以建立本地DNS服務(wù)器。
[0071]步驟12,DNS代理接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄。
[0072]DNS代理接收到用戶DNS請求后,會分析請求的內(nèi)容,獲取用戶DNS請求的域名、用戶的源IP,通過用戶的源IP確實(shí)用戶的視圖號。然后查找本地緩存。
[0073]步驟13,若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則DNS代理的向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求。
[0074]若本地緩存有與該用戶DNS請求對應(yīng)的記錄,即若本地緩存有與該視圖號和域名對應(yīng)的記錄,則把結(jié)果返回給相應(yīng)的用戶,完成一個(gè)DNS解析過程。若無,根據(jù)視圖號,向外部DNS服務(wù)器轉(zhuǎn)發(fā)所述用戶DNS請求,同時(shí)向本地DNS服務(wù)器轉(zhuǎn)發(fā)所述用戶DNS請求。
[0075]步驟14,接收本地DNS服務(wù)器提供的與該用戶DNS請求對應(yīng)的IP地址,所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理。
[0076]該步驟之前,本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址,并延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理。本實(shí)施例中,所述本地?cái)?shù)據(jù)庫為非關(guān)系型數(shù)據(jù)庫;所述非關(guān)系型數(shù)據(jù)庫中,將視圖號和域名作為鍵,IP地址作為值。因此本地DNS服務(wù)器可通過鍵(視圖號+域名)向非關(guān)系型數(shù)據(jù)庫中拿數(shù)據(jù),得到對應(yīng)的值(IP地址)。
[0077]步驟15,DNS代理若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;向用戶返回所述解析結(jié)果。
[0078]本實(shí)施例中,步驟14中的預(yù)設(shè)時(shí)間大于正常情況下外部DNS服務(wù)器返回?cái)?shù)據(jù)所需的時(shí)間,由此保證在外部DNS服務(wù)器正常的情況下,DNS代理一定是先收到外部DNS服務(wù)器返回的IP地址,外部DNS服務(wù)器返回的結(jié)果就是解析結(jié)果寫入本地緩存,并將該IP地址響應(yīng)給用戶。當(dāng)外部DNS服務(wù)器不正常或者網(wǎng)絡(luò)出現(xiàn)故障時(shí),DNS代理則只能收到本地DNS服務(wù)器返回的IP地址,將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,同時(shí)把此次解析結(jié)果保存到本地緩存中,再把代理信息以字符串形式通過syslog保存到本地硬盤,以更新所述運(yùn)營數(shù)據(jù)。
[0079]較佳的,本實(shí)施例中,若本地DNS服務(wù)器提供的所述IP地址作為解析結(jié)果時(shí),生成包含所述用戶DNS請求、所述IP地址的代理記錄,并將該代理記錄的TTL設(shè)置得很短(30秒),使其小于等于默認(rèn)代理記錄的生存時(shí)間;所以該條緩存很快就會失效(30秒,在這30秒內(nèi),用戶使用的結(jié)果都由緩存提供),該條緩存失效后會再向外部DNS服務(wù)器和本地DNS服務(wù)器轉(zhuǎn)發(fā)DNS請求。通過該方式讓該條緩存時(shí)間快速失效,提高緩存更新的頻率。
[0080]通過本發(fā)明第一實(shí)施例,當(dāng)外部DNS服務(wù)器出現(xiàn)問題,無法正常返回DNS解析結(jié)果時(shí),DNS代理仍然能正常為用戶提供域名解析服務(wù),有效地降低了 DNS代理對外部DNS服務(wù)器的依賴,使得DNS代理更加穩(wěn)定可靠。
[0081]下面對本發(fā)明第一實(shí)施例中建立本地DNS服務(wù)器進(jìn)行詳細(xì)說明。
[0082]如圖5所示,本發(fā)明第一實(shí)施例中根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器包括如下步驟:
[0083]步驟21,將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址。
[0084]本實(shí)施例中,通過系統(tǒng)syslog服務(wù),定期(以每一個(gè)鐘一個(gè)文件的格式)將代理過的若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址以字符串形式寫入本地硬盤,以生成運(yùn)營數(shù)據(jù)。
[0085]步驟22,按照第一時(shí)間周期對所述運(yùn)營數(shù)據(jù)進(jìn)行一次分析,以得出各用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的若干IP地址、以及域名被解析為各IP地址的次數(shù)。
[0086]例如,每I小時(shí)分析一次syslog產(chǎn)生的運(yùn)營數(shù)據(jù),生成中間結(jié)果,中間結(jié)果形式如:
[0087]2www.efly.cc 1.1.1.1:3 1.1.1.2:5[0088]意思是,在視圖2中,www.efly.cc這域名,被解釋成1.1.1.1為3次,被解釋成
1.1.1.2 為 5 次。
[0089]步驟23,按照第二時(shí)間周期對所述一次分析的結(jié)果進(jìn)行二次分析,以對各域名被解析為對應(yīng)IP地址的次數(shù)進(jìn)行統(tǒng)計(jì),得出歷史解析記錄。所述第二時(shí)間周期大于兩倍所述第一時(shí)間周期。
[0090]例如,每天分析一次所述中間結(jié)果,生成最終結(jié)果,格式和所述中間結(jié)果基本一致,只是二次分析的結(jié)果是通過中間結(jié)果相加得到的最終結(jié)果。
[0091]步驟24,按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫。
[0092]本實(shí)施例中,對每個(gè)域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序后,取每個(gè)域名對應(yīng)的IP地址次數(shù)最多的4個(gè),把這4個(gè)結(jié)果保存到非關(guān)系型數(shù)據(jù)庫:以視圖號+域名作為鍵,IP結(jié)果作為值。
[0093]優(yōu)選的,本實(shí)施例用的是mongodb非關(guān)系型數(shù)據(jù)庫。
[0094]請參考圖6,本實(shí)施例中本地DNS服務(wù)器獲取與用戶DNS請求對應(yīng)的IP地址,即以所述非關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)為基礎(chǔ),提供本地DNS服務(wù)的具體流程如下:
[0095]步驟41,本地DNS服務(wù)器開啟若干線程,分別用于監(jiān)聽所述非關(guān)系型數(shù)據(jù)庫中的各視圖號的DNS請求。
[0096]本地DNS服務(wù)器會根據(jù)所述非關(guān)系型數(shù)據(jù)庫中出現(xiàn)過的視圖個(gè)數(shù),開啟相應(yīng)數(shù)量的本地DNS服務(wù)線程。例如,所述非關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)分別由視圖1和視圖2這兩個(gè)視圖所產(chǎn)生的,本地DNS服務(wù)就會開兩個(gè)線程。
[0097]步驟42,所述線程分別監(jiān)聽與各視圖號對應(yīng)的UDP端口。
[0098]本實(shí)施例中,第一個(gè)線程監(jiān)聽UDP端口 10001(10000+視圖號),為視圖為I的DNS請求服務(wù);第二個(gè)線程監(jiān)聽m)P端口 10002,為視圖2的DNS請求服務(wù)
[0099]步驟43,接收DNS代理轉(zhuǎn)發(fā)的用戶DNS請求。
[0100]當(dāng)某一線程監(jiān)聽到UDP端口有DNS請求時(shí),提取該DNS請求中的域名。例如,當(dāng)有一視圖為I的DNS請求發(fā)送到UDP端口 10001時(shí),提取該DNS請求中的域名。
[0101]步驟44,通過該域名和對應(yīng)的視圖號查詢所述非關(guān)系型數(shù)據(jù)庫,獲取對應(yīng)的IP地址。
[0102]本實(shí)施例中,DNS代理向用戶返回所述解析結(jié)果,具體過程包括:生成包含所述用戶DNS請求、所述解析結(jié)果的代理記錄;DNS代理存儲所述解析結(jié)果到本地緩存;若所述解析結(jié)果為本地DNS服務(wù)器提供的IP地址,則隨機(jī)生成預(yù)設(shè)范圍內(nèi)的一個(gè)時(shí)間值作為該條代理記錄的生存時(shí)間,以使該代理記錄的生存時(shí)間小于等于默認(rèn)代理記錄的生存時(shí)間;DNS代理以數(shù)據(jù)包的形式向用戶返回所述解析結(jié)果。其中所述預(yù)設(shè)范圍可為30秒?60秒,只要滿足該范圍內(nèi)的任一值均小于默認(rèn)代理記錄的生存時(shí)間即可。
[0103]換言之,本實(shí)施例中程序通過鍵(視圖號+域名)向非關(guān)系型數(shù)據(jù)庫中拿數(shù)據(jù),得到對應(yīng)的值(IP地址串)后,就可以組織回復(fù)包。組織回復(fù)包時(shí),程序特意把DNS代理資源記錄的TTL設(shè)置得很短,以讓該條緩存快速失效,提高緩存更新的頻率;同時(shí)本地DNS服務(wù)器獲得與該用戶DNS請求對應(yīng)的IP地址后,特意延遲預(yù)設(shè)時(shí)間后再把回復(fù)包發(fā)送給用戶。DNS代理在向外部DNS服務(wù)器轉(zhuǎn)發(fā)用戶DNS請求的同時(shí),會把用戶DNS請求轉(zhuǎn)發(fā)給本地DNS服務(wù)器的相應(yīng)端口(根據(jù)視圖選擇端口,如視圖1選擇端口 10001,即10000+視圖號),并把得到的最快回復(fù)的結(jié)果作為最終解析結(jié)果(這也是為什么要延遲預(yù)設(shè)時(shí)間發(fā)送本地DNS服務(wù)器返回的結(jié)果的原因:當(dāng)外部DNS服務(wù)器正常時(shí),其返回對應(yīng)IP地址的速度一定比本地DNS服務(wù)器快,外部DNS服務(wù)器返回的結(jié)果就是最終解析結(jié)果),將最終解析結(jié)果寫入本地緩存后返回給用戶。當(dāng)外部DNS服務(wù)器出問題時(shí),外部DNS服務(wù)器沒有回復(fù),DNS代理只收到本地DNS服務(wù)器提供的結(jié)果,本地DNS服務(wù)器返回的結(jié)果就是最終解析結(jié)果,將該最終解析結(jié)果寫入本地緩存后返回給用戶,此時(shí)將該條DNS代理記錄TTL設(shè)置得很短(30秒),所以該條緩存很快就會失效,以在外部DNS服務(wù)器恢復(fù)正常時(shí)及時(shí)更新本地緩存。
[0104]通過上述實(shí)施例,提供利用DNS代理的歷史代理記錄,通過數(shù)據(jù)分析和非關(guān)系型數(shù)據(jù)存儲,提供本地DNS服務(wù),進(jìn)而實(shí)現(xiàn)可離線化的DNS代理服務(wù)。本發(fā)明的方案,當(dāng)外部DNS服務(wù)器出現(xiàn)問題,無法正常返回查詢結(jié)果時(shí),DNS代理仍然能正常為用戶提供域名解釋服務(wù),有效地降低了 DNS代理對外部DNS服務(wù)器的依賴,使DNS代理更加穩(wěn)定可靠。
[0105]以下為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)可離線化DNS服務(wù)的裝置的實(shí)施例。所述裝置的實(shí)施例與上述的方法實(shí)施例屬于同一構(gòu)思,裝置的實(shí)施例中未詳盡描述的細(xì)節(jié)內(nèi)容,可以參考上述方法實(shí)施例。
[0106]圖7示出了本發(fā)明第二實(shí)施例的一種實(shí)現(xiàn)可離線化DNS服務(wù)的裝置的結(jié)構(gòu)示意圖,下面進(jìn)行詳細(xì)說明。
[0107]請參見圖7,所述裝置包括:構(gòu)建單元701、緩存查詢單元702、請求轉(zhuǎn)發(fā)單元703、本地解析單元704、請求響應(yīng)單元705。
[0108]所述構(gòu)建單元701,用于根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器。
[0109]在第二實(shí)施例中,根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器的具體過程包括:將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址;分析所述運(yùn)營數(shù)據(jù)得出對應(yīng)的歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù);按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫。優(yōu)選的,所述本地?cái)?shù)據(jù)庫為非關(guān)系型數(shù)據(jù)庫;所述非關(guān)系型數(shù)據(jù)庫中,將視圖號和域名作為鍵,IP地址作為值。具體請參考第一實(shí)施例所述。
[0110]所述緩存查詢單元702,用于接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄。
[0111]在第二實(shí)施例中,所述緩存查詢單元702接收到用戶DNS請求后,會分析請求的內(nèi)容,獲取用戶DNS請求的域名、用戶的源IP,通過用戶的源IP確實(shí)用戶的視圖號。然后查找本地緩存。具體請參考第一實(shí)施例所述。
[0112]所述請求轉(zhuǎn)發(fā)單元703,用于若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求。
[0113]在第二實(shí)施例中,若本地緩存有與該用戶DNS請求對應(yīng)的記錄,即若本地緩存有與該視圖號和域名對應(yīng)的記錄,所述請求轉(zhuǎn)發(fā)單元703則把結(jié)果返回給相應(yīng)的用戶,完成一個(gè)DNS解析過程。若無,所述請求轉(zhuǎn)發(fā)單元703則根據(jù)視圖號,向外部DNS服務(wù)器轉(zhuǎn)發(fā)所述用戶DNS請求,同時(shí)向本地DNS服務(wù)器轉(zhuǎn)發(fā)所述DNS請求。具體請參考第一實(shí)施例所述。[0114]所述本地解析單元704,用于接收本地DNS服務(wù)器返回的與該用戶DNS請求對應(yīng)的IP地址,所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回。
[0115]其中,本地DNS服務(wù)器提供與該用戶DNS請求對應(yīng)的IP地址的具體過程為:查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址。本實(shí)施例中,即在所述非關(guān)系型數(shù)據(jù)庫中,將視圖號和域名作為鍵,IP地址作為值。因此本地DNS服務(wù)器可通過鍵(視圖號+域名)向非關(guān)系型數(shù)據(jù)庫中拿數(shù)據(jù),得到對應(yīng)的值(IP地址)。具體請參考第一實(shí)施例所述。
[0116]所述請求響應(yīng)單元705,用于若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;以及向用戶返回所述解析結(jié)果。
[0117]所述請求響應(yīng)單元705向用戶返回所述解析結(jié)果的具體過程包括:生成包含所述用戶DNS請求、所述解析結(jié)果的代理記錄;存儲所述解析結(jié)果到本地緩存;若所述解析結(jié)果為本地DNS服務(wù)器提供的IP地址,則隨機(jī)生成預(yù)設(shè)范圍內(nèi)的一個(gè)時(shí)間值作為該條代理記錄的生存時(shí)間,以使該代理記錄的生存時(shí)間小于等于默認(rèn)代理記錄的生存時(shí)間;以數(shù)據(jù)包的形式向用戶返回所述解析結(jié)果。此外,定期再把代理信息以字符串形式通過syslog保存到本地硬盤,以更新所述運(yùn)營數(shù)據(jù)。
[0118]當(dāng)外部DNS服務(wù)器正常時(shí),返回對應(yīng)的IP地址一定比本地DNS服務(wù)器快,外部DNS服務(wù)器返回的結(jié)果就是最終解析結(jié)果,寫入本地緩存后返回給用戶。當(dāng)外部DNS服務(wù)器出問題時(shí),則收不到外部DNS服務(wù)器返回的IP地址,DNS代理只收到本地DNS服務(wù)器發(fā)回來的結(jié)果,則將本地DNS服務(wù)器返回的結(jié)果作為最終解析結(jié)果并寫入了緩存中。
[0119]本實(shí)施例中,向用戶返回所述解析結(jié)果具體過程包括:生成包含所述用戶DNS請求、所述解析結(jié)果的代理記錄;DNS代理存儲所述解析結(jié)果到本地緩存;若所述解析結(jié)果為本地DNS服務(wù)器提供的IP地址,則隨機(jī)生成預(yù)設(shè)范圍內(nèi)的一個(gè)時(shí)間值作為該條代理記錄的生存時(shí)間,以使該代理記錄的生存時(shí)間小于等于默認(rèn)代理記錄的生存時(shí)間;DNS代理以數(shù)據(jù)包的形式向用戶返回所述解析結(jié)果。其中所述預(yù)設(shè)范圍可為30秒?60秒,只要滿足該范圍內(nèi)的任一值均小于默認(rèn)代理記錄的生存時(shí)間即可。
[0120]通過上述實(shí)施例,利用DNS代理的歷史代理記錄,通過數(shù)據(jù)分析和非關(guān)系型數(shù)據(jù)存儲,提供本地DNS服務(wù)器,進(jìn)而實(shí)現(xiàn)可離線化的DNS代理服務(wù)。當(dāng)外部DNS服務(wù)器出現(xiàn)問題,無法正常返回解析結(jié)果時(shí),DNS代理仍然能正常為用戶提供域名解析服務(wù),有效地降低了 DNS代理對外部DNS服務(wù)器的依賴,令DNS代理更加穩(wěn)定可靠。
[0121]以上所揭露的僅為本發(fā)明較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利要求范圍,因此,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,仍屬本發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1.一種實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,包括: 根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器; DNS代理接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄; 若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則DNS代理向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求; 本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回給DNS代理; DNS代理若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;向用戶返回所述解析結(jié)果。
2.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器,包括: DNS代理將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址; 分析所述運(yùn)營數(shù)據(jù)得出歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù); 按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫; 所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,包括: 本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址。
3.根據(jù)權(quán)利要求2所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述分析所述運(yùn)營數(shù)據(jù)得出 對應(yīng)的歷史解析記錄,包括: 按照第一時(shí)間周期對所述運(yùn)營數(shù)據(jù)進(jìn)行一次分析,以得出各用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的若干IP地址、以及域名被解析為各IP地址的次數(shù); 按照第二時(shí)間周期對所述一次分析的結(jié)果進(jìn)行二次分析,以對各域名被解析為對應(yīng)IP地址的次數(shù)進(jìn)行統(tǒng)計(jì),得出所述歷史解析記錄; 所述第二時(shí)間周期大于兩倍所述第一時(shí)間周期。
4.根據(jù)權(quán)利要求2所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),具體為: 定期將代理過的若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址以字符串形式通過syslog寫入本地硬盤,以生成運(yùn)營數(shù)據(jù)。
5.根據(jù)權(quán)利要求2所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述本地?cái)?shù)據(jù)庫為非關(guān)系型數(shù)據(jù)庫; 所述非關(guān)系型數(shù)據(jù)庫中,將視圖號和域名作為鍵,IP地址作為值。
6.根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址,包括: 本地DNS服務(wù)器開啟若干線程,分別用于監(jiān)聽所述非關(guān)系型數(shù)據(jù)庫中的各視圖號的DNS請求; 所述線程分別監(jiān)聽與各視圖號對應(yīng)的UDP端口 ;當(dāng)某一線程監(jiān)聽到m)P端口有DNS請求時(shí),提取該DNS請求中的域名,通過該域名和對應(yīng)的視圖號查詢所述非關(guān)系型數(shù)據(jù)庫,獲取對應(yīng)的IP地址。
7.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)可離線化DNS服務(wù)的方法,其特征在于,所述向用戶返回所述解析結(jié)果,具體為: 生成包含所述用戶DNS請求、所述解析結(jié)果的代理記錄; DNS代理存儲所述解析結(jié)果到本地緩存;若所述解析結(jié)果為本地DNS服務(wù)器提供的IP地址,則隨機(jī)生成預(yù)設(shè)范圍內(nèi)的一個(gè)時(shí)間值作為該條代理記錄的生存時(shí)間,以使該代理記錄的生存時(shí)間小于等于默認(rèn)代理記錄的生存時(shí)間; DNS代理以數(shù)據(jù)包的形式向用戶返回所述解析結(jié)果。
8.—種可離線化DNS服務(wù)的裝置,其特征在于,包括: 構(gòu)建單元,用于根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器; 緩存查詢單元,用于接收到用戶DNS請求,查詢本地緩存是否有與該用戶DNS請求對應(yīng)的記錄; 請求轉(zhuǎn)發(fā)單元,用于若本地緩存無與該用戶DNS請求對應(yīng)的記錄,則向外部DNS服務(wù)器、本地DNS服務(wù)器轉(zhuǎn)發(fā)該用戶DNS請求;本地解析單元,用接收本地DNS服務(wù)器返回的與該用戶DNS請求對應(yīng)的IP地址,所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,延遲預(yù)設(shè)時(shí)間后將該IP地址返回;請求響應(yīng)單元,用于若先收到本地DNS服務(wù)器返回的IP地址,則將本地DNS服務(wù)器返回的所述IP地址作為解析結(jié)果,若先收到外部DNS服務(wù)器返回的IP地址,則將外部DNS服務(wù)器返回的IP地址作為解析結(jié)果;以及向用戶返回所述解析結(jié)果。
9.根據(jù)權(quán)利要求8所述的可離線化DNS服務(wù)的裝置,其特征在于,所述根據(jù)DNS代理的歷史代理記錄建立本地DNS服務(wù)器,包括: 將歷史代理記錄寫入系統(tǒng)日志以生成運(yùn)營數(shù)據(jù),所述歷史代理記錄包括若干用戶DNS請求、以及各用戶DNS請求對應(yīng)的IP地址; 分析所述運(yùn)營數(shù)據(jù)得出歷史解析記錄,每條歷史解析記錄包括用戶DNS請求所屬的視圖號、域名、域名對應(yīng)的IP地址、以及域名被解析為該IP地址的次數(shù); 按照所述次數(shù)對各域名對應(yīng)的IP地址的歷史解析記錄進(jìn)行排序,分別提取各域名對應(yīng)的IP地址的歷史解析記錄中次數(shù)最多的前4條保存到本地?cái)?shù)據(jù)庫; 所述本地DNS服務(wù)器獲取與該用戶DNS請求對應(yīng)的IP地址,包括: 本地DNS服務(wù)器查找本地?cái)?shù)據(jù)庫,獲取與該用戶DNS請求對應(yīng)的IP地址。
【文檔編號】H04L29/12GK103929507SQ201410175344
【公開日】2014年7月16日 申請日期:2014年4月28日 優(yōu)先權(quán)日:2014年4月28日
【發(fā)明者】何作祥, 李坤祥, 易建仁 申請人:廣東睿江科技有限公司