本檔案將引導您完成所需的步驟,以緩解封包分段可能出現的問題。分段問題的一個示例是,能夠ping網路資源,但無法通過特定應用程式(如電子郵件或資料庫)連線到同一資源。
嘗試此組態之前,請確保符合以下要求:
VPN對等體之間的連線
本文件所述內容不限於特定軟體和硬體版本。
此文件使用以下網路設定:
此組態也可搭配以下硬體和軟體版本使用:
IOS路由器
PIX/ASA安全裝置
IP支援IP資料包的最大長度為65,536位元組,但大多數資料鏈路層協定支援更小的長度,稱為最大傳輸單元(MTU)。根據支援的MTU,可能需要對IP資料包進行分段,使其透過特定的資料鏈路層介質型別傳輸。然後,目的裝置必須將分段重組回原始的完整IP資料包。
使用VPN保護兩個VPN對等體之間的資料時,原始資料會增加額外的開銷,這可能需要進行分段。此表列出了可能需要增加到受保護資料以支援VPN連線的欄位。請注意,可能需要使用多個協定,這會增加原始資料包的大小。例如,如果您在兩台Cisco路由器之間使用L2L DMVPN IPSEC連線,並且已實施GRE隧道,則需要此額外開銷:ESP、GRE和外部IP報頭。如果流量透過地址裝置時您擁有與VPN網關的IPSec軟體客戶端連線,則您需要此額外開銷用於網路地址轉換-遍歷(NAT-T),以及隧道模式連線的外部IP報頭。
來源將封包傳送到目的地時,會在IP標頭的「控制旗標」欄位中放置一個值,此值會影響中繼裝置對封包的分段。控制標誌長度為3位,但分段時僅使用前兩位。如果第二位設定為0,則允許對資料包進行分段;如果設定為1,則不允許對資料包進行分段。第二位通常稱為不分段(DF)位。第三位元指定分段發生的時間、這個分段封包是否為最後一個片段(設為0),或是封包中有沒有其他片段(設為1)。
需要分段時,有四個區域可能會出現問題:
執行分段和重組的兩台裝置需要額外的CPU週期和記憶體開銷。
如果在到達目的地的途中丟棄了一個分段,則無法重組資料包,而且必須將整個資料包分段並再次傳送。這會造成額外的吞吐量問題,特別是在所討論的流量受到速率限制,且源傳送的資料流超出允許限制的情況下。
封包篩選和狀態防火牆在處理片段時可能會有困難。進行分段時,第一個分段包含外部IP報頭、內部報頭(例如TCP、UDP、ESP等)以及負載的一部分。原始資料包的後續分段會與外部IP報頭以及負載的繼續部分發生聯絡。此過程的問題是某些防火牆需要檢視每個資料包中的內部報頭資訊,以便做出智慧過濾決策;如果缺少該資訊,則它們可能會無意中丟棄除第一個分段之外的所有分段。
資料包IP報頭中的源可以將第三個控制位設定為不分段,這意味著,如果中間裝置收到資料包且必須對其進行分段,該中間裝置將無法對其進行分段。相反,中間裝置丟棄資料包。
大多數網路使用乙太網,預設MTU值為1,500位元組,通常用於IP資料包。若要瞭解是否發生或需要分段但無法完成(已設定DF位元),請先啟動您的VPN作業階段。然後您可以使用這四個程式中的任何一個,來探索分段。
Ping位於另一端的裝置。這是假設允許透過隧道進行ping。如果成功,請嘗試在同一裝置上訪問應用程式;例如,如果Microsoft電子郵件或遠端案頭伺服器透過隧道,請打開Outlook並嘗試下載電子郵件,或者嘗試將遠端案頭連線到伺服器。如果這種方法不起作用,並且您有正確的名稱解析,則分段很有可能是問題所在。
從Windows裝置使用以下命令:C:\> ping -f -l packet_size_in_bytes destination_IP_address。
-f 選項用於指定資料包不能分段。-l 選項用於指定資料包的長度。首先使用資料包大小1,500嘗試此操作。例如,ping -f -l 1500 192.168.100。如果需要分段但無法執行,您會收到如下消息:Packets need to be fragmented but DF set。
在Cisco路由器上執行debug ip icmp命令,然後使用extended ping命令。如果顯示ICMP:dst (x.x.x.x)需要分段和設定DF,表示無法傳送到y.y.y.y,其中x.x.x.x是目標裝置,y.y.y.y是您的路由器,則中間裝置會通知您需要進行分段,但您在Echo請求中設定了DF位,中間裝置無法對其進行分段以將其轉發到下一跳。在這種情況下,請逐漸減小ping的MTU大小,直到找到一個可以正常運行的為止。
在思科安全裝置上,使用捕獲過濾器。
ciscoasa(config)#access-list outside_test permit tcp any host 172.22.1.1 eq 80
注意:如果將源保留為any,則允許管理員監控任何網路地址轉換(NAT)。
ciscoasa(config)#access-list outside_test permit tcp host 172.22.1.1 eq 80 any
注意:反轉源和目標資訊時,允許捕獲返回流量。
ciscoasa(config)# capture outside_interface access-list outside_test interface outside
使用者需要啟動應用程式X的新會話。使用者啟動新的應用程式X會話後,ASA管理員需要發出show capture outside_interface命令。
有多種方法可以解決分段問題。本節將討論這些內容。
靜態MTU設定可解決分段問題。
路由器上的MTU更改:
請注意,如果您在裝置上手動設定MTU,它會告知充當VPN閘道的裝置對收到的封包進行分段,然後再透過通道保護及傳送封包。這比讓路由器保護流量然後將其分段(但裝置將其分段)要好。
警告:如果更改任何裝置介面上的MTU大小,將導致終止於該介面的所有隧道被關閉並重建。
在Cisco路由器上,使用ip mtucommand調整VPN終止的介面的MTU大小:
router (config)# interface type [slot_#/] port_# router (config-if)# ip mtu MTU_size_in_bytes
ASA/PIX上的MTU更改:
在ASA/PIX裝置上,使用mtucommand在全局配置模式下調整MTU大小。預設情況下,MTU設定為1500。例如,如果安全裝置上的介面命名為Outside(其中VPN終止),並且您確定了(透過Discover Fragmentation部分中列出的測量)要使用1380作為分段大小,請使用以下命令:
security appliance (config)# mtu Outside 1380
TCP最大區段大小可解決分段問題。
注意:此功能僅適用於TCP;其他IP協定必須使用其他解決方案來解決IP分段問題。即使在路由器上設定ip mtu ,它也不會影響兩個終端主機在與TCP MSS的TCP三次握手中協商的內容。
路由器上的MSS更改:
由於TCP流量通常用於傳輸大量資料,因此會對TCP流量進行分段。TCP支援稱為TCP最大區段大小(MSS)的功能,此功能允許兩個裝置交涉適合TCP流量的大小。MSS值在每個裝置上靜態配置,它表示用於預期資料包的緩衝區大小。當兩台裝置建立TCP連線時,它們會將本地MSS值與三次握手中的本地MTU值進行比較;兩者中較小者將傳送到遠端對等體。然後,兩個對等體使用兩個交換值中的較低值。要配置此功能,請執行以下操作:
在Cisco路由器上,對VPN終止的介面使用tcp adjust-mss命令。
router (config)# interface type [slot_#/] port_# router (config-if)# ip tcp adjust-mss MSS_Size_in_bytes
ASA/PIX上的MSS更改:
為確保最大TCP段大小不超過您設定的值並確保最大值不小於指定大小,應在全局配置模式下使用sysopt connection 命令。要恢復預設設定,請使用此命令的theno形式。預設的最大值為1380位元組。預設會停用最小特徵(設為0)。
若要變更預設的最大MSS限制,請執行以下操作:
security appliance (config)# sysopt connection tcp-mss MSS_size_in_bytes
注意:如果將最大大小設定為大於1380,則資料包可能會分段,具體取決於MTU大小(預設情況下為1500)。當安全裝置使用Frag Guard功能時,大量分段可能會影響其效能。如果設定最小大小,它將阻止TCP伺服器向客戶端傳送許多小型TCP資料包,並影響伺服器和網路的效能。
若要變更最小MSS限制,請執行以下操作:
security appliance (config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
安全裝置(config)# sysopt connection tcp-mss minimum MSS_size_in_bytes
注意:請參閱PIX/ASA 7.X問題:超出MSS - HTTP客戶端無法瀏覽某些網站部分文檔中的允許超出MSS的資料包的MPF配置部分,以獲取有關為超出MSS的資料包提供另一種方法的詳細資訊。
PMTUD可解決分段問題。
TCP MSS的主要問題是管理員必須知道在您的路由器上配置什麼值以防止發生分段。如果您與遠端VPN位置之間存在多條路徑,或者當您執行初始查詢時,您會發現第二或第三較小的MTU(而不是最小的MTU)取決於初始查詢中使用的路由決策,則可能會出現此問題。使用PMTUD時,您可以確定IP封包的MTU值,以避免分段。如果路由器封鎖了ICMP訊息,就會中斷路徑MTU,且會捨棄已設定DF位元的資料包。使用set ip df 命令可清除DF位並允許對資料包進行分段和傳送。分段會導致網路上的封包轉送速度變慢,但可以使用存取清單來限制清除DF位元的資料包數量。
以下三個問題可能會導致PMTUD無法運作:
中繼路由器可能捨棄封包而不使用ICMP訊息回應。這在Internet上並不常見,但在路由器配置為不響應ICMP不可達消息的網路中很常見。
中繼路由器可能回應了ICMP無法到達訊息,但在傳回流程中,防火牆會封鎖此訊息。這是更常見的情況。
ICMP無法到達消息返回源,但源忽略分段消息。這是三個問題中最不常見的一個。
如果遇到第一個問題,您可以清除源放置的IP報頭中的DF位,或者手動調整TCP MSS大小。若要清除DF位元,中繼路由器必須將值從1變更為0。通常,此操作由網路中的路由器在資料包離開網路之前完成。這是在基於IOS的路由器上執行此操作的簡單代碼配置:
Router (config) # access-list ACL_# permit tcp any any Router (config) # route-map route_map_name permit seq# Router (config-route-map) # match ip address ACL_# Router (config-route-map) # set ip df 0 Router (config-route-map) # exit Router (config) # interface type [slot#/]port # Router (config-if) # ip policy router-map route_map_name
PMTUD和GRE通道
預設情況下,路由器不會在其產生的GRE通道封包上執行PMTUD。若要在GRE通道介面上啟用PMTUD,並讓路由器參與穿過通道之流量的來源/目的地裝置的MTU調整程式,請使用以下設定:
Router (config) # interface tunnel tunnel_#
Router (config-if) # tunnel path-mtu-discovery
tunnel path-mtu-discovery 指令為路由器的GRE通道介面啟用PMTUD。可選的age-timer引數指定隧道介面重置發現的最大MTU大小之前經過的分鐘數,減去GRE報頭的24位元組。如果為計時器指定infinite,則不使用計時器。min-mtu引數指定組成MTU值的最小位元組數。
PIX/ASA 7.x -清除不分段(DF)或處理大檔案或資料包。
您仍然無法通過隧道正確訪問Internet、大型檔案或應用程式,因為它提供以下MTU size-error消息:
PMTU-D packet 1440 bytes greater than effective mtu 1434, dest_addr=10.70.25.1, src_addr=10.10.97.55, prot=TCP
要解決此問題,請確保從裝置的外部介面清除DF位。在全局配置模式下使用crypto ipsec df-bit 命令配置IPSec資料包的DF位策略。
pix(config)# crypto ipsec df-bit clear-df outside
具有IPSec隧道功能的DF位可用於指定安全裝置能否清除、設定或複製封裝報頭中的不分段(DF)位。IP報頭中的DF位確定是否允許裝置對資料包進行分段。
在全局配置模式下使用crypto ipsec df-bit 命令可配置安全裝置以指定封裝報頭中的DF位。
在封裝隧道模式IPSec資料流時,應對DF位使用clear-df 設定。此設定允許裝置傳送大於可用MTU大小的資料包。如果您不知道可用的MTU大小,則此設定也適用。
注意:如果仍然存在分段問題和資料包丟失,您還可以選擇使用ip mtu tunnel interface命令手動調整MTU大小。在這種情況下,路由器會在保護封包之前將封包分段。此命令可配合PMTUD和/或TCP MSS使用。
目前沒有適用於此組態的驗證程序。
輸出直譯器工具(僅供註冊客戶使用) (OIT)支援某些show指令。使用OIT檢視對show命令輸出的分析。
假設已在路由器和PIX之間建立IPSec隧道。如果看到資料包被丟棄的加密錯誤消息,請完成以下步驟以解決該問題:
執行從使用者端到伺服器的監聽器追蹤,找出使用的最佳MTU。
您也可以使用ping測試:
ping -l 1400 192.168.1.1 -f
192.168.1.1是遠端電腦的IP地址。
繼續將值1400減少20,直到收到回覆。
註:在大多數情況下適用的魔力值為1300。
達到適當的最大分段大小後,請針對正在使用的裝置對其進行適當調整:
在PIX防火牆上:
sysopt connection tcpmss 1300
在路由器上:
ip tcp adjust-mss 1300
問題:
您可以在VPN網路之間執行ping操作,但無法通過隧道建立遠端案頭協定(RDP)和Citrix連線。
解決方案:
問題可能是PIX/ASA後PC上的MTU大小。將客戶端電腦的MTU大小設定為1300,並嘗試透過VPN隧道建立Citrix連線。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
19-Feb-2009 |
初始版本 |