高可用性集群

  • pfsync概述

  • pfSense XML-RPC配置同步概述

  • 冗余配置示例

  • HA与多WAN

  • 验证故障转移功能

  • 提供无NAT的冗余

  • 第2层冗余

  • 高可用与桥接

  • 使用IP别名减少心跳流量

  • 接口

  • 故障排查


pfSense的高可用性通过以下特性的组合来实现:

  • CARP用于IP地址冗余

  • XMLRPC用于配置同步

  • pfsync用于状态表同步

通过这种配置,单元充当“主动/被动”群集,主节点作为主单元,辅助节点作为备用角色,如果主节点发生故障,则会根据需要接管。


虽然经常被错误地称为“CARP群集”,但由于CARP只是pfSense实现高可用性的几种技术之一,因此两个或多个冗余pfSense防火墙更适合称为“高可用性群集”或“HA群集”,未来的CARP可以交换为不同的冗余协议。


每个群集节点上的一个接口将专门用于同步任务。这个接口通常称为“Sync”接口,用于配置同步和pfsync状态同步。任何可用的接口都可以用于“Sync


注意

有人称之为“CARP”接口,这是不正确的,而且非常具有误导性。 CARP心跳发生在与CARP VIP的每个接口上; CARP流量和故障转移操作不使用Sync接口。


最常见的高可用性群集配置仅包含两个节点。 群集中有更多的节点也是可以的,但它们显然不具有特别的优势。


区分三种功能(IP地址冗余,配置同步和状态表同步)非常重要,因为它们发生在不同的地方。 配置同步和状态同步发生在同步接口上,直接在防火墙单元之间进行通信。 CARP心跳在每个接口上与CARP VIP一起发送。 故障转移信号不会发生在同步接口上,而是发生在每个启用CARP的接口上。


CARP 概述

共用地址冗余协议(CARP)由OpenBSD开发人员创建,作为免费的开放式冗余解决方案,用于在一组网络设备之间共享IP地址。在此之前已经有类似的解决方案,主要是IETF虚拟路由器冗余协议(VRRP)标准。然而,思科声称VRRP已经被它的热备用路由器协议(HSRP)的专利覆盖,并告知OpenBSD开发人员它将执行其专利权利。因此,OpenBSD开发人员创建了一个新的免费开放协议,在不侵犯思科专利的情况下实现基本相同的效果。 CARP于2003年10月在OpenBSD上投入使用,后来又被添加到FreeBSD中。


CARP类型虚拟IP地址(VIP)在群集的节点之间共享。一个节点是主节点,接收IP地址的流量,其他节点保持备份状态并监视心跳,以查看并确认主节点发生故障时是否需要承担主节点角色。由于一次只有一个群集成员正在使用IP地址,因此CARP VIP不会发生IP地址冲突。


为了使故障转移正常工作,必须将进入群集的入站和出站流量(例如路由上游流量,***,NAT,本地客户端网关,DNS请求等)通过CARP VIP进行传递,例如出站NAT将从CARP VIP发送。如果流量直接发往某个节点,而不是CARP VIP,则该流量不会被其他节点接收。


CARP与VRRP和HSRP类似,在某些情况下有可能会发生冲突。在包含CARP VIP的每个接口上发送心跳,每个VIP每个接口一个心跳。在默认的偏离值和基准值下,VIP每秒发出一次心跳。偏离值确定哪个节点在给定时间点是主节点。无论哪个节点传输心跳,更快的那个都会承担主节点角色。较高的偏离值会导致心跳传输延迟增加,因此具有较低偏离值的节点将成为主节点设备,除非网络或其他问题导致心跳延迟或丢失。


注意

切勿使用CARP VIP访问防火墙GUI、SSH或其他。 出于管理的目的,只能在每个单独节点的接口上使用实际的IP地址,而不要使用VIP。 否则,不能事先确定正在访问哪个节点单元。


CARP的IP地址要求

使用CARP的高可用性群集需要每个子网中有三个IP地址,并且Sync接口需要单独的未使用子网。 对于广域网,这意味着最佳配置需要大于或等于29个子网。 每个节点使用一个IP地址,另外还有一个共享的CARP VIP地址用于故障转移。 同步接口每个节点只需要一个IP地址。

在技术上可以将CARP VIP接口配置为给定子网中唯一的IP地址,但通常不建议这样做。在WAN上使用时,这种类型的配置将只允许从主节点到WAN的通信,这会使任务(如更新、插件安装、网关监控或任何需要辅助节点的外部连接的任务)变得非常复杂。它可能更适合用于内部接口,但内部接口通常不会受到与WAN相同的IP地址限制,因此仍然最好在所有节点上配置IP地址。


交换机/第2层问题

CARP心跳线利用多点传送,并且可能需要对集群涉及的交换机进行特殊处理。 一些交换机会以可能导致CARP失败的方式过滤、限速或以其他方式干扰组播。 另外,一些交换机使用端口限制方法,这些方法可能导致CARP无法正常工作。


