FortiGate硬件加速逐步故障排除
最后更新:2025年6月27日
FortiGate硬件设备非常强大的功能之一是硬件平台内置的硬件加速芯片组。这使得在特定情况下可以直接从输入接口转发到输出接口,而无需经过系统的 CPU。这可以大大减轻你的 FortiGate 系统负载。
在大多数情况下,硬件加速运行得非常顺畅。但在极少数情况下,硬件加速可能会引发问题。或者硬件加速根本不起作用,数据包只能由你的 FortiGate CPU 来处理。
本指南将引导你完成重要的排查步骤。
本指南涵盖了FortiOS 7.4版本,但本文大部分信息同样适用于其他FortiOS版本。但也有可能有些CLI命令已经更改或被移除。
我们使用CP代表内容处理器,NP代表网络处理器,SoC代表系统单片。详细描述可见本文末尾提到的硬件加速指南。
步骤1:你是否使用虚拟机平台?
你可以通过执行CLI命令查看你使用的硬件平台类型:
get hardware status
任何虚拟机平台都不支持硬件加速。
虽然在KVM平台上通过DPDK和vNP存在一些虚拟卸载和加速技术,但本指南将重点介绍通过Fortigate的NP、CP和SoC实现基于硬件的加速。
步骤2:你在使用软件交换机吗?
通过软件交换机的流量并未卸载到硬件芯片组。
如果你在FortiGate上执行CLI命令,可以查看是否配置了任何软件交换机:
show system interface | grep "type switch" -f
对于某些设置,一种可能的解决方案是用硬件交换机替代软件交换机。请注意,某些使用隧道WiFi连接到软件交换机或VXLAN架构的设置无法转换为硬件交换机,因为硬件交换机不支持CAPWAP或VXLAN。可能还有其他未提及的限制。所以请先确认,如果你的情况是从软件切换到硬件交换机的转换是否可能的。
重要说明:NP 7硬件芯片组能够卸载基于软件交换的会话(包括VXLAN及其他支持的协议),但前提是“交换机内策略”设置设置为“明确”。一旦交换机内策略被设置为显式,FortiGate 会为所有通过软件交换机的流量创建会话。会话一旦创建,流量即可在会话表和 flowtrace 工具中显示。此外,由于会话表中已有会话,这些会话可以卸载到NP7芯片组。
步骤3:你用的是PPPoE接口吗?
通过以下CLI命令,你可以检查是否使用了无法卸载的PPPoE接口:
show system interface | grep "mode pppoe" -f
请注意,“调制解调器”界面是FortiOS默认值,大多数情况下并未被使用。
任何类型的PPPoE接口以及所有附属接口,比如PPPoE接口上的VLAN,都完全不支持硬件加速。
步骤4:你是否使用基于软件的VDOM间链接?
VDOM间链路有两种不同类型:NP加速链路和基于软件的链路。基于软件的VDOM链路无法卸载到网络处理器(NP),因此不会被加速。所有内置NP单元的型号都支持基于NP的VDOM间链路。每个内置的NP芯片组都有一个链路。https://docs.fortinet.com/document/fortigate/6.4.0/hardware-acceleration/851990/configuring-inter-vdom-link-acceleration-with-np6-processors 下还有很多额外信息
步骤5:NP或CP加速模式是设置为“无”吗?
如果你在IPS设置中将NP或CP加速设置为“无”,IPS检测就不会被转载到硬件的NP或CP芯片组。
config ips global
set np-accel-mode none
set cp-accel-mode none
end
在配置系统NPU下可以做一些额外的全局设置。这里举几个例子:
config system npu
set fastpath [disable|enable]
set capwap-offload [enable|disable]
set sw-np-bandwidth [0G|2G|…]
end
你可以在CLI指南中找到所有这些设置的更多信息。
要检查这些功能是否在你的硬件上被启用,请使用以下命令:
diagnose npu
as example:
diagnose npu np6lite npu-feature
步骤6:你的会话是由会话助手还是ALG处理?
需要FortiOS会话辅助工具或ALG的会话无法卸载。例如,FTP会话无法卸载到NP处理器,因为FTP会话使用FTP会话助手。此外,FortiGate 上有一个 DNS 会话辅助工具,可以防止 DNS 流量被卸载,这也是另一个例子。针对此,Fortinet发布了专门的知识基础文章。
步骤7:(如果使用IPSec)你关闭了IPSec隧道中的硬件卸载吗?
您可以使用以下配置设置,禁用单个 IPSec 隧道的 NP 卸载:
config vpn ipsec phase1-interface
edit
set npu-offload disable
end
end
你应该非常小心使用这个设置,因为禁用NP卸载功能时,系统负载会大幅增加。我们的建议是仅在测试时禁用NP卸载,测试结束后再重新启用。
请注意,如果你将ESP流量封装在TCP数据包中,NP加速也会被禁用:
config vpn ipsec phase1-interface
edit
set transport tcp
next
end
步骤8:(如果使用IPSec)你的NP是否支持所选算法?
配置好你的隧道,并通过它们发送一些数据。然后,执行该命令
diagnose vpn ipsec status
在你的FortiGate的CLI上检查,哪个芯片组负责你的加密作。在最佳情况下,所有作都可以由你的硬件芯片组来处理。否则,你会在“软件”栏目下看到一些不是Null的计数器。
你可以通过选择其他算法来解决这个问题。
你也可以用以下命令检查每个隧道的卸载状态:
diagnose vpn tunnel list name TunnelName
找那边的npu_flag。
00 = 两个IPsec SA都加载到内核
01 = 出站IPsec SA复制到NPU
02 = 入站IPsec SA复制到NPU
03 = 同时出站和入站IPsec SA复制到NPU
20 = 不支持的密码或HMAC,IPsec SA不可卸载
步骤9:防火墙策略中是否禁用自动ASIC卸载或NP加速?
你可以在 FortiGate 上按“每个策略”禁用“自动 asic-offload”功能。
config firewall policy
edit
set auto-asic-offload disable
set np-acceleration disable
end
end
你应该非常谨慎地使用这个设置,因为当自动ASIC卸载或NP卸载时,它会大幅增加系统负载。我们的建议是仅在测试目的中关闭卸载,测试结束后再重新启用。
第10步:SD-WAN 是否启用了被动健康检查?
对于受被动SD-WAN健康监测影响的流量,硬件加速被禁用。
以下是SD-WAN中被动监控的CLI配置示例。请注意,除了将健康检查配置为被动模式(设置检测模式被动)外,你还必须在接受监控成员流量的防火墙策略上启用被动-WAN健康测量。当你在策略上启用被动-WAN健康测量时,自动ASIC-卸载也会自动被禁用。
config system sdwan
config health-check
edit "Passive"
set detect-mode passive
next
end
end
config firewall policy
edit 14
set passive-wan-health-measurement enable
next
end
show full firewall policy 14 | grep auto
set auto-asic-offload disable
步骤11:防火墙的策略检查模式设置为基于代理吗?
基于代理的检查配置文件无法通过硬件加速。因此,所有基于代理的检查都由运行在CPU上的进程处理。
您可以使用以下CLI命令找到任何基于代理的防火墙策略:
sh | grep "inspection-mode proxy" -f
步骤12:接口上启用了sFlow采样吗?
在任何接口上配置sFlow都会禁用该接口上所有流量的NP6、NP6XLite或NP6Lite卸载。
步骤13:“严格头部检查”是否被启用?
启用严格的头部检查会禁用所有硬件加速。这种行为在本知识库中有详细记录。
sh | grep "check-protocol-header strict" -f
第14步:拖车是在DTLS上吗?
DTLS无法卸载到FortiGate硬件。
你可以考虑更倾向于 IPSec VPN 来连接接入点,而不是使用 DTLS。
第15步:您是否已经实施了DoS政策?
硬件加速支持DoS政策需要手动启用。更多信息可见:https://docs.fortinet.com/document/fortigate/7.6.3/hardware-acceleration/599810/dos-policy-hardware-acceleration
步骤16:设备识别尚未确定设备
只要设备的MAC地址尚未被识别,FortiGate就不会卸载流量,而是处理流量进行设备识别。
诊断命令
如何查找哪些端口连接到哪颗NP芯片:
diagnose npu
diagnose npu np6lite port-list
你也可以用以下命令打印一些有趣的NP会话统计数据:
diagnose npu
diagnose npu np6lite session-stats
有多少会话被卸载给SPU或nTurbo?
FortiGate仪表盘上有一个叫“Sessions”的小部件。在这个小部件中,你可以看到当前已打开多少会话,以及其中多少会话被卸载到SPU或nTurbo硬件上
关于该主题的更多信息,详见硬件加速指南。
参考文档
https://blog.boll.ch/fortigate-hardware-acceleration-step-for-step-troubleshooting/
浙公网安备 33010602011771号