Docker, Ubuntu, Proxmox, IPVlan, trafik mellan containrar och brandväggsregler
Min uppsättning är sådan att jag använder docker (med compose) på Ubuntu-VMar som i sin tur är hostade på Proxmox-hypervisor. Jag tilldelar containrar IPv4-adresser från ett dockernätverk som är av typen IPVlan. Det är ett eget nätverk som finns bakom Ubuntu-hosten. Jag har host-brandvägg aktiverat på VM i Proxmox.
Den här kombinationen av tekniker gör att jag ser trafiken mellan containrarna i Proxmox på host-brandväggen och kan bygga regler där. Jag är inte superbra på hur det funkar, jag har kopierat in ett svar från ChatGPT här:
Svar från ChatGPT
IPVlan logiskt kopplar containrarna direkt mot varandra, men i din Proxmox-miljö finns ett extra lager som gör att trafiken ser ut som om den går via hosten. Låt oss reda ut exakt varför.
Kort svar
Containrarna pratar inte via Linux-hostens IP-stack, men deras trafik går ändå via hostens NIC → Proxmox vSwitch → Proxmox brandvägg.
Därför syns den i hypervisorns firewall – och det är helt korrekt beteende.
Vad som faktiskt händer i ditt setup
Du har i praktiken detta:
[Container A]
|
IPVlan
|
[Ubuntu VM kernel]
|
virtio-net
|
[Proxmox bridge / vSwitch]
|
[Proxmox firewall] 👈 du ser trafiken här
|
[Ubuntu VM NIC]
|
[Container B]
Viktig poäng
-
IPVlan gör switching i kernel
-
Men kernel är i en VM
-
VM:ns nätverksinterface är virtuellt (virtio)
-
All trafik måste därför passera Proxmox bridge
Varför detta inte motsäger hur IPVlan fungerar
“Men IPVlan ska ju vara host-local?”
Ja — på bare metal.
I en VM:
-
Ubuntu-hostens “fysiska interface” är egentligen ett virtuellt NIC
-
IPVlan använder detta NIC som parent
-
All egress/ingress → Proxmox vSwitch
Så även:
containerA → containerB
blir i praktiken:
containerA
→ ipvlan
→ VM kernel
→ virtio-net
→ Proxmox bridge (firewall!)
→ virtio-net
→ VM kernel
→ ipvlan
→ containerB
Ingen NAT. Ingen routing.
Men hypervisorn ser L2/L3-trafiken.
Varför Proxmox brandvägg ser trafiken
Proxmox brandvägg:
-
Körs på bridge-nivå
-
Inspekterar all VM-trafik
-
Spelar ingen roll om IP-källan och IP-destinationen är “samma VM”
Så:
-
Samma MAC ✔️
-
Olika IP ✔️
-
Bridge-forwarding ✔️
→ Firewall triggeras
Detta är precis som om två processer i samma VM pratar via nätet.
Varför detta är bra (och varför du gillar det 😄)
Du får:
-
✅ Riktiga IP-adresser
-
✅ Ingen Docker NAT
-
✅ Full synlighet i Proxmox FW
-
✅ Central policy enforcement
-
✅ Mikrosegmentering utan overlay-nät
I praktiken beter sig containrarna som mini-VMs bakom samma NIC.
Detta är en av de stora fördelarna med:
IPVlan + VM + Proxmox
Skillnad mot Docker bridge i VM
Med bridge hade du ofta sett:
-
NAT inuti VM
-
Mindre synlig L3-trafik i Proxmox
-
Svårare policy enforcement
IPVlan ger dig ren trafik upp till hypervisorn.
Mental modell (bra att komma ihåg)
IPVlan = ”direct attach” till det interface du har
I en VM → det interface ägs av hypervisorn
Så:
-
Bare metal → stannar lokalt
-
VM → går via vSwitch