At this post I will try and explain IPv6 over IPv4 island connectivity. You can download the complete configuration at the end of this post.
There are some choices that can be used to connecting IPv6 customer over IPv4 network. Tunnel is one of available choice. Both IPIP tunnel and MPLS tunnel can be used here. Both LDP LSP or RSVP LSP able to deliver IPv6 6PR. However in this post I will use MPLS RSVP tunnel. ISP can use both 6PE or vpnv6.
6PE will be used here.
I use logical router to simulate network in this test.
CE1 and CE2 is IPv6 customer. They connected to ISP which use MPLS in the backbone.
Ce1 connected to PE1 and CE2 connected to PE2. Pe1 and PE2 uses 6PE BGP session.
Two PEs have MP-BGP session to exchange IPv6 routes with AFI IPv6 “value 2″.
Diagram
<--ipv6 (AS1000)-> <---------ipv4 AS(3000)-------> <--ipv6 (AS2000)->
+-----+ +-----+ +-----+ +-----+ +-----+
| ce1 |--------| pe1 |---------| p |---------| pe2 |-------| ce2 |
+-----+ +-----+ +-----+ +-----+ +-----+
10::1/126 192.168.0.0/30 192.168.0.4/30 11::0/126
Loopback address:
ce1: 98::1/128
ce2: 99::1/128
pe1: 1.1.1.1/32
pe2: 2.2.2.2/32
p: 10.10.10.10/32
ce1 advertised 98::1/128 to pe1.
ce2 advertised 99::1/128 to pe2.
Objective:
The objective of this test is connecting CE1 and CE2 IPV6.
Config Clue
1. IPv6 BGP router ID
As mentioned in the RFC 2544, in the IPv6 network (only IPv6), BGP router id need to be specified 32 bit. OPEN message need to be add on both CEs router.
Quote from RFC 2544:
"Note that the information referred above is distinct from the BGP
Identifier used in the BGP-4 tie breaking procedure. The BGP
Identifier is a 32 bit unsigned integer exchanged between two peers
at session establishment time, within an OPEN message. This is a
system wide value determined at startup which must be unique in the
network and should be derived from an IPv4 address regardless of the
network protocol(s) a particular BGP-4 instance is configured to
convey at a given moment."
If you are not configure router ID on CE router, OPEN message will fail. BGP session cannot established. Debug will show why IPv6 BGP session failed when CE router have no router id.
Mar 1 08:57:35 prime pe2: rpd[3251]: bgp_get_open: NOTIFICATION sent to 11::2+4597 (proto):
code 2 (Open Message Error) subcode 3 (bad BGP ID), Reason: peer 11::2+4597 (proto):
invalid BGP identifier 0x0
(CE sent OPEN message with 0.0.0.0 as an ID).
2. Explicit null must be configured on labeled unicast family inet6. By default Junos always advertised ipv6 route with label value 2. This label value 2 use as inner label while LSP label use as a outer label.
Example:
enugadi@prime# run show route 99::1/128 logical-router pe1 detail
inet6.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden)
99::1/128 (1 entry, 1 announced)
*BGP Preference: 170/-101
Next hop type: Indirect
Next-hop reference count: 3
Source: 2.2.2.2
Next hop type: Router, Next hop index: 591
Next hop: 192.168.0.2 via fe-1/3/0.1 weight 0x1, selected
Label-switched-path pe1-to-pe2
Label operation: Push 2, Push 100016(top)
Protocol next hop: ::ffff:2.2.2.2
Push 2
Indirect next hop: 89d9000 131070
State: <Active Int Ext>
Local AS: 3000 Peer AS: 3000
Age: 33 Metric2: 2
Task: BGP_3000.2.2.2.2+2027
Announcement bits (3): 0-KRT 1-BGP RT Background 2-Resolve tree 1
AS path: 2000 I
Route Label: 2
Localpref: 100
Router ID: 2.2.2.2
3. PE interface core facing interface MUST be configured with family inet6. This is used for IPv6 received packet verification.
4. You have to configured ipv6-tunneling on protocol MPLS stanza. This rule is applied both LDP or RSVP signaling.
Configuration
Ipv6 Configuration on PE1
enugadi@prime# show logical-routers pe1 interfaces
fe-1/3/0 {
unit 1 {
vlan-id 1;
family inet {
address 192.168.0.1/30;
}
family inet6;
family mpls;
}
}
fe-1/3/1 {
unit 3 {
description "PE1 to CE1 IPV6 Customer";
vlan-id 3;
family inet6 {
address 10::2/126;
}
}
}
lo0 {
unit 1 {
family inet {
address 1.1.1.1/32;
}
}
}
enugadi@prime# show logical-routers pe1 protocols bgp
group ibgp {
type internal;
local-address 1.1.1.1;
family inet6 {
labeled-unicast {
explicit-null;
}
}
neighbor 2.2.2.2;
}
group ipv6 {
family inet6 {
unicast;
}
neighbor 10::1 {
peer-as 1000;
}
}
enugadi@prime# show logical-routers pe1 protocols mpls
ipv6-tunneling;
label-switched-path pe1-to-pe2 {
to 2.2.2.2;
}
interface fe-1/3/0.1;
Configuration on PE2
enugadi@prime# show logical-routers pe2 interfaces
fe-1/3/0 {
unit 4 {
vlan-id 4;
family inet6 {
address 11::1/126;
}
}
}
fe-1/3/1 {
unit 2 {
vlan-id 2;
family inet {
address 192.168.0.6/30;
}
family inet6;
family mpls;
}
}
lo0 {
unit 2 {
family inet {
address 2.2.2.2/32;
}
}
}
[edit]
enugadi@prime# show logical-routers pe2 protocols mpls
ipv6-tunneling;
label-switched-path pe2-to-pe1 {
to 1.1.1.1;
}
interface fe-1/3/1.2;
[edit]
enugadi@prime# show logical-routers pe2 protocols bgp
group ipv6 {
traceoptions {
file debug-ipv6;
flag all detail;
}
neighbor 11::2 {
peer-as 2000;
}
}
group ibgp {
type internal;
local-address 2.2.2.2;
family inet6 {
labeled-unicast {
explicit-null;
}
}
neighbor 1.1.1.1;
}
Network Verification
enugadi@prime# run show ospf neighbor logical-router p
Address Interface State ID Pri Dead
192.168.0.6 fe-1/3/0.2 Full 2.2.2.2 128 33
192.168.0.1 fe-1/3/1.1 Full 1.1.1.1 128 33
[edit]
enugadi@prime# run show ospf neighbor logical-router pe1
Address Interface State ID Pri Dead
192.168.0.2 fe-1/3/0.1 Full 10.10.10.10 128 34
[edit]
enugadi@prime# run show ospf neighbor logical-router pe2
Address Interface State ID Pri Dead
192.168.0.5 fe-1/3/1.2 Full 10.10.10.10 128 38
enugadi@prime# run show mpls lsp logical-router pe2
Ingress LSP: 1 sessions
To From State Rt ActivePath P LSPname
1.1.1.1 2.2.2.2 Up 0 * pe2-to-pe1
Total 1 displayed, Up 1, Down 0
Egress LSP: 1 sessions
To From State Rt Style Labelin Labelout LSPname
2.2.2.2 1.1.1.1 Up 0 1 FF 3 - pe1-to-pe2
Total 1 displayed, Up 1, Down 0
Transit LSP: 0 sessions
Total 0 displayed, Up 0, Down 0
enugadi@prime# run show bgp summary logical-router pe1
Groups: 2 Peers: 2 Down peers: 0
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet.0 0 0 0 0 0 0
inet6.0 2 2 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Damped...
10::1 1000 73 73 0 0 31:50 Establ
inet6.0: 1/1/0
2.2.2.2 3000 55 57 0 0 24:27 Establ
inet6.0: 1/1/0
[edit]
enugadi@prime# run show bgp summary logical-router pe2
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
inet.0 0 0 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Damped...
11::2 2000 84 137 0 1 32:19 Establ
inet6.0: 1/1/0
1.1.1.1 3000 55 57 0 0 24:28 Establ
inet6.0: 1/1/0
enugadi@prime# run show route logical-router ce1
inet6.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
10::/126 *[Direct/0] 01:16:21
> via fe-1/3/0.3
10::1/128 *[Local/0] 01:16:21
Local via fe-1/3/0.3
98::1/128 *[Direct/0] 01:16:21
> via lo0.50
99::1/128 *[BGP/170] 00:24:49, localpref 100
AS path: 3000 2000 I
> to 10::2 via fe-1/3/0.3
fe80::/64 *[Direct/0] 01:16:21
> via fe-1/3/0.3
fe80::206:2900:3af:b362/128
*[Local/0] 01:16:21
Local via fe-1/3/0.3
fe80::208:c7ff:fe79:1d02/128
*[Direct/0] 01:16:21
> via lo0.50
enugadi@prime# run show route logical-router ce2
inet6.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
11::/126 *[Direct/0] 01:16:22
> via fe-1/3/1.4
11::2/128 *[Local/0] 01:16:22
Local via fe-1/3/1.4
98::1/128 *[BGP/170] 00:06:14, localpref 100
AS path: 3000 1000 I
> to 11::1 via fe-1/3/1.4
99::1/128 *[Direct/0] 01:16:22
> via lo0.51
fe80::/64 *[Direct/0] 01:16:22
> via fe-1/3/1.4
fe80::200:200:400:4/128
*[Local/0] 01:16:22
Local via fe-1/3/1.4
fe80::208:c7ff:fe79:1d02/128
*[Direct/0] 01:16:22
> via lo0.51
IPv6 Verification
enugadi@prime# run ping inet6 98::1 logical-router ce2 source 99::1 rapid count 100
PING6(56=40+8+8 bytes) 99::1 --> 98::1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--- 98::1 ping6 statistics ---
100 packets transmitted, 100 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.419/0.428/0.497/0.010 ms
enugadi@prime# run ping inet6 99::1 logical-router ce1 source 98::1 rapid count 100
PING6(56=40+8+8 bytes) 98::1 --> 99::1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--- 99::1 ping6 statistics ---
100 packets transmitted, 100 packets received, 0% packet loss
round-trip min/avg/max/std-dev = 0.408/0.427/0.503/0.009 ms
You can download logical router configuration here.
Please drop me an email or comment if you have a questions.