鐵血男兒的BLOG

pfSense、OPNsense防火墙技术交流

鐵血男兒的BLOG

pfSense book之硬件配置指南

pfSense®软件发行版与FreeBSD支持的大多数硬件兼容。pfSense 2.4.x和更高版本与64位(amd64,x86-64)体系结构硬件和基于Netgate ARM的防火墙兼容。pfSense 2.3.x及更低版本与32位(i386,x86)和64位(amd64,x86-64)体系结构硬件兼容。目前不支持诸如ARM(Netgate出售的设备除外)、PowerPC、MIPS、SPARC等备用硬件体系结构。

硬件兼容性

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

对于DIY解决方案,阅读FreeBSD硬件说明是确定硬件兼容性的最佳方法。pfSense2.4.5-RELEASE-p1基于11 .3-STABLE @ r357046,因此可在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等)
  • 一个或多个兼容的网卡
  • 用于初始安装的可启动U盘或CD / DVD-ROM

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

硬件选择

将开放源代码操作系统与未经测试的硬件一起使用可能会产生硬件/软件冲突。

预防硬件问题

使用官方pfSense硬件

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

借鉴别人的经验

他人的经验是宝贵的源知识,可以通过在线研究pfSense和硬件兼容性来找到这些知识,尤其是在 pfSense论坛上。故障报告不一定被认为是权威的,因为除了硬件不兼容以外,其他问题也可能引起问题。

如果所涉及的硬件来自主要制造商,可以将品牌,型号与site:pfsense.org做为关键字进行搜索,则可以在pfSense.org网站上搜索相关的用户体验。也可以使用FreeBSD做为关键字进行相同的搜索,可能会带来更多有益的经验。

命名约定

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

NETGATE设备型号,包括基于硬件的armv6架构,也叫armaarch64,也叫arm64。这些独特体系结构的特定项目将在必要时被取消,但通用术语ARM可能被认为适用于两者,但仅适用于Netgate出售的基于ARM的特定设备,例如SG-1100和SG-3100。

硬件配置

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

网络吞吐量

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

Netgate Store提供了本节中引用的硬件。硬件的一般规格可在pfSense硬件表中找到 。标有“*”的网络接口是集成的交换式以太网端口。用“SFP”制成的接口需要SFP模块。某些型号可能还提供其他扩展卡,请查看 Netgate Store页面以获取详细信息。

pfSense硬件
设备型号     处理器 时钟(核心) 记忆体(GB) 网卡速度
SG-1100 ARM Cortex A53 1.2 GHz(2) 1个 3x1G *
SG-3100 ARMv7 Cortex-A9 1.6 GHz(2) 2 2x1G,4x1G *
SG-5100 英特尔凌动C3558 2.2 GHz(4) 4-16 6x1G
XG-7100 英特尔凌动C3558 2.2 GHz(4) 8-24 2个10G SFP,8个1G *
XG-1537 英特尔至强DE D-1537 1.7 GHz(8) 8-32 2个10G SFP,2个1G
XG-1541 英特尔至强DE D-1541 2.1 GHz(8) 16-32 2x10G,2x1G

下表比较了几种硬件型号之间的吞吐量。该表包含有效负载大小为1460字节的TCP数据包的吞吐量,该吞吐量由iPerf3 pf启用。在所有可用的基本模型端口上测试了速度。这些数字往往更大,因为这是最佳情况,在这种情况下,对于典型的1500字节MTU链路,所有数据包均为全尺寸。

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

各种pfSense设备最大吞吐量(1460字节数据包)
设备型号 TCP-1460B
SG-1100 656 Mbps
SG-3100 2.44 Gbit /秒
SG-5100 3.65 Gb /秒
XG-7100 6.81 Gbit /秒
XG-1537 14.48 Gbit / s
XG-1541 14.63 Gb /秒

