pfSense book之硬件配置指南

  • 最低硬件要求

  • 硬件选择
  • 硬件配置
  • 硬件优化和故障排除

pfSense软件发行版与FreeBSD支持的大多数硬件兼容。

pfSense2.4和更高版本与64位(amd64,x86-64)体系硬件架构和基于ARM的SG-1000的防火墙兼容。

pfSense2.3.x和之前的版本兼容32位(i386,x86)和64位(amd64,x86-64)硬件架构。

ARM(SG-1000除外),PowerPC,MIPS,SPARC等替代硬件体系结构目前不受支持。

硬件的兼容性

确保硬件与pfSense软件兼容的最佳方法是从pfSense商店购买硬件。 商店中的硬件会在每个pfSense软件版本中进行测试,并针对性能进行了调整。

对于DIY解决方案,阅读FreeBSD硬件说明是确定硬件兼容性的最佳方法。 pfSense2.4.2-RELEASE-p1基于freeBSD11.1-RELEASE-p6,所以在FreeBSD网站硬件说明中可以找到兼容的硬件。 另外可以查询FreeBSD FAQ的硬件部分

网卡

FreeBSD支持各种各样的有线以太网卡(NIC),大部分都与pfSense防火墙兼容。但是,并非所有的网卡都是相同的。不同的制造商之间的硬件质量差别很大。

我们推荐使用英特尔PRO / 1000 1Gb和PRO / 10GbE 10Gb网卡,因为它们在FreeBSD中有稳定的驱动程序支持,而且性能非常好。 pfSense商店中销售的大多数硬件都包含Intel 网卡。

在FreeBSD支持的各种其他PCIe / PCI卡中,一些工作正常。其他可能有问题,如VLAN不能正常工作,不能设置速度或双工,或性能差。在某些情况下,FreeBSD可能支持一个特定的网卡,但是在与特定的主板芯片组搭配时,驱动程序的支持可能会很差。如果有疑问,请在pfSense论坛中搜索其他人使用相同或类似硬件的经验。

当防火墙需要使用VLAN时,必须选择支持硬件VLAN处理的网卡。

USB网卡

我们不建议使用任何品牌/型号的USB网卡,因为它们的可靠性差,性能也不稳定。

无线网卡

pfSense包含内置的无线功能,可以让运行pfSense软件的防火墙变为无线接入点,或使用无线802.11连接作为WAN连接,或两者兼而有之。

最低硬件要求

满足pfSense 2.4.2-RELEASE-p1版本运行的最低硬件要求:

  • CPU :600 MHz或更快
  • RAM :512 MB或更多
  • 4 GB或更大的磁盘驱动器(SSD,HDD等)
  • 一个或多个兼容的网卡
  • 用于初始安装的可启动USB驱动器或CD / DVD-ROM

注意:最低要求不适于所有环境。

硬件选择

使用未经测试硬件的开源操作系统可能会造成硬件/软件冲突。

预防硬件问题

使用官方pfSense硬件

我们强烈建议您使用pfSense商店的官方硬件。 官方硬件平台经过了彻底的测试和验证,能确保系统运行的稳定性。

借鉴别人的经验

在pfSense论坛上,可以查询别人安装使用pfsense的硬件列表,也可以找到不兼容的例子。

命名约定

在本书中,我们将64位硬件体系架构称为“amd64”,这是FreeBSD使用的体系架构。 英特尔采用了AMD为x86-64创建的架构,因此名称amd64是指所有x86 的64位CPU。

SG-1000防火墙基于armv6架构,但由于SG-1000是目前唯一与pfSense兼容的ARM设备,因此我们将通过名称来引用SG-1000,而不是使用通用的ARM类型或架构名称。

硬件配置

确定pfSense的硬件配置,所需的吞吐量和必要的功能是硬件选择的主要因素。

网络吞吐量

如果要求低于100 Mbps的未加密吞吐量,最低硬件配置就足够了。 要满足更高的吞吐量要求,请根据广泛的测试和部署经验并遵循以下指南。

以下是pfsense官方产品的硬件配置:

pfSense 官方产品硬件配置
型号 CPU CPU速度 核心 内存 网卡速度
SG-1000 TI ARM Cortex-A8 AM3352 600 MHz 1 512 MB 2x1G
SG-2220 Intel Rangeley Atom C2338 1.7 GHz 2 2 GB 2x1G
SG-2440 Intel Rangeley Atom C2358 1.7 GHz 2 4 GB 2x1G
SG-4860 Intel Rangeley Atom C2558 2.4 GHz 4 8 GB 6x1G
SG-8860 Intel Rangeley Atom C2758 2.4 GHz 8 8 GB 6x1G
XG-2758 Intel Rangeley Atom C2758 2.4 GHz 8 16 GB 2x10G, 4x1G
C2758 Intel Rangeley Atom C2758 2.4 GHz 8 8 GB 4x1G +2x10G
XG-1540 Intel Xeon-DE D-1541 2.0 GHz 8 16-32 GB 2x10G, 2x1G

下表“CPU最大吞吐量 – 1400 Byte数据包”是比较不同硬件产品之间的吞吐量。 该表包含TCP的Mbit / s吞吐量。 该测试使用了1400 Byte的分组大小。

警告

以下数字是正在进行的测试的示例结果,并不能准确反映每个设备的全部潜在吞吐量。

CPU最大吞吐量 – 1400Byte数据包
型号 TCP – 1400 Byte 数据包
Mbit/s
SG-1000 306
SG-2220 939
SG-2440 939
SG-4860 939
SG-8860 939
XG-2758 4550
C2758 4630
XG-1540 4900

在真实网络中,流量可能会包含不同大小的数据包,但并不是所有的数据都是大包,而是完全取决于环境和所涉及的流量类型。 下表“500,000 PPS吞吐量”列出了几个常见的数据包大小和吞吐量达到了每秒500,000包的速度。

500,000 PPS吞吐量
帧大小 吞吐量在500 Kpps
64 bytes 244 Mbps
500 bytes 1.87 Gbps
1000 bytes 3.73 Gbps
1500 bytes 5.59 Gbps

网卡性能差异

网卡的选择对性能有重大影响。 廉价的低端卡比Intel等高质量的网卡占用更多的CPU。 影响防火墙吞吐量的第一个瓶颈是CPU,但有时候网卡更重要。 同频率CPU,如果使用更好的网卡,吞吐量可以明显提高。 相比之下,如果使用低劣的网卡,提升CPU的速度却不会成比例地增加吞吐量。

防火墙其他功能影响

在防火墙上启用的功能,服务和插件可能会降低总吞吐量,因为它们会消耗硬件资源。 拦截或检查网络流量的插件尤其如此,例如Snort或Suricata。

大多数基本系统功能不会影响硬件性能,但不排除少数可能会对硬件利用率产生相当大的影响。

状态表占用内存

状态表是存储跟踪通过防火墙的活动网络连接状态。 通过防火墙的每个连接消耗两个状态:一个是进入防火墙,一个是离开防火墙。 例如,如果防火墙必须同时处理100,000个Web服务器客户端连接,则状态表必须能够保存200,000个状态。

注意

需要大量并发连接的防火墙必须有足够的内存来保存状态表。 每个状态需要大约1 KB的内存,计算内存消耗非常简单,状态表越大,就越消耗内存。  防火墙本身以及其他服务需要175-256 MB内存,防火墙所使用的功能越多,也会消耗更多的内存。

状态表内存消耗量
状态 连接 内存占用
100,000 50,000 ~97 MB
500,000 250,000 ~488 MB
1,000,000 500,000 ~976 MB
3,000,000 1,500,000 ~2900 MB
8,000,000 4,000,000 ~7800 MB

对网络需求保留适当的富余很有必要。 根据上面的信息,100,000个状态大约消耗100MB的内存,100万个状态大约消耗1GB的内存。

VPN (所有类型)

客户通常询问VPN的问题是“我的硬件可以处理多少个连接?”这是大多数部署的次要因素,并且考虑较少。 VPN硬件规模的主要考虑因素是VPN流量的潜在吞吐量。

任意类型的VPN对网络流量的加密和解密都会占用CPU的处理能力。 pfSense提供了几个与IPsec一起使用的加密选项。各种加密的性能不同,防火墙的最大吞吐量取决于所使用的密码以及该密码是否能被硬件加速。

硬件加密极大地提高了最大的VPN吞吐量,并在很大程度上消除了加密密码之间的性能差异。下表“VPN硬件模式下的吞吐量,所有值都是Mbit / s”,说明使用IPsec和OpenVPN时,pfSense存储中各种可用硬件的最大吞吐量。

