两条出口线路怎么让服务器走快的员工走慢的?华为交换机策略路由按网段分流

公司拉了两条出口线:一条高速、一条低速。麻烦来了——传统路由是按目的地址查路由表转发的,报文去哪儿它查哪儿,至于报文是从哪个内网网段出来的,路由表根本不看。结果是服务器区和办公区的流量混在一条线上挤,高速链路的带宽被员工刷视频吃光,低速链路却闲着。想让服务器走高速、员工走低速,靠改路由掩码凑不出来,得用策略路由 PBR:按你自己定的策略选路,不跟目的地址走。

华为 S 系列交换机上策略路由靠重定向实现:把到达接口、符合流分类规则的三层报文,重定向到指定的下一跳地址。官方文档列了三个典型用途——不同数据流走不同链路提高利用率;把数据流引到防火墙等安全设备做过滤;在满足服务质量前提下选费用低的链路降成本。

配置步骤

官方示例的组网是这样的:公司用户通过 Switch 双归属到外部网络,高速链路网关 10.1.20.1/24,低速链路网关 10.1.30.1/24。内网两个网段,192.168.1.0/24 是服务器区对带宽要求高,走高速链路;192.168.2.0/24 是员工上网,走低速链路。

第一步,把基础互通配好。SwitchA 上建 VLAN10、VLAN20 接终端,Trunk 口上联;Switch 上建 VLAN10、VLAN20、VLAN100、VLAN200,GE1/0/1 走 VLAN100 对高速链路,GE1/0/2 走 VLAN200 对低速链路,GE1/0/3 做 Trunk 接 SwitchA。再配四个 VLANIF 和两条缺省路由:

[Switch] interface vlanif 10
[Switch-Vlanif10] ip address 192.168.1.1 24
[Switch-Vlanif10] quit
[Switch] interface vlanif 20
[Switch-Vlanif20] ip address 192.168.2.1 24
[Switch-Vlanif20] quit
[Switch] interface vlanif 100
[Switch-Vlanif100] ip address 10.1.20.2 24
[Switch-Vlanif100] quit
[Switch] interface vlanif 200
[Switch-Vlanif200] ip address 10.1.30.2 24
[Switch-Vlanif200] quit
[Switch] ip route-static 0.0.0.0 0 10.1.20.1
[Switch] ip route-static 0.0.0.0 0 10.1.30.1

到这一步内外网已经通了,但谁走哪条线控制不了。往下才是策略路由的本体。

第二步,配 ACL。这里有个最容易踩的坑:流策略一会儿要应用在 GE1/0/3 的入方向上,内网两个网段互访的流量也从这儿进来,不先放行,互访流量也会被重定向到出口下一跳,内网直接不通。所以官方先建了 ACL 3000 专门匹配内网互访流,再建 3001、3002 匹配两个上网网段:

[Switch] acl 3000   //主要用于匹配内网两个网段之间互访的数据流,这部分数据流不需要做重定向,如果不配置这一步会导致内网之间互访的流量也被重定向,从而导致内网互访不通。
[Switch-acl-adv-3000] rule permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255
[Switch-acl-adv-3000] rule permit ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255
[Switch-acl-adv-3000] quit
[Switch] acl 3001   //匹配内网192.168.1.0/24网段的数据流
[Switch-acl-adv-3001] rule permit ip source 192.168.1.0 0.0.0.255
[Switch-acl-adv-3001] quit
[Switch] acl 3002   //匹配内网192.168.2.0/24网段的数据流
[Switch-acl-adv-3002] rule permit ip source 192.168.2.0 0.0.0.255
[Switch-acl-adv-3002] quit

第三步,流分类。建 c0、c1、c2 三个分类器,分别绑 ACL 3000、3001、3002:

[Switch] traffic classifier c0 operator or
[Switch-classifier-c0] if-match acl 3000
[Switch-classifier-c0] quit
[Switch] traffic classifier c1 operator or
[Switch-classifier-c1] if-match acl 3001
[Switch-classifier-c1] quit
[Switch] traffic classifier c2 operator or
[Switch-classifier-c2] if-match acl 3002
[Switch-classifier-c2] quit

第四步,流行为。b0 只做 permit 放行内网互访,b1 重定向到高速链路下一跳,b2 重定向到低速链路下一跳:

[Switch] traffic behavior b0
[Switch-behavior-b0] permit
[Switch-behavior-b0] quit
[Switch] traffic behavior b1
[Switch-behavior-b1] redirect ip-nexthop 10.1.20.1
[Switch-behavior-b1] quit
[Switch] traffic behavior b2
[Switch-behavior-b2] redirect ip-nexthop 10.1.30.1
[Switch-behavior-b2] quit

第五步,流策略把分类和行为绑起来,应用到 GE1/0/3 的入方向:

[Switch] traffic policy p1
[Switch-trafficpolicy-p1] classifier c0 behavior b0
[Switch-trafficpolicy-p1] classifier c1 behavior b1
[Switch-trafficpolicy-p1] classifier c2 behavior b2
[Switch-trafficpolicy-p1] quit
[Switch] interface gigabitethernet 1/0/3
[Switch-GigabitEthernet1/0/3] traffic-policy p1 inbound
[Switch-GigabitEthernet1/0/3] return

验证

display traffic policy user-defined p1 一看便知,c0 对应动作 Permit,c1 对应 Redirect ip-nexthop 10.1.20.1,c2 对应 Redirect ip-nexthop 10.1.30.1,三组绑定齐了:

<Switch> display traffic policy user-defined p1
  User Defined Traffic Policy Information:
  Policy: p1
   Classifier: c0
    Operator: OR
     Behavior: b0
      Permit
   Classifier: c1
    Operator: OR
     Behavior: b1
      Permit
      Redirect: no forced
        Redirect ip-nexthop
        10.1.20.1
   Classifier: c2
    Operator: OR
     Behavior: b2
      Permit
      Redirect: no forced
        Redirect ip-nexthop
        10.1.30.1

display acl 3000 和 display traffic classifier user-defined 也都能逐项核对,源文里回显齐全。

三条注意事项值得抄在本子上。一是设备上没有下一跳对应的 ARP 表项时会触发 ARP 学习,一直学不到,报文就按原始路径转发,重定向不生效——出口下一跳不通时业务不会断,但也没分流。二是 redirect ip-nexthop 配多个下一跳按主备方式工作,配置在前优先级高,主链路 Down 了自动切下一个。三是想要负载分担别用 ip-nexthop,得用 redirect ip-multihop,那个才是等价负载分担。

出口双线按业务分流、或者把关键流量引去防火墙过一遍再出去,都是策略路由最顺手的场景。贵州诚鑫致达科技给客户做多出口网络时,网段分流这一步就是照这套流策略配的。你家的两条线现在是负载跑满一条闲死一条,还是真分流了?