隨著“互聯(lián)網(wǎng)+”的風(fēng)生水起,傳統(tǒng)企業(yè)決策方式、經(jīng)營思路等諸多方面面臨著變革的需要。為了適應(yīng)這一改變,近期筆者公司要求公司信息化部門開發(fā)出一款面向客戶的、基于智能手機(jī)/平板的移動應(yīng)用。
對于基于智能手機(jī)/平板的移動應(yīng)用被統(tǒng)稱為APP(Application的縮寫,應(yīng)用程序),而這種APP的開發(fā)方式目前主要有兩種類型:一種是開發(fā)一個(gè)獨(dú)立的應(yīng)用軟件,使用者需要先下載安裝后才能使用。另一種就是借助某些APP(如微信等)提供的開放接口,在它們的平臺上開發(fā)一個(gè)移動應(yīng)用,使用者只要下載該APP,就能使用該移動應(yīng)用。
這兩種方式各有優(yōu)缺點(diǎn):前一種的好處在于,開發(fā)者能夠通過編程實(shí)現(xiàn)所需的各項(xiàng)功能,但因?yàn)橹悄苁謾C(jī)/平板的品牌、硬件配置、操作系統(tǒng)等因素千差萬別,需要考慮與所有智能手機(jī)/平板設(shè)備的兼容性問題,這樣才可使推出的應(yīng)用軟件最大限度地適應(yīng)使用者使用的智能手機(jī)/平板設(shè)備。而后一種恰恰相反,與智能手機(jī)/平板的兼容性問題已經(jīng)被該類APP解決了,但與此同時(shí)應(yīng)用軟件所能實(shí)現(xiàn)的功能要受到該類APP所能開放的功能限制,而不是所有開發(fā)者想實(shí)現(xiàn)的功能都能被滿足。
經(jīng)過認(rèn)真調(diào)研、反復(fù)認(rèn)證、統(tǒng)籌考量,筆者公司信息化部門決定選擇在微信公眾平臺的企業(yè)號上來開發(fā)這套移動應(yīng)用APP(以下簡稱應(yīng)用APP)。由于微信企業(yè)號只是提供了開放的接口和平臺,具體功能還要我們自主開發(fā),所以筆者在公司機(jī)房內(nèi)部署了兩臺虛擬服務(wù)器,分別用于部署這套移動應(yīng)用APP的應(yīng)用系統(tǒng)和數(shù)據(jù)庫系統(tǒng)。
由于微信公眾號的特殊性要求,在對這套應(yīng)用APP進(jìn)行編程開發(fā)的同時(shí),筆者還同步進(jìn)行了兩個(gè)操作:操作一,在阿里云上購買了一個(gè)域名,用于微信企業(yè)號配置參數(shù)時(shí)使用;操作二,因?yàn)槲⑿牌髽I(yè)號的應(yīng)用是基于80端口的,所以在公司聯(lián)接因特網(wǎng)的防火墻上增加了一條80端口的NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)策略,以便將該應(yīng)用APP的功能與微信企業(yè)號上的按鈕模塊連通起來。
這套應(yīng)用APP按期完成開發(fā),在進(jìn)行連通測試階段時(shí),發(fā)現(xiàn)通過因特網(wǎng)訪問指定頁面時(shí)會一直顯示“網(wǎng)頁無法顯示”的錯(cuò)誤提示。于是,筆者開始著手進(jìn)行故障排查,整個(gè)排查過程一波三折,最終問題得以解決。
基于工作需要,筆者公司在開通因特網(wǎng)鏈路時(shí),向因特網(wǎng)服務(wù)提供商申請了一個(gè)固定的因特網(wǎng)出口IP地址。按照預(yù)先設(shè)計(jì)規(guī)劃,通過互聯(lián)網(wǎng)(3G/4G移動通信,或電信/移動固定寬帶)鏈路,在計(jì)算機(jī)或智能手機(jī)/平板上的瀏覽器地址欄中輸入網(wǎng)址“http://公司因特網(wǎng)出口IP地址/iisstart.htm”,應(yīng)該會顯示出正確的結(jié)果(如圖1)。
可當(dāng)筆者利用筆記本電腦進(jìn)行測試時(shí),卻得到錯(cuò)誤提示“無法顯示此網(wǎng)頁,錯(cuò)誤代碼:HTTP ERROR-2146697211”(如圖2)。
導(dǎo)致這種情況出現(xiàn)的原因無非是:這款應(yīng)用APP系統(tǒng)本身配置出現(xiàn)問題,或者從因特網(wǎng)到應(yīng)用APP服務(wù)器的鏈路訪問存在故障。
圖1 正確頁面
圖2 錯(cuò)誤提示
上述兩種原因中的前者是最容易排查的,所以筆者決定由此入手。來到機(jī)房,登錄到應(yīng)用APP系統(tǒng)服務(wù)器的“桌面”,在IE瀏覽器上的地址欄中輸入網(wǎng)址“http://127.0.0.1/iisstart.htm”,能顯示出正確的信息,這就初步說明應(yīng)用APP系統(tǒng)本身的配置應(yīng)該沒有錯(cuò)誤。
接著,將網(wǎng)址更改為“http://服務(wù)器IP/iisstart.htm”,顯示的結(jié)果是相同的,也是正確的,再次證明應(yīng)用APP系統(tǒng)本身的配置是正確的,也就排除了應(yīng)用APP系統(tǒng)本身存在問題的可能。
那原因就只會出現(xiàn)在從因特網(wǎng)到應(yīng)用APP系統(tǒng)服務(wù)器的鏈路上,而這條鏈路涉及到好幾段:應(yīng)用APP系統(tǒng)服務(wù)器到路由器的鏈路、路由器到防火墻的鏈路、防火墻到因特網(wǎng)的鏈路。
筆者公司內(nèi)部網(wǎng)絡(luò)按功能劃分了若干子網(wǎng),每個(gè)子網(wǎng)通過交換機(jī)匯聚了若干終端計(jì)算機(jī),然后所有子網(wǎng)交換機(jī)和防火墻等安全設(shè)備再連接到同一個(gè)路由器上。所以。筆者決定本著從易到難的原則,按照由內(nèi)往外的順序分段排查。
筆者在其他子網(wǎng)中任選了一臺計(jì)算機(jī),在IE瀏覽器的地址欄中輸入網(wǎng)址“http://服務(wù)器IP/iisstart.htm”,卻得到了同樣的錯(cuò)誤提示“無法顯示此網(wǎng)頁”。這就說明,在公司內(nèi)部網(wǎng)絡(luò)中跨網(wǎng)段訪問都不成功,更別說到因特網(wǎng)上了。
接著,在這臺計(jì)算機(jī)上的“命令提示符”窗口中輸入“ping 服務(wù)器IP -t”命令,得到了正確的反饋值說明這臺計(jì)算機(jī)到應(yīng)用APP系統(tǒng)服務(wù)器的鏈路是通的,那問題應(yīng)該還是出在應(yīng)用APP系統(tǒng)服務(wù)器上。
應(yīng)用APP系統(tǒng)服務(wù)器安裝的操作系統(tǒng)是Windows Server 2008 Enterprise版,根據(jù)以往經(jīng)驗(yàn),判斷原因很可能是該臺服務(wù)器上的Windows系統(tǒng)防火墻功能設(shè)置上存在問題。再次登錄到這臺服務(wù)器上,打開Windows系統(tǒng)的“Windows防火墻設(shè)置”對話框,嘗試著在“例外”選項(xiàng)卡中添加了“萬維網(wǎng)服務(wù)(HTTP)”、“安全萬維網(wǎng)服務(wù)(HTTPS)”程序和“80”端口(如圖3)。
然后,重新回到剛才那臺計(jì)算機(jī)上,再次輸入網(wǎng)址“http://服務(wù)器IP/iisstart.htm”,出現(xiàn)了正確的信息。筆者又選擇了幾臺不同子網(wǎng)內(nèi)的計(jì)算機(jī)進(jìn)行相同的操作,每次都能顯示出正確的信息,“應(yīng)用APP系統(tǒng)服務(wù)器到路由器的鏈路”的通聯(lián)問題解決了。
由于路由器與防火墻是通過網(wǎng)線直連的,所以“路由器到防火墻的鏈路”應(yīng)該不存在通聯(lián)問題。故筆者正式排除了前兩段鏈路的問題。
圖3 在防火墻中增加例外
接下來需要解決最后一段鏈路的通聯(lián)問題——防火墻到因特網(wǎng)的鏈路。這時(shí)筆者想起幾年前公司購買了一個(gè)OA辦公軟件,這個(gè)軟件的開發(fā)商前不久免費(fèi)提供了一個(gè)手機(jī)端的APP,當(dāng)時(shí)筆者在防火墻上通過“目的NAT”功能將OA辦公軟件NAT到因特網(wǎng)上,實(shí)現(xiàn)了在公司外部能夠通過APP訪問OA辦公軟件,當(dāng)時(shí)映射的端口是9090。
這次在防火墻上增加80端口的NAT策略時(shí),是參照9090端口的映射配置“依葫蘆畫瓢”操作的,所以,只要應(yīng)用APP系統(tǒng)服務(wù)器到防火墻的訪問是正常的,就應(yīng)該能將應(yīng)用APP的應(yīng)用NAT到因特網(wǎng)上。
所以,故障點(diǎn)不是出在因特網(wǎng)的出口IP上,就是出在防火墻上。于是找來“tcping64”軟件(一款用于tcp監(jiān)控的輔助工具),利用其“通過運(yùn)行命令“tcping IP地址 端口號”顯示出IP地址上端口的狀態(tài)”的功能特性,來檢查一下公司因特網(wǎng)IP地址上的端口情況。
注:tcping命令執(zhí)行時(shí)的默認(rèn)端口是80。
首先輸入命令“tcping服務(wù)器IP”測試應(yīng)用APP系統(tǒng)服務(wù)器上的80端口狀況,結(jié)果提示“Port is open”(端口打開);接著,輸入命令“tcping 公司因特網(wǎng)IP地址 9090”測試OA辦公軟件上的9090端口的狀態(tài),結(jié)果同樣提示“Port is open”。最后,輸入命令“tcping 公司因特網(wǎng)IP地址”測試應(yīng)用APP需要的80端口,結(jié)果卻提示“Connection timed out (10060)”(連接超時(shí)),也就是說,公司因特網(wǎng)出口IP地址上的80端口是關(guān)閉的。
因?yàn)楣镜囊蛱鼐W(wǎng)出口IP地址是由因特網(wǎng)運(yùn)營商提供的,所以立刻致電該運(yùn)營商,告知檢測結(jié)果,這時(shí)才被告知:根據(jù)國家相關(guān)政策要求,所有因特網(wǎng)出口IP地址的80端口是默認(rèn)關(guān)閉的。如要開通,需要向因特網(wǎng)服務(wù)提供商提出書面申請,由他們向當(dāng)?shù)氐耐ㄐ殴芾頇C(jī)構(gòu)申報(bào),獲得批準(zhǔn)后才能將端口打開。
問題源頭看來找到了。立刻按照該運(yùn)營商的要求,準(zhǔn)備好所需的全部書面材料,第一時(shí)間提交給他們。等了若干工作日后得到反饋:80端口已經(jīng)開通。馬上再次輸入命令“tcping公司因特網(wǎng)IP地址”測試80端口狀態(tài),得到的反饋結(jié)果是“Port is open”,第三條鏈路的通聯(lián)問題似乎解決了。
再次在自己的智能手機(jī)上重新測試,可手機(jī)瀏覽器上卻仍舊顯示“無法顯示此網(wǎng)頁”的錯(cuò)誤提示。按理說不應(yīng)該再出問題呀,可問題就是存在。靜下心來將整個(gè)排查過程重新回想一遍,排除了所有可能的故障點(diǎn)后,發(fā)覺就剩下防火墻未被檢查了,而防火墻與此有關(guān)聯(lián)的也只是NAT轉(zhuǎn)換了。
圖4 NAT策略
再次登錄防火墻,將檢查重點(diǎn)放在防火墻的NAT轉(zhuǎn)換策略上。經(jīng)仔細(xì)核對9090端口和80端口的策略配置,沒有發(fā)現(xiàn)明顯的錯(cuò)誤之處。正在不知所措時(shí),突然發(fā)NAT轉(zhuǎn)換策略表中還有另外一條80端口的NAT策略,而且優(yōu)先級比新加的80端口策略還要高(如圖4)。
難道是這兩條80端口策略沖突了?將那條舊的80端口策略移到最后,并將優(yōu)先級降到最低。再次用手機(jī)進(jìn)行重新測試,正確的信息終于顯示出來了。隨后通過多種途徑進(jìn)行連通測試,均能得到正確的信息。
至于那條舊的80端口NAT策略,向部門同事了解后得知,這是其他同事之前做另一項(xiàng)測試后忘記刪除而遺留下來的廢策略。筆者最后徹底刪除了那條舊策略。至此排錯(cuò)過程終于結(jié)束了。
回顧整個(gè)排錯(cuò)過程,從開始發(fā)現(xiàn)故障,到故障最終被解決,前后歷時(shí)了好幾個(gè)星期,來回反復(fù)了很多次,雖然比較辛苦,但收獲還是很大的。
第 一 點(diǎn),Windows Server 2008操作系統(tǒng)的安全策略與之前的Windows系統(tǒng)相比,進(jìn)行了很大的調(diào)整和強(qiáng)化,很多安全設(shè)置默認(rèn)是關(guān)閉的,需要手工開啟才能正常使用,這一點(diǎn)需要引起大家注意。
第二點(diǎn),在防火墻上,一個(gè)端口的同一類NAT映射只能是一對一的關(guān)系,所以不要設(shè)置成一對多,否則會產(chǎn)生沖突,從而導(dǎo)致所有映射都失效。
第三點(diǎn),所有因特網(wǎng)出口IP地址的端口,除了80,還有8080也是默認(rèn)關(guān)閉的,如需開通,同樣要向因特網(wǎng)服務(wù)提供商提出開通申請。
第四點(diǎn),在向因特網(wǎng)服務(wù)提供商申請開通80端口時(shí),80端口的用途不同(是用于架設(shè)網(wǎng)站,還是用于微信公眾號這類應(yīng)用),所需要準(zhǔn)備和提交的申請材料上也有所區(qū)別。除了必要的申請材料是相同的以外,后者只要向因特網(wǎng)服務(wù)提供商提供一份書面說明材料即可,而前者還必須先將網(wǎng)站向國家有關(guān)管理部門去申請備案,然后將獲得的ICP號一并提交才可(在這個(gè)點(diǎn)上,請向當(dāng)?shù)匾蛱鼐W(wǎng)服務(wù)提供商溝通核實(shí),以他們的答復(fù)為準(zhǔn))。