因此交换机必须:


  • 允许发送和接收多播流量,不能干扰使用CARP VIP的端口。

  • 允许使用多个MAC地址发送和接收流量。

  • 允许CARP VIP MAC地址在端口之间移动。


几乎所有CARP未能正确反映预期状态的问题都是交换机故障或其他第2层问题,因此在继续之前请确保交换机已正确配置。


pfsync 概述

pfsync可以使群集节点之间的防火墙状态表保持同步。主防火墙上状态表的修改会通过Sync接口发送到辅助防火墙,反之亦然。当pfsync处于活动状态并正确配置时,所有节点都将了解流经群集的每个连接。如果主节点发生故障,则备份节点将接管并且客户端不会注意到发生了转换,因为两个节点都事先知道连接。


pfsync在默认情况下使用多点传送,但可以定义IP地址以强制单点传送更新,以便只有两个防火墙的多点传送流量无法正常运行。任何活动接口都可用于发送pfsync更新,但使用专用接口更有利于安全性和性能。 pfsync不支持任何身份验证方法,因此如果使用除专用接口以外的其他任何方法,则任何具有本地网络访问权的用户都可以将状态插入到状态表中。在低安全性要求的低吞吐量环境中,使用LAN接口是可以接受的。这种状态同步所需的带宽在不同环境之间会有很大差异,但根据网络中状态的插入和删除速率,可能会高达穿越防火墙吞吐量的10%。


故障转移仍然可以在没有pfsync的情况下运行,但不会无缝连接。没有pfsync,如果一个节点失败,另一个接管,用户连接将被丢弃。用户可以立即通过另一个节点重新连接,但在转换过程中它们会中断。根据特定环境中的使用情况,这可能会被忽视,或者可能是一个重要但短暂的中断。


当使用pfsync时,必须在参与状态同步的所有节点(包括辅助节点)上启用pfsync设置,否则将无法正常运行。


pfsync和防火墙规则

必须在Sync接口上制定允许pfsync通信的规则。 该规则必须将来自Sync网络源的pfsync协议传递到任何目标。 通过任何协议的所有流量的规则也允许所需的流量,但一般来说,更具体的规则会更加安全。

pfsync和物理接口

pfSense中的状态绑定到特定的系统接口。 例如,如果WAN是em0,那么WAN上的状态将与em0绑定。 如果群集节点具有相同的硬件和接口分配,则按预期工作。 在使用不同硬件的情况下,可能会有问题。 如果一个节点上的WAN是em0,但另一个节点上的WAN是igb0,那么这些状态将不匹配,并且它们不会被视为相同。


最好使用相同的硬件,但也可能不能满足实际的需要。有一个解决方法:将接口添加到LAGG,脱离底层物理接口,因此在上面的示例中,广域网将在两者上都是lagg0,状态将被绑定 到lagg0,尽管lagg0在一个节点上包含em0,并且在另一个节点上包含igb0。


pfsync和升级

通常pfSense都允许防火墙在线升级,而不会造成网络中断。 但不是每次升级都是如此,因为pfsync协议可以更改以适应其他功能。 在升级之前,始终检查所有发布通告中链接的升级指南,以查看是否有任何CARP用户的特殊注意事项。

XML-RPC配置同步概述

为了将维护防火墙节点的工作变得更容易,可以使用XML-RPC进行配置同步。启用XML-RPC同步时,支持区域的设置将同步复制到辅助设备,并在每次更改配置后激活。 XMLRPC同步是可选的,但如果没有它,维护一个集群的工作量要大的多。


某些区域设置无法同步,如接口配置,但更多的区域都可以同步:包括防火墙规则、别名、用户、证书、***、DHCP、路由、网关等。作为一般规则,特定于硬件或特定安装的项目(例如系统>常规或系统>高级设置下的接口或值)不会同步。受支持区域的列表可能因使用的pfSense版本而有所差别。大多数插件不会同步,但有些插件包含自己的同步设置。有关更多详细信息,请参相关文档。


配置同步应使用Sync接口,如果没有专用的Sync接口,请使用为pfsync配置的相同接口。


在双节点群集中,只能在主节点上启用XML-RPC设置,辅助节点必须禁用XML-RPC设置


为使XML-RPC正常工作,两个节点都必须使GUI运行在相同的端口和协议上,例如:端口443上的HTTPS(默认设置)。管理员帐户不能被禁用,并且两个节点必须具有相同的管理员帐户密码。

冗余配置示例

本节介绍一个简单的三接口HA配置。 这三个接口是LAN,WAN和Sync。 这在功能上等同于两个接口LAN和WAN部署,pfsync接口仅用于同步主防火墙和辅助防火墙之间的配置和防火墙状态。


注意

本示例仅涵盖IPv4配置。 高可用性与IPv6兼容,但它需要在防火墙接口上进行静态寻址。 准备配置HA时,如果静态IPv6分配不可用,请在所有接口上将IPv6设置为无。


确定IP地址分配