对于IPsec,AES-GC将通过AES-NI进行加速,速度更快,而且也不需要单独的验证算法。与OpenVPN相比,IPsec每个数据包的操作系统资源占用也较少,所以目前IPsec几乎总是比OpenVPN快。

注意

以下数字是正在进行的测试的示例结果,并不能准确反映每个设备的全部潜在吞吐量。

VPN硬件模式下的吞吐量,所有值都是Mbit / s
型号 OpenVPN / AES-128+SHA1 IPsec / IKEv2+AES-GCM
TCP 1400B TCP 1400B
SG-1000 17 22
SG-2220 65 322
SG-2440 65 325
SG-4860 73 418
SG-8860 73 445
XG-2758 68 435
C2758 143 556
XG-1540 166 780

对于防火墙要求较高的VPN吞吐量,硬件加密可以确保传输速度快而且CPU占用也较小。 CPU占用的减少意味着VPN不会降低防火墙上其他服务的性能。 当前最佳可用硬件加密可通过使用包含AES-NI支持的CPU与IPsec中的AES-GCM来结合使用。

插件

某些插件对硬件要求有重大影响,在选择硬件时必须考虑到它们的使用。

Snort/Suricata

Snort和Suricata是用于网络攻击检测的pfSense插件。 根据它们的配置,它们需要占用大量的内存。 至少需要1GB以上或更多。

Suricata是多线程的,如果硬件提供支持,则可以利用NETMAP进行内联IPS。

Squid

Squid是pfSense使用的缓存HTTP代理服务器的插件。 磁盘I / O性能是Squid用户的一个重要考虑因素,因为它决定了缓存性能。 相比之下,磁盘速度在很大程度上与大多数pfSense防火墙无关,因为唯一重要的磁盘活动是启动时间和升级时间; 它与网络吞吐量或其他正常操作无关。

即使是Squid,任何硬盘驱动器都可以满足小型环境的需要。 对于200多个用户的网络,一般OEM的高质量固态硬盘是必不可少的。 低质量的SSD你可能会无法忍受与维护缓存数据时大量写入的等待时间。

Squid高速缓存的大小也影响到防火墙所需的内存数量。 在AMD64上,Squid每1GB缓存消耗大约14MB的内存,一个100GB的高速缓存需要1.4GB的内存来进行高速缓存管理,这还没计算其他的内存需求。

硬件优化和故障排除

pfSense下的底层操作系统可以通过多种方式进行微调。 这些可调参数中的一些可在pfSense的“高级选项”下找到。

pfSense软件的默认安装包含一组全面的调整值,可以获得良好的性能,而不会过于激进。 在某些情况下,硬件或驱动程序需要更改这些设定值,或者特定的网络工作负载需要更改这些预设值来实现最佳性能。

注意

/boot/loader.conf.local的更改,必须重启防火墙才能生效。

Mbuf 耗尽

用户遇到的一个常见问题是mbuf耗尽。 如果防火墙用完了mbufs,那么在某些网络负载下会导致内核崩溃和重启,从而耗尽所有可用的网络内存缓冲区。 对于使用多个队列的网卡或在资源使用情况下优化性能的网卡更为常见。 此外,当防火墙使用某些功能(如限制器)时,mbuf使用率会增加。要增加可用的mbufs数量,请将以下内容添加到/boot/loader.conf.local:

kern.ipc.nmbclusters="1000000"

此外,可能需要其他类似的值,如kern.ipc.nmbjumbop。 除了上面提到的图表之外,请检查命令netstat -m的输出,以验证是否有任何区域接近耗尽。

网卡队列计数

出于性能原因,某些网卡类型使用多个队列来处理数据包。 在多核系统上,通常驱动程序会希望每个CPU核心使用一个队列。 有几种情况会导致稳定性问题,这可以通过减少网卡使用的队列来解决。 要减少队列数量,请在/boot/loader.conf.local中指定新值,例如:

hw.igb.num_queues=1

sysctl OID的名称因网卡而异,但通常位于 hw.<drivername>下的sysctl -a的输出中。

禁用MSIX

另一个常见的问题是网卡没有正确地支持MSIX。 可以通过将以下行添加到/boot/loader.conf.local来禁用MSIX:

hw.pci.enable_msix=0