JUNOS逻辑路由器(Logical Routers)互联网接入

juniper-junos-logical-routers-data-forwarding
Juniper Networks M-SeriesT-Series路由器平台均支持逻辑路由器(Logical Router)的概念。逻辑路由器允许网络管理员将单一物理路由器根据各种不同的业务需求,分割成多个执行单独路由任务的逻辑路由器。尽管逻辑路由器技术从本质上而言应该属于Juniper JUNOS的一项业务特性技术,然而出于Juniper物理路由器的成本方面的考虑,JUNOS逻辑路由器在另一方面又成为了现在绝大部分M/T方向JNCIP/JNCIE认证考试备考人员实验台搭建的必备技术。

因此,对于JUNOS的Logical Routers特性:包括在单个Juniper物理路由器内部创建多个逻辑路由器,并实现逻辑路由器之间的互联;甚至穿越多个Juniper物理路由器,实现不同的Juniper物理路由器内部的逻辑路由器之间互联对大部分人而言应该不会感觉陌生。同时,或许是受到通过配置路由泄露实现MPLS/VPN互联网接入设计方案的启发。最近有朋友在论坛或者新闻组内谈起关于逻辑路由器与主路由器互联,从而实现路由进程间融合互操作的话题。在我看来,出现这样的疑惑可能是由于配置层次的不同,将逻辑路由器接口与主路由器接口之间的平行关系,与Q-in-Q中的802.1Q VLAN-ID叠加关系混淆而造成的。实际上,逻辑路由器与主物理路由器间的互联,以及两者之间路由进程的融合互操作的实现,乃至将来接入三层/二层VPN;与在逻辑路由器之间实现的配置并没有多大区别。

国庆期间我个人还有其它工作,更新可能会减慢,于是在10月份前我先把这篇文档完成。

JUNOS逻辑路由器(Logical Routers)与主路由器互联

我们在JUNOS主路由器(LR Master)上,创建接口fxp2.81并使用vlan-id 181与其内部逻辑路由器R1互联。注意配置中JUNOS的层次目录。

[edit]
nigel@junos# show interfaces fxp2
vlan-tagging;
unit 81 {
    vlan-id 181;
    family inet {
        address 192.168.81.1/30;
    }
}

相应的,在内部逻辑路由器R1上完成对应的配置,并测试连通性。

[edit]
nigel@junos# show interfaces fxp1
vlan-tagging;

[edit logical-routers r1]
nigel@junos# show interfaces fxp1
unit 81 {
    vlan-id 181;
    family inet {
        address 192.168.81.2/30;
    }
}

[edit]
nigel@junos# run ping 192.168.81.2 rapid
PING 192.168.81.2 (192.168.81.2): 56 data bytes
!!!!!
--- 192.168.81.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet
loss
round-trip min/avg/max/stddev = 0.393/0.427/0.521/0.048
ms

JUNOS逻辑路由器(Logical Routers)与主路由器IS-IS互联

配置JUNOS主路由器上的IS-IS路由进程。

nigel@junos# show interfaces lo0
unit 8 {
    family iso {
        address 49.0001.8888.8888.8888.00;
    }
}

[edit]
nigel@junos# set interfaces fxp2.81 family iso 

[edit]
nigel@junos# show protocols
isis {
    interface fxp2.81 {
        level 2 disable;
    }
}

配置JUNOS逻辑路由器R1上的IS-IS路由进程。

[edit logical-routers r1]
nigel@junos# show interfaces lo0
unit 1 {
    family inet {
        address 10.0.6.1/32;
    }
    family iso {
        address 49.0001.1111.1111.1111.00;
    }
}

[edit logical-routers r1]
nigel@junos# set interfaces fxp1.81 family iso

[edit logical-routers r1]
nigel@junos# show protocols
isis {
    interface fxp1.81 {
        level 2 disable;
    }
}

确认JUNOS逻辑路由器(Logical Routers)与主路由器(LR Master)之间的IS-IS互联邻接关系,我隐去了相关的MAC地址信息。

[edit]
nigel@junos# run show isis adjacency
Interface   System         L State  Hold (secs) SNPA
fxp2.81     1111.1111.1111 1 Up             22  

JUNOS逻辑路由器(Logical Routers)互联网接入

