pfSense 配置 HA(高可用性)

高可用性 (HA) 是系统工程中的一个重要概念,它消除了单点故障,确保即使出现硬件或软件故障也能持续运行。特定于网络,它允许网络工程师或管理员更换或修复故障设备或组件,而不会影响服务和最终用户。从概念上讲,这类似于数据存储的 RAID1,当使用一对硬盘以镜像存储冗余数据时,即使一个硬盘发生故障,作为一个整体,阵列也不会丢失数据并且仍然可以访问。

IT行业经常使用的一句话:“二为一,一为无”。如果有两个同样的设备,你应该只期望其中一个是正常的,因为硬件随时可能因任何原因发生故障,而且通常是在最不希望发生的时候出现。如果未做故障备份,正常工作可能会受到影响。

在考虑是否应该进行高可用设置时,必须权衡风险和收益。如果业务的特定功能被认为对业务的盈利能力至关重要,却又没有适合的冗余,那么应该尽快进行补救,并经常进行测试来确保功能正常。

pfSense是少数提供高可用性技术的开源解决方案之一,在深入研究pfSense上的HA设置之前,我们先了解与建立HA系统相关的术语。

基本原理

CARP

CARP,即通用地址冗余协议,是一种类似于VRRP 的协议,它允许局域网上的一组主机“共享”一个IP地址,监控当前哪个设备对其具有“控制权”,并允许其中一个设备始终控制可用设备之间的地址。

在典型的CARP配置中,两个防火墙将分别启用三个 IP 地址:一个用于两个节点上的接口本身,另外一个用于CARP 虚拟 IP 地址 (VIP) 的共享IP地址。承载用户流量的每个接口都必须满足这一要求,包括广域网。

它的工作原理如下 :

  1. 在使用CARP的接口上连接到两个节点的交换机必须能够正确处理多播流量。
  2. WAN IP必须是静态地址,掩码必须小于29码,才能为CARP提供3个以上的可用地址。
  3. 假定两台设备上仅使用一个 WAN 和一个 LAN 接口,LAN 接口使用192.168.1.0/24网络, WAN 接口使用198.51.100.0/24网络 。
  4. 防火墙IP地址设置示例:
    • 防火墙A是主节点,LAN地址192.168.1.2,WAN地址198.51.100.201
    • 防火墙B是辅助节点,LAN地址192.168.1.3,WAN 地址198.51.100.202
    • 两个防火墙共享一个用于LAN的CARP IP地址192.168.1.1,并且做为所有客户端的网关。WAN 的共享 CARP IP 地址是 198.51.100.200。

配置完成后,防火墙A将以每秒一次的设定基本频率在网络上向每个配置了CARP 的接口发送心跳,让防火墙B知道它仍然“活动”并处理流量。默认情况下,pfSense将为防火墙B 配置100的偏差,这意味着防火墙B将假设一切正常,只要它继续接收不超过基本 + 偏差(1 秒 + 100/256 秒)的心跳。

在任何时候,防火墙B在偏差指定的分配时间内停止接收来自防火墙A的心跳,它将假设防火墙A不再处理流量并接管主控角色。这会将CARP IP地址的控制权“转移”到防火墙B上,并立即接手开始处理流量。然后,防火墙B将开始在此接口上传输心跳,并代替防火墙A运行,直到它再次开始接收来自防火墙A的心跳。默认的CARP行为是执行抢占,这意味着一旦防火墙A重新上线,防火墙B将识别到比自己的基本值和偏差值更快的心跳,防火墙B便将其状态更改为辅助角色。

这一切都在短短几秒内完成,可以最大限度减少网络断流的影响。

pfsync

pfsync是pfSense上高可用的状态同步组件。它同步两个设备的状态表,以确保防火墙操作系统的数据包过滤器 (pf) 组件准备好在另一个节点发生故障时接管现有的连接。

