■湖北廣播電視大學(xué)教育技術(shù)中心 熊迪
隨著近年來(lái)高校信息化應(yīng)用的不斷深入,對(duì)校園網(wǎng)絡(luò)的質(zhì)量要求也日益增加。筆者作為一名高校網(wǎng)絡(luò)運(yùn)維人員,在工作中遇到很多網(wǎng)絡(luò)上的“疑難雜癥”。其中“數(shù)據(jù)包來(lái)回路徑不一致”就是一個(gè)非常典型的校園網(wǎng)絡(luò)故障,我們對(duì)此現(xiàn)象進(jìn)行了分析和研究,摸索出了一套解決辦法。
我們知道TCP/IP 協(xié)議中,兩臺(tái)主機(jī)要建立網(wǎng)絡(luò)連接,需要進(jìn)行“三次握手”?!叭挝帐帧钡倪^(guò)程實(shí)質(zhì)上就是來(lái)源主機(jī)與目的主機(jī)之間交互特定TCP 報(bào)文的過(guò)程。TCP 報(bào)文中包含“源地 址”(Source Port)和“目的地址”(Destination Port),分別反映了來(lái)往主機(jī)的地址及端口信息。建立連接時(shí),主機(jī)A(簡(jiǎn)稱A)向服務(wù)器B(簡(jiǎn)稱B)發(fā)送SYN數(shù)據(jù)包,該數(shù)據(jù)包中源地址是A 的IP,目的地址是B 的IP;B 收到SYN 請(qǐng)求,將回復(fù)SYN+ACK 數(shù)據(jù)包,此時(shí)源地址是B 的IP,目的地址是A 的IP;A 收到以上數(shù)據(jù)包后,將發(fā)送ACK 確認(rèn)包,連接成功。
圖1 數(shù)據(jù)包來(lái)回路徑不一致的典型案例
如果在這個(gè)過(guò)程中,源地址或者目的地址出現(xiàn)了變化,就會(huì)出現(xiàn)“數(shù)據(jù)包來(lái)回路徑不一致”,主機(jī)之間將無(wú)法識(shí)別對(duì)應(yīng)的連接,導(dǎo)致網(wǎng)絡(luò)故障。
我們遇到的一個(gè)典型案例,網(wǎng)絡(luò)結(jié)構(gòu)如圖1。服務(wù)器B 在防火墻上做了地址映射,其內(nèi)網(wǎng)地址是10.0.0.13,映射后的互聯(lián)網(wǎng)公網(wǎng)地址是219.0.0.13,用戶A 的PC 內(nèi)網(wǎng)地址是10.1.1.1,防火墻的內(nèi)網(wǎng)口地址是10.10.2.2。
用戶A 反映:每次在校園網(wǎng)內(nèi)訪問(wèn)服務(wù)器B(219.0.0.13)上的應(yīng)用,響應(yīng)速度極慢,多數(shù)時(shí)候無(wú)法正常使用,偶爾能用,詢問(wèn)其他的同事,少數(shù)人能正常訪問(wèn),多數(shù)人和他的網(wǎng)絡(luò)癥狀類似,奇怪的是當(dāng)大家通過(guò)手機(jī)4G 網(wǎng)絡(luò)或在校外訪問(wèn)服務(wù)器B 時(shí)一切正常。
圖2 數(shù)據(jù)包來(lái)回路徑不一致示意圖
通過(guò)對(duì)A、B 之間數(shù)據(jù)流的分析,我們發(fā)現(xiàn)用戶A 發(fā)出的請(qǐng)求數(shù)據(jù)包通過(guò)網(wǎng)關(guān)交換機(jī)傳遞到防火墻,防火墻將目的地址(服務(wù)器B的公網(wǎng)IP)進(jìn)行NAT轉(zhuǎn)換變成服務(wù)器B 的內(nèi)網(wǎng)地址,然后從防火墻的內(nèi)網(wǎng)口經(jīng)網(wǎng)關(guān)交換機(jī)傳送到服務(wù)器B。此時(shí)服務(wù)器B 收到的數(shù)據(jù)報(bào)文中“源地址”是10.1.1.1,“目的地址”是10.0.0.13。服務(wù)器B產(chǎn)生回應(yīng)數(shù)據(jù)包,“源地址”是自身的10.0.0.13,“目的地址”是用戶A 的內(nèi)網(wǎng)地址10.1.1.1。當(dāng)此數(shù)據(jù)包到達(dá)網(wǎng)關(guān)交換機(jī)時(shí),交換機(jī)發(fā)現(xiàn)“目的地址”是直連VLAN 中的IP,于是將直接轉(zhuǎn)發(fā)給用戶A,而不再經(jīng)過(guò)防火墻。用戶A 將收到一個(gè)來(lái)自10.0.0.13(而非當(dāng)初的請(qǐng)求地址219.0.0.13)的數(shù)據(jù)包,它將認(rèn)為這是一個(gè)全新的連接,造成A、B 間通訊異常。如圖2 所示,這就是一個(gè)典型的“來(lái)回路徑不一致”造成的故障案例。由于4G 網(wǎng)絡(luò)用戶的IP 在校園網(wǎng)內(nèi)無(wú)法轉(zhuǎn)發(fā),所以未受到影響,訪問(wèn)一切正常。
對(duì)于這種情況,市場(chǎng)上有些防火墻或路由設(shè)備設(shè)置了一些“保護(hù)措施”,筆者單位的防火墻設(shè)備正是如此。當(dāng)防火墻發(fā)現(xiàn)對(duì)服務(wù)器B 的請(qǐng)求是來(lái)自內(nèi)網(wǎng)接口(trust域)將觸發(fā)一條SNAT,將“來(lái)源地址”轉(zhuǎn)變成防火墻的內(nèi)網(wǎng)口地址(即10.10.2.2),再以此為來(lái)源訪問(wèn)服務(wù)器B。用這種方式保證服務(wù)器B 回包時(shí)數(shù)據(jù)流必須回到防火墻,從而回包路徑與請(qǐng)求包路徑保持一致。
這樣一來(lái)雖然解決了“來(lái)回路徑不一致”的問(wèn)題,但又引發(fā)了一個(gè)新的問(wèn)題。經(jīng)抓包監(jiān)測(cè),服務(wù)器此時(shí)接收到大量來(lái)自防火墻內(nèi)網(wǎng)口10.10.2.2 的訪問(wèn)請(qǐng)求。服務(wù)器上的網(wǎng)絡(luò)安全系統(tǒng)將這些請(qǐng)求判定為異常的攻擊行為,采取了大量的“丟包”處理。這就是前文中提到的“少量用戶可以訪問(wèn)服務(wù)器B,其他用戶訪問(wèn)速度很慢”的原因。
對(duì)此,我們摸索出了兩套不同的解決方案:
1.在防火墻(或相應(yīng)路由設(shè)備)上將來(lái)源地址進(jìn)行一次主動(dòng)的SNAT 處理,將用戶A 的IP 地址映射到校園網(wǎng)中“不可達(dá)”的某一網(wǎng)段中,迫使回應(yīng)數(shù)據(jù)包必須依賴防火墻做轉(zhuǎn)發(fā)。同時(shí),由于進(jìn)行了主動(dòng)的SNAT,所以即便訪問(wèn)申請(qǐng)來(lái)自內(nèi)網(wǎng)口,防火墻也不會(huì)觸發(fā)默認(rèn)的地址轉(zhuǎn)換策略,避免出現(xiàn)統(tǒng)一訪問(wèn)來(lái)源的現(xiàn)象。
2.如果是通過(guò)域名訪問(wèn)服務(wù)器B,則在校內(nèi)的DNS 服務(wù)器上進(jìn)行域名劫持設(shè)置,直接將域名解析成服務(wù)器的內(nèi)網(wǎng)地址,這樣校內(nèi)用戶對(duì)服務(wù)器B 的訪問(wèn)數(shù)據(jù)流只在校園網(wǎng)內(nèi)(即網(wǎng)關(guān)交換機(jī)以下)流轉(zhuǎn),相對(duì)安全且高效。
至此,問(wèn)題得以解決??偨Y(jié)下來(lái),網(wǎng)絡(luò)數(shù)據(jù)在傳輸過(guò)程中可能遇到各式各樣的問(wèn)題,運(yùn)維人員只有掌握原理,仔細(xì)分析才能找到有效的解決辦法。