下一步,我们完成逻辑路由器到互联网的接入配置。由于当前JUNOS逻辑路由器R1通过vlan-tagging接口fxp1.81,与JUNOS主物理路由器的vlan-tagging接口fxp2.81,实现了IS-IS的互联。便可以通过在主物理路由器上,将来自逻辑路由器R1的互联网流量导向主物理路由器与网关相连的接口,从而实现JUNOS逻辑路由器的互联网接口配置。该接口可以是JUNOS主物理路由器上另外一个独立的物理接口,也可以是同样使用dot1.Q封装,使用另一个vlan-id的另一个逻辑接口,取决于JUNOS主物理路由器与网关之间的连接方式。在案例中,当前我们的JUNOS主物理路由器使用另一个独立的非vlan-tagging物理接口fxp0与网关IP 192.168.13.1连接:当然在现实中不可能会出现这样的情况,这里只是为了测试而临时借用这个接口。

首先完成JUNOS主路由器到网关的默认路由以及DNS解析配置。另外,你同时也需要在网关上增加一条指回JUNOS主路由器与JUNOS逻辑路由器R1之间的192.168.81/30网段的静态路由。这里将互联网出口网关的配置忽略。

[edit]
nigel@junos# show system
name-server {
    202.99.104.68;
    192.168.13.1;
}

[edit]
nigel@junos# show interfaces fxp0
unit 0 {
    family inet {
        address 192.168.13.254/24;
    }
}

[edit]
nigel@junos# show routing-options
static {
    route 0.0.0.0/0 next-hop 192.168.13.1;
}

在JUNOS主物理路由器上创建JUNOS Policy lr-internet,将上面的默认路由注入IS-IS路由协议,通告至JUNOS逻辑路由器R1上。

[edit]
nigel@junos# show policy-options
policy-statement lr-internet {
    term 1 {
        from {
            protocol static;
            route-filter 0.0.0.0/0 exact;
        }
        then accept;
    }
}

[edit]
nigel@junos# set protocols isis export lr-internet 

[edit]
nigel@junos# commit
commit complete

最后,确认JUNOS逻辑路由器从主路由器收到0/0默认路由,并且完成互联网连接测试。

nigel@junos# run show route logical-router r1 0/0 exact 

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

0.0.0.0/0          *[IS-IS/160] 00:03:38, metric 10
                    > to 192.168.81.1 via fxp1.81

nigel@junos> traceroute www.apple.com logical-router r1
traceroute to www.apple.com.akadns.net (17.112.152.32),
30 hops max, 40 byte packets
......
<!--output omitted-->
 6  202.99.66.181 (202.99.66.181)
     12.759 ms  53.868 ms  9.645 ms
 7  219.158.13.253 (219.158.13.253)
     14.698 ms  12.663 ms  14.716 ms
 8  219.158.4.146 (219.158.4.146)
     40.732 ms  15.540 ms  13.739 ms
 9  12.116.103.9 (12.116.103.9)
     219.383 ms  244.448 ms  374.841 ms
10  tbr1.la2ca.ip.att.net (12.122.104.18)
     398.096 ms  238.519 ms  488.126 ms
     MPLS Label=29069 CoS=0 TTL=1 S=1
11  cr1.la2ca.ip.att.net (12.122.19.145)
     302.453 ms  349.816 ms  230.336 ms
     MPLS Label=17458 CoS=0 TTL=255 S=1
12  cr1.sffca.ip.att.net (12.122.3.121)
     232.256 ms  443.132 ms  233.304 ms
     MPLS Label=17088 CoS=0 TTL=255 S=1
13  cr1.sc1ca.ip.att.net (12.122.30.121)
     251.243 ms  249.509 ms  373.919 ms
     MPLS Label=16310 CoS=0 TTL=255 S=1
14  12.123.155.9 (12.123.155.9)
     263.958 ms  244.534 ms  218.387 ms
15  * * *
......
<!--output omitted-->
Advertisements

JUNOS – Giving You the Power of Choose

JUNOS - One OS, One interface, One code, the only One you need

JUNOS – One OS, One interface, One code, the only One you need

之前,Juniper Networks的市场宣传广告一直采用近乎恶搞的风格。我个人非常喜欢,而且有收集这类素材的爱好。这次找来肥版Juniper Man过来当主角的:

