FortiGate路由实战:从静态路由、策略路由到OSPF/BGP与SD-WAN排错
2026/9/19 18:48:35 网站建设 项目流程

简介:一份以Fortinet官方培训讲义形式整理的《FortiGate基础架构路由技术》PDF学习资料,围绕路由算法与选路原理,面向网络运维工程师、Fortinet认证初学者和企业内训场景,帮助读者系统理解FortiGate在OSI三层环境中路由功能的核心概念、配置方法与排障思路。资源包共1个PDF文件,约6.25MB,源自FortiOS 6.0培训课程,图文排版清晰,适合边看边练,目前已有119人学习。文档从路由基本概念与FortiGate两次路由查找机制切入,依次讲透静态路由、基于策略的路由、RIP/OSPF/BGP/IS-IS动态路由、Internet服务路由和IPv6路由,并说明策略路由可匹配协议、源/目的端口、ToS等复杂条件。进阶部分还涵盖路由监视器与路由特性,包括Distance、Metric、Priority属性、ECMP冗余与负载均衡,并附有知识测试和CLI路由表示例,能帮助读者快速掌握FortiGate路由选路原理,提升真实组网中的调优与排错能力。

1. 为什么Fortinet基础架构路由要先看转发表而不是策略表

绝大多数把FortiGate当防火墙用的人,第一次在它上面“做路由”时都会撞同一个墙:路由表里明明有条路由,转发就是不通。反过来,按路由器习惯配完OSPF和BGP,又发现流量在策略匹配阶段被静默丢弃。FortiGate本质上是把安全策略引擎和路由引擎并排放进一台设备,路由查找与策略查找是两条独立的流水线,只有两者同时命中,报文才会真正被转发。这个基本认知,直接决定了你后续排错时先敲get router info还是先查防火墙策略。

这篇内容从FortiGate的路由距离与转发表决策讲起,覆盖静态路由的常用参数、策略路由的配置顺序、OSPF与BGP在分支和边界场景的典型配置,最后落到路由验证和SD-WAN实际选路时的排错方法以及可视化监控思路。适合正在做FortiGate网络割接、多分支互联,或者想把防火墙纳入现有路由体系的网络工程师;对刚接手设备、路由和策略分不清的运维同学,也能在这套框架里建立起一条完整的检查路径。

2. 静态路由与路由距离:FortiGate先选谁、再走谁

2.1 路由距离和ECMP:FortiGate选路的第一道过滤器

FortiOS的路由决策不是简单看“哪条路由最长匹配”,而是先按来源比较管理距离(Administrative Distance),在距离相同的前提下再做最长前缀匹配,前缀也相同就进入ECMP多路径负载均衡。FortiGate默认把直连路由的管理距离设为0,静态路由是10,OSPF区域内和区域间是10、OSPF外部是150,eBGP是20,iBGP是200。很多人只记住了静态路由是10,却不知道iBGP默认是200,导致双线路分别跑eBGP和iBGP时,回程流量总是优选静态或OSPF路径,排错排了半天都找不到原因。

路由来源默认管理距离
Connected(直连)0
Static(静态)10
OSPF 区域内/区域间10
eBGP20
OSPF 外部150
iBGP200

ECMP默认支持4条等价路径,如果两条静态路由的distance和前缀长度都一致,FortiGate会按会话做负载分担。注意这里说的是按会话而不是按数据包,同一条TCP连接的所有报文都会固定走同一条路径,避免乱序。ECMP的权重可以通过set priority调整,值越小在ECMP里的优先级越高,这个属性和路由距离是两回事,前者决定“进不进ECMP”,后者决定“ECMP排在哪个路由来源后面”。我经常在培训里强调:FortiGate是先比距离,再比前缀,最后才轮到权重。

2.2 最小静态路由配置:从接口、网关到路由表

在FortiGate上配置静态路由,最常犯的错误是只写了目的网段和出接口,没有写网关。FortiGate对以太网口要求必须显式指定gateway,接口本身不能充当下一跳,这和Cisco NX-OS上配ip route 0.0.0.0/0 null0的习惯差别很大。下面是一条标准的上联运营商静态路由:

config router static edit 1 set dst 0.0.0.0 0.0.0.0 set gateway 192.168.1.254 set device "port1" set distance 10 set priority 0 set status enable next end

