教程篇(7.2) 05. 规则 & SD-WAN ❀ Fortinet 网络安全架构师 NSE7

 在本课中,你将了解SD-WAN规则如何根据使用的标准和策略工作。

 在本课中,你将了解上图显示的主题。

 通过了解SD-WAN规则,你将了解SD-WAN规则配置和操作的基础知识。

 SD-WAN规则结合了流量匹配标准和流量转向偏好。它们描述了与SD-WAN解决方案相关的管理员选择及其软件定义的方面。 

  你首先定义要匹配的应用程序或流量的标准。然后,您指明了在一个或多个成员和区域中引导流量要遵循的转发政策,包括要应用的策略和确定首选成员的性能指标。

  根据使用的策略,首选成员是活得最好的成员。然后,FortiGate使用首选成员(前提是他们可以接受)来引导流量。对于除最大化带宽(SLA)以外的所有策略,FortiGate始终选择单个成员来引导流量。

  SD-WAN规则的评估方式与防火墙策略相同:从上到下,使用第一个匹配。然而,与防火墙策略不同,SD-WAN规则用于引导流量,而不是允许流量。也就是说,你还必须配置相应的防火墙策略,以允许转向流量。

  如果没有用户定义的SD-WAN规则匹配,则使用隐式规则。隐式规则指示FortiGate对流量执行标准路由。由于SD-WAN部署通常有多个路由到同一目的地——即ECMP路由——那么与隐式规则匹配的流量通常在多个SD-WAN成员之间进行负载均衡。

  上图的示例显示了一条名为Critical-DIA的规则,该规则用于引导直接互联网接入(DIA)的流量。该规则将Microsoft Teams、Salesforce和GoToMeeting流量引导到端口1和端口2之间延迟最低的成员。请注意,输出上只显示规则配置的最重要部分。

 上图展示了SD-WAN规则查找过程。SD-WAN规则本质上是策略路由。与常规策略路由一样,SD-WAN规则从上到下进行检查(第一次匹配)。对于每条规则,FortiGate都维护一个流出接口(oif)列表。Oif列表根据使用的策略按首选项对配置的成员进行排序。在名单中排名第一的成员更倾向于转向流量。FortiGate通过将数据包与规则匹配标准进行比较来启动查找过程。如果数据包与条件不匹配,FortiGate将进入下一个规则,以此类以此类,直到找到匹配项。当有匹配时,FortiGate按以下方式进行:

  1. 如果默认和网关设置都被禁用(默认值)FortiGate对数据包目标IP(dstip)执行FIB查找。如果FIB最佳匹配的已解析接口不是SD-WAN成员,那么FortiGate将转到下一个规则。此行为遵循关键路由原则:默认情况下,如果目的地的最佳路由不是SD-WAN成员,则跳过SD-WAN规则。

  2. 如果解析的接口是SD-WAN成员,那么FortiGate从列表中的第一个成员开始,在oif列表中寻找一个或多个可接受的成员。可接受的成员是拥有前往目的地路线的活着的成员。此行为遵循关键路由原则:默认情况下,如果规则中配置的成员都没有到目的地的有效路由,则跳过SDWAN规则。

  如果FortiGate找到可接受的成员,它会将数据包转发给该成员——然后进行防火墙策略检查——规则查找过程结束。否则,FortiGate将进入下一个规则。如果跳过所有规则,则FortiGate使用标准路由路由数据包,因此关键路由原则:隐式SD-WAN规则等于标准FIB查找。

  请注意,当启用默认和网关设置时,FortiGate不会执行步骤1和2。相反,它根据使用的规则模式在oif列表中选择最佳成员。

 默认情况下,SD-WAN按照以下两个关键路由原则进行操作:

  1. 如果前往目的地的最佳路线不是SD-WAN成员,则跳过SD-WAN规则。

  2. 如果规则中配置的成员都没有到目的地的有效路由,则跳过SD-WAN规则。

  只要有可能,你应该更喜欢默认行为,并配置到目的地的路线(默认或更具体)。尽管如此,对于某些特定场景,你可以通过在SD-WAN规则中启用默认设置来更改1中描述的行为。这指示FortiGate跳过最佳路线检查。你还可以通过在SD-WAN规则中启用网关设置来更改2中描述的行为。这指示FortiGate跳过FIB查找,而是使用你在SD-WAN成员设置中手动配置或为DHCP、PPPoE和IPsec接口自动检测到的网关地址。

  上图示例显示了远程互联网接入(RIA)部署。管理员希望使用SD-WAN使用RIA和所有其他互联网流量的标准路由来引导流向Google-DNS互联网服务的流量。覆盖层是SD-WAN成员,底层不是。为了避免非Google-DNS流量通过覆盖层进行路由,管理员仅对底层层使用默认路由。在默认禁用的情况下,FortiGate会跳过规则,因为覆盖层不是Google-DNS的最佳路由。如果你随后启用默认设置,FortiGate将忽略最佳路由检查,因此会根据规则评估Google-DNS流量。然而,由于覆盖层没有通往目的地的有效路由(GoogleDNS),因此FortiGate跳过了Google-DNS的规则。为了避免这种情况,你可以启用网关设置,指示FortiGate跳过FIB查找,并将为成员配置或检测到的网关用作网关。

 SD-WAN规则根据成员状态和性能进行动态更新。这意味着流出接口列表可能会随着时间的推移而变化,这就是为什么出于故障排除目的检查其当前状态是有用的。

  检查SD-WAN规则状态的最佳方法是在FortiGate CLI上运行diagnose sys sdwan service。如上图所示,输出指示正在使用的匹配标准、规则模式和传出接口列表。在本课中,你将了解有关匹配标准、规则模式以及FortiGate如何确定首选成员的更多信息。

  此外,由于SD-WAN规则本质上是策略路由,你还可以运行diagnose firewall proute list命令,从策略路由角度显示规则设置。SD-WAN规则被分配了一个高ID号。当数据包匹配规则时,diagnose firewall proute list命令输出中显示的ID与调试流输出中显示的ID相同。输出还包括流出接口列表,只是接口首选项从左到右排序,而不是diagnose sys sdwan service命令,该命令从上到下对接口进行排序。

  出于故障排除的目的,diagnose firewall proute list命令的输出还显示规则命中计数和上次命中规则的时间。

 默认情况下,在SD-WAN规则查找期间,FortiGate会检查两次成员路由:

  1. 寻找匹配规则时:如果目的地的最佳路线是SD-WAN成员,FortiGate会跳过SD-WAN规则。

  2. 规则匹配后:如果规则中已配置的成员都没有到目的地的有效路由,FortiGate会跳过SD-WAN规则。

  从2中,你可以推断出首选成员不一定是前往目的地的最佳路线。会员只需要有一条通往目的地的有效路线。但是,如果你希望FortiGate只考虑拥有最佳目的地路线的成员作为候选人呢?然后,你只需从远程站点宣传更好的路线,就可以控制首选成员的选举。

  上图示例显示了双中心和单辐条拓扑。它包括辐条上的SD-WAN规则和路由表的简化版本。在默认行为(tie-break设置为cfg-order)中,FortiGate选择port1作为首选成员,因为它根据配置顺序具有更高的优先级。但是,如果你tie-break设置为fib-best-match,那么在规则中选择首选成员时,FortiGate会考虑前往目的地的最佳路线(10.1.0.7)。因此,FortiGate选择port2作为唯一的首选成员候选,因为它具有前往目的地的最具体(最佳路线)。然后,由于port2是唯一的候选者,它成为首选成员。这适用于所有策略。例如,在成本最低的策略中,FortiGate仅从拥有最佳目的地路线的成员中选择首选成员。

  上图还展示了如何配置FortiGate,以将具有最佳路由的成员视为首选成员。你可以在区域级别应用配置,或者,为了获得额外的粒度,在规则级别应用配置。默认情况下,规则级别设置(tie-break)设置为区域,这指示FortiGate遵循区域级别设置(service-sla-tie-break),默认情况下,该设置又设置为配置顺序(cfg-order)。

 本地输出流量被定义为FortiGate发起的流量,通常用于管理目的。例如,当你从FortiGate ping设备时,这就是本地输出流量。当FortiGate连接到FortiGuard下载最新定义时,这也是本地输出流量。

  默认情况下,本地输出流量使用FIB来确定目的地的最佳路线。但是,你可以将FortiGate配置为使用SD-WAN规则进行本地输出流量。为此,你必须在单个功能上将interface-select-method设置为sdwan,因此该功能使用SD-WAN来确定路由流量的最佳成员。

  上图展示了使用SD-WAN路由系统DNS查询的系统DNS配置示例。在为系统DNS查询启用SD-WAN之前,FortiGate使用port1,因为它在FIB中拥有目的地的最佳路由(最低路由优先级)。为系统DNS查询启用SD-WAN后,FortiGate开始使用port2,因为它是匹配SD-WAN规则的首选成员。

  上图还显示了支持界面选择方法设置的一些功能的列表。出于故障排除目的,你还可以将SD-WAN用于FortiOS ping和traceroute工具。

  请注意,当你为本地输出流量启用SD-WAN时,适用相同的SD-WAN路由原则。例如,要使成员被接受,该成员必须在FIB中拥有一条通往目的地的路线。此外,请注意,SD-WAN规则的源地址必须与FortiGate用于本地输出连接的本地IP地址匹配。通常,这意味着将源地址设置为所有地址,以可能匹配任何SD-WAN成员。

  如果没有用户定义的SD-WAN规则匹配,则使用隐式规则。当会话与隐式规则匹配时,FortiGate执行标准FIB查找。由于SD-WAN站点通常通过多个成员有多个路由到同一目的地,这导致FIB中存在ECMP路由。默认情况下,FortiGate负载均衡与ECMP路由匹配的会话。

  为了负载均衡会话,FortiGate使用隐式规则中配置的算法:

  ● 源IP:这是默认算法。FortiGate将来自IP地址的会话发送到同一成员。(CLI source-ip-based)

  ● 会话:FortiGate负载根据成员权重平衡成员之间的会话。权重越高,FortiGate发送给成员的会话就越多。(CLI weight-based)

  ● 溢出:FortiGate将会话发送到第一个ECMP路由的接口,直到接口的带宽达到配置的溢出限制。达到溢出极限后,FortiGate使用下一个ECMP路由的接口。(CLI usage-based)

  ● 源-目的IP:FortiGate将具有相同源和目标IP地址对的会话发送到同一成员。(CLI source-dest-ip-based)

  ● 体积:FortiGate根据测量的接口体积和成员权重来平衡成员之间的会话。与不考虑接口流量的会话不同,Volume算法指示FortiGate跟踪每个成员的累积字节数,并根据权重分配会话。权重越高,接口的目标体积就越高,因此,FortiGate向其发送的流量就越多。(CLI measured-voume-based)

  当你将隐式规则负载均衡算法设置为会话或体积时,FortiManager为每个成员分配1的默认权重。你可以通过编辑成员设置来更改权重,如上图所示。

  当使用带有隐式SD-WAN规则的静态路由时,FortiGate使用权重使用上图显示的公式计算发送给每个成员的会话或流量的百分比。例如,假设你配置了两个成员A和B,并分别为它们分配5和10的权重。如果你使用会话作为负载均衡算法,那么在15个会话中,FortiGate将5个发送到成员A(即33.33%的会话),10个发送给成员B,即66.67%的会话。同样,如果你使用体积作为负载均衡算法,那么FortiGate会分发会话,因此成员A处理总流量的33.33%,而B处理其余的(66.67%)。

  另请注意,使用动态路由,当你使用会话或体积负载均衡时,如果存在ECMP路由,FortiGate会平等地分配会话。也就是说,FortiGate仅支持静态ECMP路由的权重设置。

  当你将负载均衡算法设置为溢出时,你还应该调整每个成员的入口溢出和出口溢出设置。否则,FortiManager保留默认值(0),这会禁用溢出检查。

  了解会话、溢出和体积算法的预期流量分布很重要。

  对于会话,分配给成员的权重不一定转换为在成员上观察到的相同带宽或体积。FortiGate负载根据配置的权重平衡成员之间的会话。由于每个会话的带宽和寿命可能不同,因此产生的带宽和体积与权重不成比例。例如,假设FortiGate向一个成员发送十个ICMP会话,向另一个成员发送一个FTP会话。尽管是一个会话,但通过用于路由FTP会话的成员传输的带宽和流量量可能高于用于路由十个ICMP会话的成员上观察到的总带宽和体积。

  此外,对于溢出和体积,如果带宽超过配置的溢出阈值,或者接口上的流量超过基于配置权重的预期体积,则没有问题。原因是,与SD-WAN规则中的SLA更改不同,SD-WAN规则将受影响的会话标记为dirty以强制重新评估,使用溢出和体积路由的会话不会因达到阈值而被标记为dirty。也就是说,会话保留在同一成员中,直到它们过期,或者直到它们受到因删除正在使用的路由而导致的强制路由查找。这意味着FortiGate通常不会改变使用溢出和体积算法分发的现有会话的路由,包括产生大量流量的长寿命高带宽会话的路由。

  如果你熟悉ECMP,你可能知道配置系统设置下可用的v4-ecmp-mode设置。v4-ecmp-mode设置定义了FortiGate用于负载均衡VDOM中与ECMP路由匹配的会话的算法。

  但是,当你在FortiGate上启用SD-WAN时,FortiOS将隐藏v4-ecmp-mode设置,并用config system sdwan下的load-balance-mode设置替换它。也就是说,在启用SD-WAN之后,现在可以通过load-balance-mode设置来控制VDOM ECMP算法。

  这两种设置之间有一些区别。主要区别在于,load-balance-mode支持体积算法,而v4-ecmp-mode不支持。此外,权重和溢出阈值等相关设置的配置不同。也就是说,当你启用SD-WAN时,在SD-WAN成员配置上定义了权量和溢出阈值。当你禁用SD-WAN时,权重和溢出阈值分别在静态路由和接口设置上定义。

 通过了解受支持的SD-WAN规则流量匹配标准,你将确定在部署中匹配SD-WAN流量的最佳标准。

 你可以根据以下标准配置规则以匹配流量:

  ● 源IP地址、源接口、防火墙用户和防火墙用户组。源接口选项在高级选项部分中可用,使用input-device和input-device-negate设置。

  ● 目标IP地址、目标端口号、互联网服务和BGP路由标签

  ● 应用程序

  ● IP协议

  ● 服务类别(ToS)

  SD-WAN规则为流量匹配提供了极大的灵活性。例如,你可以匹配来自特定身份验证用户的Netflix流量,或匹配指定给特定地址的ICMP流量,IP协议1。

  上图的示例显示了使用FortiManager创建新规则时可用的设置。请注意,你必须单击互联网服务才能查看互联网服务和应用程序相关选项。另请注意,支持IPv4和IPv6协议,你可以选择单独的互联网服务和应用程序或它们的组。

 你可以根据目标互联网服务和为流量检测到的应用程序配置规则以匹配流量。目标互联网服务依赖于互联网服务数据库(ISDB),应用程序检测依赖于IPS引擎和应用程序控制数据库签名。

  FortiGuard维护这两个数据库,默认情况下,FortiGate会定期获取更新的副本。FortiGuard也发布了新版本的IPS引擎,但频率远低于定义和数据库。当新的IPS引擎版本发布时,FortiGate也会默认自动下载它。

  上图的示例显示了规则中可供选择的互联网服务和应用程序的子集。

  对于应用程序检测,你可以使用FortiGuard预定义应用程序列表中的应用程序,使用这些应用程序创建组,或使用应用程序类别。应用程序类别按目的分组应用程序,例如商业、游戏、社交媒体。你还可以将应用程序组与特定应用程序相结合。

  请注意,你您选择互联网服务作为规则的目标时,应用程序、应用程序组和应用程序类别始终在FortiManager菜单上可见。

  如果你决定直接从FortiGate GUI配置SD-WAN规则,则需要使用上图显示的CLI命令启用GUI可见性以进行应用程序检测。

 FortiGuard维护ISDB,并经常发布更新的版本。然后,FortiGate从FortiGuard服务器自动下载最新版本。

  ISDB中的每项服务都被分配一个ID,该ID代表著名的互联网服务,如Fortinet FortiGuard、Google-ICMP、Facebook-Web等。每个ID包含多个条目,每个条目都表示与服务关联的公共IP地址、IP协议和目标端口的范围。

  互联网服务条目加载在内核中。然后,你可以在配置的多个部分中引用互联网服务,例如SD-WAN规则和防火墙策略。

  每个互联网服务还指示条目有效的流量方向。方向可以是来源、目的地或两者兼而有之。对于SD-WAN规则,你只能使用对目标方向或源和目标方向有效的互联网服务。这是因为SD-WAN支持仅匹配数据包目的地的互联网服务。

  你可以使用diagnose internet-service id-summary命令在ISDB中显示互联网服务的摘要。将互联网服务ID添加到命令末尾,以查看有关该特定互联网服务的更多详细信息。

  你可以使用命令diagnose internet-service id来显示有关互联网服务的详细信息。输出指示服务的公共IP范围,以及每个范围使用的协议和端口。

  你还可以使用diagnose internet-service info命令找到与给定IP地址、协议和端口匹配的互联网服务。但是,如果你只知道要查找的服务的IP地址,则可以运行diagnose internet-service match命令。请注意,diagnose internet-service info和diagnose internet-service match命令是全局命令,因此,要求你在示例中指示VDOM以在根上执行查找。

 你可以根据FortiGate检测到的应用程序配置规则来引导流量。这被称为应用程序引导或应用程序感知路由。

  应用程序检测依赖于IPS引擎,以及FortiGuard维护的应用程序控制签名。默认情况下,FortiGate在FortiGuard发布新版本的IPS引擎和应用程序控制数据库后会自动下载它们。

  为了使FortiGate检测应用程序,因此SD-WAN执行应用程序引导,你必须在允许SD-WAN流量的防火墙策略上启用应用程序控制。如果你想检测需要它的应用程序,你还必须启用完整的SSL检查。例如,Facebook_Chat,Facebook的子应用程序,需要完整的SSL检查,但其父应用程序Facebook不需要。通常,FortiGate可以检测父TLS应用程序,如Facebook,无需完整的SSL检查,但需要它来检测Facebook_Chat等子TLS应用程序。这是因为FortiGate必须解密TLS流量才能识别子应用程序。

  你可以通过检查FortiGuard上的应用程序信息页面来确定应用程序是否需要完整的SSL检查。访问应用程序信息页面的快速方法是将应用程序ID添加到www.fortiguard.com/appcontrol/的末尾,如上图所示。

  此页还指示应用程序所属的类别。这是应用程序类别筛选器使用的类别。

 FortiGate通过从流经它的流量中学习来动态填充其应用程序缓存。

  每次FortiGate允许使用启用应用程序控制的策略进行流量流时,它都会将流量发送到IPS引擎进行分析。一旦FortiGate检测到应用程序,它就会用3元组条目填充应用程序缓存。缓存由与目标地址、协议和端口关联的应用程序ID列表组成。请注意,应用程序缓存可以包含一个应用程序的多个3元组控件,以容纳处理同一应用程序的多个服务器。如果条目不匹配,则在缓存中保留8小时。 

  当FortiGate接收流量时,如果目标地址、端口和协议与应用程序缓存中的条目不匹配,FortiGate无法立即识别应用程序。它使用不需要应用程序匹配的SDWAN规则和防火墙策略规则转发流量。与此同时,IPS引擎分析流量以识别应用程序。这被称为学习阶段。

  当传入流量的3元组与缓存中的应用程序匹配时,FortiGate可以根据检测到的应用程序和相应的SD-WAN规则来引导流量。

  当你使用SD-WAN进行应用程序引导时,FortiGate必须识别流量上的应用程序,然后才能匹配正确的规则。这被称为应用程序学习阶段。在此阶段,FortiGate仍将转发包含已可用信息的数据包。因此,会话的第一个数据包可能与预期的规则和成员不匹配。

  当新会话到达时,只有当有3元组缓存条目匹配时,它才会将SD-WAN规则与应用程序转向相匹配。否则,它会根据目标地址或ISDB条目(显式或默认隐式规则)匹配SD-WAN规则。同时,如果允许流量的防火墙策略具有应用程序控制,FortiGate将开始应用程序分析。当FortiGate检测到新应用程序时,它会更新应用程序缓存。这触发了对会话的重新评估(dirty进程)。如果FortiGate将会话标记为dirty,它将重新评估会话,现在可以使用应用程序引导匹配SD-WAN规则。

  重要的是要了解,在学习阶段,当FortiGate尚未识别应用程序时,会话可能会匹配不同的规则,因此可能无法通过所需的SD-WAN链接进行路由。

  此外,请注意,只有当防火墙策略启用应用程序检测时,才能进行应用程序学习。你必须确保在学习阶段允许流量的策略上启用应用程序检测。

  你可以通过在FortiGate CLI上运行diagnose sys sdwan internet-service-app-ctrl-list来查看ISDB应用程序缓存中检测到的应用程序条目。输出中的每个条目都表示应用程序ID、ISDB应用程序ID、3元组以及上次创建条目的时间。请注意,FortiGate每个3元组维护一个应用程序,但一个应用程序可以与多个3元组相关联。如果为同一3元组检测到多个应用程序,FortiGate将使用最近检测到的3元组应用程序。

  FortiGate使用应用程序ID、ISDB应用程序ID和3元组来匹配SD-WAN规则。在上图显示的示例中,一个缓存条目是用于TCP端口22上指向10.1.0.7的SSH连接。匹配缓存条目的连接也匹配SD-WAN规则ID 2。

  注意,ISDB应用程序缓存中的条目在最后一次检测到匹配后8小时过期。

 FortiGate在SD-WAN会话上写入应用程序信息。应用程序字段指示应用程序ID。你可以使用获取应用程序名称状态命令查找应用程序名称,如上图所示。

  当你使用应用程序引导时,当会话3元组在ISDB应用程序缓存中没有条目时,或者当会话3元组在ISDB应用程序缓存中有一个条目时,会话可能会匹配意外的规则和成员,但检测到的应用程序不同。在这两种情况下,会话最初可能匹配错误的规则和成员。

  考虑上图的示例,它显示了在没有SNAT的情况下为SSH会话捕获的一些数据包。在应用程序学习阶段完成之前和之后,数据包会发送给不同的成员。预期成员是T_INET_1,但数据包最初路由到T_INET_0,因为数据包与缓存中的条目不匹配。学习应用程序后,FortiGate开始将数据包路由到T_INET_1,并将3元组添加到缓存中。此外,FortiGate从连接开始将缓存中相同的3元组匹配的新会话路由到T_INET_1。

  此外,请记住,SNAT条件适用。也就是说,如果会话受SNAT约束,那么默认情况下,FortiGate在检测到应用程序后不会刷新会话的路由信息——会话不会被标记为dirty。例如,如果上图显示的SSH会话受SNAT约束,那么即使在FortiGate检测到应用程序后,第一个会话仍将通过T_INET_0路由,除非默认的FortiOS SNAT路由行为被修改。然而,随后到相同的3元组的会话将路由到T_INET_1。

  路由标签是可用于确定哪些流量与SD-WAN规则匹配的标准之一。

  上图显示了FortiGate配置命令,用于匹配收到的BGP路由中的社区,设置路由标签。然后,你可以使用标签来定义SD-WAN规则。

  在FortiGate上,路由映射将10的路线标签分配给与社区列表中指示的社区匹配的前缀(65000:10)。然后,FortiGate将路由映射应用于两个邻居的入站方向,每个邻居都通过不同的接口进行通信。此外,引导企业流量的SD-WAN规则(示例中的ID 2)被配置为使用路由标签为10的前缀作为目标。

  在带有上一张幻灯片设置的FortiGate上,当你按社区查找学习的前缀时,输出包括10.1.0.0/24子网。输出还表示前缀分配了10的路由标签。结果是,当你检查SD-WAN规则状态时,输出包括10.1.0.0/24。 

 通过了解可用的SD-WAN规则策略,你应该能够选择和配置最佳选项来满足你的需求。

 规则中的策略定义了对首选成员的要求,以及流量是否被引导到一个或多个首选成员。首选成员是oif列表中(基于使用的策略)中符合SLA要求(如果适用)的最佳成员。oif列表在FortiManager首选项中对配置的成员接口偏号列表进行排序。也就是说,尽管成员相同,但他们在oif列表中和界面首选项列表中的顺序可能会有所不同。你可以从四种策略中进行选择:

  ● 手动:FortiGate根据配置顺序更喜欢成员。成员指标不考虑成员偏好。

  ● 最佳质量:根据配置的质量标准,FortiGate更喜欢表现最好的成员。

  ● 最低成本(SLA):FortiGate更喜欢符合已配置SLA目标的成员。如果多个成员符合SLA目标,则成员成本,然后是配置顺序,将作为决定因素。

  ● 最大带宽(SLA):FortiGate更喜欢满足已配置的SLA目标的成员。如果多个成员满足SLA目标,FortiGate使用配置的散列算法(默认为循环)平衡所有首选成员的会话。

  请注意,对于所有策略,默认情况下,FortiGate必须检查首选成员是否有前往目的地的有效路由。如果成员没有有效的路由,那么FortiGate会检查oif列表中的下一个成员,以此类以此类,直到找到可接受的成员。此外,除手动外,所有策略都考虑成员偏好的成员指标。此外,最大带宽(SLA)是唯一支持跨多个成员的流量负载均衡的策略。也就是说,当使用其他三种策略中的任何一种时,流量只引导给一个成员。

  当你使用手动策略时,FortiGate会根据接口首选项列表配置顺序构建oif列表。对于构建oif列表,FortiGate不考虑成员的性能,例如抖动或数据包丢失。它只考虑成员配置顺序(也称为成员配置优先级)以及成员是活还是死。如果第一个配置的成员已死,则首选成员将成为配置列表中下一个活的成员。

  请注意,手动策略不需要配置性能SLA。然而,当性能SLA规则被配置为监控成员时,它会改进对成员是活还是死的检测,因为只有当健康检查可以到达至少一个配置的服务器时,成员才被认为是活的。如果没有健康检查,根据界面状态(向上或向下),成员将被视为活着或死了。

  在上图显示的示例中,T_INET_0和T_INET_1是配置的成员。然而,尽管T_INET_0的延迟比T_INET_1高得多,但FortiGate仍然更喜欢T_INET_0来引导流量,因为它是活的,并且具有最高的配置优先级。

  不要将成员配置优先级与SD-WAN成员配置上可用的优先级设置混淆。当你为区域配置静态路由时,后者用于成员静态路由的优先级。前者是指基于接口首选项列表配置的成员优先级。列表中首先配置的成员比最后配置的成员具有更高的优先级。在匹配隐式SD-WAN规则时,优先级设置用作ECMP路由的决定因素。

  在上图显示的示例中,FortiGate检测到T_INET_0已死,因此,通过为其分配序列号1将T_INET_1移动到oif列表的顶部。此外,T_INET_0被分配了序列号2,因为死亡成员被移到列表的底部。

  最佳质量策略指示FortiGate选择具有最佳衡量质量的成员作为首选成员。FortiGate支持多个指标来衡量链路质量。默认指标是延迟。为了提高准确性,FortiGate计算了最后几个健康检查探针(默认为30)的质量指标。

  FortiGate使用三个因素确定质量最好的成员:成员优先级、链路成本阈值设置以及为成员测量的衡量标准。不考虑SLA目标。

  此外,当你使用最佳质量策略时,FortiGate使用一个成员来引导流量。也就是说,它不使用均衡。

 上图显示了你可以选择的指标,以最佳质量规则来衡量成员的质量。

  对于延迟、抖动和数据包丢失,度量值越低,成员优先级越高。可用带宽的情况正好相反:成员的可用带宽越多,其优先级就越高。请注意,FortiGate可以测量可用的入口带宽、可用的出口带宽或两者的总和(双向带宽)。

  当您选择自定义-配置文件-1指标时,FortiGate使用一个基于权重的公式来计算一个称为链路质量指数的值,该值根据其延迟、抖动、数据包丢失和可用的双向带宽来表示成员的质量。链路质量指数越低,成员优先级越高。管理员为每个指标分配权重。

 除了成员指标值外,FortiGate还考虑成员优先级和链路成本阈值,以确定最佳质量规则中的首选成员。你可以通过查看diagnose sys sdwan service命令的输出来识别首选成员。放在列表顶部的成员是首选成员。

  link-cost-threshold指示FortiGate为优先级较高的成员提供优势(或障碍)。成员优先级由接口配置顺序决定。首先配置的成员比最后配置的成员具有更高的优先级。link-cost-threshold背后的逻辑是,高优先级成员应该比低优先级成员拥有更多的优先级。因此,要使低优先级成员被认为优于高优先级成员,低优先级成员必须击败给予高优先级成员的优势。

  link-cost-threshold对于防止由于度量的微小变化而导致频繁的SLA更改也很有用,这反过来会导致频繁的会话重新评估导致更多的CPU活动。linkcost-threshold设置以百分比表示,缺省值为10。

  上图的示例显示了diagnose sys sdwan server命令的输出,该规则使用最佳质量(在CLI中显示为优先级)作为策略。T_MPL和T_INET_1的延迟比T_INET_0低,但由于链路成本阈值设置为10,因此T_INET_0(最高优先级成员)比规则中配置的其他成员具有10%的优势。10%的优势导致T_INET_0的修正延迟为92.615毫秒,使其成为成员中最低的延迟。出于这个原因,T_INET_0成为首选成员。

  根据使用的指标,优势的计算方式不同。

  你可以在FortiManager的SD-WAN规则高级选项中配置link-cost-threshold参数,也可以通过命令行参数配置。上图展示了如何使用FortiGate CLI配置该设置。

  如果将link-cost-threshold设置为0,则FortiGate将执行严格的度量比较。也就是说,没有优势,拥有最佳指标的成员成为首选。如果两个或多个成员具有相同的指标,FortiGate使用成员优先级作为衡量标准。

 当你将最佳质量配置为策略时,FortiGate确定首选成员的方式取决于正在使用的指标。然而,对于延迟、抖动和自定义配置文件-1,方法是一样的。

  当你使用延迟、抖动或自定义配置文件-1作为指标时,FortiGate会选择具有最低指标的成员作为首选成员。如果link-cost-threshold设置为高于零的值,FortiGate会计算高优先级成员的校正指标(CM),这影响了它们的优势。FortiGate使用上图显示的公式来计算CM。

  上图显示了FortiGate在构建oif列表时遵循的规则。不要将规则的接口首选项配置列表与其oif列表混淆。后者是动态的,取决于成员的表现。前者是指配置中接口的顺序。规则如下:

  ● 高优先级成员(HPM)比低优先级成员(LPM)具有优势。优势取决于link-cost-threshold值。

  ● 当LPM的度量优于HPM的CM时,LPM被放置在HPM的顶部。

  ● 当发生以下任何情况时,LPM再次被放置在HPM下方:

    ● LPM指标等于或更差于最高优先级成员的CM。这允许快速恢复最高优先级的会员

    ● LPM度量等于或低于HPM。这导致HPM的恢复时间更长。

  上图显示了使用延迟作为指标的最佳质量规则中首选成员选举的示例。对于抖动和自定义配置文件-1指标,同样的行为也适用。

  配置显示T_INET_0为最高优先级成员。上图还显示了在不同时间执行的diagnostic sys sdwan service命令的输出。注意,只显示输出的相关行。该示例显示了成员如何与优先级最高的成员竞争oif列表中的位置。

  关注T_INET_1相对于T_INET_0在列表中的位置。在第一个输出中,T_INET_1被放在T_INET_0下面,尽管它在成员中具有最低的实际延迟。这是因为FortiGate计算T_INET_0的修正度量(CM)。T_INET_0的修正延迟为92.46 ms,这使它成为所有成员中实际延迟最低的,这就是FortiGate选择T_INET_0作为首选成员的原因。

  在第二个输出中,T_INET_1现在成为首选成员,因为它的延迟现在低于T_INET_0的校正延迟。在第三个输出中,T_INET_1被移回T_INET_0下方,因为它的延迟再次等于或高于T_INET_0的校正延迟。

  上图展示了使用延迟作为指标的最佳质量规则中首选成员选择的另一个示例。配置与上一张幻灯片上显示的配置相同。该示例显示了除最高优先级成员以外的成员如何竞争oif列表中的职位。

  与T_INET_1相比,关注T_MPLS在列表中的位置。在第一个输出中,T_MPLS被放置在T_INET_1下方,即使T_MPLS的延迟较低。这是因为FortiGate考虑了T_INET_1的校正延迟(CM),该延迟为110.42毫秒,等于或低于T_MPLS的实际延迟。

  在第二个输出中,T_MPLS现在被放置在T_INET_1的顶部,因为它的延迟现在低于T_INET_1的校正延迟。在第三个输出中,T_MPLS仍然被放置在T_INET_1的顶部,即使其延迟不再低于T_INET_1的校正延迟。这是因为FortiGate在将低优先级成员向下移动到界面列表时不考虑优势。也就是说,FortiGate只考虑成员的真实延迟和优先级。

  在第四个输出中,T_MPLS现在被移回T_INET_1下方,因为它的延迟现在等于或高于T_INET_1的实际延迟。

 当你使用内带宽、外带宽或双带宽作为指标时,FortiGate会选择具有最高可用带宽的成员作为首选成员。可用带宽取决于接口设置和使用情况。

  如果你将link-cost-threshold设置为高于零的值,FortiGate将计算低优先级成员的校正带宽差,这考虑到了给高优先级成员的优势,并使用上图显示的公式计算。该公式是基于link-cost-threshold设置对低优先级成员的可用带宽的基本百分比计算。

  FortiGate还使用上图显示的公式计算低优先级成员和高优先级成员之间的可用带宽差异。

  上图还显示了FortiGate使用带宽作为指标来构建oif列表的规则。规则如下:

  ● 高优先级成员(HPM)比低优先级成员(LPM)更有优势。优势取决于链接成本阈值。

  ● 当可用带宽差大于correctdbanddtdffer时,LPM被放置在HPM的顶部。

  ● 当发生以下任何情况时,LPM再次被放置在HPM下方:

    ● 可用带宽差等于或低于修正后的带宽差。这允许快速恢复最高优先级的成员。

    ● LPM的可用带宽等于或低于HPM的可用带宽。这导致HPM的恢复时间更长。

  当你在最佳质量规则中使用带宽指标时,FortiGate必须知道成员的最大带宽来计算其可用带宽。

  成员的最大带宽是从为估计上游带宽和估计下游带宽接口设置定义的值中获得的。如果未定义设置,则FortiGate使用实际的物理接口速度。例如,对于具有未定义最大带宽设置的100 Mbps接口,FortiGate解析为上游和下游最大速度使用100 Mbps。对于双向带宽指标,FortiGate只是增加了上游和下游速度。

  对于具有未定义最大带宽设置的VLAN和隧道接口,FortiGate解析为使用父接口的带宽值。例如,绑定到port1且具有未定义最大带宽设置的IPsec隧道从port1设置中获得其最大带宽。如果端口1没有定义最大带宽值,则IPsec隧道使用端口1的物理速度。

  上图显示了FortiManager上的最大带宽设置,以及FortiGate上的等效CLI设置。请注意,仅当你选择WAN作为接口角色时,FortiManager才会显示最大带宽设置。

  上图显示了使用outbandwidth和bibandwidth作为指标时diagnose sys sdwan service命令的示例输出。请注意,输出中显示的带宽值是指可用带宽。

  使用的带宽由链路监控进行(lnkmtd)测量,你可以通过运行diagnose sys link-monitor interface命令来查看测量值,如上图所示。

 diagnose sys sdwan service命令显示的可用带宽根据使用的带宽和成员的最大带宽每10秒更新一次。

  使用的带宽由链路监控进程(Inkmtd)测量,你可以通过运行diagnose sys link-monitor interface命令来查看测量值,如上图所示。

  上图显示了使用Outbandwidth作为指标的最佳质量规则中首选成员选择的示例。

  配置显示T_INET_0为最高优先级成员。上图还显示了在不同时间执行的diagnose sys sdwan service命令的输出。请注意,只显示输出的相关行。该示例显示了成员如何与最高优先级的成员竞争oif列表中的职位。

  与T_INET_0相比,关注T_INET_1在列表中的位置。在第一个输出中,T_INET_1被放置在T_INET_0下方,尽管它有更多的可用带宽。这是因为FortiGate考虑了更正后的可用带宽差(CBWD)。CBWD是999.9kps,ABWD是899kbps。由于ABWD等于或低于CBWD,因此高优先级成员(T_INET_0)被认为更好。

  在第二个输出中,T_INET_1现在成为首选成员,因为ABWD现在高于CBWD。在第三个输出中,T_INET_1被移回T_INET_0下方,因为ABWD再次等于或低于CBWD。

 上图展示了使用outbandwidth作为指标的最佳质量规则中首选成员选择的另一个示例。配置与上一张幻灯片上显示的配置相同。该示例显示了最高优先级成员以外的成员如何竞争列表中的职位。

  与T_INET_1相比,关注T_MPLS在列表中的位置。在第一个输出中,T_MPLS被放置在T_INET_1下方,尽管它有更多的可用带宽(ABW)。这是因为FortiGate考虑了更正后的可用带宽差异(CBWD)。CBWD是499.9 kbps,而ABWD是400 kbps。由于ABWD等于或低于CBWD,因此高优先级成员(T_INET_1)被认为更好。

  在第二个输出中,T_MPLS现在被放置在T_INET_1的顶部,因为ABWD现在高于CBWD。在第三个输出中,即使ABWD不再高于CBWD,T_MPLS仍然被放置在T_INET_1的顶部。这是因为FortiGate在将低优先级成员向下移动接口列表时不考虑CBWD。也就是说,FortiGate更喜欢具有最高可用带宽的成员。

  在第四个输出中,T_MPLS现在被移回T_INET_1下方,因为可用带宽现在等于或低于T_INET_1。

  当你使用数据包丢失作为指标时,FortiGate会选择数据包丢失百分比最低的成员作为首选成员。

  如果link-cost-threshold值大于0,FortiGate会将link-cost-threshold值加到LPM的丢包数中,计算修正丢包数CPL。CPL因素给予优先级较高的成员优势。

  上图还显示了FortiGate在使用丢包作为度量标准构建oif列表时遵循的规则。规则如下:

  ● 高优先级成员(HPM)比低优先级成员(LPM)有优势。优势取决于link-cost-threshold值。

  ● 当CPL低于HPM的丢包时,LPM被放置在HPM的顶部。

  ● 当出现以下任何情况时,LPM再次放置在HPM下方:

    ● CPL等于或高于最高优先级成员的丢包。这允许快速恢复最高优先级的成员。

    ● LPM的丢包等于或高于HPM的丢包。这导致HPM的恢复时间更长。

  上图显示了使用丢包作为指标的最佳质量规则中首选成员选举的示例。

  配置显示T_INET_0为最高优先级成员。上图还显示了在不同时间执行的diagnose sys sdwan service命令的输出。请注意,只显示输出的相关行。该示例显示了成员如何与优先级最高的成员竞争列表中的职位。

  与T_INET_0相比,专注于T_INET_1在列表中的位置。在第一个输出中,T_INET_1被放置在T_INET_0下方,即使它没有数据包丢失。这是因为FortiGate考虑了T_INET_1的更正数据包丢失(CPL),即10%。由于T_INET_0数据包损耗等于或等于CPL,因此T_INET_0被认为更好。

  在第二个输出中,T_INET_1现在成为首选成员,因为T_INET_0数据包丢失现在高于CPL。在第三个输出中,T_INET_1被移回T_INET_0下方,因为T_INET_0数据包丢失再次等于或低于CPL。

 上图展示了使用丢包作为指标的最佳质量规则中首选成员选举的另一个示例。配置与上一张幻灯片上显示的配置相同。该示例显示了最高优先级成员以外的成员如何竞争列表中的职位。

  重点关注T_MPLS相对于T_INET_1在列表中的位置。在第一个输出中,T_MPLS被放在T_INET_1下面,尽管它的丢包率更低。这是因为FortiGate考虑了12%的CPL。因为T_INET_1丢包等于或低于CPL,所以优先级较高的成员(T_INET_1)被认为更好。

  在第二个输出中,T_MPLS现在位于T_INET_1之上,因为它的CPL现在低于T_INET_1。在第三个输出中,T_MPLS仍然位于T_INET_1之上,即使它的CPL不再低于T_INET_1。这是因为FortiGate在将较低优先级的成员移回接口列表时不考虑CPL。也就是说,FortiGate优先选择丢包最少的成员。

  在第四个输出中,T_MPLS现在被移回T_INET_1以下,因为它的丢包现在等于或高于T_INET_1。

  自定义-配置文件-1指标使用一个公式,从延迟、抖动、数据包丢失和双带宽中计算出复合值。复合值称为链接质量指数,计算它的公式显示在上图中。

  对于每个指标,你设置在公式中使用的权重。权重使你能够通过一个或多个指标影响链接质量指数。公制权重越高,公制对链接质量指数的影响就越大。例如,如果你认为数据包丢失是最重要的指标,那么你应该为其分配最高的权重。相反,如果你只是想忽略一个指标,请给它分配一个0的权重。

  在上图显示的示例中,链接质量指数考虑了所有四个指标。然而,在四种指标中,丢包权重最高。

  上图显示了使用自定义-配置文件-1作为指标时diagnose sys sdwan service命令的示例输出。输出包括链路质量指数值,然后是数据包丢失、延迟、抖动和双带宽的测量值。

  最低成本(SLA)策略指示FortiGate根据以下因素选择首选成员:

  1. SLA目标:你必须选择一个或多个SLA目标。然后,FortiGate检查成员是否满足选定的SLA目标。

  2. 成员成本:你为成员配置的成本。成员的默认成本是0。

  3. 成员优先级:基于规则接口首选项配置。首先配置的成员比最后配置的成员具有更高的优先级。

  FortiGate首先检查成员满足多少SLA目标。它达到的SLA目标越多,它的偏好就越高。请注意,即使你可以在规则中选择一个或多个SLA目标,但每个选定的SLA目标必须来自不同的性能SLA。也就是说,每个SLA目标必须指向不同的服务器。

  如果有两个或多个成员满足相同数量的SLA目标,则FortiGate使用成员成本作为决定因素,然后使用成员优先级作为最后一个决定因素。

  此外,只有一个首选成员(如果可以接受的话)用于引导流量。也就是说,不执行负载均衡。此外,如果没有成员达到SLA目标,FortiGate仍然会根据成员成本和优先级构建oif列表。

  上图显示了最低成本(SLA)规则中首选成员选举的示例。

  配置显示T_INET_0为最高优先级成员。diagnose sys sdwan server命令的输出显示所有成员的sla(0x1)。这意味着所有成员都符合SLA目标(VPN_PING#1)。

  由于所有成员都符合SLA目标,并且成本相同,因此成员优先级被用作决定因素。结果是,成员的顺序与配置方式相同,因此,T_INET_0成为首选成员。

 上图显示了最低成本(SLA)规则中首选成员选举的另一个示例。

  T_INET_0不符合SLA目标,报告为sla(0x0),这就是为什么被放置在列表的底部。T_MPLS和T_INET_1符合SLA目标。然而,T_MPLS被放在顶部,因为它的成本(1)比T_INET_1(2)低。结果是T_MPLS成为首选成员。

 上图显示了最低成本(SLA)规则中首选成员选举的另一个示例。

  没有一个成员达到SLA目标。因此,列表顺序首先根据成本决定,然后根据优先级决定。T_INET_0 (最高优先级的成员) 被放在列表的顶部,然后是T_MPLS(成本=1)和T_INET_1(成本=2)。

  上图显示了当使用两个SLA目标时,在最低成本(SLA)规则中选择首选成员的示例。

  由于T_MPLS是唯一满足两个SLA目标的成员,因此它成为首选成员。T_INET_0和T_INET_1都只满足一个SLA目标,并且都具有相同的成本,因此FortiGate使用优先级(cfg_order)作为决决定因素。

 最大带宽(SLA)策略指示FortiGate在首选成员之间分配会话。成员偏好基于成员达到的SLA目标数量。也就是说,满足最多SLA目标的成员是首选,因此用于会话分发。

  在FortiGate识别首选成员后,它使用以下算法之一跨成员负载均衡会话:

  ● 循环:这是默认算法。FortiGate使用循环分布平等地均衡成员之间的会话。

  ● 基于源IP:FortiGate将来自IP地址的会话发送到同一成员。

  ● 基于源和目标IP:FortiGate将具有相同源和目标IP对的会话发送到同一成员。

  ● 上游:FortiGate向具有最多可用流入带宽的成员发送会话。

  ● 下游:FortiGate向具有最多可用流出带宽的成员发送会话。

  ● 带宽:FortiGate向具有最多可用双向带宽的成员发送会话。

  请注意,FortiGate不考虑成员成本和优先级。FortiGate仅考虑成员满足的SLA目标数量。另请注意,称为哈希模式的负载均衡方法是一个高级选项。你可以按照上图所示配置设置。

 上图显示了在最大带宽(SLA)规则中选择首选成员的示例。

  diagnose sys sdwan service命令的输出显示,所有成员都满足两个配置的SLA目标,并且为规则配置的负载均衡算法是round-robin。由于所有成员都满足相同数量的SLA目标,FortiGate使用循环算法对所有成员的会话进行负载均衡。请注意,会员成本和优先级无关紧要。

  上图显示了与示例1中配置的规则匹配的六个会话的分布。你可以看到,FortiGate使用循环分发(round-robin)通过每个成员发送一个会话,每个成员总共两个会话。

 上图又显示了最大带宽(SLA)规则中首选成员选择的两个示例。配置与上一张幻灯片上显示的配置相同。

  上图的第一个示例显示T_MPLS是唯一首选成员。这是因为T_MPLS是满足最多SLA目标的成员。因此,会话仅发送到T_MPLS。

  在第二个示例中,没有一个成员达到任何SLA目标。因为所有成员都具有相同的SLA状态,所以FortiGate负载均衡了所有成员的会话。

  对于最低成本(SLA)和最大带宽(SLA)模式,你可以定义必须满足规则中配置的至少一个SLA目标的最小成员数量,以便规则保持活动状态。如果符合SLA的成员数量低于最低阈值,则在规则匹配阶段禁用并跳过该规则。控制此行为的设置是最小sla-meet-members,默认设置为0,这意味着不考虑最小成员数量。

  minimum-sla-meet-members设置对最大带宽(SLA)规则特别有用,因为它可用于确保给定服务所需的带宽可用。考虑一下上图的示例,它显示了一个带有三个互联网底层的FortiGate,每个底层都支持不同的速度。该示例还包括两个SD-WAN规则的简化版本,该规则配置为将流量引导到互联网流媒体服务。由于port3是一个昂贵的链接,管理员希望仅将port3用作port1和port2的备份。

  然后,FortiGate确定port1是规则1的唯一首选成员,因为port1是唯一符合SLA的成员。如果管理员将minimum-sla-meet-members保留为0(默认值),那么FortiGate将对流媒体服务使用规则1,这将导致服务影响,因为最低所需带宽(20 Mbps)不可用。但是,如果管理员将minimum-sla-meet-members设置为2,则FortiGate禁用规则1,因为该规则不符合至少通过一个SLA的最小成员数量。结果是,只有当规则1没有足够的带宽时,管理员现在才能让FortiGate将规则2用于流媒体服务。

  上图显示了基于其值和规则SLA状态的minimum-sla-meet-members设置的效果。

  规则状态表示T_INET_0通过两个SLA目标,T_MPLS通过了一个SLA目标,T_INET_1没有通过SLA目标。如果每个成员的SLA目标数量没有改变,那么minimum-sla-meet-members设置值的效果如下:

  ● 如果设置为0(默认值),FortiGate不会强制执行最低阈值。该规则处于活动状态,T_INET_0成为首选成员,因为它具有最佳的SLA状态。

  ● 如果设置为2,FortiGate会检查满足至少一个SLA的成员数量是否等于或高于2。由于T_INET_0和T_MPLS至少满足一个SLA目标,因此该规则通过最低阈值并保持活动状态,并且T_INET_0仍然是首选成员。

  ● 如果设置为3,FortiGate会检查满足至少一个SLA的成员数量是否等于或大于3。因为只有两个成员至少满足一个SLA目标,所以该规则被禁用,因为它没有通过最低阈值。在规则匹配过程中也会跳过该规则。

  通过之前的策略描述,最低成本(SLA)和最大带宽(SLA),你在diagnose sys sdwan health-check status命令的输出中发现了sla_map字段。此字段指示成员是否满足已配置的SLA目标。sla_map字段使用位掩码表示来引用SLA目标及其状态。按照以下规则来理解sla_map字段:

  ● sla_map值表示二进制数的十六进制值。

  ● 二进制数中的位数等于配置的SLA目标数。

  ● 第一个配置的SLA目标被分配到位0,第二个配置的SLA目标被分配到位1,依此类推。

  ● 如果成员满足SLA目标,则SLA目标的位设置为1,否则设置为0。

  当你为成员配置三个SLA目标时,上图显示了一个表格,其中包含所有可能的sla_map值。例如,0x6的sla_map意味着SLA目标3和2得到满足,但SLA目标1(6 = 4 + 2 + 0)没有达到。根据设置中配置的SLA目标数量展开或减少表。

  请注意,0x0的sla_map有两种可能的含义。如果你为成员配置一个或多个SLA目标,0x0意味着没有满足任何SLA目标。然而,0x0也可能意味着你没有为成员配置任何SLA目标。因此,请务必检查性能SLA配置,以确定是否配置了SLA目标。

  通过掌握本课中涵盖的目标,你了解了SD-WAN规则如何根据配置的标准和策略工作。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值