在实际的网络中,流量可能包含大小不同的数据包,而不是全部这么大,但它完全取决于环境和所涉及流量的类型。IMIX测试图近似混合流量,使其更接近真实环境。

下表比较了几种设备之间的吞吐量,但是使用了IMIX样式的数据包大小混合。在所有可用的设备端口上测试了速度。由于处理较小的数据包会增加负载,因此这些数字往往会更低。

各种pfSense设备最大吞吐量(IMIX)
设备型号 IMIX
SG-1100 190 Mbit /秒
SG-3100 1.04 Gb /秒
SG-5100 1.84 Gb /秒
XG-7100 1.85 Gb /秒
XG-1537 5.00 Gb /秒
XG-1541 6.10 Gbit /秒

作为一般参考,下表列出了不同数据包大小在500,000 PPS下的吞吐量。

不同数据包大小在500,000 PPS下的吞吐量
数据包大小 500 Kpps吞吐量
64字节 244 Mbps的
500字节 1.87 Gbps
1000字节 3.73 Gbps
1500字节 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功能许可的结果,并且在pfSense中没有特定的直接等效项。VPN的硬件需求主要考虑因素是VPN流量的潜在吞吐量。

所有类型的VPN加密和解密网络流量都会占用大量CPU。pfSense提供了几种与IPsec一起使用的加密选项。各种加密的执行方式不同,防火墙的最大吞吐量取决于所使用的加密以及该加密是否可以由硬件加速。

硬件加密加速器极大地提高了最大VPN吞吐量,并在很大程度上消除了加速加密之间的性能差异。下表的吞吐量说明了使用ipsec时pfSense存储中可用的各种硬件的最大吞吐量。

对于IPsec,可以通过板载加密加速器来加速加密解密过程。例如,AES-GCM通过AES-NI进行加速,它不仅更快,而且不需要单独的身份验证算法。与OpenVPN相比,IPsec的每数据包OS处理开销更少,因此目前IPsec几乎总是比OpenVPN更快。

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

IPsec吞吐量(按硬件型号)
设备型号 IPsec加密 TCP 1460B IMIX
SG-1100 AES-128-CBC + SHA1 74.2 Mbit /秒 46 Mbit /秒
SG-3100 AES-128-CBC + SHA1 453 Mbit /秒 108 Mbit /秒
SG-5100 AES-128-GCM 923 Mbit /秒 380 Mbit /秒
XG-7100 AES-128-GCM 1.28 Gb /秒 385 Mbit /秒
XG-1537 AES-128-GCM 2.77 Gbit /秒 2.10 Gb /秒
XG-1541 AES-128-GCM 2.82 Gb /秒 2.81 Gb /秒

在防火墙需要高VPN吞吐量的情况下,硬件加密加速至关重要,不仅要确保快速的传输速度,还要减少CPU开销。CPU开销的减少意味着VPN不会降低防火墙上其他服务的性能。通过使用包含AES-NI支持和IPsec中的AES-GCM的CPU,可以获得更佳的速度提升。

插件

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

Snort/Suricata

Snort和Suricata是用于网络入侵检测的pfSense软件包。根据它们的配置,它们可能需要大量的内存。一般情况下1GB是最小值,某些配置可能需要2GB或更多。Suricata是多线程的,如果硬件提供支持,则可以利用NETMAP进行内联IPS。

Squid

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

即使对于Squid,任何硬盘驱动器在小型环境中也足够了。对于200多个用户的部署,必须使用高质量SSD来提升缓存速度。

Squid缓存的大小也影响到防火墙所需的内存数量。在amd64上,每1GB缓存,Squid大约消耗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。 除了在仪表板查看Mbuf占用外,还可以使用命令netstat -m来进行检查,以验证Mbuf是否耗尽。

网卡队列计数

出于性能原因,某些网卡类型使用多个队列来处理数据包。 在多核系统上,通常驱动程序会希望每个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

发表评论

您的电子邮箱地址不会被公开。