菜单

[ Juniper ] 使用 MPLS L2-Circuit 提供虚拟网线服务

2020年6月11日 - Juniper

我们技术经常会遇到一些很奇怪的需求,比如说,客户想将 A 区域和 B 区域的机器连起来,两台机器连接成一个大的二层域内。或者是客户想在 A 区域使用 B 区域 ISP 提供的宽带服务(不要笑,经常有!)。总之需求千奇百怪无所不有,你需要有很灵活的方式来提供服务。

今天我们来针对一下第二种需求来说一下 Juniper 的 Pseudo-Wire ( ethernet-ccc / VLAN-ccc )功能。在介绍并配置这个功能之前,我们需要先整理一下现在的解决方案,看看哪些方案可以满足我们的需求。

所以有没有什么办法可以非常简单的配置( 配置不超过 20 行 )又能实现以上需求的方法呢?当然有,我们现在就来使用 Juniper 的 Pseudo-Wire 来实现该需求。

配置整图如下:

这里我们来模拟 Branch 需要使用 Headquarter 提供的 PPPoE 服务的场景。

Branch 需要连接 Headquarter PPPoE BRAS 服务器获得 Internet 访问权限,我们需要使用最少的配置来实现该需求。

ISP 区域已经预配置好 MPLS + OSPF ( 无需配置 BGP )且 LDP 和 OSPF adjacency 已成立,我们只需要针对 Pseudo-Wire 功能进行配置即可。

VCP1:

protocols {
    mpls {
        label-switched-path R1-R3 {  
            to 10.0.0.3;  //定义 MPLS PATH ,到对端的 PE 设备,可以通过同一 LSP 提供多个 L2-Circuit 服务
        }
        interface ge-0/0/1.0;
    }
    l2circuit {
        neighbor 10.0.0.3 {
            interface ge-0/0/2.0 {
                virtual-circuit-id 100; // 为需要传输的接口定义邻居关系以及虚拟电缆 ID ( ID 的值随便写,不可以冲突,与对端 ID 需相同 )
            }
        }
    }
}
interfaces {
    ge-0/0/2 {
        encapsulation ethernet-ccc;  // 将接口封装成 ethernet-ccc 模式,开启伪线功能
        unit 0 {
            family ccc; // 激活 ccc SAFI,提供伪线服务
        }
    }
}

VCP3:

protocols {
    mpls {
        label-switched-path R3-R1 {
            to 10.0.0.1;  //定义 MPLS PATH ,到对端的 PE 设备,可以通过同一 LSP 提供多个 L2-Circuit 服务
        }
        interface ge-0/0/1.0;
    }
    l2circuit {
        neighbor 10.0.0.1 {
            interface ge-0/0/2.0 {
                virtual-circuit-id 100;  // 为需要传输的接口定义邻居关系以及虚拟电缆 ID ( ID 的值随便写,不可以冲突,与对端 ID 需相同 )
            }
        }
    }
}
interfaces {
    ge-0/0/2 {
        encapsulation ethernet-ccc;  // 将接口封装成 ethernet-ccc 模式,开启伪线功能
        unit 0 {
            family ccc;  // 激活 ccc SAFI,提供伪线服务
        }
    }
}

配置完成后,我们来检查 VCP1 的 MPLS Table:

root@R1> show route table mpls.0

mpls.0: 11 destinations, 11 routes (11 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

0                  *[MPLS/0] 22:13:11, metric 1
                      to table inet.0
0(S=0)             *[MPLS/0] 22:13:11, metric 1
                      to table mpls.0
1                  *[MPLS/0] 22:13:11, metric 1
                      Receive
2                  *[MPLS/0] 22:13:11, metric 1
                      to table inet6.0
2(S=0)             *[MPLS/0] 22:13:11, metric 1
                      to table mpls.0
13                 *[MPLS/0] 22:13:11, metric 1
                      Receive
299776             *[L2CKT/7] 21:57:36
                    > via ge-0/0/2.0, Pop       Offset: 4
299792             *[LDP/9] 22:11:04, metric 1
                    > to 100.64.10.2 via ge-0/0/0.0, Pop
299792(S=0)        *[LDP/9] 22:11:04, metric 1
                    > to 100.64.10.2 via ge-0/0/0.0, Pop
299808             *[LDP/9] 22:10:57, metric 1
                    > to 100.64.10.2 via ge-0/0/0.0, Swap 299840
ge-0/0/2.0         *[L2CKT/7] 21:57:36, metric2 1
                    > to 100.64.10.2 via ge-0/0/0.0, Push 299776, Push 299840(top) Offset: 252

再检查 L2Circuit 邻居建立情况:

root@R1> show l2circuit connections
Layer-2 Circuit Connections:

Legend for connection status (St)
EI -- encapsulation invalid      NP -- interface h/w not present
MM -- mtu mismatch               Dn -- down
EM -- encapsulation mismatch     VC-Dn -- Virtual circuit Down
CM -- control-word mismatch      Up -- operational
VM -- vlan id mismatch           CF -- Call admission control failure
OL -- no outgoing label          IB -- TDM incompatible bitrate
NC -- intf encaps not CCC/TCC    TM -- TDM misconfiguration
BK -- Backup Connection          ST -- Standby Connection
CB -- rcvd cell-bundle size bad  SP -- Static Pseudowire
LD -- local site signaled down   RS -- remote site standby
RD -- remote site signaled down  HS -- Hot-standby Connection
XX -- unknown

Legend for interface status
Up -- operational
Dn -- down
Neighbor: 10.0.0.3
    Interface                 Type  St     Time last up          # Up trans
    ge-0/0/2.0(vc 100)        rmt   Up     Jun 10 10:16:22 2020           1
      Remote PE: 10.0.0.3, Negotiated control-word: Yes (Null)
      Incoming label: 299776, Outgoing label: 299776
      Negotiated PW status TLV: No
      Local interface: ge-0/0/2.0, Status: Up, Encapsulation: ETHERNET
      Flow Label Transmit: No, Flow Label Receive: No

可以得知 Pseudo-Wire 服务已经激活了,邻居状态为 UP,那么我们就开始在 Branch 上直接拨号来测试下是否成功吧!

( BRAS 配置已省略,系统为 Mikrotik RouterOS,账号为 ori,密码为 ori )

Ori-Branch@Area0 – Ori-Client:

Branch Client 已连接上 Headquarter BRAS,成功获得互联网访问权限,客户需求已完成。

如果您对文章有什么建议或者意见,欢迎发邮件到 bGl1Y2hlbjk1ODYoYXQpZ21haWwuY29t

发表评论

电子邮件地址不会被公开。 必填项已用*标注