隨著“互聯網+”的風生水起,傳統企業決策方式、經營思路等諸多方面面臨著變革的需要。為了適應這一改變,近期筆者公司要求公司信息化部門開發出一款面向客戶的、基于智能手機/平板的移動應用。
對于基于智能手機/平板的移動應用被統稱為APP(Application的縮寫,應用程序),而這種APP的開發方式目前主要有兩種類型:一種是開發一個獨立的應用軟件,使用者需要先下載安裝后才能使用。另一種就是借助某些APP(如微信等)提供的開放接口,在它們的平臺上開發一個移動應用,使用者只要下載該APP,就能使用該移動應用。
這兩種方式各有優缺點:前一種的好處在于,開發者能夠通過編程實現所需的各項功能,但因為智能手機/平板的品牌、硬件配置、操作系統等因素千差萬別,需要考慮與所有智能手機/平板設備的兼容性問題,這樣才可使推出的應用軟件最大限度地適應使用者使用的智能手機/平板設備。而后一種恰恰相反,與智能手機/平板的兼容性問題已經被該類APP解決了,但與此同時應用軟件所能實現的功能要受到該類APP所能開放的功能限制,而不是所有開發者想實現的功能都能被滿足。
經過認真調研、反復認證、統籌考量,筆者公司信息化部門決定選擇在微信公眾平臺的企業號上來開發這套移動應用APP(以下簡稱應用APP)。由于微信企業號只是提供了開放的接口和平臺,具體功能還要我們自主開發,所以筆者在公司機房內部署了兩臺虛擬服務器,分別用于部署這套移動應用APP的應用系統和數據庫系統。
由于微信公眾號的特殊性要求,在對這套應用APP進行編程開發的同時,筆者還同步進行了兩個操作:操作一,在阿里云上購買了一個域名,用于微信企業號配置參數時使用;操作二,因為微信企業號的應用是基于80端口的,所以在公司聯接因特網的防火墻上增加了一條80端口的NAT(Network Address Translation,網絡地址轉換)策略,以便將該應用APP的功能與微信企業號上的按鈕模塊連通起來。
這套應用APP按期完成開發,在進行連通測試階段時,發現通過因特網訪問指定頁面時會一直顯示“網頁無法顯示”的錯誤提示。于是,筆者開始著手進行故障排查,整個排查過程一波三折,最終問題得以解決。
基于工作需要,筆者公司在開通因特網鏈路時,向因特網服務提供商申請了一個固定的因特網出口IP地址。按照預先設計規劃,通過互聯網(3G/4G移動通信,或電信/移動固定寬帶)鏈路,在計算機或智能手機/平板上的瀏覽器地址欄中輸入網址“http://公司因特網出口IP地址/iisstart.htm”,應該會顯示出正確的結果(如圖1)。
可當筆者利用筆記本電腦進行測試時,卻得到錯誤提示“無法顯示此網頁,錯誤代碼:HTTP ERROR-2146697211”(如圖2)。
導致這種情況出現的原因無非是:這款應用APP系統本身配置出現問題,或者從因特網到應用APP服務器的鏈路訪問存在故障。

圖1 正確頁面

圖2 錯誤提示
上述兩種原因中的前者是最容易排查的,所以筆者決定由此入手。來到機房,登錄到應用APP系統服務器的“桌面”,在IE瀏覽器上的地址欄中輸入網址“http://127.0.0.1/iisstart.htm”,能顯示出正確的信息,這就初步說明應用APP系統本身的配置應該沒有錯誤。
接著,將網址更改為“http://服務器IP/iisstart.htm”,顯示的結果是相同的,也是正確的,再次證明應用APP系統本身的配置是正確的,也就排除了應用APP系統本身存在問題的可能。
那原因就只會出現在從因特網到應用APP系統服務器的鏈路上,而這條鏈路涉及到好幾段:應用APP系統服務器到路由器的鏈路、路由器到防火墻的鏈路、防火墻到因特網的鏈路。
筆者公司內部網絡按功能劃分了若干子網,每個子網通過交換機匯聚了若干終端計算機,然后所有子網交換機和防火墻等安全設備再連接到同一個路由器上。所以。筆者決定本著從易到難的原則,按照由內往外的順序分段排查。
筆者在其他子網中任選了一臺計算機,在IE瀏覽器的地址欄中輸入網址“http://服務器IP/iisstart.htm”,卻得到了同樣的錯誤提示“無法顯示此網頁”。這就說明,在公司內部網絡中跨網段訪問都不成功,更別說到因特網上了。
接著,在這臺計算機上的“命令提示符”窗口中輸入“ping 服務器IP -t”命令,得到了正確的反饋值說明這臺計算機到應用APP系統服務器的鏈路是通的,那問題應該還是出在應用APP系統服務器上。
應用APP系統服務器安裝的操作系統是Windows Server 2008 Enterprise版,根據以往經驗,判斷原因很可能是該臺服務器上的Windows系統防火墻功能設置上存在問題。再次登錄到這臺服務器上,打開Windows系統的“Windows防火墻設置”對話框,嘗試著在“例外”選項卡中添加了“萬維網服務(HTTP)”、“安全萬維網服務(HTTPS)”程序和“80”端口(如圖3)。
然后,重新回到剛才那臺計算機上,再次輸入網址“http://服務器IP/iisstart.htm”,出現了正確的信息。筆者又選擇了幾臺不同子網內的計算機進行相同的操作,每次都能顯示出正確的信息,“應用APP系統服務器到路由器的鏈路”的通聯問題解決了。
由于路由器與防火墻是通過網線直連的,所以“路由器到防火墻的鏈路”應該不存在通聯問題。故筆者正式排除了前兩段鏈路的問題。

