Technical Documentation

Example: Connecting IPv6 Islands over an MPLS Tunnel Configuration

Figure 1: IPv6 over an MPLS Tunnel

Image g017153.gif

Figure 1 shows a standard CE-PE-P-PE-CE MPLS-style network. CE1 and CE2 are the end customer CE routers using IPv6; PE1 and PE2 are the provider edge routers; and P is a provider core router. The IPv4 MPLS tunnel travels between PE1 and PE2, connecting IPv6 sites CE1 and CE2.

Since the CE-to-PE configuration can use a variety of routing protocols, this example requires that you use EBGP between CE1 and PE1 and RIPng between PE2 and CE2. You must establish policies on PE2 to import and export routes between BGP and RIPng.

To start the configuration, set up the IPv6 connection between CE1 and PE1. In your BGP routing policy, you must advertise the IPv6 loopback address of the CE1 router address to the PE1 router.

Router CE1

[edit]interfaces {ge-7/1/0 {unit 0 {family inet6 {address 8001::1/126;}}}lo0 {unit 0 {family inet6 {address 9001::1/128;}}}}routing-options {autonomous-system 200;}protocols {bgp {group to_PE1 {type external;local-address 8001::1;family inet6 {unicast;}export policy1;peer-as 100;neighbor 8001::2;}}policy-options {policy-statement policy1 {term 1 {from {family inet6;route-filter 9001::1/128 exact;}then accept;}term 2 {then reject;}}}}

Once you move to PE1, your tasks become more complex. You must complete the IPv6 EBGP connection to CE1 and build the first part of the MPLS tunnel. You must set the inet, inet6, and mpls families on the core-facing interface, configure an inet6 address for the CE-facing interface attached to CE1, and ensure the IPv4 loopback address is advertised in OSPF, since this is the MPLS LSP target for PE2. You must also add the ipv6-tunneling parameter in MPLS, include the labeled-unicast and explicit-null options at the [edit protocols bgp family inet6] hierarchy level, and create an external BGP group pointing to CE1 and an internal group pointing to PE2.

Router PE1

[edit]interfaces {ge-6/1/0 {unit 0 {family inet6 {address 8001::2/126;}}}so-6/2/0 {unit 0 {family inet {address 10.255.2.1/24;}family inet6;family mpls;}}lo0 {unit 0 {family inet {address 10.255.255.16/32;}}}}routing-options {autonomous-system 100;}protocols {rsvp {interface so-6/2/0.0;}mpls {ipv6-tunneling;label-switched-path to_PE2 {to 10.255.255.15;}interface so-6/2/0.0;}bgp {group to_PE2 {type internal;local-address 10.255.255.16;family inet6 {labeled-unicast {explicit-null;}}neighbor 10.255.255.15;}group to_CE1 {local-address 8001::2;family inet6 {unicast;}peer-as 200;neighbor 8001::1;}}ospf {traffic-engineering;area 0.0.0.0 {interface so-6/2/0.0;interface lo0.0 {passive;}}}}

On Router P, connect the MPLS tunnel between PE1 and PE2. Enable RSVP, MPLS, and IPv4 connectivity on the interfaces and ensure that IP connectivity is available through the routing protocol (in this case, OSPF).

Router P

[edit]interfaces {so-1/1/0 {unit 0 {family inet {address 10.255.2.2/24;}family mpls;}}so-4/0/0 {unit 0 {family inet {address 10.255.3.1/24;}family mpls;}}lo0 {unit 0 {family inet {address 10.255.255.220/32;}}}}routing-options {autonomous-system 100;}protocols {rsvp {interface so-1/1/0.0;interface so-4/0/0.0;}mpls {interface so-1/1/0.0;interface so-4/0/0.0;}ospf {traffic-engineering;area 0.0.0.0 {interface so-1/1/0.0;interface so-4/0/0.0;interface lo0.0 {passive;}}}}

