Router on a stick

@startuml
title TurkNet + Proxmox + OpenWRT (VLAN routing by Proxmox bridges)
!$ICONURL = "https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/v3.0.0/icons"
!include $ICONURL/common.puml
!include $ICONURL/font-awesome/server.puml
!include $ICONURL/material/router.puml
!include $ICONURL/material/device_hub.puml
!include $ICONURL/material/devices.puml
!include $ICONURL/material/network_wifi.puml
!include $ICONURL/font-awesome-6/network_wired.puml
!include $ICONURL/font-awesome-5/ethernet.puml

legend
  VLAN 10 (WAN): Все внешние подключения
  VLAN 20 (LAN): Внутренняя домашняя сеть
  vmbr10/vmbr0: VLAN-aware мосты (Proxmox)
  Untagged net в VM: Виртуальные интерфейсы внутри ВМ без VLAN
endlegend

' WAN + ONT
node "TurkNet Gigafiber" as isp
node "ONT" as ont

MATERIAL_DEVICE_HUB(sw,"TP-Link TL-SG105E\n(VLAN switch)",node) #E0E0E0 {
  FA5_ETHERNET(tp_wan,"Port1\nAccess VLAN 10\n(untagged)") #BBDEFB
  FA5_ETHERNET(tp_trunk,"Port2\nTrunk VLAN 10,20\n(tagged)") #81C784
  FA5_ETHERNET(tp_lan3,"Port3\nAccess VLAN 20\n(untagged)") #FFF176
  FA5_ETHERNET(tp_lan4,"Port4\nAccess VLAN 20\n(untagged)") #FFF176
  FA5_ETHERNET(tp_lan5,"Port5 - management\nAccess VLAN 1\n(untagged)")
}

FA_SERVER(proxmox, "Proxmox Host", node) #FFE0B2 {
  FA5_ETHERNET(p_int,"enp7s0") #A1887F
  interface "vmbr10 (VLAN 10)" as p_vmbr10 #90CAF9
  interface "vmbr0 (VLAN 20)" as p_vmbr0 #FFF9C4

  MATERIAL_ROUTER(owrt,"OpenWRT VM\nИнтернет/NAT/DHCP/Firewall") #B3E5FC {
    interface "WAN (нет VLAN в guest)" as o_wan #90CAF9
    interface "LAN (нет VLAN в guest)" as o_lan #FFF9C4
  }
  FA_SERVER(other, "Other VMs", node) #FFFDE7 {
    interface "LAN (нет VLAN в guest)" as other_lan
  }
}

package "Домашняя сеть (LAN VLAN 20)" #FFF9C4 {
  MATERIAL_DEVICES(lan, "Wired Devices") #FFF9C4
  MATERIAL_NETWORK_WIFI(lanw, "Wi-Fi Devices") #FFECB3
}

' Соединения
isp ==> ont
ont ==> tp_wan : Ethernet (untagged from ONT)
tp_wan =r=> tp_trunk : VLAN 10 tagging
tp_trunk =r=> tp_lan3 : VLAN 20 tagging
tp_lan3 =r= tp_lan4 : VLAN 20

' Trunk/tags to Proxmox
tp_trunk <==> p_int : Physical Ethernet\nTrunk: VLAN 10 + VLAN 20 (tagged)
p_int ==> p_vmbr10 : VLAN 10
p_int <== p_vmbr0 : VLAN 20

' vmbr10 и vmbr0 --- виртуальные точки входа в ВМ
p_vmbr10 ==> o_wan : OpenWRT WAN\n(нет VLAN в госте)
p_vmbr0 <== o_lan : OpenWRT LAN\n(нет VLAN в госте)
p_vmbr0 ==> other_lan : Other VMs (LAN)\n(нет VLAN в госте)

' LAN 20 --- обычные домашние клиенты
tp_lan3 ==> lan : LAN (VLAN 20 untagged)
tp_lan4 ==> lanw : Wi-Fi (VLAN 20 untagged)
@enduml