上回说到,令狐冲开发完成了防火墙的HA (High Availability) 功能,实现了防火墙的会话同步,这样能够在一台防火墙故障时,另一台防火墙无缝接管所有流量,只丢失少量的数据包。
可是,在测试防火墙新建连接性能时,令狐冲却发现,测试结果与关闭HA功能时相差甚远。
原来,令狐冲忘记了一个重要的问题。
防火墙在同步会话时,需要携带下面这些信息:
五元组 (源IP,目的IP,源端口,目的端口,协议类型);
NAT后的五元组;
VRF——由于不同VRF的地址可以重叠,避免混淆;
以及会话其他处理字段。
这样一来,算上每个会话数据包的包头开销,会话同步的网络本身就成为了限制会话同步的瓶颈……
解决之道也很简单,令狐冲修改了驱动代码,让会话同步可以通过聚合的以太网进行就搞定了。
然而,一波未平一波又起。
令狐冲测试了一下防火墙二层组网,发现一个新的问题:
如图,防火墙工作在二层模式,本身接口上没有IP地址,对外呈现一个具有状态检测防火墙功能的网桥。
由于FW A,FW B,SW X和SW Y构成了环路,因此,需要使用STP协议阻断环路冗余的接口构成生成树:
当然,这种组网有着交换机生成树同样的弊病:收敛时间长,接口带宽至少浪费一半。
令狐冲把交换机堆叠功能相关的代码移植到防火墙上,让两台防火墙能够实现堆叠,控制平面虚拟化为一台,但是,令狐冲发现,连基本的会话建立功能都无法正常工作……
原来,问题出在这里:
由于SW X和SW Y都是交换机,它们到两台防火墙的线路使用端口聚合方式配置。交换机在端口聚合情况下,数据包的分流是基于IP的——那么,这有可能造成TCP SYN和TCP SYN-ACK被送到堆叠组的两台不同的防火墙上。
假设防火墙A收到了TCP SYN包,并且建立了会话,而回程的TCP SYN-ACK却无法保证送到防火墙A。如果SYN-ACK被送到防火墙B,它将被丢弃,导致这条会话将永远无法建立。
因此,在防火墙使用堆叠模式(又称为Active-Active模式)实现双机热备的时候,非对称会话建立是一个非常必要的功能。
它可以让两台防火墙同步会话状态机信息,而不是简单地同步会话的增删。这样,令人羡慕的交换机堆叠功能也可以在防火墙上实现了。
令狐冲搞定了防火墙的双机热备功能,非常开心,很快,新型的防火墙在华山派的网络出口和网络核心都部署了,岳不群非常开心。
然而,随着华山派的发展壮大,新的挑战又来临了——
敬请期待下期。