第一项任务是规划IP地址分配。 一个好的策略是使用子网中最低可用的IP地址作为CARP VIP,将下一个后续IP地址用作主防火墙接口IP地址,并将下一个IP地址用作辅助防火墙接口IP地址。 这种策略是可选的,你可以使用任何方案,但我们强烈建议使用一致且合理的方案来简化设计和管理。

WAN 地址

WAN地址将从ISP分配的地址中选择。 如“WAN IP地址分配表”所示,HA的WAN子网为198.51.100.0/24,地址198.51.100.200至198.51.100.202将用作WAN IP地址。


WAN IP地址分配表
IP 地址 作用
198.51.100.200/24CARP共享IP地址
198.51.100.201/24 主节点 WAN IP 地址
198.51.100.202/24 辅助节点 WAN IP 地址


LAN地址

LAN子网是192.168.1.0/24。 在本例中,LAN IP地址将按照“LAN IP地址分配表”中所示进行分配。


LAN IP地址分配表
IP 地址 作用
192.168.1.1/24CARP共享IP地址
192.168.1.2/24 主节点 LAN IP 地址
192.168.1.3/24 辅助节点 LAN IP 地址


Sync接口地址

这个接口上没有共享的CARP VIP,因为不需要。 这些IP地址仅用于防火墙之间的通信。 在本例中,172.16.1.0/24用作Sync子网。 将只使用两个IP地址,但掩码(/ 24)与其他内部接口(LAN)保持一致。 对于IP地址的最后八位字节,请使用与该防火墙的LAN IP地址相同的最后八位字节以保持一致。


Sync IP地址分配表
IP 地址 作用
172.16.1.2/24 主节点 Sync IP 地址
172.16.1.3/24 辅助节点 Sync IP 地址


下图显示了此示例HA的结构。 主节点和辅助节都有与WAN和LAN相同的连接,并且它们之间使用交叉电缆连接Sync接口。 在这个例子中,广域网交换机和局域网交换机仍然存在潜在的单点故障。 交换机冗余将在本章后面的第2层冗余中介绍。

../_images/diagrams-example-carp.png

HA网络示例图

群集配置基础

每个节点都需要实际HA设置以外的一些基本配置。 在两个节点都没有冲突的LAN设置之前,请勿将两个节点都连接到同一个LAN中。

安装、接口分配和基本配置

在防火墙上安装操作系统,并在两个节点上以相同方式分配接口。 接口必须在所有节点上按照相同的顺序进行分配。 如果接口未对齐,配置同步和其他任务将无法正常工作。 如果对接口分配进行了任何调整,则必须在两个节点上进行相同的复制。


然后,连接到GUI并使用安装向导为每个防火墙配置唯一的主机名和非冲突的静态IP地址。 


例如,一个节点可以是“firewall-a.example.com”,另一个节点可以是“firewall- b.example.com”,也可以是更加个性化的一对名称。


注意

避免将节点命名为“master”或“backup”,因为这些是防火墙默认使用的状态,可以将他们命名为“primary”和“secondary”。


默认的LAN IP地址是192.168.1.1。 每个节点必须使用它自己的地址,例如主节点使用192.168.1.2,辅助节点使用192.168.1.3。 该布局显示在LAN IP地址分配中。 一旦每个节点具有唯一的LAN IP地址,则两个节点都可以插入同一个LAN交换机。


设置Sync接口

在继续之前,必须配置群集节点上的Sync接口。 同步IP地址分配列出了用于每个节点上的同步接口的地址。 在主节点上完成设置后,再在辅助节点上进行设置。


完成Sync接口配置后,还必须在两个节点上将添加防火墙规则以允许他们之间进行同步。


防火墙规则必须允许通过配置同步(默认情况下,HTTPS使用的443端口)和pfsync在两个节点之间的通信。 可以使用简单的“全部允许”样式规则。


下图是配置完成的防火墙规则列表,其中还包含允许ICMP(ping)用于诊断目的的规则。


../_images/ha-sync-rules.png

Sync 接口防火墙规则示例

辅助节点并不需要这些规则,只需要有一条规则允许流量通过GUI来使XML-RPC运行。 一旦配置了XML-RPC,主节点的全部规则就会同步到辅助节点。

配置pfsync

必须在主节点和辅助节点上配置使用pfsync的状态同步才能正常工作。


首先在主节点上,然后在辅助节点上执行以下操作:


  • 导航到系统>高可用性同步(双机备份)

  • 设置同步状态

  • 将同步接口设置为SYNC

  • 将pfsync同步对等IP到另一个节点。 配置主节点时设置为172.16.1.3,配置辅助节点时设置为172.16.1.2

  • 点击保存


配置同步 (XML-RPC)设置


警告

配置同步只能在主节点上配置。 辅助节点不能也不需要配置。


在主节点上执行以下操作:


  • 导航到系统>高可用性同步

  • 将“同步配置”下的“配置同步目标IP”设置为为辅助节点同步接口IP地址172.16.1.3

  • 将远程系统用户名设置为admin。


    注意

    用户名必须是“admin”,其他用户名不会正常工作!

  • 将远程系统密码设置为管理员用户帐户密码,并在确认框中重复输入。

  • 选中需要进行同步区域的复选框以同步到辅助节点。 全部切换按钮用于一次选择所有选项。

  • 点击保存