如果没有pfsync,如果防火墙A在状态不同步的情况下故障转移到防火墙B,则任何现有的有状态的连接都将中断并需要重新建立。这会影响带有状态防火墙规则的TCP等协议,会给最终用户和应用程序网络连接带来麻烦。如果没有跨两个节点的状态同步,每次下载、文件传输、备份、电子邮件客户端等都会产生一个短暂的连接“暂停”,甚至可能需要关闭和重新打开连接/程序。高可用的目标是在发生转移时确保网络的连续性,这显然不能满足要求。

使用pfsync进行状态同步默认使用多播,但可以定义IP地址来强制单播更新。这非常适合只有两个防火墙的环境,在这些环境中多播流量是不必要的,并且可能无法正常运行。任何活动接口都可用于发送pfsync更新,但使用专用接口是安全性和性能的最佳做法。在吞吐量较低,不需要太注重安全性的环境中,也可以使用LAN接口进行同步。状态同步所需的带宽在不同环境中会有很大差异,最高可能达到穿越防火墙吞吐量的 10%,具体取决于网络中状态插入和删除的速率。

即使没有状态同步,故障转移仍可运行,但并非无缝运行。如果没有状态同步,如果一个节点发生故障,另一个节点接管,用户连接将断开。用户可能会立即通过另一个节点重新连接,但在转换过程中会中断。根据特定环境中的使用情况,这种情况可能不会被注意到,也可能是重大但短暂的中断。

如果接口在物理上不完全相同且在两个节点上以相同的顺序分配,则状态将无法正确同步,例如如果 WAN 在ix0一个节点上,而igb0在另一个节点上。虽然拥有相同的硬件始终是最佳做法,但不匹配的硬件仍可通过使用 LAGG 接口抽象分配来与接口绑定状态配合使用。LAGG 可以解决这个问题,因为状态将绑定到laggX每个节点上的接口,而不是底层物理接口。例如,lagg0在主节点上包含ix0, lagg0在辅助节点上包含igb0,但两者的状态均为开启,lagg0因此同步将起作用。

pfsync的流量必须在Sync接口上明确传递。接同步接口上,规则必须能将pfsync协议从Sync网络的源传递到任何目标。

XMLRPC

高可用的XML远程过程调用 (XMLRPC) 组件负责保持主防火墙和辅助防火墙之间的配置同步。这可以确保防火墙规则、CARP VIP、NAT 配置等在两个防火墙之间保持相同。如果没有XMLRPC,则管理员需要记住在两个防火墙上进行的每一次更改,这会大大增加出错的概率。

每次在主防火墙上进行更改时,都会自动运行XMLRPC同步过程(这点与OPNsense不同)。同步必须使用专用的用户名和密码,并在pfsync使用的同一SYNC接口上运行。

出站NAT

配置高可用性的最后一部分是为客户端和NAT配置DHCP,以便与新的高用用设置一起使用,尽管从技术上讲,它并不完全是pfSense高可用组件的一部分。

对于出站NAT,默认情况下,pfSense利用WAN接口地址将NAT应用于防火墙后面的私有网络范围,以及Internet上IPv4中的公共和可路由IP地址。如果保持不变,这对HA来说是一个问题,因为如果pfsync中的状态表转移到辅助防火墙,它将只与主防火墙的WAN IP地址匹配,从而破坏状态。要解决这个问题,必须配置混合或手动出站NAT,然后创建规则来将IPv4流量NAT到所有相关WAN 接上的CARP VIP(WAN)地址。这将确保状态在故障转移时在两个防火墙上都有效。

DHCP

DHCP范围,无论是在pfSense还是其他的DHCP服务器上,都需要使用CARP VIP(LAN)作为客户端网关,而不是主防火墙的实际接口IP地址。否则,如果主防火墙离线,客户端将无法访问其上游网关,从而失去所有连接。如果有任何客户端使用静态IP地址,其网关地址也必须为CARP VIP(LAN)。

pfSense的高可用功能让所有组件协同工作,提供了一个出色且强大的软硬件冗余解决方案,即使在单个硬件出现故障的情况下也会确保网络正常,减少对企业正常生产经营和办公业务的影响。下面介绍在两个pfSense防火墙上配置HA的方法。