圖3 在防火墻中增加例外
接下來需要解決最后一段鏈路的通聯問題——防火墻到因特網的鏈路。這時筆者想起幾年前公司購買了一個OA辦公軟件,這個軟件的開發商前不久免費提供了一個手機端的APP,當時筆者在防火墻上通過“目的NAT”功能將OA辦公軟件NAT到因特網上,實現了在公司外部能夠通過APP訪問OA辦公軟件,當時映射的端口是9090。
這次在防火墻上增加80端口的NAT策略時,是參照9090端口的映射配置“依葫蘆畫瓢”操作的,所以,只要應用APP系統服務器到防火墻的訪問是正常的,就應該能將應用APP的應用NAT到因特網上。
所以,故障點不是出在因特網的出口IP上,就是出在防火墻上。于是找來“tcping64”軟件(一款用于tcp監控的輔助工具),利用其“通過運行命令“tcping IP地址 端口號”顯示出IP地址上端口的狀態”的功能特性,來檢查一下公司因特網IP地址上的端口情況。
注:tcping命令執行時的默認端口是80。
首先輸入命令“tcping服務器IP”測試應用APP系統服務器上的80端口狀況,結果提示“Port is open”(端口打開);接著,輸入命令“tcping 公司因特網IP地址 9090”測試OA辦公軟件上的9090端口的狀態,結果同樣提示“Port is open”。最后,輸入命令“tcping 公司因特網IP地址”測試應用APP需要的80端口,結果卻提示“Connection timed out (10060)”(連接超時),也就是說,公司因特網出口IP地址上的80端口是關閉的。
因為公司的因特網出口IP地址是由因特網運營商提供的,所以立刻致電該運營商,告知檢測結果,這時才被告知:根據國家相關政策要求,所有因特網出口IP地址的80端口是默認關閉的。如要開通,需要向因特網服務提供商提出書面申請,由他們向當地的通信管理機構申報,獲得批準后才能將端口打開。
問題源頭看來找到了。立刻按照該運營商的要求,準備好所需的全部書面材料,第一時間提交給他們。等了若干工作日后得到反饋:80端口已經開通。馬上再次輸入命令“tcping公司因特網IP地址”測試80端口狀態,得到的反饋結果是“Port is open”,第三條鏈路的通聯問題似乎解決了。
再次在自己的智能手機上重新測試,可手機瀏覽器上卻仍舊顯示“無法顯示此網頁”的錯誤提示。按理說不應該再出問題呀,可問題就是存在。靜下心來將整個排查過程重新回想一遍,排除了所有可能的故障點后,發覺就剩下防火墻未被檢查了,而防火墻與此有關聯的也只是NAT轉換了。

圖4 NAT策略
再次登錄防火墻,將檢查重點放在防火墻的NAT轉換策略上。經仔細核對9090端口和80端口的策略配置,沒有發現明顯的錯誤之處。正在不知所措時,突然發NAT轉換策略表中還有另外一條80端口的NAT策略,而且優先級比新加的80端口策略還要高(如圖4)。
難道是這兩條80端口策略沖突了?將那條舊的80端口策略移到最后,并將優先級降到最低。再次用手機進行重新測試,正確的信息終于顯示出來了。隨后通過多種途徑進行連通測試,均能得到正確的信息。
至于那條舊的80端口NAT策略,向部門同事了解后得知,這是其他同事之前做另一項測試后忘記刪除而遺留下來的廢策略。筆者最后徹底刪除了那條舊策略。至此排錯過程終于結束了。
回顧整個排錯過程,從開始發現故障,到故障最終被解決,前后歷時了好幾個星期,來回反復了很多次,雖然比較辛苦,但收獲還是很大的。
第 一 點,Windows Server 2008操作系統的安全策略與之前的Windows系統相比,進行了很大的調整和強化,很多安全設置默認是關閉的,需要手工開啟才能正常使用,這一點需要引起大家注意。
第二點,在防火墻上,一個端口的同一類NAT映射只能是一對一的關系,所以不要設置成一對多,否則會產生沖突,從而導致所有映射都失效。
第三點,所有因特網出口IP地址的端口,除了80,還有8080也是默認關閉的,如需開通,同樣要向因特網服務提供商提出開通申請。
第四點,在向因特網服務提供商申請開通80端口時,80端口的用途不同(是用于架設網站,還是用于微信公眾號這類應用),所需要準備和提交的申請材料上也有所區別。除了必要的申請材料是相同的以外,后者只要向因特網服務提供商提供一份書面說明材料即可,而前者還必須先將網站向國家有關管理部門去申請備案,然后將獲得的ICP號一并提交才可(在這個點上,請向當地因特網服務提供商溝通核實,以他們的答復為準)。