Skip to content

Instantly share code, notes, and snippets.

@Strykar
Created March 6, 2026 07:23
Show Gist options
  • Select an option

  • Save Strykar/a736bc5044be9cc3498c13e06b3a9cc1 to your computer and use it in GitHub Desktop.

Select an option

Save Strykar/a736bc5044be9cc3498c13e06b3a9cc1 to your computer and use it in GitHub Desktop.
Airtel WAN topology and Netfilter paths - Mermaid chart
---
config:
theme: neo-dark
---
flowchart TB
subgraph Header_Info["ISP A + B + C"]
direction LR
A_Biz["<b>ISP-A Airtel</b><br>GPON FTTH Static IPv4"]
B_Biz["<b>ISP-B Purple</b><br>GPON FTTH Static IPv4 Bridge"]
C_Biz["<b>ISP-C Airtel</b><br>5G / LTE Android"]
end
subgraph PPPoE_A["PPPoE Tunnel: pppoe-out1"]
A_IPv4["Dynamic IPv4 / CGNAT: 122.100.10.10"]
A_IPv6["IPv6 DHCPv6 Prefix Delegation: 2001:470:35:80c::/64"]
end
subgraph V100_Inside["VLAN encapsulation"]
A_L1["Static IP / IPoE: 182.100.10.10"]
PPPoE_A
end
subgraph ISP_A_Stack["ISP A: Nested Encapsulation"]
V100["VLAN 100 tag"]
V100_Inside
end
subgraph PPPoE_B["PPPoE-Tunnel: pppoe-out2"]
B_L1["Static IPv4 / IPCP: 160.100.10.10"]
end
subgraph RB5009["MikroTik RB5009 router"]
direction TB
SFP["SFP+1: HSGQ ONU SFP"]
E4["Ether4: RJ45"]
USB["USB Port: Tether"]
ISP_A_Stack
PPPoE_B
C_L1["NAT: 192.168.100.10"]
Bridge["Bridge / LAN"]
end
subgraph Presentation_View["Multi-WAN Overview"]
direction TB
Header_Info
RB5009
end
A_Biz --> SFP
SFP -- MTU 1500 --> V100
V100 --> A_L1
A_L1 -- Encapsulation --> PPPoE_A
B_Biz --> E4
E4 -- MTU 1500 --> PPPoE_B
C_Biz --> USB
USB -- MTU 1500 --> C_L1
A_L1 -- MTU 1500 --> Bridge
A_IPv4 -- MTU 1480 --> Bridge
A_IPv6 -- MTU 1480 --> Bridge
B_L1 -- MTU 1480 --> Bridge
C_L1 -- MTU 1500 --> Bridge
A_Biz:::Business_Box
B_Biz:::Business_Box
C_Biz:::Business_Box
A_IPv4:::Tunnel_Path
A_IPv6:::IPv6_Path
A_L1:::Tunnel_Path
PPPoE_A:::Nest_L3
V100:::VLAN_Frame
B_L1:::Tunnel_Path
SFP:::Hardware_Box
E4:::Hardware_Box
USB:::Hardware_Box
PPPoE_B:::Dark_BG
C_L1:::Tunnel_Path
Bridge:::Hardware_Box
classDef Tunnel_Path fill:#66bb6a,stroke:#1b5e20,stroke-width:2px,color:#fff
classDef IPv6_Path fill:#42a5f5,stroke:#0d47a1,stroke-width:2px,color:#fff
classDef VLAN_Frame fill:#455a64,stroke:#cfd8dc,stroke-width:2px,stroke-dasharray: 5 5,color:#fff
classDef Hardware_Box fill:#37474f,stroke:#90a4ae,stroke-width:1px,color:#fff
classDef Business_Box fill:#263238,stroke:#00e5ff,stroke-width:1px,stroke-dasharray: 2 2,color:#00e5ff
classDef Dark_BG fill:#102027,stroke:#37474f,stroke-width:2px,color:#fff
classDef Nest_L1 fill:#263238,stroke:#455a64,stroke-width:1px,fill:#263238,stroke:#455a64,stroke-width:1px
classDef Nest_L2 fill:#37474f,stroke:#455a64,stroke-width:1px
classDef Nest_L3 fill:#455a64,stroke:#546e7a,stroke-width:1px
style PPPoE_A color:#fff
style V100_Inside color:#fff
style ISP_A_Stack color:none
linkStyle 0 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 1 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 2 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 3 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 4 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 5 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 6 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 7 stroke:#78909c,stroke-width:2px,fill:none
linkStyle 8 stroke:#00bcd4,stroke-width:4px,fill:none
linkStyle 9 stroke:#ffeb3b,stroke-width:4px,fill:none
linkStyle 10 stroke:#42a5f5,stroke-width:4px,fill:none
linkStyle 11 stroke:#f44336,stroke-width:4px,fill:none
linkStyle 12 stroke:#9c27b0,stroke-width:4px,fill:none
graph TD
%% ENTRY
LAN[LAN Clients] --> WANIN[WAN Interfaces<br/>vlan100<br/>pppoe-out1<br/>pppoe-out2<br/>lte1]
%% FIREWALL PIPELINE
WANIN --> RAW[RAW Table<br/>early drop]
RAW --> CONNTRACK[Connection Tracking<br/>Kernel state engine]
%% MANGLE
CONNTRACK --> MANGLE[Mangle PREROUTING<br/>PCC / DSCP / Routing Marks]
%% ROUTING
MANGLE --> ROUTE[Routing Decision<br/>main / policy tables]
%% FASTTRACK
ROUTE --> FASTTRACK{FastTrack?}
FASTTRACK -- yes --> FASTPATH[Fast Path<br/>skip firewall]
FASTTRACK -- no --> SLOWPATH[Slow Path<br/>traverse firewall]
FASTPATH --> NAT
SLOWPATH --> NAT
%% POSTROUTING
NAT[NAT srcnat / masquerade] --> POSTMANGLE[Mangle POSTROUTING]
%% QUEUES
POSTMANGLE --> QUEUE[Interface Queues<br/>CAKE / Queue Trees]
%% WAN EGRESS
QUEUE --> WAN1[ISP-A<br/>SFP+ VLAN100]
QUEUE --> WAN2[ISP-B<br/>Ether4 PPPoE]
QUEUE --> WAN3[ISP-C<br/>USB LTE]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment