最近一段时间偶尔在standby的ASA上看到‘%ASA-3-210007: LU allocate xlate failed ’这样的报错信息。Google了一把后,得知一般情况下出现这种问题的原因有两个:第一,standby ASA的内存不够用。第二,配置中NAT 0和固定NAT存在重叠部分。检查了一下内存使用率和ASA的配置,确认没有问题。

      登录到standby ASA启用debug命令来收集一些有用的日志信息,果然有收获,找到如下两条。这两条说明192.168.8.145:6000到119.147.9.204:8000建立session的地址转换表不能被成功同步。(在primary ASA上,我启用了http session同步 - failover replication http,这样做的好处是保证failover发生时,http session不会中断。)
ASA#debug fover fail
Failed to rep xlate for np/port/id/1/-1 192.168.8.145/6000 - np/port/id/0/-1 119.147.9.204/8000, flg: 1003000 2
Failed to rep xlate for np/port/id/1/-1 192.168.8.145/6000 - np/port/id/0/-1 119.147.9.204/8000, flg: 1003000 2
      
      既然是和地址转换相关,那当然要去primary ASA上去查看地址转换表了。登录上primary ASA用以下命令来查找和192.168.8.145的地址转换表,如下:
ASA# show xlate | in 192.168.8.145
PAT Global X.X.X.100(39592) Local 192.168.8.145(4366)
PAT Global X.X.X.100(42397) Local 192.168.8.145(6008)
PAT Global X.X.X.100(39194) Local 192.168.8.145(4365)
PAT Global X.X.X.100(37306) Local 192.168.8.145(4358)
PAT Global X.X.X.100(33573) Local 192.168.8.145(4342)
PAT Global X.X.X.100(32850) Local 192.168.8.145(4329)
PAT Global X.X.X.100(32826) Local 192.168.8.145(4321)
PAT Global X.X.X.100(13039) Local 192.168.8.145(3718)
PAT Global X.X.X.100(12955) Local 192.168.8.145(3699)
PAT Global X.X.X.100(12893) Local 192.168.8.145(3695)
PAT Global X.X.X.200(36353) Local 192.168.8.145(6000)

      怎么会有一条转换成X.X.X. 200?现在配置里NAT的地址是X.X.X. 100啊。哦,想起来了,前几天我们把NAT的地址由X.X.X.100改为X.X.X.200了。我推断因为当时这个session已经建立,所以这条地址转换不受改动的影响。而当这条地址转换试图被同步到standby ASA时,standby ASA发现配置里没有相应的NAT地址,如果发生failover,这条转换是无法继续的。所以就出现了上面提到了报错。

      在primary ASA上清空掉地址表之后 (clear xlate)再也没有出现这条日志了。通过这次排错,提醒了我以后每次在做NAT地址变动后,都要记得清空一下地址表!

2009年4月17日更新
 
      今天又出现同样的日志,登上secondary ASA上debug fover fail了一下,出现以下结果:

Rev. flow flags incorrect: 0x41002000 0xc5000 0x41002000 0x2000
Failed to create rev flow np/port/id/0/-1: 67.110.xxx.xxx/1723 - np/port/id/1/-1: 202.xxx.xxx.xxx/1

      1723?这不是PPTP的端口吗。查看xlate表,然后找到用户,他果然在使用PPTP ×××。这说明当failover切换时,PPTP的session有可能不会被同步过去。