快速确认后,进入辅助节点的防火墙>规则策略列表,可以看到主节点输入的规则已经被同步过来了。


这两个节点已连接并进行配置同步! 每当在主节点上进行修改后,所做的更改将很快同步到辅助节点。


警告

不要在辅助节对设置同步的区域进行任何更改! 下次主节点执行同步时,这些选项将被覆盖。


配置CARP虚拟IP

通过配置同步,CARP虚拟IP地址只需添加到主节点,并且它们将自动同步到辅助节点。

  • 导航到主节点上的防火墙>虚拟IPs,设置CARP VIP

  • 单击右侧的 fa-plus 按钮在列表顶部添加新的VIP。


  • 注意

    必须为处理用户流量的每个接口添加一个VIP,在本示例中,要为WAN和LAN各添加一个。类型:定义VIP的类型,在这种情况下CARP。

接口: 定义VIP将驻留的接口,例如WAN

地址: 地址框是为VIP输入IP地址值的位置。 还必须选择子网掩码,并且它必须与接口IP地址上的子网掩码相匹配。 在本例中,输入198.51.100.200和24(请参阅WAN IP地址分配)。 

虚拟 IP密码: 设置CARP VIP的密码。 这只需要两个节点之间的匹配,这将通过同步来处理。 密码和确认密码框必须填写并且必须匹配。 

VHID 组:  定义CARP VIP的ID一个常见的策略是使VHID匹配IP地址的最后一个字节,因此在这种情况下选择200 

广播频率:  确定CARP心跳发送的频率。 

Base(基本值):控制Heartbeats之间经过的整秒数,通常为1.这应该在群集节点之间匹配。Skew(偏离值):控制秒的分数(1/256增量)。 主节点通常设置为0或1,次节点将为100或更高。 该调整由XML-RPC同步自动处理。

描述:一些文本可以识别VIP,例如WAN CARP VIP。



注意

如果CARP对给定网络的延迟过于敏感,建议一次调整基本值一秒钟,直到稳定为止。


以上描述以WAN VIP为例。 LAN VIP也进行类似配置,但它将使用LAN接口,地址为192.168.1.1(请参阅LAN IP地址分配)。


如果WAN子网中有任何额外的IP地址用于1:1 NAT、端口转发、***等,也可以在这里进行添加。


编辑完成后,点击应用更改。


添加VIP后,请检查辅助节点上的防火墙>虚拟IPs,以确保VIP按预期进行了同步。


如果同步成功,两个节点上的虚拟IP地址将如下图所示。


../_images/ha-carp-vips.png

CARP虚拟IP地址列表

为CARP配置出站NAT

下面将配置NAT,以便LAN上的客户端使用共享的WAN IP访问广域网。


  • 导航到防火墙> NAT(地址转换),出站选项卡

  • 单击选中手动出站NAT规则生成

  • 点击保存


将出现一组与自动出站NAT适用的规则。 调整内部子网源的规则,以改为使用CARP IP地址。

  • 在规则的右侧单击 fa-pencil 进行编辑

  • 找到页面的转换部分

  • 从地址下拉列表中选择WAN CARP VIP地址

  • 更改描述以提及此规则将NAT LAN连接到WAN CARP VIP地址


警告

如果稍后添加其他本地接口(如第二个LAN,DMZ等),并且该接口使用私有IP地址,则必须在此时添加其他手动出站NAT规则。


完成后,规则更改将与使用CARP VIP的LAN出站NAT规则中的规则更改类似。


../_images/ha-out-nat.png

CARP VIP的LAN出站NAT规则

修改DHCP服务器

群集节点上的DHCP服务器设置需要调整,以便它们可以一起工作。 这些修改将从主节点同步到辅助节点,因此对于VIP和出站NAT,这些修改只需要在主节点上进行。

  • 导航到系统服务> DHCP服务器,LAN 选项卡。

  • 将DNS服务器设置为LAN CARP VIP,此处为192.168.1.1

  • 将网关设置为LAN CARP VIP,此处为192.168.1.1

  • 将故障转移对等IP设置为辅助节点的实际LAN IP地址,此处为192.168.1.3

  • 点击保存


将DNS服务器和网关设置为CARP VIP可确保本地客户端与故障转移地址通信,而不是直接通向任一节点。 如果主节点失败,本地客户端将继续与辅助节点通话。


故障转移对等IP允许守护程序直接在此子网中与对等方进行通信,以交换租赁信息等数据。 当设置与辅助设备同步时,会自动调整该值,以便辅助设备指向主设备。

高可用与多WAN

HA还可以在多WAN配置中用于防火墙冗余。 本节详细介绍双WAN HA部署所需的VIP和NAT配置。 


确定IP地址分配

