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