手工添加的SD-WAN规则则类似支持多出口的动态选择、支持应用控制、支持路由属性等的增强版策略路由,其转发优先级比普通策略路由低,比普通路由优先级高。
2. 最后一条默认的SD-WAN规则:依据LLB的负载方式查询本地静态路由(默认源IP负载)
手工自定义配置的SD-WAN规则相当于是一条只配置了出接口但没有配置下一跳地址(下一跳地址为0.0.0.0)的策略路由,因此必须要再次查询一遍路由表才可以找到正确的下一跳地址,如果无法查找到该接口的下一跳地址,自定义的SD-WAN规则也将失效,由此可见SD-WAN规则十分依赖FIB路由表。
SD-WAN规则这样的处理方式,带来的最大的好处是可以实现SD-WAN出口故障的快速切换,SD-WAN的健康检查完全依赖于这种处理方式。一旦健康检查失败,出接口的静态路由将会消失,SD-WAN将无法在路由表中查找到下一跳地址,因此相应的SD-WAN规则也跟随着会失效,从而实现了SD-WAN的多出口故障的自动切换。
注意:SD-WAN的路由必不可少,否则SD-WAN规则将无法使用
可以根据需求必须要配置:
手工配置默认路由或明细路由指向SD-WAN出口(默认源IP负载),或者使用动态路由协议(OSPF/BGP/RIP)学习到相应的路由,总之路由表中一定要有去往SD-WAN规则中的目的IP的路由才可以。
可以根据需要配置到具体WAN1/WAN2/Port3分别的路由,也可以直接配置指向SD-WAN接口的路由:

或
如果SD-WAN是针对去往internet的负载:则必须配置默认路由指向SD-WAN
如果SD-WAN是针对去往VPN业务网段的负载:则必须配置VPN明细路由指向SD-WAN
默认情况下路由表中需要存在SD-WAN接口的路由,这样SD-WAN规则才可以生效。
总结来看:默认情况下, SD-WAN规则由于只能选择出接口而无法直接配置下一跳的IP地址(策略路由可以配置出接口和下一跳IP),因此需要继续通过FIB路由表的查询以便找到正确的下一跳IP地址,才可以将数据转发出去,可以看出SD-WAN规则十分的依赖路由转发表,几乎SD-WAN规则就是依赖FIB路由表而工作的,二者是相互依存的关系。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
那么是否可以打破这样的依赖关系呢?是否可以和策略路由一样,SD-WAN规则也可以有一个明确的出接口和下一跳IP,而不需要依赖FIB路由表而找到下一跳IP呢?
答案是:有的,虽然我们不推荐这样做,这样不利于多出接口的快速切换。
具体的做法如下:
FGT100E_Master # config system virtual-wan-link
FGT100E_Master (virtual-wan-link) # config members
FGT100E_Master (members) # show
config members
edit 1
set interface "wan1"
set gateway 202.100.1.192
next
edit 2
set interface "wan2"
set gateway 101.100.1.192
next
edit 3
set interface "port13"
set gateway 111.100.1.192
next
end
FGT100E_Master (members) # end
FGT100E_Master (virtual-wan-link) # config service
FGT100E_Master (service) # edit 1
FGT100E_Master (1) # show full-configuration
config service
edit 1
set name "OFFICE_365"
set addr-mode ipv4
set input-device-negate disable
set mode priority
set role standalone
set standalone-action disable
set tos 0x00
set tos-mask 0x00
set src "LAN_Network_192.168.10.0"
set src-negate disable
set internet-service enable
set internet-service-id 327782 327880
set health-check "Default_Office_365"
set link-cost-factor latency
set link-cost-threshold 10
set hold-down-time 0
set dscp-forward disable
set dscp-reverse disable
set priority-members 3 1 2
set status enable
set gateway disable //默认为disable
set default disable //默认为disable
next
end
如果将SD-WAN规则下面的gateway和default默认状态有disable改成enable,则SD-WAN规则将跳过FIB的查询,直接选择members接口里面配置的下一跳IP作为sd-wan规则(策略路由)的下一跳IP,直接转发流量,而不再查询FIB路由表了。
FGT100E_Master # config system virtual-wan-link
FGT100E_Master (virtual-wan-link) # config service
FGT100E_Master (service) # edit 1
FGT100E_Master (1) # set gateway enable
FGT100E_Master (1) # set default enable
FGT100E_Master (1) # end
这种使用场景比较特别,需要将SD-WAN规则固定的从某个出口/下一跳IP出去,而不想要受到底层FIB路由表路由切换的影响(健康检查切换/link-monitor等等),这种使用场景才使用,相对来说比较少使用到。
特别注意:关于FGT本机发起流量,比如BGP、SNMP Trap、syslog等等 这些流量也会被SD-WAN规则(策略路由)所影响到, 从Fortios6.0/5.6.4开始,本地发起的流量将接受策略路由的优先查找和匹配。
由于策略路由匹配,本地发起的流量(如发送到直接连接的BGP对等方[端口1]的BGP)可能会通过另一个接口[端口2]流出,这样会引起一些意想不到的情况出现。
避免本地发起的流量匹配到SD-WAN策略路由的方法:
1. 避免使用SD-WAN规则中的srcaddr=“all”:all里面包括了FGT本机发起流量的IP,定义一个明确的内网IP网段的地址对象或组来代替all
2.在SD-WAN规则中配置入接口选项,明确策略路由的如接口,避免匹配到本机发起的流量:添加“set input device xxx”(只能命令行配置),以便此sd-wan proute仅与通过接口xxx入口的转发流量进行匹配
FGT100E_Master # config system virtual-wan-link
FGT100E_Master (virtual-wan-link) # config service
FGT100E_Master (service) # edit 1
FGT100E_Master (1) # set input-device port1 // 只能命令行配置
FGT100E_Master (1) # show
config service
edit 1
set name "OFFICE_365"
set input-device "port1"
set mode priority
set src "LAN_Network_192.168.10.0"
set internet-service enable
set internet-service-id 327782 327880
set health-check "Default_Office_365"
set priority-members 3 1 2 4
set gateway enable
set default enable
next
end
FGT100E_Master (1) # end
FGT100E_Master (virtual-wan-link) # end
3.使用策略路由将影响的网段(可以源网段,也可以目的网段,比如影响到本机发起的BGP协商网段)将动作设置为: action=deny,以便bypass所有sd-wan策略路由并直接跳到FIB路由表进行路由查找,可以查询到直连路由,这样就不会找错出接口信息。注意要把这条bypass的规则放置于策略路由的最前面,以便优先匹配。
config router policy
edit 1
set src "192.168.10.1/255.255.255.255"
set dst "192.168.10.2/255.255.255.255"
set action deny // bypass掉相关流量,不走策略路由和SD-WAN策略路由
next
end
总结:
SD-WAN规则可以认为是调用了多个有序出接口(oif)列表的策略路由,但是优先级比普通的策略路由要低一些:
1.oif在策略路由中从左(最优先)到右(最不优先)进行排序
# diagnose firewall proute list
id=2084306945 vwl_service=1(OFFICE_365) vwl_mbr_seq=3 1 2 4 dscp_tag=0xff 0xff flags=0x0 tos=0x00 tos_mask=0x00 protocol=0 sport=0:65535 iif=11 dport=1-65535 oif=23 gwy=111.100.1.192 oif=7 gwy=202.100.1.192 oif=8 gwy=101.100.1.192 oif=47 gwy=114.100.1.196
source(1): 192.168.10.0-192.168.10.255
destination wildcard(1): 0.0.0.0/0.0.0.0
internet service(2): Microsoft-Office365(327782) Microsoft-Office365.Published(327880)
2. SD-WAN规则的类别(Best Quality, Lowest Cost, Maximize Bandwidth)决定了当SLA检查值(延迟、抖动、丢失)发生变化时,接口列表中的出接口(oif)顺序是如何变化的。
3. 默认情况下,FIB路由表中必须有去往目的IP的路由,这样SD-WAN规则才可以生效,SD-WAN规则的出接口的下一跳是通过FIB路由表查询获取的,因此SD-WAN目的网段的路由非常重要。
FGT100E_Master # get router info routing-table all
Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [1/0] via 111.100.1.192, port13
[1/0] via 114.100.1.196, PPPOE1_DR_PENG
[1/0] via 202.100.1.192, wan1
[1/0] via 101.100.1.192, wan2, [100/0]
C 101.100.1.0/24 is directly connected, wan2
C 111.100.1.0/24 is directly connected, port13
C 114.100.1.196/32 is directly connected, PPPOE1_DR_PENG
C 114.100.1.204/32 is directly connected, PPPOE1_DR_PENG
C 192.168.10.0/24 is directly connected, port1
C 202.100.1.0/24 is directly connected, wan1
如果没有匹配的SD-WAN的策略路由,则路由的决策会基于FIB进行查找(默认是源IP方式的ECMP)
config system virtual-wan-link
set status enable
set load-balance-mode source-ip-based
本机发起的流量也会受SD-WAN策略路由查找的限制,上文有介绍三种避免的方法。
路由发送改变后(比如出街接口列表重新排序, 健康检查失败触发, 动态路由协议更新),会话将重新上述CPU进行匹配处理,重新查询策略和路由,这样流量可能会迁移到另一个SD-WAN成员接口上 。(具体说明见“SD-WAN健康状态检查(Performance SLA)”章节)
* 有NATed会话的流量不会随着路由的变化而改变流量的出接口(默认情况下) ,只有纯三层的流量转发才会正常的进行出接口切换。
FGT100E_Master # config system global
FGT100E_Master (global) # show full-configuration | grep snat
set snat-route-change disable
FGT100E_Master (global) # end
* 在接口下设置会话保持(preserve-session-route)可以允许在路由更改后强制将会话保持在同一个sd-wan成员上,不跟随这出接口的变化而变化已有流量会话的出接口信息。
FGT100E_Master # config system interface
FGT100E_Master (interface) # edit wan1
FGT100E_Master (wan1) # show full-configuration | grep pres
set preserve-session-route disable
FGT100E_Master (wan1) # end