在这个例子中,每个WAN上将使用四个IP地址。 每个防火墙需要一个IP地址,另外还有一个CARP VIP用于出站NAT,另外还有一个CARP VIP用于1:1 NAT条目,该条目将用于DMZ段中的内部邮件服务器。

WAN 和 WAN2 IP 地址

下表显示了两个WAN的IP地址。 在大多数环境中,这些将是公共IP地址。


WAN IP 地址
IP 地址 作用
198.51.100.200用于出站NAT的共享CARP VIP
198.51.100.201 主节点防火墙 WAN
198.51.100.202 辅助节点防火墙 WAN
198.51.100.203用于1:1 NAT的共享CARP VIP


WAN2 IP 地址
IP 地址 作用
203.0.113.10用于出站NAT的共享CARP VIP
203.0.113.11 主节点防火墙 WAN2
203.0.113.12 辅助节点防火墙 WAN2
203.0.113.13用于1:1 NAT的共享CARP VIP


LAN 地址

LAN子网是192.168.1.0/24。 在这个例子中,LAN IP地址将被分配如下。


LAN IP 地址分配
IP 地址 作用
192.168.1.1CARP共享LAN VIP
192.168.1.2 主节点防火墙LAN
192.168.1.3 辅助节点防火墙 LAN


DMZ 地址

DMZ子网是192.168.2.0/24。 地址分配见下表。


DMZ IP 地址分配表
IP 地址 作用
192.168.2.1CARP共享DMZ VIP
192.168.2.2 主节点防火墙 DMZ
192.168.2.3 辅助节点防火墙 DMZ

pfsync 地址

这个接口上不会有共享的CARP VIP,因此不需要设置。 这些IP地址仅用于防火墙之间的通信。 在本例中,172.16.1.0/24将作为Sync子网。 使用两个IP地址,子网掩码与其他内部接口一致。 

Sync IP 地址分配
IP 地址 作用
172.16.1.2主节点防火墙 Sync
172.16.1.3 辅助节点防火墙 Sync

NAT 配置

使用HA与多WAN时的NAT配置与使用单个WAN的HA相同。 确保只有CARP VIP用于入站流量或路由。 有关NAT配置的更多信息,请参阅相关文档。


防火墙配置

使用多WAN时,必须设置防火墙规则,以使用默认网关将流量传递到本地网络。 否则,当流量尝试到达CARP地址或从LAN到DMZ时,它将转而出去与WAN连接。


必须在所有内部接口的防火墙规则顶部添加一条规则,该规则将所有本地网络的流量引导至默认网关。 必须注意使用默认网关,而不是故障转移或负载平衡网关组之一。 此规则的目的地是本地LAN网络,或包含任何本地可达网络的别名。


具有DMZ的多WAN HA 图

由于附加的广域网和DMZ元素,这种布局的图表要复杂得多,如下图所示。

../_images/diagrams-example-multi-wan-carp.png

具有DMZ的多WAN HA示意图

验证故障转移功能

由于使用HA涉及高可用性,因此在将群集投入生产之前应该进行彻底的测试。 测试最重要的部分是确保HA系统在系统中断期间能够正常故障切换。


如果本节中的任何操作不能按预期正常工作,请参阅高可用性故障排除。


检查CARP 状态

在这两个系统上,导航到系统状态> CARP(故障转移)。 如果一切工作正常,主节点设备所有CARP VIP状态将显示为fa-play-circleMASTER,辅助节点设备将显示为fa-pause-circleBACKUP。

如果其中一个显示DISABLED,请单击启用CARP按钮,然后刷新页面。

如果一个接口显示fa-times-circle INIT,则意味着包含CARP VIP的接口没有连接。 将接口连接到交换机,或者至少连接到其他节点。 如果该接口不使用,请从接口上移除CARP VIP,因为这会干扰正常的CARP操作。

检查配置是否正确同步

导航到辅助节点上的主要位置,例如防火墙>规则策略和防火墙> NAT(地址转换),确保在主节点上创建的规则正在同步到辅助节点。



检查DHCP故障转移状态

如果配置了DHCP故障切换,则可以在系统状态> DHCP租约中检查它的状态。 包含DHCP故障转移池状态的页面顶部将出现一个新的部分,如下图所示。

../_images/example-carp-dhcpfailover.png

DHCP故障转移池状态

测试CARP故障切换

现在进行真正的故障转移测试。在开始之前,请确保LAN上的CARP后面的本地客户端可以连接到互联网,同时pfSense防火墙在线运行。一旦确认可以正常工作,那么现在是进行备份的好时机。

实际测试时,请从网络上拔下主节点或暂时关闭主节点。客户端将能够通过辅助节点继续从Internet加载内容。在辅助节点上再次检查状态> CARP(故障转移),它现在将报告它是LAN和WAN CARP VIP的MASTER。

现在将主节点重新联机,它将恢复为MASTER的角色,并且辅助节点系统将自己降级到BACKUP。在这个过程中的任何时候,互联网连接仍然是可以正常工作的。

