Q-in-Q

Task

In this lab, we will configure and verify Q-in-Q operation.

QinQ Routed

Step 1: MX5 configured with Access ports, and SW1 & SW2 port are standard access to verify physical connectivity.

MX5

interfaces {
    ge-1/0/2 {
        unit 0 {
            family inet {
                address 10.1.1.1/24;
            }
        }
    }
    ge-1/1/2 {
        unit 0 {
            family inet {
                address 10.1.1.2/24;
            }
        }
    }
}

protocols {
    lldp {
        interface all;
    }
}
routing-instances {
    R2 {
        instance-type virtual-router;
        interface ge-1/1/2.0;
        routing-options {
            router-id 10.1.1.2;
        }
    }
}

SW1

interfaces {
    ge-0/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode trunk;        
                vlan {
                    members all;
                }
            }
        }
    }

    ge-0/0/2 {
        unit 0 {
            family ethernet-switching;
        }
    }
}

vlans {
    QinQ_Vlan {
        description "Test Q-in-Q VLAN";
        vlan-id 111;
        interface {
            ge-0/0/2.0;
        }
    }
}

SW2

interfaces {
    ge-1/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode trunk;
                vlan {
                    members all;
                }
            }
        }
    }
    ge-1/0/2 {
        description "TEST to MX5";
        unit 0 {
            family ethernet-switching;
        }
    }
}

vlans {
    QinQ_Vlan {
        description "Test Q-in-Q VLAN";
        vlan-id 111;
        interface {
            ge-1/0/2.0;
        }
    }
}

Verification:

admin@MX5> ping 10.1.1.2    
PING 10.1.1.2 (10.1.1.2): 56 data bytes
64 bytes from 10.1.1.2: icmp_seq=0 ttl=64 time=0.582 ms
64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.530 ms
^C

Step 2: Convert the MX5 interfaces to the Dot1Q

R1 R2 connectivity will break, as the current switch configuration does not support Dot1Q config.

MX5

interfaces {
    ge-1/0/2 {
        vlan-tagging;
        unit 0 {
            vlan-id 100;
            family inet {
                address 10.1.1.1/24;
            }
        }
    }
    ge-1/1/2 {
        vlan-tagging;
        unit 0 {
            vlan-id 100;
            family inet {
                address 10.1.1.2/24;
            }
        }
    }
}

The pings fail as expected, because EX switches do not expected VLAN tagging on Access Ports.

admin@MX5> ping 10.1.1.2 count 5 rapid       
PING 10.1.1.2 (10.1.1.2): 56 data bytes
.....
--- 10.1.1.2 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss

Step 3: Convert the EX interfaces into a Q-in-Q

{master:0}[edit vlans QinQ_Vlan]
admin@SW1# set dot1q-tunneling customer-vlans 1-4094 

{master:0}[edit vlans QinQ_Vlan]
admin@SW1# show 
description "Test Q-in-Q VLAN";
vlan-id 111;
interface {
    ge-0/0/2.0;
}
dot1q-tunneling {
    customer-vlans 1-4094;
}

{master:0}[edit vlans QinQ_Vlan]
admin@SW1# commit 
error: Trunk interface <ge-0/0/0.0> can not be memeber of both dot1q-tunneling enabled vlan <QinQ_Vlan>, and a non dot1q-tunneled vlan <TEST_VLAN> when dot1q-tunneling ethernet-type is not 
error: configuration check-out failed

admin@SW1# top        

{master:0}[edit]
admin@SW1# edit ethernet-switching-options 

{master:0}[edit ethernet-switching-options]
admin@SW1# set dot1q-tunneling ether-type 0x
                                                      ^
'0x' is ambiguous.
Possible completions:
  0x8100               Dot1q ether-type value 0x8100
  0x88a8               Dot1q ether-type value 0x88a8
  0x9100               Dot1q ether-type value 0x9100
{master:0}[edit ethernet-switching-options]
admin@SW1# set dot1q-tunneling ether-type 0x8100 

