我们有两个站点,一个大型的南部站点和一个小型的北部站点,它们之间在两个 Cisco PIX 防火墙上定义了一个 VPN。Shoretel IP 电话流量以及所有其他网络流量都通过此 VPN 传输。我们最近将较小的北部办公室切换到 Bt Infinity(光纤),所有系统都运行良好,也就是说,直到上周它们都运行良好。请注意,那天没有任何变化。
从曼彻斯特通过 VPN 传输的流量在所有方面都有效,除了电话系统。我们来自 Shoretel 的电话工程师告诉我们,这都是因为电话系统数据包的流量中开启了 DF(不分段)位,并且所需的有效负载为 1472,而由于 IPSec 开销,1472 将无法满足线路 MTU 的要求。
如果我从南方办公室到北方办公室进行 ping MTU 测试,我会得到以下结果:
C:\>ping <NorthernOfficeServerIP> -f -l 1472
Pinging <NorthernOfficeServerIP> with 1472 bytes of data:
Reply from <OutsideInterfaceOfSourthernPixIP>: Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
PIX 上的 VPN 设置如下:
sysopt connection permit-ipsec
crypto ipsec transform-set chevelle esp-des esp-md5-hmac
crypto map transam 1 ipsec-isakmp
crypto map transam 1 match address 101
crypto map transam 1 set peer <Peer IP>
crypto map transam 1 set transform-set chevelle
crypto map transam interface outside
isakmp enable outside
isakmp key ******** address <Peer IP> netmask 255.255.255.0
isakmp keepalive 10
isakmp nat-traversal 20
isakmp policy 1 authentication pre-share
isakmp policy 1 encryption des
isakmp policy 1 hash md5
isakmp policy 1 group 1
isakmp policy 1 lifetime 86400
我在 PIX 上尝试做的第一件事是让它清除数据包上的 DF 标志,如下所示:
pix(config)# crypto ipsec df-bit clear-df outside
不幸的是,这只会给出:
错误:无法识别的用法:[no] crypto ipsec { transform-set | security-association} ... 键入 help 或“?”以获取可用命令的列表。
但是我们的 PIX 固件相当老旧,show ver 显示:
Cisco PIX Firewall Version 6.3(5)
Cisco PIX Device Manager Version 3.0(4)
Compiled on Thu 04-Aug-05 21:40 by morlee
chathampix up 14 hours 54 mins
Hardware: PIX-506E, 32 MB RAM, CPU Pentium II 300 MHz
Flash E28F640J3 @ 0x300, 8MB
BIOS Flash AM29F400B @ 0xfffd8000, 32KB
我曾尝试改变 PIX 上的 MTU 大小,我将外部接口设置为 1500、1492(对于 PPP 为 8 字节)和 BT 建议的 1458,以尝试缓解此问题。VPN 的 56 字节开销意味着 DF 位设置为 1472 字节的数据包将始终被 VPN 丢弃。
有谁知道对于使用此固件的 PIX,与“pix(config)# crypto ipsec df-bit clear-df outside”等效的命令是什么吗?或者您有其他想法吗?
更新:
北部 PIX 的 show crypto ipsec sa 如下:
interface: outside
Crypto map tag: transam, local addr. <NorthernOutsideInterfaceIP>
local ident (addr/mask/prot/port): (192.168.16.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (192.168.0.0/255.255.255.0/0/0)
current_peer: <SouthernOutsideInterfaceIP>:500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 107592, #pkts encrypt: 107592, #pkts digest 107592
#pkts decaps: 114302, #pkts decrypt: 114302, #pkts verify 114302
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0, #pkts decompress failed: 0
#send errors 8, #recv errors 0
local crypto endpt.: <NorthernOutsideInterfaceIP>, remote crypto endpt.: <SouthernOutsideInterfaceIP>
path mtu 1492, ipsec overhead 56, media mtu 1492
current outbound spi: 4ada0b77
inbound esp sas:
spi: 0xe7c2815(243017749)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 1, crypto map: transam
sa timing: remaining key lifetime (k/sec): (4516828/21982)
IV size: 8 bytes
replay detection support: Y
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0x4ada0b77(1255803767)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
slot: 0, conn id: 2, crypto map: transam
sa timing: remaining key lifetime (k/sec): (4598687/21980)
IV size: 8 bytes
replay detection support: Y
outbound ah sas:
outbound pcp sas:
南部 PIX 和北部 PIX 的 MTU 为:
mtu outside 1500
mtu inside 1500
我相信 PIX 会自动将 PPP 的 MTU 设置为少于 8 个字节。
答案1
对于添加 IPSec 开销后超出出站接口 MTU 的流量,PIX/ASA 端有几种“修复”方法。
将 PIX/ASA 上的 MTU 更改为较低的数字(通常为 1380)迫使发送站做出反应——并非总是以期望的方式。
更改 MSS(仅限 TCP,对 UDP 无效)
让 PIX/ASA 碎片。
如果在内部 IP 标头中设置了 df 位,并且需要进行分段才能通过 IPSec 隧道,则允许 PIX/ASA 清除 df 位也是一个选项。
注意清除 df 位需要 PIX/ASA OS 7.0 及更高版本. “令人尊敬的” PIX 6.3(5) 不会胜任。
更重要的问题是,为什么您的 VoIP 流量会超出 MTU?据我所知,所有 VoIP 编解码器(包括非常常见的 G.711 和 G.729)产生的每个“数据包”编解码器有效负载都小于 160 字节。加上 RTP、UDP 和 IP 开销——总共大约 40 字节,L2 有效负载大小不会超过 200 字节。再为 IPSec ESP 添加 56 字节,它仍然远不及典型的以太网接口 MTU。
您的 VoIP 管理员通过网络推送哪些需要 1472 字节 L2 有效负载的内容?
参考: