使用 NAT 與防火牆
網路連線的用戶端與伺服器經常無法擁有直接且開放的通訊路徑。網路上的端點電腦與中繼電腦都會針對封包進行篩選、路由、分析與轉換。網路位址轉譯 (NAT) 與防火牆都是能夠參與網路通訊的常見中繼應用程式範例。
Windows Communication Foundation (WCF) 負責傳輸,而訊息交換模式 (MEP) 會在出現 NAT 與防火牆時有不同的反應。本主題將描述 NAT 與防火牆在常見網路拓撲中的運作方式。我們將針對 WCF 傳輸與 MEP 的特定組合提供建議,協助讓您的應用程式更穩固地搭配網路上的 NAT 與防火牆進行運作。
NAT 如何影響通訊
NAT 的建立目的,就是讓好幾部電腦共用一個外部 IP 位址。負責連接埠重新對應的 NAT 會將某個連線的內部 IP 位址與連接埠對應至包含新連接埠號碼的外部 IP 位址。新的連接埠號碼可讓 NAT 將返回流量與原始通訊進行關聯。許多家庭使用者現在都有一個 IP 位址,但它只能進行內部路由,而且需倚賴 NAT 來提供全域封包路由功能。
NAT 不提供安全性界限。然而,常見的 NAT 組態會避免內部電腦被直接定址。這樣就可以同時保護內部電腦免於收到一些來路不明的連線,而且也不容易寫入必須以非同步方式將資料傳回用戶端的伺服器應用程式。NAT 會在封包內重新撰寫位址,讓連線看起來就像是來自 NAT 電腦一樣。這樣一來,當伺服器嘗試向用戶端開啟連線時將會失敗。如果伺服器使用用戶端認知的位址,就會因為用戶端位址無法公開路由處理而失敗。如果伺服器使用 NAT 位址,會因為沒有任何應用程式接聽該電腦而無法連線。
某些 NAT 支援轉送規則的組態,讓外部電腦得以連接至特定的內部電腦。不同的 NAT 在設定轉送規則上有不同的指示,我們不建議要求一般使用者對大部分的應用程式更改自己的 NAT 組態。許多一般使用者無法或不想更改特定應用程式的 NAT 組態。
防火牆如何影響通訊
「防火牆」(Firewall) 是一項軟體或硬體裝置,可將規則套用到通過的流量來決定是否允許或拒絕流量通過。您可以設定防火牆來檢查傳入與/或傳出的流量資料流。防火牆會在網路邊緣或端點主機上為網路提供安全性界限。商務使用者通常會將伺服器放在防火牆後面來預防惡意的攻擊行為。自從 Windows XP SP2 引進了個人防火牆之後,將電腦置於防火牆後面的家庭使用者數量便開始大幅增加。這樣一來,連線的任一端或兩端都可能具備檢查封包的防火牆功能。
不同的防火牆在複雜性與檢查封包的功能等方面的差異很大。簡易的防火牆會依據封包中的來源與目的地位址與連接埠來套用規則。智慧型防火牆則可以同時檢查封包內容來做出決定。這些防火牆在組態上大不相同,而且通常適用特定的應用程式。
家庭使用者防火牆的常見組態是禁止傳入的連線 (除非先前已對該電腦進行傳出的連線)。商務使用者防火牆的常見組態是禁止所有連接埠上的傳入連線 (除了特別指定的群組之外)。範例:會禁止所有連接埠 (連接埠 80 與 443 除外) 上的連線以提供 HTTP 和 HTTPS 服務的防火牆。家庭與商務使用者同時透過管理防火牆,允許電腦上受信任的使用者或處理序變更防火牆組態。對於不具備企業原則來控管網路使用的家庭使用者而言,管理防火牆是常見的選擇。
使用 Teredo
Teredo 是一種 IPv6 轉換技術,可讓 NAT 後面的電腦具備直接可定址性。Teredo 仰賴可公開且全域路由的伺服器,通告潛在的連線。Teredo 伺服器會提供應用程式用戶端與伺服器一個共同的會議點,讓彼此交換連線資訊。接著這些機器會要求暫時的 Teredo 位址,並透過現有的網路通道來傳送封包。您需要在作業系統中啟用 IPv6 與 Teredo 支援才能充分善用 WCF 對 Teredo 的支援。Windows XP (含) 以後版本的作業系統都支援 Teredo。Windows Vista (含) 以後版本的作業系統預設支援 IPv6,而且使用者只需要啟用 Teredo 即可。Windows XP SP2 和 Windows Server 2003 都需要使用者同時啟用 IPv6 與 Teredo。如需詳細資訊,請參閱 Teredo 概觀 (本頁面可能為英文)。
選擇傳輸與訊息交換模式
選取傳輸與 MEP 需經過三個步驟的處理序:
分析端點電腦的可定址性。企業伺服器一般都具備直接定址性,而一般使用者通常都會透過 NAT 來封鎖電腦的可定址性。如果兩個端點都位於 NAT 後面,例如一般使用者的對等案例,則您可能需要透過 Teredo 之類的技術來提供可定址性。
分析端點電腦的通訊協定與連接埠限制。企業伺服器通常位於會封鎖許多連接埠、功能強大的防火牆後面。然而,連接埠 80 常常開放來允許 HTTP 流量通過,而連接埠 443 則是開放來允許 HTTPS 流量通過。一般使用者比較不可能對連接埠進行限制,但是可能透過防火牆來允許傳出連線的單向通行。某些防火牆會允許在端點上透過應用程式管理,選擇性地開啟某些連線。
計算網路可定址性與連接埠限制所允許的傳輸與 MEP。
主從式應用程式的常見拓撲,就是讓位於 NAT 後方且不包含 Teredo 功能的用戶端具備只允許傳出流量的防火牆,而讓可以直接定址的伺服器擁有功能強大的防火牆。在此情況下,包含雙工 MEP 的 TCP 傳輸以及包含要求-回覆 MEP 的 HTTP 傳輸都能運作正常。對等應用程式的常見拓撲,就是讓兩個端點同時位於 NAT 與防火牆後面。在此情況下,還有網路拓撲不明的情況下,請考慮下列建議:
不使用雙重傳輸。雙重傳輸會開啟更多的連線,進而降低成功連線的機會。
支援在原始連線上建立返回通道。使用返回通道 (例如在雙工 TCP 中) 會開啟較少的連線,進而增加成功連線的機會。
針對註冊端點或轉送流量使用可連接的服務。使用全域可連接的連線服務,例如 Teredo 伺服器,會在網路拓撲有所限制或不明的情況下,大幅增加成功連線的機會。
下表將檢查單向、要求-回覆與雙工 MEP,以及標準 TCP、包含 Teredo 的 TCP,和 WCF 中的標準與雙工 HTTP 傳輸。
可定址性 | 直接伺服器 | 使用 NAT 周遊功能的直接伺服器 | 伺服器 NAT | 使用 NAT 周遊功能的伺服器 NAT |
---|---|---|---|---|
直接用戶端 |
任何傳輸和 MEP |
任何傳輸和 MEP |
不支援。 |
不支援。 |
使用 NAT 周遊功能的直接用戶端 |
任何傳輸和 MEP。 |
任何傳輸和 MEP。 |
不支援。 |
包含 Teredo 的 TCP 與任何 MEP。Windows Vista 具有整部機器的組態選項以支援包含 Teredo 的 HTTP。 |
用戶端 NAT |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
不支援。 |
不支援。 |
使用 NAT 周遊功能的用戶端 NAT |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
除了雙重 HTTP 與任何 MEP 以外。雙工 MEP 需要 TCP 傳輸。雙重 TCP 傳輸需要 Teredo。Windows Vista 具有整部機器的組態選項以支援包含 Teredo 的 HTTP。 |
不支援。 |
包含 Teredo 的 TCP 與任何 MEP。Windows Vista 具有整部機器的組態選項以支援包含 Teredo 的 HTTP。 |
防火牆限制 | 開放性伺服器 | 使用管理防火牆的伺服器 | 使用僅限 HTTP 防火牆的伺服器 | 使用僅限傳出流量防火牆的伺服器 |
---|---|---|---|---|
開放性用戶端 |
任何傳輸和 MEP。 |
任何傳輸和 MEP。 |
任何 HTTP 傳輸和 MEP。 |
不支援。 |
使用管理防火牆的用戶端 |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
任何 HTTP 傳輸和 MEP。 |
不支援。 |
使用僅限 HTTP 防火牆的用戶端 |
任何 HTTP 傳輸和 MEP。 |
任何 HTTP 傳輸和 MEP。 |
任何 HTTP 傳輸和 MEP。 |
不支援。 |
使用僅限傳出流量防火牆的用戶端 |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
任何非雙重傳輸和 MEP。雙工 MEP 需要 TCP 傳輸。 |
任何 HTTP 傳輸與任何非雙工 MEP。 |
不支援。 |