
简介一份以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 路由距离和ECMPFortiGate选路的第一道过滤器FortiOS的路由决策不是简单看“哪条路由最长匹配”而是先按来源比较管理距离Administrative Distance在距离相同的前提下再做最长前缀匹配前缀也相同就进入ECMP多路径负载均衡。FortiGate默认把直连路由的管理距离设为0静态路由是10OSPF区域内和区域间是10、OSPF外部是150eBGP是20iBGP是200。很多人只记住了静态路由是10却不知道iBGP默认是200导致双线路分别跑eBGP和iBGP时回程流量总是优选静态或OSPF路径排错排了半天都找不到原因。路由来源默认管理距离Connected直连0Static静态10OSPF 区域内/区域间10eBGP20OSPF 外部150iBGP200ECMP默认支持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 endlink-failure-monitor是接口级探测FortiGate会向指定的IP持续发送探测报文连续失败后把该路由从转发表里摘除不再参与转发。health-check-monitor则把探测逻辑交给SLA健康检查对象适合复用已有的链路探测策略。distance在这里设成20比默认静态路由大形成浮动路由效果主链路down了备路由才会自动接管。还有一个常见坑是priority只对ECMP生效不是用来做静态路由主备切换的主备靠distanceECMP内选路才靠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 endinput-device指定入口接口srcaddr引用已有的地址对象gateway必须是对端接口的真实IPoutput-device是出接口。protocol为0时匹配所有协议如果只想匹配TCP或UDP可以设成6或17再配合start-port和end-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什么场景用BGPFortiGate在基础架构里最常见的路由角色有两个一是企业核心与分支之间跑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 0config 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 endrouter-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和65002config 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 endset 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.5diagnose 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次失败就把该成员链路标记为downSD-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 endinterval单位是毫秒最小可到200毫秒但过短的探测间隔会在运营商链路拥塞时产生大量探测报文建议生产环境用500到1000毫秒。failtime是连续失败次数recoverytime是链路恢复后经过几次成功探测才重新标记为up。这两个参数直接决定切换的灵敏度专线互联场景可以调低普通互联网出口建议保持默认。SD-WAN启用后get router info routing-table all里会出现一条指向virtual-wan-link的默认路由这不是故障而是SD-WAN接管转发决策后的正常表现。此时实际选路结果要用diagnose sys sdwan health-check和diagnose sys sdwan member-state来查看。前者输出每个健康检查目标的状态和时延后者展示各成员链路的up/down状态。两条命令配合能在割接现场用最短时间判断出流量是不是走在了预设链路上。若需要进一步可视化FortiGate也支持把SNMP接口对接第三方监控平台将link-failure-monitor的探测结果、BGP会话状态和SD-WAN成员状态统一纳入Zabbix或Prometheus的告警体系这样链路切换发生时你第一时间能收到事件通知而不是等用户报障。本文还有配套的精品资源点击获取