JUNOS – Giving you the power of choose

主题网站同样没有例外。

而如果你觉得这样的风格不够庄重的话,那么最新出炉的JUNOS ASIA,或许会适合你的口味。在这里回答三个关于JUNOS如何提网络效率的问题还能赢取Juniper T恤

Juniper JUNOS BGP与OSPF完全末节区域设计陷阱

完成JUNOS OSPF末节区域(Stub Area)配置以后,需要进一步过滤域间路由LSA-3,压缩OSPF数据库并不难。只需要在ABR上加入no-summary参数,将当前的OSPF末节区域10设置为OSPF完全末节区域(TSA)即可。我们不需要在OSPF 区域10的所有Juniper JUNOS路由器上面设置,因为OSPF LSA-3只会通过OSPF ABR将来自骨干区域的LSA转换为LSA-3注入末节区域,因此我们在OSPF ABR上设置该区域为OSPF末节区域,并且阻止netsummary LSA注入,便可过滤掉LSA-3/4/5三种LSA。在实验中,OSPF区域10存在R3/R4两台ABR,我们需要同时在这两台ABR上面加上no-summary参数。

[edit logical-routers r3 protocols]
nigel@junos# set ospf area 10 stub no-summaries

[edit logical-routers r4 protocols]
nigel@junos# set ospf area 10 stub no-summaries

查看Juniper JUNOS R1的OSPF数据库,只有由两台JUNOS OSPF ABR注入的,用于保持OSPF域外/域间目标网段连通性的默认路由仍然保留在JUNOS OSPF的数据库当中,同时注意这些默认路由依然以OSPF LSA-3的形式出现。OSPF区域10内的路由器仍然保持对200.200/24网段的连通性。

nigel@junos# run show ospf database logical-router r1
netsummary

    OSPF link state database, Area 0.0.0.10
 Type      ID       Adv Rtr   Seq    Age  Opt  Cksum Len
Summary 0.0.0.0  10.0.3.3 0x8000000a  31 0x20 0x849d 28
Summary 0.0.0.0  10.0.3.4 0x8000000b  30 0x20 0x7ea2 28

nigel@junos# run traceroute logical-router r1 200.200.0.1
traceroute to 200.200.0.1 (200.200.0.1), 30 hops max,
40 byte packets
 1  10.0.4.13 (10.0.4.13)  0.476 ms  0.364 ms  0.278 ms
 2  10.0.2.1 (10.0.2.1)  0.438 ms  0.577 ms  0.407 ms
 3  10.0.8.10 (10.0.8.10)  0.613 ms  0.583 ms  0.601 ms
 4  10.0.8.10 (10.0.8.10)  0.581 ms !H  0.661 ms !H
0.548 ms !H

Juniper JUNOS BGP与OSPF完全末节区域(TSA)的设计陷阱

需要特别注意的是:配置OSPF TSA,它往往是事故出现的多灾区域,因为不单失去了OSPF域外路由LSA-5,同时OSPF域间路由LSA-3同时被过滤掉,链路状态的瓶颈会增加OSPF网络的扩展性能。尤其由于设计上的疏忽,尝试在OSPF TSA内实现扩展特性,路由黑洞屡屡会产生。

常见的设计错误包括将本地子网在OSPF TSA内汇总,从而丢失域内路由器全部的外部连通性,使OSPF TSA成为网路孤岛;尝试穿越TSA建立OSPF虚链路;以及OSPF TSA域内路由器通过JUNOS BGP与域外路由器交换路由更新,而造成协议下一跳不可达,进而造成路由Hidden,如此这般的情况时有发生。

这些情况会在后面的内容里面逐一演示。因此在配置JUNOS OSPF区域的时候,需要明确OSPF TSA的角色,任何日后存在扩展性需求的区域都不应该被轻易的定义为OSPF TSA。

Juniper JUNOS OSPF末节区域(Stub Area)配置