{master:0}[edit ethernet-switching-options]
admin@SW1# commit

Below is full Q-in-Q switch config:

SW1

ethernet-switching-options {
    dot1q-tunneling {
        ether-type 0x8100;
    } 
}
vlans {
    QinQ_Vlan {
        description "Test Q-in-Q VLAN";
        vlan-id 111;
        interface {
            ge-0/0/2.0;
        }
        dot1q-tunneling {
            customer-vlans 1-4094;
        }
    }
}

interfaces {
    ge-0/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode trunk;        
                vlan {
                    members all;
                }
            }
        }
    }

    ge-0/0/2 {
        unit 0 {
            family ethernet-switching;
        }
    }
}

SW2


ethernet-switching-options {
    dot1q-tunneling {
        ether-type 0x8100;              
    }
}

vlans {
    QinQ_Vlan {
        description "Test Q-in-Q VLAN";
        vlan-id 111;
        interface {
            ge-1/0/2.0;
        }
        dot1q-tunneling {
            customer-vlans 1-4094;
        }
    }
}

interfaces {
    ge-1/0/0 {
        unit 0 {
            family ethernet-switching {
                port-mode trunk;        
                vlan {
                    members all;
                }
            }
        }
    }

    ge-1/0/2 {
        unit 0 {
            family ethernet-switching;
        }
    }
}

Verification:

admin@MX5> ping 10.1.1.2 count 5 rapid    
PING 10.1.1.2 (10.1.1.2): 56 data bytes
!!!!!
--- 10.1.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.418/0.689/1.621/0.469 ms

admin@SW1> show configuration vlans 
QinQ_Vlan {
    description "Test Q-in-Q VLAN";
    vlan-id 111;
    interface {
        ge-0/0/2.0;
    }
    dot1q-tunneling {
        customer-vlans 1-4094;
    }
}

admin@SW1> show vlans QinQ_Vlan extensive 
VLAN: QinQ_Vlan, Created at: Tue Sep 11 09:20:46 2012
802.1Q Tag: 111, Internal index: 5, Admin State: Enabled, Origin: Static
Description: Test Q-in-Q VLAN
Dot1q Tunneling status: Enabled
Customer VLAN ranges:
      1-4094
Protocol: Port Mode, Mac aging time: 300 seconds
Number of interfaces: Tagged 1 (Active = 1), Untagged  1 (Active = 1)
      ge-0/0/0.0*, tagged, trunk
      ge-0/0/2.0*, untagged, access

Step 5: Change MX5 interfaces to use no tagging interface

This is to test if current Q-in-Q support customer’s native VLAN without a tag.

admin@MX5> ping 10.1.1.2 
PING 10.1.1.2 (10.1.1.2): 56 data bytes
^C
--- 10.1.1.2 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss

This confirms that the above Q-in-Q config does not support the native VLAN traffic.

Step 6: Change the Q-in-Q config to support customer native VLAN as well

To support customer untagged traffic, change the VLAN dot1q-tunneling configuration options:

admin@SW1> show configuration vlans QinQ_Vlan    
description "Test Q-in-Q VLAN";
vlan-id 111;
interface {
    ge-0/0/2.0;
}
dot1q-tunneling {
    customer-vlans [ native 1-4094 ];
    layer2-protocol-tunneling {
        all;
    }
}

admin@SW2> show configuration vlans QinQ_Vlan 
description "Test Q-in-Q VLAN";
vlan-id 111;
interface {
    ge-1/0/2.0;
}
dot1q-tunneling {
    customer-vlans [ native 1-4094 ];
    layer2-protocol-tunneling {
        all;
    }
}

admin@MX5> ping 10.1.1.2 count 2 
PING 10.1.1.2 (10.1.1.2): 56 data bytes
64 bytes from 10.1.1.2: icmp_seq=0 ttl=64 time=0.604 ms
64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.530 ms

--- 10.1.1.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.530/0.567/0.604/0.037 ms

Step 7: Create virtual switches to verify that the Q-in-Q successfully carry the L2 control traffic (such as STP)

QinQ Switch

admin@MX5> show configuration interfaces 
ge-1/0/2 {
    unit 0 {
        family bridge {
            interface-mode trunk;
            vlan-id-list 100;
        }
    }
}
ge-1/1/2 {
    unit 0 {
        family bridge {
            interface-mode trunk;
            vlan-id-list 100;
        }
    }
}

admin@MX5> show configuration routing-instances 
CSW1 {
    description "Virtual SW1";
    instance-type virtual-switch;
    interface ge-1/0/2.0;
    protocols {
        rstp {
            bridge-priority 4k;
            system-identifier a8:11:11:11:11:11;
            interface ge-1/0/2;
        }
    }
}
CSW2 {
    description "Virtual SW2";
    instance-type virtual-switch;
    interface ge-1/1/2.0;
    protocols {
        rstp {
            bridge-priority 8k;
            system-identifier a8:22:22:22:22:22;
            interface ge-1/1/2;
        }
    }
}

admin@MX5> show lldp neighbors    
Local Interface Chassis Id        Port info     System Name
ge-1/1/2        a8:d0:e5:55:26:b0  ge-1/0/2     MX5          
ge-1/0/2        a8:d0:e5:55:26:b0  ge-1/1/2     MX5

This confirms that LLDP traffic is carried across Q-in-Q

Below show output confirm that RSTP is working across the Q-in-Q circuit. Note that switches agree on the same STP root, and the switch port roles are expected (designated, root).

admin@MX5> show spanning-tree bridge routing-instance CSW2  
STP bridge parameters 
Routing instance name               : CSW2
Context ID                          : 2
Enabled protocol                    : RSTP
  Root ID                           : 4096.a8:11:11:11:11:11
  Root cost                         : 20000
  Root port                         : ge-1/1/2
  Hello time                        : 2 seconds
  Maximum age                       : 20 seconds
  Forward delay                     : 15 seconds
  Message age                       : 1 
  Number of topology changes        : 2
  Time since last topology change   : 1878 seconds
  Local parameters 
    Bridge ID                       : 8192.a8:22:22:22:22:22
    Extended system ID              : 0

admin@MX5> show spanning-tree bridge routing-instance CSW1       
STP bridge parameters 
Routing instance name               : CSW1
Context ID                          : 1
Enabled protocol                    : RSTP
  Root ID                           : 4096.a8:11:11:11:11:11
  Hello time                        : 2 seconds
  Maximum age                       : 20 seconds
  Forward delay                     : 15 seconds
  Message age                       : 0 
  Number of topology changes        : 3
  Time since last topology change   : 1938 seconds
  Local parameters 
    Bridge ID                       : 4096.a8:11:11:11:11:11
    Extended system ID              : 0

admin@MX5> show spanning-tree interface routing-instance CSW2  

Spanning tree interface parameters for instance 0

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-1/1/2        128:53       128:43   4096.a81111111111     20000  FWD    ROOT 

admin@MX5> show spanning-tree interface routing-instance CSW1    

Spanning tree interface parameters for instance 0

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-1/0/2        128:43       128:43   4096.a81111111111     20000  FWD    DESG

Note:

Note that the “monitor traffic interface” command can not be used to monitor traffic that is switched by EX interfaces, as it is not traffic handled by Routing Engine.

http://www.juniper.net/techpubs/en_US/junos10.0/information-products/topic-collections/swcmdref-basics-services/monitor-traffic.html

Reference:

http://kb.juniper.net/InfoCenter/index?page=content&id=KB12259
http://www.juniper.net/techpubs/en_US/junos10.2/topics/concept/qinq-tunneling-ex-series.html