本教程所使用的防火墙软件版本为pfSense plus 24.03中文版。

HA配置

必备条件

  • 两个pfSense防火墙设备,每个防火墙有三个网络接口。
  • WAN  IP地址3个,主、备各一个固定IP地址,还有一个为主防火墙指定的虚拟IP地址。
  • LAN IP地址3 个,主、备各一个固定IP地址,还有一个为主防火墙指定的虚拟IP地址。
注意:ESXI环境下部署需要调整宿主机管理>系统>高级设置处的系统参数,将Net.ReversePathFwdCheckPromisc值由默认0更改为1,如下图所示:
同时在LAN和WAN所使用的端口上启用允许混杂模式、允许伪传输和允许MAC 地址更改三个选项。(否则会出现主备不能切换或都为主防火墙的现象)。虚拟机上部署有较多的不确定因素,生产环境建议在物理机上使用HA。

ESXI安全策略设置

网络拓扑

配置接口

参照拓扑图,各接口数据如下:

LAN接口:

  • 网络:192.168.1.0/24
  • pfSense 主 IP:192.168.1.2
  • pfSense 备 IP:192.168.1.3
  • CARP 虚拟 IP : 192.168.1.1
  • Sync同步主IP:172.16.1.2
  • Sync同步备IP:172.16.1.3

WAN接口:

  • 网络:192.51.100.0/24
  • pfSense 主 IP:192.51.100.201
  • pfSense 备 IP:192.51.100.202
  • CARP 虚拟 IP : 198.51.100.200

根据上述数据,配置好主备防火墙的对应接口,确保主备分别使用都能正常联网。

防火墙规则

在LAN和WAN接口分别添加放行CARP协议规则(可以在浮动规则上进行添加):

在同步接口上添加添加放行PFSYNC规则:

虚拟IP地址

在主节点上配置虚拟IP地址,然后使用XMLRPC自动同步,将这些设置同步到备份防火墙。

VIP接口的值如下表所示:

选项
类型 Carp
接口 LAN
地址 192.168.1.1 / 24
虚拟IP密码 pfSense
VHID组 3
通告频率 基本 1 / 偏离 0
描述 VIP LAN

表3. LAN 接口虚拟IP设置

选项
类型 Carp
接口 WAN
地址 192.51.100.200 / 24
虚拟IP密码 pfSense
VHID组 1
通告频率  基本 1 / 偏离 0
描述 VIP WAN

表 4. WAN 接口虚拟IP设置

在主防火墙上,导航至接口→虚拟地址,点击右下角添加按钮,为LAN接口创建新的虚拟IP 地址,如下图所示:

输入完成以后,单击“保存”。并点击“应用”激活设置。

继续为WAN 接口创建新的虚拟 IP 地址,如下图所示:

输入完成以后,单击“保存”。并点击“应用”激活设置。

注意:要确保Carp VIP的子网掩码与主接口相同。

出站NAT

为了保持平稳过渡,离开防火墙的流量必须使用与广域网 (WAN) 接口关联的虚拟IP地址。默认情况下,pfSense的NAT出站为“自动出站 NAT规则生成”,会影响数据流量的平滑过渡,需要修改为虚拟的VIP WAN接口,以便来让来自LAN子网的数据包使用CARP虚拟接口 (192.51.100.200)出站。

在主防火墙上配置出站NAT规则,导航到防火墙→ NAT →出站,选择混合或手动出站NAT规则,单击保存,然后单击添加按钮创建新出站规则,接口选择WAN,源地址设置为LAN 子网,映射地址虚拟的VIP WAN,单击“保存”,单击“应用更改”激活设置。

配置DHCP

在局域网部署DHCP,应该使用虚拟地址来代替两台防火墙的物理地址。两台防火墙在同时运行时,它们应该了解彼此的DHCP池,当pfSense转发DNS请求时,验证DHCP服务器是否提供正确的IP地址。为了保证HA正常工作,DHCP获取的DNS和网关应该是虚拟VIP LAN地址。

