張?zhí)靽?guó)
摘要:為了在內(nèi)網(wǎng)為域模式、ISP網(wǎng)絡(luò)接入的環(huán)境下,當(dāng)兩個(gè)ISP線路都正常時(shí),不同ISP網(wǎng)絡(luò)中的用戶使用對(duì)應(yīng)的網(wǎng)絡(luò)地址來(lái)訪問(wèn)內(nèi)網(wǎng)服務(wù)器,而當(dāng)一條線路不正常時(shí),相應(yīng)線路的ISP網(wǎng)絡(luò)中用戶能自動(dòng)切換到另一條正常的線路,策略路由技術(shù)與靜態(tài)網(wǎng)絡(luò)地址轉(zhuǎn)換帶DNS應(yīng)答修改技術(shù)相結(jié)合的方法被提出。結(jié)果表明,此方法可行。
關(guān)鍵詞:活動(dòng)目錄;Y&ISP接入;鏈路跟蹤;策略路由;智能DNS;鏈路負(fù)載平衡
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)14-0025-02
1概述
雙ISP接人是為了解決跨運(yùn)營(yíng)商網(wǎng)絡(luò)訪問(wèn)時(shí)運(yùn)營(yíng)商之間相互限制所導(dǎo)致的帶寬瓶頸問(wèn)題,為實(shí)現(xiàn)雙ISP接入時(shí)外網(wǎng)快速訪問(wèn)園區(qū)網(wǎng)內(nèi)部資源服務(wù)器,許多論文報(bào)導(dǎo)都是采用策略路由技術(shù)與名稱服務(wù)器BIND9的VIEW功能相結(jié)合的方法,但是以上重復(fù)的報(bào)導(dǎo)在效果上都存在一個(gè)問(wèn)題——由于BIND的VIEW功能只能根據(jù)DNS請(qǐng)求包的源地址來(lái)作應(yīng)答的,比如請(qǐng)求包來(lái)源為電信網(wǎng)絡(luò)的則返回電信網(wǎng)內(nèi)的IP地址,但是BIND9并不能檢測(cè)其所返回給用戶的地址是否用戶可以訪問(wèn),所以,當(dāng)接入ISP網(wǎng)絡(luò)的兩條線路中的其中的一條出現(xiàn)故障時(shí),會(huì)造成相應(yīng)ISP網(wǎng)絡(luò)中的用戶不能訪問(wèn)園區(qū)網(wǎng)內(nèi)的Web服務(wù)器。為解決這種問(wèn)題,邱建波提出了在DNS服務(wù)器上監(jiān)視各條ISP鏈路通斷狀況,再根據(jù)監(jiān)視結(jié)果用計(jì)劃任務(wù)crontab來(lái)自動(dòng)切換BIND的配置文件的方法。雖然這種DNS服務(wù)器對(duì)外服務(wù)時(shí)能實(shí)現(xiàn)用戶就近訪問(wèn)和線路故障切換,但是如果內(nèi)網(wǎng)是域模式時(shí)還得要另外部署與AD集成的Windows DNS服務(wù)器。目前還沒(méi)有見(jiàn)到域模式雙ISP接人環(huán)境下只使用Windows DNS服務(wù)器來(lái)解決外網(wǎng)快速訪問(wèn)內(nèi)網(wǎng)資源服務(wù)器的方法相關(guān)報(bào)道。要適合內(nèi)網(wǎng)為域模式網(wǎng)絡(luò)環(huán)境,并且做到內(nèi)網(wǎng)服務(wù)器提供的服務(wù)對(duì)外網(wǎng)總是可用,可以采用以下方法:一是采用鏈路負(fù)載平衡設(shè)備,這類(lèi)設(shè)備對(duì)內(nèi)部DNS服務(wù)器沒(méi)有要求,能探測(cè)各條ISP鏈路的狀態(tài),根據(jù)探測(cè)結(jié)果智能地修改DNS應(yīng)答包,保證當(dāng)各ISP接入鏈路正常時(shí),各個(gè)ISP網(wǎng)絡(luò)的用戶使用相對(duì)應(yīng)的ISP網(wǎng)絡(luò)地址快速訪問(wèn)內(nèi)網(wǎng)內(nèi)部服務(wù)器,而當(dāng)某條ISP接入鏈路出現(xiàn)故障時(shí),則會(huì)把相應(yīng)ISP用戶的DNS查詢解析到另外一個(gè)正常的ISP地址,保證外網(wǎng)用戶總是能訪問(wèn)內(nèi)網(wǎng)服務(wù)器。但是這種方法是要增加硬件投人;二是本文將要提出的方法,即采用鏈路跟蹤、策略路由、NAT和DNS應(yīng)答修改技術(shù)相結(jié)合的方法,這不需要DNS服務(wù)器BIND的VIEW功能,可以用任何DNS服務(wù)器。
2方法
DNS的解析過(guò)程大概是這樣的:假定用戶向本地的DNS服務(wù)器發(fā)送www.company.com域名請(qǐng)求,如果它有記錄或緩存中有,則返回給用戶,如果沒(méi)有則DNS服務(wù)器轉(zhuǎn)發(fā)查詢或查詢根域服務(wù)器(視服務(wù)器的配置),這里假定DNS服務(wù)器進(jìn)行根查詢,從根域DNS服務(wù)器得到到回答只能是com域的NS記錄,那么本地DNS服務(wù)器再查詢corn域的DNS服務(wù)器,同樣corn域的DNS服務(wù)器只能告訴二級(jí)域company.corn的NS記錄,如果本地DNS服務(wù)器得到的回答是多個(gè)Ns記錄,那么本地DNS服務(wù)器先向其中的一個(gè)NS發(fā)送請(qǐng)求(使用順序取決于本地DNS解析器的配置),如果在超時(shí)時(shí)間內(nèi)沒(méi)有響應(yīng),則向下一個(gè)NS查詢,直到有一個(gè)DNS服務(wù)器給出了應(yīng)答。查詢第一個(gè)DNS服務(wù)器如果沒(méi)有響應(yīng)則自動(dòng)查詢第二個(gè)、第三個(gè)DNS服務(wù)器,DNS查詢的這種行為是本文所提出的方法所依賴的。
防火墻一般都具有DNS應(yīng)答包修改的功能,可以把DNS應(yīng)答包中的A記錄修改成網(wǎng)絡(luò)管理員所指定的IP地址。當(dāng)然,所有防火墻都有網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)功能。本方法也依賴這兩個(gè)功能。
策略路由在不同的路由器上功能略有不同,有的只能根據(jù)源地址來(lái)選路,有的可以根據(jù)源目地址、源目端口、協(xié)議這五元組來(lái)選路,還有的路由器能進(jìn)一步根據(jù)上游鏈路質(zhì)量來(lái)決定是否起用這條策略路由。而鏈路質(zhì)量的監(jiān)測(cè)則依賴服務(wù)等級(jí)協(xié)議(Service Level Agreement,SLA)。本方法要求做策略路由的路由器支持鏈路跟蹤功能。并且策略路由配置的要求為:(參見(jiàn)圖1)當(dāng)內(nèi)部路由器到ISP-A的DNS服務(wù)器DNS-A之間的鏈路正常時(shí),所有去往ISP-A的數(shù)據(jù)包從防火墻FW-A走;同樣,當(dāng)內(nèi)部路由器到ISP-B的DNS服務(wù)器之間的鏈路正常時(shí),所有去往ISP-B的數(shù)據(jù)包都轉(zhuǎn)發(fā)給防火墻B;而當(dāng)其中的一條鏈路不正常時(shí),所有的數(shù)據(jù)包都從另一條正常的鏈路所連接的防火墻轉(zhuǎn)發(fā)。
假定某企業(yè)從兩個(gè)不同的ISP分別申請(qǐng)了地址100.0.0.53和200.0.0.53給內(nèi)部DNS服務(wù)器使用,還分別向兩個(gè)ISP申請(qǐng)了100.0.0.80和200.0.0.80兩個(gè)地址給內(nèi)部Web服務(wù)器使用,購(gòu)買(mǎi)域名company.com時(shí)注冊(cè)了兩個(gè)NS地址100.0.0.53和200.0.0.53。內(nèi)部Web服務(wù)器所承載網(wǎng)站的域名是www.compa-ny.com,內(nèi)部Web服務(wù)器真實(shí)地址是10.0.0.80,在防火墻FW_A上的把它靜態(tài)映射為100.0.0.80,在防火墻FW_B上靜態(tài)映射為200.0.0.80。內(nèi)部DNS服務(wù)器真實(shí)地址是10.0.0.53,在防火墻FW_A上靜態(tài)映射為100.0.0.53,在防火墻FW_B上靜態(tài)映射地址為200.0.0.53。在內(nèi)部與AD集成的Windows DNS服務(wù)器上,對(duì)域名www.company.com的A記錄配置為內(nèi)網(wǎng)地址10.0.0.80。
下面說(shuō)明原理:
參見(jiàn)圖1,當(dāng)外網(wǎng)用戶A在瀏覽器輸入http:∥www.company.com/訪問(wèn)內(nèi)網(wǎng)Web網(wǎng)站時(shí),首先要向本地DNS服務(wù)器(DNS-A)請(qǐng)求解析域名。如果DNS-A緩存中沒(méi)有記錄并假定它不轉(zhuǎn)發(fā)查詢,則它向根域DNS服務(wù)器查詢,根域DNS服務(wù)器返回com域的Ns記錄,接著它就向com域的DNS服務(wù)器查詢,com域的DNS服務(wù)器返回company.com域的NS記錄,也就是該企業(yè)注冊(cè)的100.0.0.53和200.0.0.53,于是就向其中的一個(gè)服務(wù)器查詢。下面分兩種情況來(lái)說(shuō)明:
一種情況是它先向100.0.0.53地址來(lái)請(qǐng)求域名www.compa-ny.com的解析,防火墻A收到這個(gè)請(qǐng)求包后就把目的地址轉(zhuǎn)換為10.0.0.53,當(dāng)內(nèi)部DNS服務(wù)器收到這個(gè)請(qǐng)求包后返回應(yīng)答包,應(yīng)答包中的A記錄是10.0.0.80,源地址是10.0.0.53目的地址是DNS-A的地址,這個(gè)應(yīng)答包經(jīng)過(guò)路由器時(shí),路由器根據(jù)策略路由把數(shù)據(jù)包轉(zhuǎn)發(fā)給防火墻A,而防火墻A會(huì)把其中的A記錄修改為100.0.0.80,并把源地址轉(zhuǎn)換為100.0.0.53,這樣,DNS-A得到www.company.eom的解析是100.0.0.80,它再把結(jié)果返回給用戶A,那么用戶A將以100.0.0.80來(lái)訪問(wèn)內(nèi)部Web服務(wù)器10.0.0.80而不是以200.0.0.80來(lái)訪問(wèn),也就是就近訪問(wèn)。另一種情況是,如果ISP-A的DNS服務(wù)器DNS-A先使用的是200.0.0.53來(lái)請(qǐng)求域名解析,當(dāng)防火墻B收到這個(gè)請(qǐng)求包后會(huì)把目的地址轉(zhuǎn)換為10.0.0.53,內(nèi)部DNS服務(wù)器收到請(qǐng)求包將作出響應(yīng),而應(yīng)答包經(jīng)過(guò)內(nèi)部路由器時(shí)會(huì)根據(jù)策略路由把它發(fā)給防火墻A,因?yàn)槟康牡刂肥俏挥贗SP-A網(wǎng)絡(luò),而防火墻A會(huì)把源地址轉(zhuǎn)換為100.0.0.53后再發(fā)出去,DNS-A收到這個(gè)包后由于源地址是100.0.0.53而不是200.0.0.53所以丟棄這個(gè)包,DNS解析行為是如果查詢第一個(gè)NS沒(méi)有響應(yīng)則依次向下面的NS查詢,那么DNS-A將會(huì)向另一個(gè)地址100.0.0.53發(fā)送域名解析請(qǐng)求。所以不管DNS-A先使用哪個(gè)地址來(lái)進(jìn)行域名解析,最終它能成功得到解析的是向100.0.0.53這個(gè)地址發(fā)送的域名解析請(qǐng)求,而得到的解析結(jié)果一定是100.0.0.80。同理,對(duì)于另外的一個(gè)ISP網(wǎng)絡(luò)中的用戶,對(duì)域名www.company.com得到的解析結(jié)果一定是200.0.0.80。這樣每個(gè)ISP網(wǎng)絡(luò)中的用戶都是就近訪問(wèn)而不是繞ISP網(wǎng)絡(luò)的。
以上討論的是當(dāng)兩條鏈路都正常時(shí)的情況,如果兩條鏈路(DNS-A到FW-A到路由器、DNS-B到FW-B到路由器)其中的一條出現(xiàn)故障,外網(wǎng)用戶對(duì)內(nèi)部服務(wù)器的訪問(wèn)流量會(huì)自動(dòng)遷移到另一條正常的鏈路,下面給出解釋:
假設(shè)DNS-A到防火墻A到路由器這條鏈路出現(xiàn)了問(wèn)題,那么ISP-A中的用戶此時(shí)無(wú)論如何也不能用100.0.0.80來(lái)訪問(wèn)www.company.com了。當(dāng)用戶A的DNS緩存記錄超時(shí)后會(huì)重新向DNS-A發(fā)送域名解析請(qǐng)求,同樣地DNS-A緩存中的www.company.com對(duì)應(yīng)100.0.0.80的記錄也會(huì)超時(shí),TTL到期后它如果向100.0.0.53發(fā)送請(qǐng)求肯定收不到應(yīng)答的一因?yàn)殒溌穯?wèn)題,所以DNS-A只能向200.0.0.53這個(gè)地址發(fā)送域名解析請(qǐng)求才可能有應(yīng)答。簡(jiǎn)單說(shuō)明一下此時(shí)數(shù)據(jù)包的轉(zhuǎn)發(fā)過(guò)程:當(dāng)防火墻B收到ISP-A網(wǎng)絡(luò)中的DNS-A的發(fā)送的域名解析請(qǐng)求包后,將目的地址~0.0.0.53轉(zhuǎn)換為10.0.0.53,之后將它轉(zhuǎn)發(fā)給內(nèi)部路由器,路由器再轉(zhuǎn)發(fā)給內(nèi)部DNS服務(wù)器10.0.0.53,DNS服務(wù)器作出響應(yīng),應(yīng)答包的源地址為10.0.0.53目的地址為DNS-A的地址,數(shù)據(jù)包內(nèi)的載荷部分的A記錄為www.company.com=10.0.0.80,這個(gè)應(yīng)答包經(jīng)過(guò)路由器時(shí)路由器查找路由表,由于此時(shí)去往ISP-A的鏈路不通,所以根據(jù)策略路由將數(shù)據(jù)轉(zhuǎn)發(fā)給防火墻FW-B,F(xiàn)W-B將數(shù)據(jù)包載荷中A記錄修改為www.com-pany.com=200.0.0.80,并將源地址10.0.0.53轉(zhuǎn)換為200.0.0.53,所以DNS-A這時(shí)得到的解析結(jié)果是200.0.0.80而不是100.0.0.80,并將這個(gè)結(jié)果返回給用戶A。這條鏈路的故障對(duì)另外一個(gè)ISP網(wǎng)絡(luò)中的用戶是沒(méi)有影響的,所以所有的外網(wǎng)用戶的訪問(wèn)流量都遷移到這條正常的鏈路。如果那條故障的鏈路又恢復(fù)了,那么又要等到DNS緩存中的記錄超時(shí)后重新進(jìn)行域名解析,ISP-A網(wǎng)絡(luò)中的用戶得到的解析結(jié)果又變成100.0.0.80。所以這種方法能夠?qū)崿F(xiàn)鏈路故障自動(dòng)切換。
3主要的配置
路由器上的track的配置、sla的配置以及策略路由的配置本文省略,具體請(qǐng)參照文獻(xiàn)[7],不過(guò)sla監(jiān)視不要單純地監(jiān)視ISP的一個(gè)DNS服務(wù)器,因?yàn)橐粋€(gè)DNS服務(wù)器如果沒(méi)有響應(yīng)不代表這條鏈路有問(wèn)題,也許只是這臺(tái)DNS服務(wù)器出現(xiàn)了問(wèn)題。因而要用sla配置中布爾邏輯或[8]來(lái)監(jiān)視多臺(tái)DNS服務(wù)器。
在防火墻A上對(duì)DNS服務(wù)器地址的靜態(tài)映射(不一定要求靜態(tài)地址轉(zhuǎn)換,也可以使用端口映射)(本文的配置命令以ASA防火墻軟件版本8.4(2)為例):
object network DNSserver
host 10.0.0.53
nat finside,outsidel static 100.0.0.53 ∥把內(nèi)部DNS服務(wù)器地址10.0.0.53靜態(tài)映射到公網(wǎng)地址100.0.0.53
對(duì)Web服務(wù)器的地址轉(zhuǎn)換和DNS記錄修改的配置如下(由于要求DNS記錄修改,只能使用靜態(tài)NAT):
object network WebServer
host 10.0.0.80
nat(inside,outside)static 100.0.0.80 dns∥把內(nèi)部Web服務(wù)器地址10.0.0.80映射到公網(wǎng)地址100.0.0.80,后面跟的參數(shù)“dns”是用于告訴應(yīng)用檢查引擎修改DNS應(yīng)答包內(nèi)的A記錄的,如果有DNS應(yīng)答包從inside接口進(jìn)來(lái),就把A記錄10.0.0.80修改為100.0.0.80,如果有公網(wǎng)上DNS服務(wù)器的應(yīng)答包從outside接口進(jìn)來(lái),如果有100.0.0.80的A記錄,應(yīng)用檢查引擎將其修改為10.0.0.80
對(duì)DNS查詢流量與Web訪問(wèn)流量的放行配置如下:
access-hst 101 permit udp any host 10.0.0.53 eq domain
access-list 101 permit tcp any host 10.0.0.80 eq http
access-group 101 in interface outside ∥在FW_A上的out-side接口放行DNS查詢流量與Web訪問(wèn)流量。
4測(cè)試結(jié)果與分析
經(jīng)過(guò)實(shí)驗(yàn)測(cè)試表明,當(dāng)兩條ISP鏈路都正常時(shí),各個(gè)ISP網(wǎng)絡(luò)內(nèi)的用戶都是向相應(yīng)網(wǎng)絡(luò)的地址來(lái)訪問(wèn)內(nèi)部web服務(wù)器,即就近訪問(wèn),而當(dāng)某條鏈路出現(xiàn)故障后,相應(yīng)ISP網(wǎng)絡(luò)中的用戶會(huì)被迫自動(dòng)選擇另外ISP網(wǎng)絡(luò)地址進(jìn)行訪問(wèn)。另外,對(duì)于內(nèi)部用戶,無(wú)論用戶采用的是內(nèi)部DNS服務(wù)器,還是ISP_A或ISP_B的DNS服務(wù)器,對(duì)域名www.company.com的解析最終結(jié)果都是內(nèi)部地址10.0.0.80,因而并不影響內(nèi)網(wǎng)用戶對(duì)內(nèi)部Web服務(wù)器的訪問(wèn),并且對(duì)內(nèi)部DNS服務(wù)器沒(méi)有要求,可以用Windows的DNS服務(wù)器,因而能適用于域模式的內(nèi)網(wǎng)。但是,在發(fā)生鏈路切換時(shí),由于用戶瀏覽器還是使用上次域名解析結(jié)果來(lái)訪問(wèn)Web服務(wù)器,會(huì)造成短時(shí)間不能訪問(wèn)內(nèi)部Web服務(wù)器,其時(shí)間長(zhǎng)短與內(nèi)部DNS服務(wù)器上對(duì)域名www.company.com的A記錄的TTL設(shè)置長(zhǎng)短相關(guān),這里建議設(shè)置不要超過(guò)10秒。除了與TTL設(shè)置相關(guān)外,還與sla的監(jiān)視頻率設(shè)置有關(guān),如果周期過(guò)長(zhǎng),則路由表不能及時(shí)與鏈路狀況保持一致。本方法要求防火墻支持靜態(tài)NAT與DNS應(yīng)答修改功能,許多防火墻都支持這個(gè)功能,另外,內(nèi)部路由器要求支持基于目的地址的策略路由和鏈路跟蹤的功能。本方法不能只用一個(gè)防火墻的兩個(gè)接口來(lái)分別接人兩個(gè)ISP,因?yàn)樵谶@種拓?fù)湎虏呗月酚梢诜阑饓ι献?,外網(wǎng)用戶訪問(wèn)內(nèi)部DNS服務(wù)器時(shí),防火墻會(huì)建立會(huì)話,那么DNS服務(wù)器返回的數(shù)據(jù)包就會(huì)繞過(guò)策略路由而直接根據(jù)所建立的會(huì)話來(lái)選擇出接口,狀態(tài)防火墻的這種行為設(shè)備廠商一般把它叫做“快路徑”,而本方法要求內(nèi)部DNS服務(wù)器返回的數(shù)據(jù)包都要經(jīng)過(guò)策略路由來(lái)選路。