这段配置里set dst同时写入目的地址与掩码,set gateway严格对应当前接口所在网段的下一跳,set device指定出接口,set distance控制管理距离,set priority用于ECMP加权。配置完成后,用get router info routing-table static查看静态路由是否进入转发表。如果路由表里没有出现这条条目,先检查gateway是否与port1的IP在同一网段,FortiGate不会把“下一跳不可直连”的路由放进FIB。

2.3 静态路由的3个必调参数:distance、priority、link-failure-monitor

生产环境中,静态路由如果不带链路检测,就是一个纯粹的“信仰路由”——接口只要处于up状态,即使对端已经不可达,路由也会一直留在转发表里。FortiGate提供了三个关键参数,我一般建议按需组合使用,而不是全量堆上。

config router static edit 2 set dst 10.10.20.0 255.255.255.0 set gateway 192.168.1.254 set device "port1" set distance 20 set priority 10 set link-failure-monitor 192.168.1.254 114.114.114.114 set health-check-monitor "ping_wan" next end

link-failure-monitor是接口级探测,FortiGate会向指定的IP持续发送探测报文,连续失败后把该路由从转发表里摘除,不再参与转发。health-check-monitor则把探测逻辑交给SLA健康检查对象,适合复用已有的链路探测策略。distance在这里设成20,比默认静态路由大,形成浮动路由效果:主链路down了,备路由才会自动接管。还有一个常见坑是priority只对ECMP生效,不是用来做静态路由主备切换的,主备靠distance,ECMP内选路才靠priority。

提示:link-failure-monitor可以不只写网关地址,建议同时探测一个外网目标,这样双链路场景下如果运营商侧断了但网关还活着,路由也能被正确摘除。但探测目标不要选择公网DNS以外的业务地址,避免因对方策略误伤导致误切。

3. 策略路由:当“目的下一跳”不足以决定转发路径时

3.1 PBR在FortiGate路由体系里的真实位置

FortiGate的策略路由(Policy-Based Routing,配置段在config router policy)不是对路由表的补充,而是对路由表的覆盖。在FortiOS的转发流水线里,PBR的匹配发生在目的路由表查询之前,也就是说PBR命中的流量根本不会去查FIB,直接按照PBR里指定的gateway和output-device转发。但这里有个关键细节:PBR并不能绕过防火墙策略,流量最终仍然要在策略匹配阶段做一次安全裁决,如果出接口没有放行策略,PBR选出来的路依然是不通的。

理解PBR的定位,对选型很重要。静态路由和动态路由都是“根据目的地址选路”,PBR则是“根据源地址、目的端口、入接口、应用特征选路”。最常见的落地场景是企业内网有两条出口链路,一条走办公业务,一条走视频会议或专线,这时候无法靠目的地址区分,只能靠源网段或应用端口区分。PBR的另一类典型用途是多分支互访时,指定内部特定网段强制走IPsec隧道,而其他流量走互联网出口。

3.2 用CLI配置一条源地址策略路由

下面是一条按源IP分流到专线的PBR配置,场景是10.1.20.0/24网段的财务系统流量必须从port3专线出去,其他流量继续走默认路由。

config router policy edit 1 set input-device "port2" set srcaddr "finance-subnet" set dstaddr "all" set gateway 10.0.30.1 set output-device "port3" set protocol 0 set start-port 0 set end-port 0 set status enable next end

input-device指定入口接口,srcaddr引用已有的地址对象,gateway必须是对端接口的真实IP,output-device是出接口。protocol为0时匹配所有协议,如果只想匹配TCP或UDP,可以设成6或17,再配合start-portend-port做端口范围控制。配置完成后用get router policy确认命中次数在增长,再用diagnose sniffer packet抓包验证流量确实从port3发出。

PBR在FortiOS 7.4之后逐渐与SD-WAN规则整合,config router policy仍可兼容使用,但新项目里我建议直接评估SD-WAN的config system sdwan规则,因为后者能引用健康检查结果做自动切换,静态PBR不具备故障转移能力。如果你的需求是“某条流量必须走专线,专线断了就断开而不是走备份”,静态PBR仍然是最简单可靠的做法。

3.3 PBR的优先级和常见误区

