摘要 :本文分析了在只有一個公網(wǎng)IP的校園網(wǎng)中,校園內(nèi)部用戶通過服務(wù)器公網(wǎng)域名記錄訪問內(nèi)部服務(wù)器失敗的原因(即回流通信問題),同時也提供了幾種常見設(shè)備下的回流通信問題解決方案。
關(guān)鍵詞 :回流通信;源地址轉(zhuǎn)換(Source NAT);目的地址轉(zhuǎn)換(Destination NAT);m0n0wall RouterOS
● 引言
現(xiàn)今,各級各類學(xué)校大都建有自己的網(wǎng)站,通過網(wǎng)站來宣傳展示自己。規(guī)模大、實(shí)力強(qiáng)的學(xué)校,可以申請較多的公網(wǎng)IP,同時使用較為完善的校園網(wǎng)網(wǎng)絡(luò)架構(gòu)。而一些規(guī)模、實(shí)力較小的學(xué)校,可能只申請一個公網(wǎng)IP,既負(fù)責(zé)內(nèi)部用戶上網(wǎng)時的源地址轉(zhuǎn)換,又負(fù)責(zé)發(fā)布學(xué)校內(nèi)部的服務(wù)器,此類網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1所示。
這種拓?fù)浣Y(jié)構(gòu)下的接入設(shè)備,既提供內(nèi)部用戶上網(wǎng)時的源地址轉(zhuǎn)換功能(Source NAT),又提供將內(nèi)部的Web服務(wù)器、DNS服務(wù)器發(fā)布到公網(wǎng)的功能(Destination NAT)。當(dāng)內(nèi)部PC通過http://www.abc.cn訪問內(nèi)部的Web服務(wù)器時的通信就是回流通信。當(dāng)NAT接入設(shè)備上的NAT配置不妥時,就會出現(xiàn)回流通信問題,此時內(nèi)部PC不能通過http://www.abc.cn訪問內(nèi)部的Web服務(wù)器。當(dāng)然,內(nèi)部用戶可以通過Web服務(wù)器的內(nèi)網(wǎng)IP地址(192.168.1.10)來直接訪問。但是,如果內(nèi)部服務(wù)器使用主機(jī)頭發(fā)布多個80端口網(wǎng)站時,此時通過IP地址可能不能訪問任何網(wǎng)站。
● 回流通信過程
如圖2所示,內(nèi)部服務(wù)器的80端口由NAT設(shè)備映射至外部。用戶可以通過NAT設(shè)備的外部接口(WAN)地址(202.102.1.1)訪問內(nèi)部Web服務(wù)器。當(dāng)內(nèi)部PC通過IP地址(202.102.1.1)訪問內(nèi)部Web服務(wù)器時,通信過程如下(即圖2中標(biāo)識的①②③④)。
(1)內(nèi)部PC向202.102.1.1的80端口發(fā)出通信請求,由于此目的地址不和自己在同一網(wǎng)段,因此通信請求將被轉(zhuǎn)發(fā)至網(wǎng)關(guān),即NAT設(shè)備。
?。?)NAT設(shè)備發(fā)現(xiàn)此通信是自己80端口的入站通信,于是查閱自己的NAT映射表,將通信請求轉(zhuǎn)發(fā)到內(nèi)部服務(wù)器80端口。
?。?)內(nèi)部服務(wù)器應(yīng)答此請求通信,將應(yīng)答數(shù)據(jù)返回NAT設(shè)備。
?。?)NAT設(shè)備查閱先前執(zhí)行的NAT映射記錄,將此應(yīng)答通信轉(zhuǎn)發(fā)到內(nèi)部PC。
經(jīng)由以上四步通信過程,內(nèi)部PC與Web服務(wù)器間的一次完整的TCP通信完成。
● 回流通信失敗的原因分析
我們從圖2所示的回流通信過程中可以看出,請求和應(yīng)答通信均經(jīng)過NAT設(shè)備,且內(nèi)部PC與Web服務(wù)器間通信數(shù)據(jù)包的源或目的IP地址需經(jīng)NAT設(shè)備修改。如果請求和應(yīng)答通信中有一個不經(jīng)過NAT設(shè)備,那么NAT設(shè)備就無法對通信數(shù)據(jù)包的源或目的地址進(jìn)行修改。根據(jù)TCP/IP協(xié)議簇中傳輸層的通信原理,此通信必定失敗。以下詳細(xì)展示、分析這一通信過程。
eaB/3NtLi/tmeQa4ySIhPw==
?。?)內(nèi)部PC向202.102.1.1的80端口發(fā)出通信請求,由于此目的地址不和自己在同一網(wǎng)段,因此通信將被轉(zhuǎn)發(fā)至PC的網(wǎng)關(guān),即NAT設(shè)備。
?。?)請求通信數(shù)據(jù)包到達(dá)NAT設(shè)備后,NAT設(shè)備根據(jù)自己的Destination NAT映射條目將數(shù)據(jù)包的目的地址修改為內(nèi)部服務(wù)器的IP地址,然后將數(shù)據(jù)包經(jīng)LAN接口轉(zhuǎn)發(fā)到內(nèi)部Web服務(wù)器。轉(zhuǎn)發(fā)數(shù)據(jù)包在出NAT設(shè)備的LAN接口時,數(shù)據(jù)包的源地址可以保持內(nèi)部PCIP地址不變或更改為NAT設(shè)備的WAN接口IP。
?。?)內(nèi)部Web服務(wù)器的應(yīng)答通信過程,取決于NAT設(shè)備在轉(zhuǎn)發(fā)請求數(shù)據(jù)包出LAN接口時,將請求數(shù)據(jù)包的源地址做怎樣的處理。
如果NAT設(shè)備在轉(zhuǎn)發(fā)請求通信數(shù)據(jù)包時,將數(shù)據(jù)包源地址修改為NAT設(shè)備的WAN接口IP地址,那么內(nèi)部Web服務(wù)器應(yīng)答數(shù)據(jù)包的目的地址就是NAT設(shè)備的WAN接口IP,即應(yīng)答通信經(jīng)過NAT設(shè)備。NAT設(shè)備會根據(jù)事先已有的NAT映射記錄對數(shù)據(jù)包的源地址和目的地址進(jìn)行轉(zhuǎn)換,進(jìn)而將數(shù)據(jù)轉(zhuǎn)發(fā)到內(nèi)部PC,通信成功。
如果NAT設(shè)備轉(zhuǎn)發(fā)請求通信數(shù)據(jù)包時不更改通信請求數(shù)據(jù)包的源地址,即仍是PC的IP地址,那么內(nèi)部Web服務(wù)器的應(yīng)答數(shù)據(jù)包的目的地址就是內(nèi)部PC的IP地址。由于內(nèi)部Web服務(wù)器IP地址和內(nèi)部PC的IP地址在同一網(wǎng)段,根據(jù)TCP/IP協(xié)議簇下的以太網(wǎng)通信機(jī)制,此通信將通過鏈路層在兩者之間交付,也就是說應(yīng)答通信將不經(jīng)過NAT設(shè)備。應(yīng)答數(shù)據(jù)包到達(dá)內(nèi)部PC時,數(shù)據(jù)包的源地址是內(nèi)部Web服務(wù)器的內(nèi)部IP地址。根據(jù)TCP通信機(jī)理,內(nèi)部PC應(yīng)該接收到的源地址是NAT設(shè)備外部接口IP地址的應(yīng)答包,而非源地址是Web服務(wù)器內(nèi)部IP地址的應(yīng)答包,通信將失敗。
從上述分析我們可以看出,導(dǎo)致回流通信問題產(chǎn)生的主要原因是:NAT設(shè)備在轉(zhuǎn)發(fā)由內(nèi)部經(jīng)NAT設(shè)備到內(nèi)部服務(wù)器的數(shù)據(jù)包時,沒有將數(shù)據(jù)包的源地址改為自己相應(yīng)的地址,從而導(dǎo)致到達(dá)內(nèi)部服務(wù)器的通信數(shù)據(jù)包的源地址仍然是內(nèi)部計(jì)算的IP地址,進(jìn)而在應(yīng)答時,內(nèi)部服務(wù)器直接應(yīng)答給內(nèi)部計(jì)算,相應(yīng)的數(shù)據(jù)包地址沒有被更改,一個完整的TCP通信過程被破壞,通信失敗。
● 回流通信問題解決方案
在中小規(guī)模的學(xué)校中,由于教育經(jīng)費(fèi)有限,上網(wǎng)用戶不是很多,因此常常使用X86架構(gòu)PC,安裝軟路由防火墻軟件以作為出口設(shè)備,如使用免費(fèi)的基于FreeBSD操作系統(tǒng)的m0n0wall;使用功能豐富的基于Linux系統(tǒng)的RouterOS等。
1.m0n0wall中回流問題解決方案
m0n0wall是一款基于FreeBSD操作系統(tǒng)的免費(fèi)防火墻,目前官方最新版本為1.33。在m0n0wall中想解決回流問題,需使用支持回流的版本,具體配置如下。
?。?)在LAN、WAN接口配置轉(zhuǎn)入Destination NAT(如圖3)。
(2)LAN、WAN接口配置轉(zhuǎn)出Source NAT。首先在“轉(zhuǎn)出”選項(xiàng)卡,勾選“啟動高級轉(zhuǎn)出NAT”,然后在LAN、WAN接口配置Source NAT(如圖4)。
?。?)在LAN、WAN接口配置訪問規(guī)則(如圖5、圖6)。
如果用戶覺得m0n0wall配置麻煩,則可以使用發(fā)起于m0n0wall的免費(fèi)項(xiàng)目pfsense,在pfsense的“Advanced”配置界面中,只要不勾選“Disable NAT Reflection”選項(xiàng)就支持回流通信(如圖7)。
2.RouterOS中解決方案
?。?)在LAN、WAN接口配置轉(zhuǎn)入Destination NAT:
0chain=dstnataction=dst-natto-addresses=192.168.1.51to-ports=80 protocol=tcpdst-address=192.168.202.21in-interface=LANdst-port=80
1 chain=dstnataction=dst-natto-addresses=192.168.1.51to-ports=80 protocol=tcpdst-address=192.168.202.21in-interface=WANdst-port=80
?。?)LAN、WAN接口配置轉(zhuǎn)出Source NAT:
0 chain=srcnataction=src-natto-addresses=192.168.202.21to-ports=80 protocol=tcpdst-address=192.168.1.51out-interface=LANdst-port=80
1 chain=srcnataction=src-nat to-addresses=192.168.202.21 out-interface=WAN
3.使用內(nèi)部DNS服務(wù)器來處理回流通信問題
前面說到,當(dāng)內(nèi)部Web服務(wù)器80端口上發(fā)布多個基于主機(jī)頭的網(wǎng)站時,不能直接通過IP地址來訪問網(wǎng)站。例如,Web服務(wù)器上使用主機(jī)頭發(fā)布了兩個網(wǎng)站。此時通過Web服務(wù)器的IP地址將不能訪問網(wǎng)站。只能通過主機(jī)頭來訪問。而發(fā)布到公網(wǎng)的www.abc.cn和www.def.cn兩條域名資源記錄對應(yīng)的IP是NAT設(shè)備的WAN接口IP。內(nèi)部PC通過http://www.abc.cn、http://www.def.cn訪問時,首先將此兩域名資源解析成WAN接口IP,進(jìn)而通過NAT設(shè)備的WAN接口訪問內(nèi)部服務(wù)器,但仍存在回流通信問題。
如果內(nèi)部PC在解析www.abc.cn和www.def.cn時直接解析為Web服務(wù)器內(nèi)網(wǎng)IP,內(nèi)部PC與Web服務(wù)器直接在兩者之間通信,就不存在回流通信問題。
因此,可以在內(nèi)部創(chuàng)建一個供內(nèi)部PC使用的DNS服務(wù)器,此DNS服務(wù)器解析www.abc.cn和www.def.cn值為Web服務(wù)器內(nèi)網(wǎng)IP,這樣就可以解決內(nèi)部PC通過www.abc.cn和www.def.cn訪問Web服務(wù)器時可能產(chǎn)生的回流通信問題。
● 小結(jié)
解決了回流通信問題,學(xué)校就可以把各種Web應(yīng)用發(fā)布到一臺Web服務(wù)器上,這樣既方便集中管理,又可以節(jié)約經(jīng)費(fèi),符合國家構(gòu)建節(jié)約型社會的理念。