configurate-juniper-junos-ospf-stub-tsa-nssa-area
为了测试Juniper JUNOS的OSPF末节区域(Stub Area)对域外LSA的过滤效果。我们预先在Juniper路由器R7上注入OSPF域外(外部)路由/LSA200.0.0.0/24,下面我们继续在R1, R2, R3, R4上完成OSPF末节区域10(Stub Area)的配置。本实验包含的目标如下所示:

  1. 在R7上,以域外路由的形式通告200.0.0/24网段
  2. R1与R2只能充当区域0.0.0.10的域内路由器
  3. 区域0.0.0.10内不允许出现任何类型5的LSA(LSA-5)
  4. 所有路由器的环回接口地址都能从区域0.0.0.10被访问
  5. 区域0.0.0.10内不允许出现任何静态路由

Juniper JUNOS OSPF末节区域(Stub Area)10配置 – R1

protocols {
    ospf {
        area 0.0.0.10 {
            stub;
            interface lo0.1 {
                passive;
            }
            interface fxp1.12;
            interface fxp1.13;
        }
    }
}
routing-options {
    router-id 10.0.6.1;
}

Juniper JUNOS OSPF末节区域(Stub Area)10配置 – R2

protocols {
    ospf {
        area 0.0.0.10 {
            stub;
            interface lo0.2 {
                passive;
            }
            interface fxp2.12;
            interface fxp2.24;
        }
    }
}
routing-options {
    router-id 10.0.6.2;
}

Juniper JUNOS OSPF末节区域(Stub Area)10配置 – R3

[edit logical-routers r3 protocols]
nigel@junos# set ospf area 10 interface fxp2.13

[edit logical-routers r3 protocols]
nigel@junos# set ospf area 10 stub

Juniper JUNOS OSPF末节区域(Stub Area)10配置 – R4

[edit logical-routers r4 protocols]
nigel@junos# set ospf area 10 interface fxp1.24

[edit logical-routers r4 protocols]
nigel@junos# set ospf area 10 stub

JUNOS OSPF末节区域与完全末节区域(TSA)默认路由特性

默认情况下,Juniper JUNOS路由器并不会像CISCO IOS在连接OSPF末节区域或者完全末节区域(TSA)的区域边界那样自动向末节区域或TSA注入默认路由。为了保证末节区域或TSA内部路由器对域外路由,域间路由的连通性。我们必须手动在ABR上指定默认路由的Metric值(default-Metric),才能保证ABR向末节区域/TSA通告默认路由。我们需要根据需求在R1/R2/R3/R4上将区域10配置成末节区域/TSA。

注意default-Metric只需要在ABR R3/R4上面配置即可,而作为区域10的域内路由器R1/R2只需要将区域10设置为末节区域。

nigel@junos# show r3 protocols ospf
area 0.0.0.0 {
    interface fxp1.34;
    interface fxp1.35;
    interface lo0.3 {
        passive;
    }
    interface fxp1.30 {
        passive;
    }
}
area 0.0.0.10 {
    stub default-metric 10;
    interface fxp2.13;
}

nigel@junos# show r4 protocols ospf
area 0.0.0.0 {
    interface fxp2.34;
    interface fxp1.45;
    interface lo0.4 {
        passive;
    }
}
area 0.0.0.10 {
    stub default-metric 10;
    interface fxp1.24;
}

完成配置以后,我们先检查一下末节区域10里面的OSPF邻接状态。由于我们设置区域10为末节区域,Hello中OSPF的数据包头的Option “E”位将被置0激活opt 0x0,邻接状态建立成功表明双方的option “E”位同步激活,确认区域10被设置为末节区域。另外,查看R1上OSPF的概括信息能更清晰的发现区域10被设置成为末节区域(Stub Area),同时存在两台区域边界路由器。

注意:overview为JUNOS 8.5版本参数。

nigel@junos# run show ospf neighbor logical-router r1
Address    Interface   State    ID          Pri  Dead
10.0.4.6    fxp1.12    Full    10.0.6.2    128    38
10.0.4.13   fxp1.13    Full    10.0.3.3    128    38

nigel@junos# run show ospf overview logical-router r1
Instance: master
  Router ID: 10.0.6.1
  Route table index: 10
  Full SPF runs: 27, SPF delay: 0.200000 sec,
  SPF holddown: 5 sec, SPF rapid runs: 3
  LSA refresh time: 50 minutes
  Area: 0.0.0.10
    Stub type: Stub
    Authentication Type: None
    Area border routers: 2, AS boundary routers: 0
    Neighbors
      Up (in full state): 2