在尽可能多的故障情况下测试HA。其他测试包括:


  • 拔下WAN或LAN上的网线

  • 拔下主电源插头

  • 使用临时禁用功能和维护模式禁用主节点上的CARP

  • 单独测试每个系统(关闭辅助节点电源,然后重新接通电源并关闭主电源)

  • 在故障转移期间下载文件或尝试传输音频/视频流

  • 在故障转移期间,向Internet主机运行连续的ICMP回应请求(ping)


提供无NAT的冗余

如前所述,只有CARP VIP为防火墙直接处理的地址提供冗余,并且它们只能与NAT或防火墙本身的服务一起使用。 冗余还可以为具有HA的路由公共IP子网提供冗余。 本节介绍这种类型的配置,这在大型网络、ISP和无线ISP网络以及数据中心环境中很常见。


公共IP分配

pfSense的WAN端至少需要一个/ 29的公共IP范围,它提供了六个可用的IP地址。 两个防火墙部署只需要三个,但这是容纳三个IP地址的最小IP子网。 每个防火墙都需要一个IP,并且WAN端至少需要一个CARP VIP。


第二个公共IP子网将通过ISP、数据中心或上游路由器路由到CARP VIP。 由于此子网路由到CARP VIP,因此路由不会依赖于单个防火墙。 对于本章中所描述的示例配置,将使用/ 24公共IP子网,并将其分成两个/ 25个子网。


网络概述

这里描述的示例网络是一个数据中心环境,由两个pfSense防火墙组成,每个防火墙有四个接口:WAN、LAN、DBDMZ和pfsync。 该网络包含许多网络和数据库服务器。 它不是基于任何真实的网络,但会有类似这样的实例部署。

WAN网络

WAN侧连接到上游网络,即ISP、数据中心或上游路由器。

WEB 网络

该网络中的网段使用“LAN”接口,但已重命名。 它包含Web服务器,所以它被命名为WEB,但可以称为DMZ,SERVERS或任何所需的东西。

DBDMZ网络

该段是一个OPT接口并包含数据库服务器。 在托管环境中,将网络和数据库服务器分隔成两个网络是很常见的。 数据库服务器通常不需要从互联网直接访问,因此不受Web服务器的危害影响。

Sync网络

此图中的同步网络用于通过XML-RPC同步pfSense配置的修改,以及pfsync同步两个防火墙之间的状态表修改。 建议使用专用接口。

网络拓扑

网络拓扑如下图所示,包括所有可路由的IP地址、WEB网络和数据库DMZ。

2.png

HA与路由IPs的关系图

注意

包含数据库服务器的网段通常不需要公开访问,因此更常用的是使用私有IP子网,但可以使用此处说明的示例,而不考虑两个内部子网的功能。

第2层冗余

本节介绍规划冗余网络时要考虑的第2层设计元素。 本章假定只部署两个系统,当然也可以根据需要扩展到更多的部署。


如果两个冗余pfSense防火墙都接入到同一台交换机任何接口上,则该交换机将成为单点故障。 为了避免这种单点故障,最好的选择为每个接口部署两个交换机(除了专用的pfsync接口)。


下图以网络为中心,未显示交换机基础结构。 具有冗余交换机的HA图图解释了该环境如何与冗余交换机基础架构配合使用。

../_images/diagrams-example-carp-redundantswitches.png

具有冗余交换机的HA示意图

交换机配置

使用多个交换机时,交换机应互连。 只要两台交换机之间有单一连接,并且任何一台防火墙上都没有网桥,对任何类型的交换机来说都是安全的。 在使用桥接的情况下,或者在交换机之间存在多个互连的情况下,必须小心避免第2层环路。 如果是这种情况,就需要一个管理型交换机,它能够使用生成树协议(STP)来检测和阻塞会产生交换机环路的端口。 当使用STP时,如果活动链路断路,例如交换机故障,那么备份链路可以自动提交到它的位置。


pfSense还支持lagg(4)链路聚合和链路故障切换接口,允许将多个网络接口插入一个或多个交换机以提高容错能力。 有关配置链路聚合的更多信息,请参阅LAGG(链路聚合)。


主机冗余

获得防火墙内关键系统的主机冗余比较困难。 每个系统都可以使用两个网卡,使用链路聚合控制协议(LACP)或类似的供应商特定功能连接到每组交换机。 服务器也可以有多个网络连接,并且根据操作系统,可以在一组服务器上运行CARP或类似的协议,以便它们形成相互冗余。 

其他单点故障

当试图设计一个完全冗余的网络时,会许多单点故障会被忽略。需要考虑的事情比简单的交换机故障要多得多。以下是一些常见的冗余示例:


  • 为每个冗余段提供隔离电源。

  • 为冗余系统使用单独的断路器。

  • 使用多个UPS/发电机。

  • 使用多个电力供应商,尽可能进入建筑物的两侧。

  • 即使是多WAN配置也不能保证Internet正常运行。

  • 使用多种互联网连接技术(DSL,Cable,Fiber,Wireless)。

  • 如果任何两个运营商使用相同的光纤/隧道/路径,他们都可能同时被淘汰。

  • 备份冷却,冗余冷水机组或便携式/应急空调。

  • 考虑将第二套冗余设备放置在另一个房间,另一个楼层或另一个建筑物中。

  • 在城镇或其他城市的另一部分有重复的设置。

  • 我听说火星上的主机价格便宜,但延迟是杀手级的。