At PE2, you must complete a mirror image of the MPLS tunnel configuration started at PE1 and configure a RIPng connection to CE2. Set the inet, inet6, and mpls families on the core-facing interface, configure an inet6 address for the CE facing interface attached to CE2, and ensure the IPv4 loopback address is advertised in OSPF, since this is the MPLS LSP target for PE1. You must also add the ipv6-tunneling parameter in MPLS and include the labeled-unicast and explicit-null options at the [edit protocols bgp family inet6] hierarchy level. Finally, create and apply policies that export BGP routes into RIPng and import RIPng routes to BGP.

Router PE2

[edit]interfaces {so-0/0/0 {unit 0 {family inet {address 10.255.3.2/24;}family inet6;family mpls;}}so-4/0/1 {unit 0 {family inet6 {address 8002::1/126;}}}lo0 {unit 0 {family inet {address 10.255.255.15/32;}}}}routing-options {autonomous-system 100;}protocols {rsvp {interface so-0/0/0.0;}mpls {ipv6-tunneling;label-switched-path to_PE1 {to 10.255.255.16;}interface so-0/0/0.0;}bgp {group to_PE1 {type internal;local-address 10.255.255.15;family inet6 {labeled-unicast {explicit-null;}}export red-export;neighbor 10.255.255.16;}}ospf {traffic-engineering;area 0.0.0.0 {interface so-0/0/0.0;interface lo0.0 {passive;}}}ripng {group to_CE2 {export red-import;neighbor so-4/0/1.0;}}}policy-options {policy-statement red-export {term 1 {from protocol ripng;then accept;}term 2 {then reject;}}policy-statement red-import {from protocol bgp;then accept;}}

Finally, on Router  CE2, configure IPv6 addresses on the SONET/SDH and loopback interfaces, enable RIPng, and create and apply a policy for RIPng that permits the IPv6 loopback address to be exported to Router PE2. Once these tasks are accomplished, your IPv6 connection to Router CE1 should be ready for use.

Router CE2

[edit]interfaces {so-1/1/0 {unit 0 {family inet6 {address 8002::2/126;}}}lo0 {unit 0 {family inet6 {address 9001::5/128;}}}}routing-options {autonomous-system 300;}protocols {ripng {group to_PE2 {export policy1;neighbor so-1/1/0.0;}}}policy-options {policy-statement policy1 {term 1 {from {family inet6;route-filter 9001::5/128 exact;}then accept;}term 2 {then reject;}}}

Verifying Your Work

To verify that IPv6 traffic is being transported over the IPv4 MPLS tunnel, use the following commands:

  • ping
  • show bgp summary
  • show route protocol
  • show route advertising-protocol
  • show route receive-protocol
  • show route table
  • show route table (inet6.0 | inet6.3)
  • show interfaces terse

The following sections show the output of these commands used with the configuration example:

Router CE1 Status


user@CE1> show bgp summary
Groups: 1 Peers: 1 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
inet6.0                1          1          0          0          0          0
Peer               AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Damped...
8001::2            100         58         56       0       0       26:25 Establ
  inet6.0: 1/1/0

user@CE1>  show route protocol bgp
inet.0: 13 destinations, 13 routes (12 active, 0 holddown, 1 hidden)
iso.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
inet6.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
9001::5/128         *[BGP/170] 00:04:18, localpref 100
                      AS path: 100 I
                    >  to 8001::2 via ge-7/1/0.0

user@CE1>  ping 9001::5 source 9001::1
PING6(56=40+8+8 bytes) 9001::1 --> 9001::5
16 bytes from 9001::5, icmp_seq=0 hlim=62 time=0.945 ms
16 bytes from 9001::5, icmp_seq=1 hlim=62 time=0.831 ms
^C
--- 9001::5 ping6 statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.831/0.887/0.945 ms

Router PE1 Status


user@PE1> show bgp summary
Groups: 2 Peers: 2 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
inet6.0                2          2          0          0          0          0
Peer               AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn
State|#Active/Received/Damped...
8001::1            200         56         61       0       0       27:18 Establ
  inet6.0: 1/1/0
10.255.255.15       100         13         14       0       1        5:28 Establ
  inet6.0: 1/1/0

user@PE1>  show route advertising-protocol bgp 10.255.255.15 detail
inet6.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
9001::1/128 (1 entry, 1 announced)
 BGP group to_PE2 type Internal
     Route Label: 2
     Nexthop: Self
     Localpref: 100
     AS path: 200 I
     Communities:

user@PE1>  show route 9001::5
inet6.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
9001::5/128        *[BGP/170] 00:05:48, MED 2, localpref 100, from 10.255.255.15
                      AS path: I
                    > via so-6/2/0.0, label-switched-path to_PE2

user@PE1> show route table inet6.0
inet6.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
8001::/126         *[Direct/0] 00:29:01
                    > via ge-6/1/0.0
8001::2/128        *[Local/0] 00:29:01
                      Local via ge-6/1/0.0
9001::1/128        *[BGP/170] 00:28:46, localpref 100
                      AS path: 200 I
                    > to 8001::1 via ge-6/1/0.0
9001::2/128        *[Direct/0] 00:29:01
                    > via lo0.0
9001::5/128        *[BGP/170] 00:06:56, MED 2, localpref 100, from 10.255.255.15
                      AS path: I
                    > via so-6/2/0.0, label-switched-path to_PE2
fe80::/64          *[Direct/0] 00:29:01
                    > via ge-6/1/0.0
fe80::280:42ff:fe10:d30c/128
                   *[Direct/0] 00:29:01
                    > via lo0.0
fe80::290:69ff:fe0f:1633/128
                   *[Local/0] 00:29:01
                      Local via ge-6/1/0.0

user@PE1>  show route table inet6.3
inet6.3: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
::ffff:10.255.255.15/128 *[RSVP/7] 00:06:37, metric 2, metric2 0
                    > via so-6/2/0.0, label-switched-path to_PE2

Router PE2 Status


user@PE2> show bgp summary
Groups: 1 Peers: 1 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
inet6.0                1          1          0          0          0          0
Peer               AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Damped...
10.255.255.16      100         18         20       0       0        8:06 Establ
  inet6.0: 1/1/0

user@PE2> show interfaces terse so-4/0/1
Interface       Admin Link Proto Local                 Remote
so-4/0/1        up    up
so-4/0/1.0      up    up   inet  100.1.4.1/24
                           inet6 8002::1/126
                                 fe80::280:42ff:fe10:d312/64

user@PE2>  show route receive-protocol bgp 10.255.255.16 detail

inet.0: 18 destinations, 19 routes (17 active, 0 holddown, 1 hidden)

inet.3: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)

iso.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)

mpls.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)

inet6.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
9001::1/128 (1 entry, 1 announced)
     Route Label: 2
     Nexthop: ::ffff:10.255.255.16
     Localpref: 100
     AS path: 200 I

inet6.3: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
user@PE2> show route advertising-protocol ripng fe80::280:42ff:fe10:d312 detail
inet6.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)
9001::1/128 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
                Source: 10.255.255.16
                Next hop: via so-0/0/0.0, weight 1, selected
                Label-switched-path to_PE1
                Label operation: Push 2, Push 100015(top)
                Protocol next hop: ::ffff:10.255.255.16
                Push 2
                 Indirect next hop: 8451440 50
                State: <Active Int Ext>
                Local AS:   100 Peer AS:   100
                Age: 2:27       Metric2: 2 
                Task: BGP_100.10.255.255.16+179
                Announcement bits (3): 0-KRT 1-RIPng 3-Resolve inet6.0 
                AS path: 200 I
                Route Label: 2

Router CE2 Status


user@CE2> show ripng neighbor
                    Source                           Dest               In
Neighbor     State  Address                          Address  Send Recv Met
--------     -----  -------                          -------  ---- ---- ---
so-1/1/0.0      Up  fe80::2a0:a5ff:fe12:34d9         ff02::9  yes yes    1

user@CE2> show route protocol ripng

inet.0: 12 destinations, 12 routes (11 active, 0 holddown, 1 hidden)

iso.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)

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

9001::1/128        *[RIPng/100] 00:04:10, metric 2, tag 0
                    > to fe80::280:42ff:fe10:d312 via so-1/1/0.0
ff02::9/128        *[RIPng/100] 02:42:33, metric 1
                      MultiRecv

Published: 2010-04-15