Juniper – Cisco互操作: 配置GRE Tunnel

gre-tunnel-between-junos-and-ios
记得我是在2001年第一次接触到GRE Tunnel的概念,当时在Andrew Bruce Caslow的《CISCO Certification: Bridges, Routers & Switches for CCIEs》一书中的ships in the night章节之后提及GRE Tunnel的概念,该书与另外一本由Kennedy Clark, Kevin Hamilton写的《Cisco LAN Switching》是在《Routing TCP/IP, Volume 1》之前,大概是2000年左右CCIE实验室考试的经典书籍。估计现在大多数CCIE们都没有听说过这些书了,借机会怀念一下。

在预配置中,r1, r2, r4已经被配置为OSPF区域0.0.0.0以内的路由器,这里仅列出GRE Tunnel的相关配置。在Juniper与Cisco设备之间建立GRE Tunnel,为我们在日后进一步实现其它技术以及铺设更高级的业务打下坚实的基础,日后我们可能需要不断的回顾这篇文档。为了更直观,我们分别使用r1与r3之间的物理接口fxp1.12与fa0/0.24作为GRE Tunnel的源与目的地址,而它们之间的Tunnel链路则被分配在14.0.0.0/30网段内。

JUNOS GRE Tunnel配置

[edit logical-routers r1]
nigel@itaa7.2# show interfaces gre.0
tunnel {
    source 10.0.4.5;
    destination 10.0.4.9;
}
family inet {
    address 14.0.0.1/30;
}

IOS GRE Tunnel配置

r4#show running-config interface tunnel 0
Building configuration...

Current configuration : 115 bytes
!
interface Tunnel0
 ip address 14.0.0.2 255.255.255.252
 tunnel source 10.0.4.9
 tunnel destination 10.0.4.5
end

配置并不复杂,通过traceroute确认到达GRE Tunnel的对端IP地址仅经过一跳,即可以很容易确定GRE Tunnel已经被建立起来。

nigel@itaa7.2# run traceroute 14.0.0.2 logical-router r1
traceroute to 14.0.0.2 (14.0.0.2), 30 hops max,
40 byte packets
1  14.0.0.2 (14.0.0.2)  15.683 ms *  10.029 ms

r4#traceroute 14.0.0.1

Type escape sequence to abort.
Tracing the route to 14.0.0.1

1 14.0.0.1 32 msec 8 msec 16 msec

GRE Tunnel Keepalives

需要注意的是,GRE Tunnel一直以来所面对的局限性在于GRE Tunnel并不存在一种切实的keepalives机制,使得建立GRE Tunnel的两端设备能够分别去检测对端设备是否依然可用。因此,你有可能发现即便对端设备已经不可达,然而本地的GRE Tunnel接口依然停留在up的状态底下,更极端的情况往往出现在一旦你在其中一段配置起GRE Tunnel,接口马上就进入up的状态。传统上,确定GRE Tunnel被关闭的因素只有以下三个。

  1. 本地路由器并没有到达GRE Tunnel目的IP的路由。
  2. 本地路由器上用于做GRE Tunnel源IP地址的接口失效。
  3. 到达GRE Tunnel目的IP的路由通过GRE Tunnel本身到达。

因此,潜在的威胁在于GRE Tunnel接口有可能成为本地网络的黑洞。由于GRE Tunnel接口并不会因为对端节点失效而变成down的状态,尤其当我们在GRE Tunnel接口上铺设静态路由或者策略路由的时候,路由器依然尝试将数据包通过GRE Tunnel接口发送至目标网段。为了避免上述情况,Cisco IOS在12.2(8)T版本以后开始支持基于GRE Tunnel接口的keepalives机制以通过周期性监测确认对端的节点的可用性。从而使得当对端节点失效后,本地路由器通过将GRE Tunnel接口设置为down的状态,诸如静态路由,策略路由之类的流量将能够通过可能的其它可选路径进行发送。我们将Cisco IOS设备r4上的GRE Tunnel接口的keepalives机制设置为与默认值相同的10秒,尝试次数为1次。

r4(config)#interface tunnel 0
r4(config-if)#keepalive 10 ?
<1-255>  Keepalive retries
<cr>

r4(config-if)#keepalive 10 1

将Juniper JUNOS设备r1的gre.0接口关闭,在commit完成10秒后,可以发现IOS终端显示出GRE Tunnel状态变成down的信息。

[edit logical-routers r1]
nigel@itaa7.2# deactivate interfaces gre.0 

[edit logical-routers r1]
nigel@itaa7.2# commit
commit complete

r4#
*Mar  1 08:10:55.721: %LINEPROTO-5-UPDOWN: Line protocol
on Interface Tunnel0, changed state to down

而当我们重新启用gre.0接口,GRE Tunnel被重新建立起来。

[edit logical-routers r1]
nigel@itaa7.2# activate interfaces gre.0 

[edit logical-routers r1]
nigel@itaa7.2# commit
commit complete

r4#
*Mar  1 08:13:15.721: %LINEPROTO-5-UPDOWN: Line protocol
on Interface Tunnel0, changed state to up

最后,我们可以在JUNOS上看到GRE Tunnel的IP-Header封装,如果你需要了解关于GRE Tunnel的IP-Header封装及转发流程方面的信息,Stretch的Visualizing tunnels这篇文章会对你有所帮助。

nigel@itaa7.2# run show interfaces gre.0
  Logical interface gre.0 (Index 99) (SNMP ifIndex 42)
    Flags: Point-To-Point SNMP-Traps 16384
    IP-Header 10.0.4.9:10.0.4.5:47:df:64:0000000007000700
    Encapsulation: GRE-NULL
  Input packets : 66
  Output packets: 49
    Protocol inet, MTU: 1472
      Flags: None
      Addresses, Flags: Is-Preferred Is-Primary
        Destination: 14.0.0.0/30, Local: 14.0.0.1,
        Broadcast: 14.0.0.3

而我们也可以在IOS上验证我们对GRE Tunnel接口设置的keepalives信息。

r4#show interfaces tunnel 0
Tunnel0 is up, line protocol is up
  Hardware is Tunnel
  Internet address is 14.0.0.2/30
  MTU 1514 bytes, BW 9 Kbit, DLY 500000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation TUNNEL, loopback not set
  Keepalive set (10 sec), retries 1
  Tunnel source 10.0.4.9, destination 10.0.4.5
......
<!--output omitted-->
Advertisements

3 thoughts on “Juniper – Cisco互操作: 配置GRE Tunnel

  1. JUNOS 101实验台配置及Juniper/Cisco互操作测试 « 互联自由之路

  2. 2010 in review and 2011 kickoff~ « JUNIPER JUNOS & CISCO IOS 互联路由

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s