高可用性与桥接

高可用性目前不兼容本地桥接。 

使用IP别名减少心跳流量

如果某个网段上有大量的CARP VIP,则会导致很多组播流量。 每个CARP VIP每秒发送一次心跳。 为了减少这种流量,额外的VIP可以在接口上的一个CARP VIP上“堆叠”。 首先,选择一个CARP VIP作为接口的“主要”VIP。 然后,将同一子网中的其他CARP VIP更改为IP别名类型VIP,选择“主”CARP VIP接口作为它们在VIP配置上的接口。


这不仅减少了在给定细分受众中看到的心跳,而且还会导致所有IP别名VIP与“主”CARP VIP一起更改状态,从而降低第2层问题,减少故障转移出现问题的概率。


IP别名VIP通常不会通过XML-RPC配置同步进行同步,但是,以这种方式设置为使用CARP接口的IP别名VIP将会进行同步。

接口

如果在与HA的单个接口上需要多个子网,则可以使用IP别名来完成。 与主接口IP地址一样,我们建议每个防火墙在附加子网内都有一个IP地址,每个子网总共至少有三个IP。 必须将单独的IP别名条目添加到新子网内的每个节点,以确保其子网掩码与新子网的实际子网掩码相匹配。 直接在接口上的IP别名VIP不同步,安全可以得到保证。


一旦将IP别名VIP添加到两个节点以在新子网中获得立足点,则可以使用来自新子网的IP地址添加CARP VIP。


只要不需要附加子网和两个独立HA节点之间的通信,就可以省略IP别名,并直接在另一个子网中使用CARP VIP。

故障排除

高可用性配置相对复杂,且有许多不同的方式来配置故障转移群集。在本节中,一些常见(不常见)的问题在大多数情况下讨论并有望解决。如果在咨询本节后问题仍然存在,那么在pfSense论坛上有专门的CARP / VIPs讨论区。


在继续之前,请花时间检查HA群集的所有成员以确保它们具有一致的配置。通常,这有助于通过示例设置,仔细检查所有正确的设置。在辅助节点上重复该过程,并注意辅助节点上配置不同的地方。请务必检查CARP状态(检查CARP状态),并确保所有集群成员都启用CARP。


系统状态>系统日志系统选项卡会记录与HA有关的错误。检查涉及的每个系统上的日志,看看是否有任何与XMLRPC同步、CARP状态转换或其他相关错误的信息。


常见错误配置

有三种常见的错误配置会阻止HA正常工作。

每个CARP VIP使用不同的VHID

在给定接口或广播域上创建的每个CARP VIP上必须使用不同的VHID。 使用单个HA时,输入验证将防止重复的VHID。 不过,也不总是那么简单。 CARP是一种组播技术,因此在同一网段上使用CARP的任何内容都必须使用唯一的VHID。 VRRP也使用与CARP类似的协议,因此确保与VRRP VHID没有冲突,例如ISP或本地网络中的其他路由器正在使用VRRP。

最好的解决方法是使用一组独特的VHID。 如果正在使用已知安全的专用网络,请从1开始编号。在VRRP或CARP发生冲突的网络上,咨询该网络的管理员以查找空闲区域的VHID。


不正确的时间

检查所涉及的系统是否正确同步时间并具有有效时区,尤其是在虚拟机中运行时。 如果时间相差太大,某些同步任务(如DHCP故障切换)将无法正常工作。

不正确的子网掩码

真正的子网掩码必须用于CARP VIP,而不是/ 32。 这必须与分配CARP IP的接口上的IP地址的子网掩码相匹配。

CARP接口的IP地址

CARP VIP所在的接口在使用前必须已经在接口(VLAN,LAN,WAN,OPT)上直接定义了另一个IP。

不正确的哈希错误

如果CARP在出现此错误时无法正常工作,则可能是配置不匹配。 确保对于给定的VIP、VHID、密码和IP地址/子网掩码都匹配。


如果设置正确,并且在生成此错误消息时CARP仍不起作用,那么在同一广播域中可能会有多个CARP实例。 使用tcpdump(数据包捕获)禁用CARP并监控网络,以检查其他CARP或类似CARP的流量,并适当调整VHID。


如果CARP工作正常,并且系统启动时此消息在日志中,则可以忽略它。 只要CARP继续正常工作(主节点显示MASTER,辅助节点显示BACKUP状态),启动时就会看到此消息是正常的。


两个系统都显示为MASTER

如果辅助节点无法从主节点收到CARP广播,则会发生这种情况。 检查防火墙规则、连接、交换机配置。 同时检查系统日志是否有可能导致解决方案的相关错误信息。 如果在虚拟机(VM)产品(如ESX)中遇到此问题,请参阅虚拟机(ESX)中的问题。