随后我们清空一遍R1的OSPF数据库,确定R7通告过来的200.200/24域外路由LSA-5已经从R1的LSDB当中消失。同时查看R1路由表,确认收到用于连接域外网段的默认路由0.0.0.0,同时不存在200.200/16或更长前缀的路由。

nigel@junos# run clear ospf database logical-router r1

nigel@junos# run show ospf database logical-router r1
external | count
Count: 0 lines

nigel@junos# run show route protocol ospf logical-router
r1 | match 0.0.0.0
0.0.0.0/0          *[OSPF/10] 00:39:21, metric 11

nigel@junos# run show route protocol ospf logical-router
r1 200.200/16 | count
Count: 0 lines

虽然R1的路由表上已经没有域外路由200.200/24,由于从ABR上面接收到默认路由,因此R1依然能够通过traceroute测试R1到200.200/24网段的连通性。

nigel@junos# run traceroute 200.200.0.1 logical-router r1
traceroute to 200.200.0.1 (200.200.0.1), 30 hops max,
40 byte packets
 1  10.0.4.13 (10.0.4.13)  0.493 ms  0.882 ms  0.337 ms
 2  10.0.2.1 (10.0.2.1)  0.543 ms  0.439 ms  0.530 ms
 3  10.0.8.10 (10.0.8.10)  0.608 ms  0.741 ms  0.569 ms
 4  10.0.8.10 (10.0.8.10)  0.617 ms !H  0.662 ms !H
0.621 ms !H

最后,我们查看R1的OSPF数据库,保证域间路由LSA-3仍然存在于LSDB的区域10当中。

nigel@junos# run show ospf database logical-router r1
netsummary 

    OSPF link state database, Area 0.0.0.10
 Type      ID       Adv Rtr   Seq    Age  Opt  Cksum Len
Summary 0.0.0.0  10.0.3.3 0x80000004 731 0x20 0x849d 28
Summary 0.0.0.0  10.0.3.4 0x80000004 610 0x20 0x7ea2 28
Summary 10.0.2.0 10.0.3.3 0x80000005 429 0x20 0x7da3 28
…

JUNOS Aggregate routes pk. Generate routes

ITAA Juniper实验手册的《JUNOS Generate Route反传统接入设计》一文中,我花了很长的篇幅对比了Aggregate RoutesGenerate Routes,这两种JUNOS静态路由形式之间的异同。恰好看到jakee也在谈论这个问题,于是我将该设计方案的前面一段先发出来。

JUNOS当中,与配置Aggregate Routes非常相似的另外一种形式的静态路由是配置Generate Routes,Generate Routes通常被用作结合Aggregate Routes的汇总与静态路由的IP转发功能为一体而使用。Generate Routes与Aggregate Routes共享许多相同的特性,如汇总路由,本地路由表必须存在明细路由,以及大部分的附加路由属性。

实际上,JUNOS路由表将它们两者当作同属Aggregate协议的路由来对待,并且两者在Juniper JUNOS路由表当中的Preference均为130.

而两者最大的区别在于对待下一跳问题的处理上面:

Aggregate Routes路由的目的,仅仅为了将已经存在于本地路由表的路由手工汇总成一条单一路由表示,而并非为了在本地路由器上充当到达汇总路由网段的数据转发。所有到达汇总路由网段的数据流应当依赖本地的明细路由根据最长匹配原则转发,因此Aggregate Routes路由的下一跳为reject,或者是可选的discard

Generate Routes路由的角度上而言,其目的除了对路由进行汇总以外,同时也作为到达汇总目标网段的最后求助网关,因此Generate Routes路由存在一个确实的下一跳IP地址。该地址为Generate Routes的Contributing Routes当中数字最小的路由下一跳(对于单一路由协议而言),同时该Contributing Routes被认为是Primary Contributing Routes。

此外,对于Generate Routes,成为其Contributing Routes还有一个限制,所有下一跳为discard或者reject的路由均不能成为合法的Contributing Routes。

JUNOS Contributing Routes

Active IP routes in the routing table that share the same most-significant bits and are more specific than an aggregate or generate route.

JUNOS Primary Contributing Route

Contributing route with the numerically smallest prefix and smallest JUNOS software preference value. This route is the default next hop used for a generated route.