msn: [email protected]
来源:http://yfydz.cublog.cn
0. 声明
本文仅仅是从技术角度分析如何实现NetScreen防火墙,即如果要把本人的一台Linux机器变成NetScreen防火墙估计要作那些工作,所有观点均为个人观点,不代表任何组织或团体,只谈技术,不带任何吹捧、攻击或贬低,欢迎大家一起讨论,有错误请指正,但对文章中如有不明白的名词和概念请问google而不要问我。
1. 参考资料: http://www.juniper.net/techpubs/software/screenos/screenos5.1.0/translated/ CE_v10_SC.pdf 第10卷:HA 2. 前言 HA实现分两类,一种是热备,一种是均衡,后者可靠性更高,难度更大。 NS使用其专有协议NSRP来实现HA功能,NSRP好象是没有RFC,所以其内部实现过程无从知晓。路由器中实现HA的协议有 VRRP(RFC3768),一般也可应用在防火墙上,Linux下有其实现,不过还是基于老rfc2338的。Linux下的应用层HA的实现是 heartbeat,是根据心跳信号来判断对方是否还在运行从而确定是否启动从机,不过heartbeat实际上是针对应用层的,相对效率比较低,切换速度慢,我个人觉得对于防火墙来说,自己设计一个自己的heartbeat处理反而会简单一些,可控制从机能迅速切换。 HA的第一级门槛功能是普通状态的备份,就是主机中的连接信息能实时备份到从机,使得从机切换后内外之间通信能继续,不需要重新连接; HA的第二级门槛是VPN连接的备份,使主机中的VPN通道信息能实时备份到从机,使得从机切换后内外之间VPN通道能继续有效,不需要重新建立VPN通道;对普通连接的数据均衡也可算这一级别吧; HA的第三级门槛是防火墙之间的均衡,防火墙之间没有主从之分,所有各种连接的数据,包括VPN通道,都可以在各防火墙间进行流量均衡,一旦一台失效,其他防火墙都能接管其流量,真正做到数据通信的可靠传输,可以实现核电站中的“单一故障准则”。 Linux下的open source中有个netfilter-ha的项目正在实现第一级门槛,国内有些防火墙已经可以实现第一级门槛功能。 3. NSRP NSRP也是通过心跳信号来实现,基本是热备模式,在路由或NAT时,通过VRRP路由器分配数据流量来实现均衡模式,HA设备数量可扩充2个以上,这样数据应该都是通过多播来实现的。在透明模式下就只能实现热备模式,其实有点奇怪,其实在透明模式下实现均衡应该是更简单的。 NSRP通信通过DES加密,MD5认证。 NSRP提供集群功能,集群中任何一台设置的配置处理都会传给集群中其他设备,这个倒不难实现,是在多播包中传命令就是,显然有些命令是不需要也是不必要传的,在设计时要注意。 HA从机切换会广播ARP从而不需要将HA设备的MAC地址设得相同,ARP广播Linux不难实现。 在集群模式下,NSRP象VRRP一样根据优先级值选出主机和备份机,而且有选项控制主机启动后新的优先级是否能抢占。这些倒是不难实现,只要参考VRRP设计好协议协商过程就行。 配置NSRP时要先配防火墙的虚拟安全设备VSD,通过VSD的虚拟安全接口VSI通信,一台NS设备可以配多个VSD,就类似多个虚拟系统,设备互为备份,可能会提高可靠性吧。 NS将需要HA备份的对象称为执行对象RTO,如会话等,还支持SA,,是否意味支持VPN通道的备份? VSD组状态基本如此,是每个实现HA的协议所要实现的。 NSRP提供手动同步配置功能,可以同步RTO、系统时钟。 NSRP的三种心跳信号:HA物理链接心跳信号;VSD心跳信号;RTO心跳信号。 NSRP的两种HA消息: 配置消息:主设备向其它VSD组成员发送的网络和配置设置 RTO消息:主设备向其它RTO镜像发送的RTO 从这些信号和消息基本可以猜测出NSRP的大概协议过程。 NS支持双HA接口,以及双HA链接探查,以确定HA接口间链接是否正常,不过这和HA物理链接心跳信号有什么区别吗?手册里为什么要单独进行说明? 4. 冗余接口 NS提供冗余接口和聚合接口功能,冗余接口功能是接口备份功能,一个端口失效可以由备份端口接替;聚合接口就是将多个网卡接口捆绑在一起以提高接口的流量和可靠性。还可以通过串口来保证到外网的链接不中断。 Linux下有ip-bonding功能实现聚合接口可将多个网卡捆绑在一起以提高流量功能,冗余接口不知道是否有实现。NS的其他的接口冗余处理确实也比较多,Linux下可能也没有现成的,得自己写个监控程序随时监控各网卡的状态,要实现NS类似功能属于工作量比较大,虽然没有难度门槛方面的问题。 5. 故障切换 故障切换就是防火墙功能从主设备切到从设备,或从从设备到主设备的过程,NS可以监控物理接口、区段或特定目标IP地址来确定是否切换,可以设置不同的权重,当失败的权重到一定值是发生切换,这个感觉搞得比较麻烦。 6. 小结 NSRP确实比较完善,也非常复杂,基本满足了单一故障准则,不知道NS是否公开了该协议。 自己定义HA协议时可参考VRRP协议,也可以参考OSPF,Linux下的HA实现和NS相差太多,要作到NS的程度工作量还很大。