ποΈ PPPoE QinQ Multi-OLT
Deploy PPPoE server with QinQ (IEEE 802.1ad) VLAN tagging to aggregate multiple OLT connections through cascaded CRS switches. QinQ encapsulates customer VLANs inside service provider VLANs, allowing isolation of traffic from different OLTs while maintaining scalability. PPPoE server terminates user sessions and dynamically injects inner VLANs, while CRS317 switches handle VLAN filtering and tag manipulation. Useful for ISPs with fiber infrastructure, multiple OLT locations, and large subscriber counts (1000+).
What this does:
- Creates QinQ service VLANs (S-VLANs) on PPPoE server
- Configures PPPoE-over-VLAN-range for automatic inner VLAN handling
- Routes traffic through CRS317 switches with VLAN filtering
- Connects multiple OLT devices with isolated VLANs
- Supports optional inner VLAN injection for custom routing
- Enables scalable multi-location fiber networks
Prerequisitesβ
- β MikroTik PPPoE server (RouterOS with PPP support)
- β Two or more CRS317 switches (or CRS3xx with QinQ support)
- β OLT devices connected to CRS switches
- β Understanding of QinQ (802.1ad) vs regular VLANs (802.1q)
- β Network connectivity between PPPoE server β CRS β OLT
- β VLAN 2000, 2001 available (adjust as needed)
- β RouterOS v6.43+ (QinQ support)
QinQ deployment considerations:
- QinQ uses ethertype 0x88a8 (not standard 0x8100)
- CRS switches MUST enable
ether-type=0x88a8on bridge - VLAN filtering required on CRS bridges (
vlan-filtering=yes) - PPPoE-over-VLAN-range automatically creates inner VLANs
- Each OLT should have dedicated service VLAN (S-VLAN)
- QinQ adds 8 bytes overhead (consider MTU on links)
- Not all switches support QinQβverify hardware compatibility
Configuration Stepsβ
Option A: Terminal Configurationβ
PPPoE Server Configurationβ
-
Access PPPoE server terminal:
ssh admin@pppoe-server-ip -
Create QinQ service VLANs (S-VLANs):
/interface vlan
add interface="ether1-to CRS" name=svlan2000 use-service-tag=yes vlan-id=2000
add interface="ether1-to CRS" name=svlan2001 use-service-tag=yes vlan-id=2001tipReplace
ether1-to CRSwith your actual interface connected to CRS switch -
Configure PPPoE servers with VLAN ranges:
/interface pppoe-server server
add disabled=no interface=svlan2000 pppoe-over-vlan-range=1,10,200,11 \
service-name=service1
add disabled=no interface=svlan2001 pppoe-over-vlan-range=1,10,200 \
service-name=service2VLAN Range Explanation:
1,10,200,11= Creates VLANs 1-10, 200, and 11- PPPoE dynamically creates inner VLANs when users connect
-
Optional: Create inner VLAN manually for custom routing:
/interface vlan
add interface=svlan2000 name=vlan11 vlan-id=11
/interface pppoe-server server
add disabled=no interface=vlan11 service-name=service3 -
Verify PPPoE server configuration:
/interface vlan print
/interface pppoe-server server print
CRS317 Switch 1 Configurationβ
-
SSH to CRS317 switch 1:
ssh admin@crs1-ip -
Create bridge with QinQ support:
/interface bridge
add ether-type=0x88a8 name=br0 vlan-filtering=yes -
Add ports to bridge:
/interface bridge port
add bridge=br0 interface="ether1 to PPPoE Server"
add bridge=br0 interface="ether3-to olt" pvid=2000
add bridge=br0 interface="ether2 to CRS2" -
Configure VLAN filtering:
/interface bridge vlan
# Untagged port for outer VLAN (OLT on this switch)
add bridge=br0 tagged="ether1 to PPPoE Server" \
untagged="ether3-to olt" vlan-ids=2000
# Tagged VLAN to next switch (CRS2)
add bridge=br0 tagged="ether1 to PPPoE Server,ether2 to CRS2" \
vlan-ids=2001 -
Verify CRS1 configuration:
/interface bridge print
/interface bridge port print
/interface bridge vlan print
CRS317 Switch 2 Configurationβ
-
SSH to CRS317 switch 2:
ssh admin@crs2-ip -
Create bridge with QinQ support:
/interface bridge
add ether-type=0x88a8 name=bridge1 vlan-filtering=yes -
Add ports to bridge:
/interface bridge port
add bridge=bridge1 interface="ether1 crs"
add bridge=bridge1 interface="ether2 olt" pvid=2001 -
Configure VLAN filtering:
/interface bridge vlan
# Untagged port for outer VLAN (OLT on this switch)
add bridge=bridge1 tagged="ether1 crs" \
untagged="ether2 olt" vlan-ids=2001 -
Verify CRS2 configuration:
/interface bridge print
/interface bridge port print
/interface bridge vlan print
Option B: Winbox Configurationβ
PPPoE Server (Winbox)β
-
Create QinQ VLANs:
- Navigate to Interfaces > VLAN
- Click +
- Name:
svlan2000 - VLAN ID:
2000 - Interface:
ether1-to CRS - Use Service Tag: β (checked)
- Click OK
- Repeat for
svlan2001with VLAN ID2001
-
Configure PPPoE servers:
- Navigate to Interfaces > PPPoE Server
- Click +
- Interface:
svlan2000 - Service Name:
service1 - PPPoE Over VLAN Range:
1,10,200,11 - Click OK
- Repeat for
svlan2001with service nameservice2and range1,10,200
CRS317 Switch 1 (Winbox)β
-
Create bridge:
- Navigate to Bridge
- Click +
- Name:
br0 - VLAN Filtering: β (checked)
- Ether Type:
0x88a8 - Click OK
-
Add bridge ports:
- Navigate to Bridge > Ports
- Add three ports:
- Bridge:
br0, Interface:ether1 to PPPoE Server - Bridge:
br0, Interface:ether3-to olt, PVID:2000 - Bridge:
br0, Interface:ether2 to CRS2
- Bridge:
-
Configure VLAN filtering:
- Navigate to Bridge > VLANs
- Add VLAN 2000:
- Bridge:
br0 - VLAN IDs:
2000 - Tagged:
ether1 to PPPoE Server - Untagged:
ether3-to olt
- Bridge:
- Add VLAN 2001:
- Bridge:
br0 - VLAN IDs:
2001 - Tagged:
ether1 to PPPoE Server, ether2 to CRS2
- Bridge:
CRS317 Switch 2 (Winbox)β
-
Create bridge:
- Navigate to Bridge
- Click +
- Name:
bridge1 - VLAN Filtering: β
- Ether Type:
0x88a8 - Click OK
-
Add bridge ports:
- Navigate to Bridge > Ports
- Add:
- Bridge:
bridge1, Interface:ether1 crs - Bridge:
bridge1, Interface:ether2 olt, PVID:2001
- Bridge:
-
Configure VLAN:
- Navigate to Bridge > VLANs
- Add:
- Bridge:
bridge1 - VLAN IDs:
2001 - Tagged:
ether1 crs - Untagged:
ether2 olt
- Bridge:
Understanding the Configurationβ
Network Architectureβ
βββββββββββββββββββββββββββββββββββββββ
β PPPoE Server (QinQ VLANs) β
β - svlan2000 (S-VLAN for OLT1) β
β - svlan2001 (S-VLAN for OLT2) β
β - PPPoE-over-VLAN-range enabled β
βββββββββββββββββββ¬ββββββββββββββββββββ
β ether1-to CRS
β (QinQ tagged: 2000, 2001)
β
βββββββββββββββββββββββββββββββββββββββ
β CRS317 Switch 1 (br0) β
β - ether-type: 0x88a8 (QinQ) β
β - VLAN filtering: enabled β
βββββ¬ββββββββββββββββ¬ββββββββββββββββββ
β β
VLAN 2000 β β VLAN 2001
untagged β β tagged
β β
ββββββββββββββββ ββββββββββββββββββββββββ
β OLT 1 β β CRS317 Switch 2 β
β (ether3) β β (ether2 to CRS2) β
ββββββββββββββββ βββββββββ¬βββββββββββββββ
β VLAN 2001
β untagged
β
ββββββββββββββββ
β OLT 2 β
β (ether2) β
ββββββββββββββββ
Users connect to OLT1/OLT2 β Traffic encapsulated in QinQ
β Inner VLAN auto-created by PPPoE server
β Routed through appropriate S-VLAN
QinQ VLAN Flowβ
User PPPoE request at OLT1
β
OLT adds inner VLAN tag (C-VLAN, e.g., VLAN 5)
β
CRS1 receives untagged on ether3 β adds S-VLAN 2000 (PVID)
β
Packet now: [S-VLAN 2000 | C-VLAN 5 | PPPoE data]
β
CRS1 forwards to PPPoE server via ether1 (tagged 2000)
β
PPPoE server receives on svlan2000
β
PPPoE-over-VLAN-range creates dynamic VLAN interface for inner VLAN 5
β
User authenticated β Assigned IP β Traffic routed
Component Relationshipsβ
| Component | Role | VLAN Handling |
|---|---|---|
| PPPoE Server | Terminates user sessions, authenticates | Receives QinQ, extracts inner VLANs |
| S-VLAN 2000 | Service VLAN for OLT1 traffic | Outer tag for isolation |
| S-VLAN 2001 | Service VLAN for OLT2 traffic | Outer tag for isolation |
| CRS317 Switch 1 | Aggregates OLT1 + forwards to PPPoE + CRS2 | Tags/untags VLANs per port |
| CRS317 Switch 2 | Connects OLT2 to network | Tags/untags VLAN 2001 |
| OLT Devices | Fiber access points for end users | Adds inner C-VLAN tags |
QinQ vs Regular VLANβ
| Feature | Regular VLAN (802.1q) | QinQ (802.1ad) |
|---|---|---|
| Ethertype | 0x8100 | 0x88a8 |
| Tag Depth | Single tag | Double tag (S-VLAN + C-VLAN) |
| Use Case | Local networks | Service provider networks |
| Scalability | 4094 VLANs max | 4094 Γ 4094 = ~16M VLANs |
| Overhead | 4 bytes | 8 bytes |
Verificationβ
-
Check QinQ VLANs on PPPoE server:
/interface vlan printShould show:
svlan2000,svlan2001withuse-service-tag=yes -
Verify PPPoE-over-VLAN-range:
/interface pppoe-server server printShould show ranges configured
-
Check CRS1 bridge ethertype:
/interface bridge printShould show:
ether-type=0x88a8 -
Verify VLAN filtering enabled:
/interface bridge print where vlan-filtering=yes -
Test user connection from OLT1:
- User connects via PPPoE
- Monitor on PPPoE server:
/interface pppoe-server print stats
/ppp active print -
Check dynamic VLAN creation:
/interface vlan print where dynamic=yesShould show auto-created inner VLANs
-
Monitor VLAN traffic on CRS:
/interface bridge vlan print stats -
Verify OLT connectivity:
# From PPPoE server, ping OLT management IPs
ping olt1-ip
ping olt2-ip
Troubleshootingβ
| Issue | Cause | Solution |
|---|---|---|
| Users can't authenticate | QinQ ethertype wrong on CRS | Verify: /interface bridge print shows ether-type=0x88a8 |
| VLAN traffic not passing | VLAN filtering disabled | Enable: /interface bridge set br0 vlan-filtering=yes |
| CRS1 not forwarding to CRS2 | VLAN 2001 not tagged on interconnect | Add to tagged: /interface bridge vlan add bridge=br0 tagged="ether2 to CRS2" vlan-ids=2001 |
| OLT traffic loops | STP not enabled on CRS | Enable: /interface bridge set br0 protocol-mode=rstp |
| PPPoE server doesn't see inner VLANs | use-service-tag not set | Set on S-VLANs: /interface vlan set svlan2000 use-service-tag=yes |
| Users on wrong S-VLAN | PVID misconfigured on CRS port | Check: /interface bridge port print verify PVID on OLT ports |
| Dynamic VLANs not created | PPPoE-over-VLAN-range wrong | Verify range syntax: 1,10,200 creates VLANs 1-10 and 200 |
| Packet loss on QinQ | MTU too small (QinQ adds 8 bytes) | Increase MTU: /interface set ether1 mtu=1522 |
| CRS switch CPU high | VLAN filtering in software | Use CRS3xx switches with hardware VLAN offload |
| Inter-VLAN routing fails | No routing between S-VLANs | Add firewall/route rules on PPPoE server |
| OLT2 offline | CRS2 bridge misconfigured | Verify: /interface bridge vlan print on CRS2 shows VLAN 2001 |
| PPPoE service name conflicts | Same service-name on multiple S-VLANs | Use unique names: service1, service2, service3 |
Advanced Optionsβ
Add third OLT with dedicated S-VLAN:β
# PPPoE Server
/interface vlan add interface="ether1-to CRS" name=svlan2002 use-service-tag=yes vlan-id=2002
/interface pppoe-server server add interface=svlan2002 pppoe-over-vlan-range=1,10 service-name=service-olt3
# CRS1: Add tagged VLAN 2002
/interface bridge vlan add bridge=br0 tagged="ether1 to PPPoE Server,ether4-to olt3" vlan-ids=2002
Enable RADIUS authentication for PPPoE users:β
/ppp aaa set use-radius=yes
/radius add address=radius-server-ip service=ppp
Configure per-VLAN bandwidth limits:β
/queue simple add name="OLT1-QoS" target=svlan2000 max-limit=1G/1G
/queue simple add name="OLT2-QoS" target=svlan2001 max-limit=500M/500M
Add backup link between CRS switches (LAG):β
# CRS1
/interface bonding add name=lag1 slaves="ether2 to CRS2,ether5-backup" mode=802.3ad
/interface bridge port add bridge=br0 interface=lag1
# CRS2
/interface bonding add name=lag1 slaves="ether1 crs,ether5-backup" mode=802.3ad
/interface bridge port add bridge=bridge1 interface=lag1
Monitor QinQ traffic with packet sniffer:β
/tool sniffer quick interface="ether1-to CRS" ip-protocol=pppoe
Create VLAN translation (map C-VLAN to different S-VLAN):β
/interface vlan add interface=svlan2000 name=vlan-translate vlan-id=100
/interface pppoe-server server add interface=vlan-translate service-name=custom
Enable firewall rules per S-VLAN:β
/ip firewall filter add chain=forward in-interface=svlan2000 action=accept comment="OLT1 traffic"
/ip firewall filter add chain=forward in-interface=svlan2001 action=accept comment="OLT2 traffic"
Add IP pool per S-VLAN:β
/ip pool add name=pool-olt1 ranges=10.1.0.2-10.1.255.254
/ip pool add name=pool-olt2 ranges=10.2.0.2-10.2.255.254
/ppp profile add name=profile-olt1 remote-address=pool-olt1
Configure MAC-based S-VLAN assignment:β
/interface bridge vlan add bridge=br0 tagged="ether1 to PPPoE Server" mac-address=aa:bb:cc:dd:ee:ff vlan-ids=2000
Enable IGMP snooping for multicast (IPTV):β
/interface bridge set br0 igmp-snooping=yes
/interface bridge vlan add bridge=br0 tagged="ether1 to PPPoE Server,ether3-to olt" vlan-ids=100 comment="IPTV VLAN"
Related Guidesβ
- RADIUS Server Integration - Central authentication
- Access Concentrator Setup - PPPoE AC configuration
- Connect OLT - OLT management connectivity
- Guest Bandwidth DHCP - QoS profiles
Completionβ
β PPPoE QinQ multi-OLT network configured!
Next steps:
- Test user authentication from each OLT
- Monitor traffic on S-VLANs:
/interface vlan print stats - Configure RADIUS for centralized billing
- Add redundant uplinks between switches
- Set up per-OLT QoS policies
- Document OLT β S-VLAN mappings
- Back up configuration:
/system backup save