在主、备防火墙上,分别转到服务>DHCPv4,LAN选项卡,在DNS服务器和网关输入VIP LAN地址192.168.1.1。

pfSync

为了启动同步过程,必须在主防火墙上分别配置pfSync和HA同步 (xmlrpc)。在主节点上启用pfSync,可以按照以下步骤操作:

导航到系统→高可用性,选中同步状态选项,选择PFSYNC作为同步接口(如果只有两个网络接口,也可以选择LAN接口作为同步接口,HA同步数据量非常少,对使用没什么影响。),将同步远程端点 IP设置为 1172.16.1.3。

XMLPRC同步IP也设置为 172.16.1.3。输入远程系统用户名和密码。选中要同步到备份防火墙的设置,同步项目建议如下图所示:

备份防火墙只需设置pfSync同步项,XMLRPC同步项无需设置。如下图所示:

HA同步

在主备的HA同步设置好以后,主备之间的状态和配置就已经自动进行同步更新了。

检查测试

配置完成后,应该进行测试以验证有效性。 下面列出了系统各个方面的测试。

验证一般功能

在LAN上设置客户端,确保接收到DHCP IP地址,并显示VPN LAN作为其网关和DNS服务器。 验证客户端是否可以解析主机名,访问Internet,是否按预期方式运行。

验证XMLRPC同步是否正常

XMLRPC配置同步可以通过几种方法进行测试。 最简单的方法是对主要的任何支持的区域(如防火墙规则)进行更改,然后查看更改是否会在辅助节点反映出来(一般只需要几秒钟)。

强制配置同步测试XMLRPC的手动方法是访问主节点上的状态 >重置规则 ,然后单击强制配置同步。 状态将短暂更改,然后如果一切正常,将显示一条消息,指示同步已成功完成。

验证CARP是否正常工作

在两个节点上访问状态 > CARP,以检查CARP是否正常工作。 所有CARP VIP的主节点将显示“MASTER”,而所有CARP VIP的辅助节点将显示“BACKUP”。 如果状态屏幕显示CARP被禁用,请点击启用启用CARP按钮。

验证状态同步是否正常工作

状态>CARP页面列出了指示状态同步状态的pfsync节点。 在两个节点上,这些值可能并不总是相同,但是它们应该是接近的。 如果完全不同,则状态同步可能存在问题。 如果它们相同或几乎相同,则状态同步在正常工作。

测试故障转移

可以通过以下四种方式进行故障转移测试:

  • 转到主节点上的状态 > CARP,点击进入持久CARP维护模式按钮, 这将永久禁用CARP,即使重新启动主节点。 要退出维护模式,请单击退出CARP维护模式,再次启用CARP。 这是一种比禁用CARP更容易和更快速的改变方式。
  • 拔下CARP VIP的接口(如WAN或LAN)的网络电缆。 这将触发故障切换, 将电缆重新插入则恢复。
  • 在主节点状态 > CARP上单击临时禁用CARP。 这将暂时禁用CARP,如果主节点重新启动,它将重新启动。 单击启用CARP重新打开它。
  • 关闭或重新启动主节点。

在进行上面的测试期间,访问辅助节点的的状态>CARP,以确认CARP VIP已经接管并显示MASTER状态。

在触发故障转移之前、期间和之后,测试从LAN上的客户端到Internet的连接,以确保连接在每个步骤中起作用。 下载文件,流媒体很有可能会持续不间断。 但基于VoIP的电话可能会有轻微的中断,因为它们不像其他电话那样会缓冲数据。

还有客户端尝试通过辅助节点运行时从DHCP获取IP地址。如果已经配置了VPN或其他服务,那么在测试过程中也要进行检查,以确保在辅助节点上建立的VPN继续通过流量。一旦主节点返回到“MASTER”状态,确保一切都继续工作。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