JUNOS 中的 ECMP 负载平衡

Spa*_*iff 1 load-balancing juniper

我想弄清楚如何在 JUNOS 中使用 ECMP 负载平衡。我知道这不是负载平衡的最佳方法,但它快速而肮脏,并且可以完成我需要的工作。在 ScreenOS 中,这很容易。

设备:SRX220 JunOS:10.3R2.11

这是我到目前为止所得到的:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
    maximum-paths 2;
Run Code Online (Sandbox Code Playgroud)

会这样做吗?

汤姆

eat*_*ter 6

你绝对不想要maximum-paths. 这将限制您的路由表大小,与 ECMP 无关。

所以只需:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你会看到的:

lab@router> show route 0.0.0.0/0
...
0.0.0.0/0          *[Static/5] 00:01:28, metric 10
                    > to 1.1.1.1 via ge-0/0/0.0
                      to 1.1.1.2 via ge-0/0/0.0
Run Code Online (Sandbox Code Playgroud)

两个下一跳都出现在路由表中,但是要查看转发表中实际发生的情况,您必须深入挖掘:

lab@router> show route forwarding-table destination 0.0.0.0/0
...
Destination        Type RtRef Next hop           Type Index NhRef Netif
0.0.0.0/0          user     0 1.1.1.1            ucst   558     3 ge-0/0/0.0
Run Code Online (Sandbox Code Playgroud)

默认情况下,当路由器将路由表下推到转发表时,它会随机选择一个下一跳。要更改该行为,您可以定义“转发表导出”策略,该策略控制从路由表构建转发表时发生的情况:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
    forwarding-table {
        export LOAD-BALANCE;
    }
}
policy-options {
    policy-statement LOAD-BALANCE {
        then {
            load-balance per-packet;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,路由表看起来仍然相同:

lab@router> show route 0.0.0.0/0
...
0.0.0.0/0          *[Static/5] 00:07:28, metric 10
                    > to 1.1.1.1 via ge-0/0/0.0
                      to 1.1.1.2 via ge-0/0/0.0
Run Code Online (Sandbox Code Playgroud)

但是转发表(重要的地方)有两条路线:

lab@router> show route forwarding-table destination 0.0.0.0/0                    
...
Destination        Type RtRef Next hop           Type Index NhRef Netif
0.0.0.0/0          user     0                    ulst 262142     2
                              1.1.1.1            ucst   558     3 ge-0/0/0.0
                              1.1.1.2            ucst   540     3 ge-0/0/0.0
Run Code Online (Sandbox Code Playgroud)

现在您正在负载平衡!

但是,要记住的一件事是,尽管有令人难以置信的误导性 load-balance per-packet陈述,但具有此配置的所有瞻博网络路由器实际上都在按流进行负载平衡。每个数据包都基于(src-ip、dst-ip 和协议编号)进行散列。因此,如果您只有几个流量流,它们很可能都使用相同的下一跳。一旦你增加了流的数量,你应该会看到更均匀的加载。

(实际上,第一个硬件确实会按数据包进行负载平衡,但您可能永远不会遇到)