PBR内部匹配规则是按edit的索引顺序从上到下逐条判断,先命中的先执行,不像防火墙策略组那样有独立的策略ID优先级概念。因此新增PBR时,要把更具体的匹配条件放在前面,比如先按源网段+目的端口精确匹配,最后再放一个粗粒度的兜底条目,否则新条目可能永远没有机会被命中。

还有一个被反复问到的点:PBR配置了以后为什么不生效。大多数人第一反应是查路由表,但问题往往出在两个地方——要么PBR里引用的srcaddr地址对象与流量实际源IP不匹配,要么虽然PBR选路成功,防火墙策略把流量拦掉了。排查顺序应该是:先确认PBR的命中计数在增长,再确认对应接口的防火墙策略放行了源、目的、服务,最后才看路由表。

4. OSPF与BGP:内网、分支和运营商边界的路由协议该怎么配

4.1 什么场景用OSPF,什么场景用BGP

FortiGate在基础架构里最常见的路由角色有两个:一是企业核心与分支之间跑OSPF,把内网网段动态宣告出去;二是在与运营商或云厂商对接时跑BGP,接收和发布公网或专线路由。选型上没有那么复杂——内网扁平化、域内互联、设备数量不算爆炸,OSPF足够;跨自治域、需要承载大量前缀或要做路由策略过滤的,用BGP。FortiGate本身也支持把OSPF和BGP做重分布,但我不建议在生产环境随意启用双向重分布,环路风险远大于配置上的便利。

OSPF在FortiGate上的默认行为有几个和Cisco不太一样的地方,最典型的是network语句在area下配置,而且接口被动模式默认关闭。如果你只想让OSPF在某些接口上建立邻居,需要在passive-interface里显式指定其他接口为被动,这可能让习惯Cisco配置的工程师一时不适应。

4.2 OSPF最小配置与3个容易踩坑的参数

以一台位于核心的FortiGate为例,宣告10.0.0.0/24和10.0.1.0/24两个网段到area 0:

config router ospf set router-id 1.1.1.1 set default-information-originate enable config area edit 0.0.0.0 config network edit 1 set prefix 10.0.0.0 255.255.255.0 set area 0.0.0.0 next edit 2 set prefix 10.0.1.0 255.255.255.0 set area 0.0.0.0 next end next end config ospf-interface edit "port1" set interface "port1" set cost 10 set network-type broadcast set priority 128 set bfd enable next end end

router-id最好手动指定而不是依赖自动选举,否则接口地址变化会导致邻居重建。default-information-originate让这台设备作为默认路由的源头向内网通告,这是边界设备的关键配置,不加这条,内网其他OSPF路由器不会从你这里学到默认路由。ospf-interface里的cost用来控制链路优选,network-type决定是广播还是点对点,FortiGate与Cisco互联时经常需要统一为点对点,避免DR/BDR选举带来的邻居建立慢问题。bfd enable配合BFD做快速故障检测,毫秒级感知链路中断,比OSPF自身的hello超时快得多。

配置完成后用get router info ospf neighbor查看邻居状态,Full表示建立成功,如果卡在TwoWay或ExStart,优先检查区域ID、认证参数和MTU是否一致。

4.3 分支互联里最实用的eBGP配置

分支和总部通过运营商专线互联,或者两个FortiGate之间跑eBGP,是Fortinet基础架构路由里的高频场景。下面是最小化的eBGP配置,AS号使用私有AS 65001和65002:

config router bgp set as 65001 set router-id 2.2.2.2 set ebgp-multihop-enable enable config neighbor edit "10.0.2.1" set remote-as 65002 set ebgp-enforce-multihop enable set next-hop-self enable set soft-reconfiguration enable set bfd enable next end config network edit 1 set prefix 192.168.10.0 255.255.255.0 next end end

set as是本端AS号,remote-as是对端AS号,两者不同才构成eBGP。ebgp-enforce-multihop和全局的ebgp-multihop-enable要配套打开,解决非直连邻居建会话的问题。next-hop-self非常重要,它把通告给iBGP邻居时的下一跳改成自己,避免内部路由器因为没有到达对端直连网段的路由而丢弃BGP路由。soft-reconfiguration enable用来保留邻居收到的原始路由,配合路由策略做精细过滤。

config network里宣告的网段必须已经存在于本机路由表中,BGP不会自动发布你没学到的路由,这一点和OSPF的network行为不同。如果network宣告后对端收不到,先get router info bgp summary确认会话是Established,再get router info bgp network查看本地发布了哪些前缀。