主节点降级为BACKUP

在某些情况下,在系统恢复联机后,可能会在短时间内正常发生这种情况。 但是,某些硬件故障或其他错误情况可能会导致服务器默默承担240的较高优先级,以表示它仍然存在问题,并且不应成为主设备。 这可以通过GUI或通过shell或系统诊断>命令来进行检查。

在GUI中,此状态显示在系统状态> CARP的错误消息中。

../_images/ha-carp-demoted.png

当主节点被降级时CARP状态

在shell或系统诊断>命令中,运行以下命令检查降级:

#sysctl net.inet.carp.demotion
net.inet.carp.demotion: 240

如果该值大于0,则该节点已降级。


在这种情况下,隔离防火墙,检查网络连接,并执行进一步的硬件测试。


如果降级值为0,并且主节点仍然将自己降级为BACKUP或不断变化,请检查网络以确保没有第2层环路。 如果防火墙从交换机接收到自己的心跳,它也可以触发对BACKUP状态的更改。


虚拟机内部问题(ESX)

在虚拟机内部使用HA时,尤其是VMware ESX,需要一些特殊的配置:

  • 在vSwitch上启用混杂模式。

  • 启用“MAC地址更改”。

  • 启用“伪传输”。


ESX VDS混杂模式解决方法

如果正在使用虚拟分布式交换机,则可以为启用混杂模式的防火墙接口创建端口组,并为其他主机设置单独的非混杂端口组。论坛上有用户使用这种方式来平衡让CARP功能和保护客户端端口的要求。

ESX VDS 升级问题

如果在4.0或4.1中使用VDS(虚拟分布式交换机)并将其从4.0升级到4.1或5.0,则VDS将无法正确传递CARP流量。 如果在4.1或5.0上创建了新的VDS,它可以正常工作,但升级后的VDS则不会。

可以在VDS上禁用混杂模式,然后重新启用它可以解决该问题。


ESX VDS端口镜像问题

如果在VDS上启用端口镜像,则会打破混杂模式。 要修复它,请禁用然后重新启用混杂模式。

ESX客户端端口问题

如果物理HA集群使用ESX主机(lagg组或类似设备)上的多个端口连接到交换机,并且目标VM只能访问某些设备/ IP,则端口组设置可能需要调整 ESX将基于IP设置组的负载平衡设置为基于散列,而不是始发接口。

设置不正确的副作用包括:

  • 流量仅在其NIC上以混杂模式到达目标VM。

  • 当主防火墙的“真实”IP地址可以到达时,无法从目标VM到达CARP VIP。

  • 到目标VM的端口转发或其他入站连接从一些IP地址工作,而不是其他IP地址。

ESX物理网卡故障无法触发故障切换

CARP中的自我降级依赖于交换机端口链路的丢失。 因此,如果主防火墙实例和辅助防火墙实例位于不同的ESX单元上,并且主设备丢失了交换机端口链接并且不会将其公开给虚拟机,CARP将在其所有VIP上保留MASTER,并且次要设备也会相信它应该是MASTER。 解决这个问题的方法之一是在ESX中编写一个事件,如果物理端口丢失链接,该事件将取消VM上的交换机端口。 在ESX中也可能有其他方法。

KVM + Qemu问题

使用e1000网卡(em(4)),ed(4)网卡或CARP VIP不会离开init状态。

VirtualBox 问题

在VM的相关接口上设置“混杂模式:允许CARP在任何接口类型(桥接,主机,内部)上运行,

其他交换机和第2层问题

  • 如果节点单元插入单独的交换机,请确保交换机正确中继并传递广播/多播通信。

  • 一些交换机具有广播/多播过滤,限制或“风暴控制”功能,可以打破CARP。

  • 某些交换机已损坏固件,导致IGMP Snooping等功能干扰CARP。

  • 如果使用调制解调器/ CPE背面的开关,请尝试使用真正的开关。 这些内置交换机通常无法正确处理CARP流量。 通常将防火墙插入合适的交换机,然后上行到CPE将消除问题。

配置同步问题

  • 在遇到配置同步问题时,请仔细检查以下项目:

  • 所有节点上的用户名必须为admin。

  • 主服务器上的配置同步设置中的密码必须与备份中的密码相匹配。

  • WebGUI必须位于所有节点上的相同端口上。

  • WebGUI必须在所有节点上使用相同的协议(HTTP或HTTPS)。

  • 必须允许流量通过同步流量接口上的WebGUI端口。

  • 必须在所有节点上启用和配置pfsync接口。

  • 确认只有主同步节点启用了配置同步选项。

  • 确保在辅助节点上的同步配置到IP中没有指定IP地址。

  • 确保两个节点上的时间都是最新的,并且相当准确。


HA和多WAN故障排除

如果在处理多WAN时遇到CARP VIP麻烦,请仔细检查是否存在与防火墙配置中提到的规则相同的规则。


翻译自pfsense book