提示:FortiGate默认只在BGP会话建立时做一次路由通告,后期新增的network网段需要触发一次软重配或重置会话才能让对端感知,设计割接窗口时把这一点考虑进去,避免出现在线添加网段后迟迟不同步的情况。

5. 路由验证、链路健康检查与SD-WAN实际选路

5.1 用一条命令链快速验证FortiGate路由状态

路由配置完成后,验证的顺序比命令本身更重要。我的习惯是先看邻居或会话状态,再看路由表,最后验证实际转发路径,避免在错误层次浪费时间。下面这组命令可以覆盖90%的日常排查场景:

# 查看所有路由来源的转发表摘要 get router info routing-table all # 只看静态路由(确认distance和gateway是否按预期) get router info routing-table static # 查看OSPF邻居状态,确认Full get router info ospf neighbor # 查看BGP会话摘要和发布的前缀 get router info bgp summary get router info bgp network # 查看会话实际走的出接口和下一跳 diagnose sys session filter clear diagnose sys session list | grep 10.1.20.5

diagnose sys session list输出里能看到会话的入接口、出接口、源和目的地址。如果它显示的出接口和路由表不一致,优先怀疑PBR或SD-WAN规则做了覆盖。这时候再回头查get router policy的命中计数,基本就能定位问题出在哪个环节。

5.2 路由不生效先查转发路径,而不是反复加路由

遇到过很多次这样的情况:现场工程师反复修改静态路由和OSPF配置,问题却始终没解决,原因最终落在设备根本没有处在转发路径上。就像新装FortiClient时报出“Fortinet没有正确地安装到您的计算机或网络上”这类提示一样,很多路由故障的本质也不是路由配置错误,而是这台设备压根没有在流量链路的正确位置上。检查转发路径只需要确认三件事:入接口和出接口是否加入了正确的zone或VLAN接口;防火墙策略是否放行了对应源、目的和服务;HA或透明模式下接口对是否接反。

其中HA场景最隐蔽,主备设备之间配置同步,但只有主设备在处理流量,如果你通过管理口登录的是备机,get router info看到的转发表和实际转发行为是脱节的。方法很简单,执行get system ha status确认当前角色,所有路由验证都应在主设备上做。透明模式下的FortiGate则要额外确认管理VLAN和业务VLAN的划分,路由即使正确,接口配错也一样转发不通。

5.3 用SD-WAN健康检查给静态路由加“心跳”

FortiOS的SD-WAN在7.x版本里已经替代了传统的virtual-wan-link,对于多WAN口上联场景,我推荐用SD-WAN的健康检查结果来决定路由是否有效。配置一个简单的健康检查,每500毫秒探测一次运营商网关,连续3次失败就把该成员链路标记为down,SD-WAN会自动把流量切换到存活链路上:

config system sdwan config health-check edit "isp1" set server "192.168.1.254" set interval 500 set probe-packets 3 set failtime 3 set recoverytime 5 next end config member edit 1 set interface "port1" set gateway "192.168.1.254" set health-check "isp1" next end end

interval单位是毫秒,最小可到200毫秒,但过短的探测间隔会在运营商链路拥塞时产生大量探测报文,建议生产环境用500到1000毫秒。failtime是连续失败次数,recoverytime是链路恢复后经过几次成功探测才重新标记为up。这两个参数直接决定切换的灵敏度,专线互联场景可以调低,普通互联网出口建议保持默认。

SD-WAN启用后,get router info routing-table all里会出现一条指向virtual-wan-link的默认路由,这不是故障,而是SD-WAN接管转发决策后的正常表现。此时实际选路结果要用diagnose sys sdwan health-checkdiagnose sys sdwan member-state来查看。前者输出每个健康检查目标的状态和时延,后者展示各成员链路的up/down状态。两条命令配合,能在割接现场用最短时间判断出流量是不是走在了预设链路上。若需要进一步可视化,FortiGate也支持把SNMP接口对接第三方监控平台,将link-failure-monitor的探测结果、BGP会话状态和SD-WAN成员状态统一纳入Zabbix或Prometheus的告警体系,这样链路切换发生时,你第一时间能收到事件通知而不是等用户报障。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询