Eigenes macvlan netz

Funnix

New member
Hallo zusammen ich hoffe ich platziere meine Anfrage hier richtig.
Ich habe eine Ubuntu Maschine (24.04) mit Docker aufgesetzt. Im Docker habe ich ein Netzwerk 192.168.30.0/24 angelegt.
Auf der Ubuntu Maschine habe ich auf den physikalischen Adapter enp1s0 (192.168.10.50) einen Adapter enp1s0.30 mit Type macvlan Mode Bridge angelegt und die ip Adresse 192.168.30.1 gegeben.
Die default Route zeigt auf den Router 192.168.10.1 . Dort ist auch eine statische Route für das Netz 192.168.30.0/24 mit NextHop 192.168.10.50 eingetragen.
Weiter gibt es eine Route auf dem Linux System 192.168.30.0/24 via 192.168.30.1 dev enp1s0.30.

Von dem Linux System kann ich jeden Docker Container anpingen.. so weit so gut.
Von den Docker Container kann ich die 192.168.30.1 und die 192.168.10.50 erreichen. Aber kein anderes System im Netz 192.168.10.0/24 Netz
Aus dem Netz 192.168.10.0/24 kann ich die 192.168.10.50 und die 192.168.30.1 erreichen, aber keinen Dockercontainer…

Hat jemand eine Idee für mich? Mir fällt im Moment nichts ein…

Danke schon mal für eure Hilfe
 
Hi,

weiss man denn im 10er Netz, wie man das 30er erreichen kann? Ansonsten wandern die Antworten der 10er Geräte halt gradewegs in Richtung Default-Gateway, somit Richtung Internet (wo sie dann verworfen werden). Nimm doch einfach mal Deine Workstation, schmeiss Wireshark oder einen anderen Packetsniffer an und schau, ob a) die Pakete ankommen und b) wohin die Antworten gehen :)
 
Ja auf der FRITZ!Box 192.168.10.1 ist eine Feste Route eingerichtet mit nextHop 192.168.10.50. Sonst würde ich die 192.168.30.1 doch auch nicht erreichen?! Ich komme ja auch von den Dockern wohl an die 192.168.10.50 …aber nicht weiter, trotz Default Route
 
Teil mal bitte alle Befehle, die Du verwendet hast mit uns. Auf den ersten Blick wäre meine Frage: Was wurde beim macvlan als Gateway angegeben und hat das Gateway eine entsprechende Route ins 192.168.10er Netz?

.. im ersten Beitrag wurden Container noch genannt wie sie heissen... Ein Container als Docker zu bezeichnen, ist in etwa so, als wenn man jedes Auto Ford nennt, nur weil Ford als erster in Massen Autos zugänglich gemacht hat.
 
Hi Confluencer danke schon mal für Deine Mühen ...hab hier mal alles zusammengetragen. Wenn Dir noch was fehlt an Infos.. sag bescheid
Befehle zur Anlage
ip link del enp1s0.30
ip link add enp1s0.30 link enp1s0 type macvlan mode bridge
ip addr add 192.168.30.1/32 dev enp1s0.30
ip link set enp1s0.30 up
ip route add 192.168.30.0/24 dev enp1s0.30

Copy von Portainer Netzwerk:
Screenshot 2024-10-28 170102.png
Copy Fritzbox Netzwerk/Netzwerk Einstellungen / Statische RoutenScreenshot 2024-10-28 170429.png

Netzwerkkarten (ifconfig)
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.50 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::9336:f1e1:65da:fdfd prefixlen 64 scopeid 0x20<link>
ether e8:ff:1e:d5:99:80 txqueuelen 1000 (Ethernet)
RX packets 1040973773 bytes 1416547004931 (1.4 TB)
RX errors 0 dropped 776764 overruns 0 frame 0
TX packets 572768489 bytes 374891041734 (374.8 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp1s0.30: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.30.1 netmask 255.255.255.255 broadcast 0.0.0.0
inet6 fe80::d486:cbff:fea0:8a13 prefixlen 64 scopeid 0x20<link>
ether d6:86:cb:a0:8a:13 txqueuelen 1000 (Ethernet)
RX packets 1784589 bytes 286042384 (286.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 92181 bytes 14405849 (14.4 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

IP ROUTE Befehl...Ausgabe:
default via 192.168.10.1 dev enp1s0 proto static metric 100
169.254.0.0/16 dev br-56bd653220a5 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-6c371f4c1c37 proto kernel scope link src 172.18.0.1
172.19.0.0/16 dev br-56bd653220a5 proto kernel scope link src 172.19.0.1
192.168.10.1 dev enp1s0 proto static scope link metric 20100
192.168.30.0/24 via 192.168.30.1 dev enp1s0.30
 

Anhänge

  • Screenshot 2024-10-28 170102.png
    Screenshot 2024-10-28 170102.png
    6,7 KB · Aufrufe: 4
  • Screenshot 2024-10-28 170102.png
    Screenshot 2024-10-28 170102.png
    6,7 KB · Aufrufe: 3
Ich denke, Deine IP Config für das Interface enp1s0.30 ist falsch. Du hast der primären IP des Interfaces eine /32-Maske gegeben. Sowas macht man maximal mit Secondary IPs, aber so kann das Interface das eigene Subnet nicht adressieren, was man schon an Boardcast 0.0.0.0 sieht. Da muss eine /24 hin!
 
Also ich kann nicht wirklich erkennen, welches Interface das Docker macvlan-Netzwerk als Parent-Interface verwendet.

Die Befehle legen am Ende auch nur ein zusätzliches macvlan Child-Interface am Host an:
Code:
ip link add enp1s0.30 link enp1s0 type macvlan mode bridge
ip addr add 192.168.30.1/32 dev enp1s0.30
ip link set enp1s0.30 up
ip route add 192.168.30.0/24 dev enp1s0.30

Damit soll das Kernel Sicherheitsfeature umgangen werden, dass macvlan Parent<->Child Interfaces nicht direkt miteinander kommunizieren dürfen. Ich habe noch nie versucht das macvlan Child-Interface am Host als Gateway zu verwenden.

Ich muss gestehen, dass sich mir der Vorteil eines "privaten" macvlan Netzwerks auf dem Host gegenüber einem normalen Docker Bridge-Netzwerk nicht erschließt..

Update: das was gemacht werden soll entspricht in Teilem dem hier: https://lowtek.ca/roo/2023/expanding-a-docker-macvlan-network/

Ich kann mir gut vorstellen, dass das macvlan Child Interface nicht im selben vlan landen wie das docker macvlan Netzwerk, denn eigentlich sollte dieses enp1s0.30 als Interface erzeugen und verwenden. Im VLAN szenario sitzt normalerweise der Router auch außerhalb des Dockerhosts.
 
Zuletzt bearbeitet:
Ich denke, Deine IP Config für das Interface enp1s0.30 ist falsch. Du hast der primären IP des Interfaces eine /32-Maske gegeben. Sowas macht man maximal mit Secondary IPs, aber so kann das Interface das eigene Subnet nicht adressieren, was man schon an Boardcast 0.0.0.0 sieht. Da muss eine /24 hin!
Habe ich versucht, löst das Problem leider auch nicht
 
Wäre gut, wenn Du uns dort abholst, wo Du gedanklich gerade stehst, und auch auf den Rest des Posts eingehst.
Du schreibst, du kannst nicht erkennen, welches das Parent für das macvlan ist. Sorry ich bin nicht so der Netzwerk Crack. Ich bin davon ausgegangen, dass der parent das physikalische Interface ist…
Ich habe gerade eine Hack im Kopf, weil ich ja von der Hostmaschine alle ip im macvlan erreichen kann und von den Docker Containern auch auf die physikalische ip des Docker Hosts pingen kann. Jedoch nicht weite. Da dachte ich müsste doch die default Route greifen. Wenn ich von einer anderen Maschine die Docker Container anpingen will (traceroute) Ende ich an der ip des physikalischen Hosts. Obwohl eine Route auf den virtuellen Adapter zeigt…. Warum werden die Pakete nicht von einem Netz ins andere gelassen? Fehlen da Routinen, oder ist das das sicherheitsfeature des Kernel?
 
Nimms mir nicht krumm, aber ich werde nicht anfangen zu Raten wie Du das macvlan Netzwerk in Docker konfiguriert hast. Die Antworten auf Deine Fragen hängen davon ab.
 
Hast Du es einfach mal so versucht?
docker network create -d macvlan --subnet=192.168.30.0/24 --gateway=192.168.30.1 -o parent=eth0.30 meinnetz30
Dazu kommt halt, dass es bis dahin erstmal "nur" eine Bridge auf irgendeinem Interface ist. Der Host muss meiner Meinung nach nur ein konfiguriertes Interface in diesem Netz haben (halt eth0.30, ohne IP-Konfiguration), das Gateway - welches im o.g. Befehl angegeben wird - wäre dann eben extern (z.B. eine externe Firewall bzw. ein externer Router, welches auch auf das VLAN reagiert und als Gateway dient).

Probier es vielleicht einfach mal aus (natürlich ohne Gewähr, hab ja selbst keine Ahnung 😅 ). Die Option -o macvlan_mode=bridge kann man sich dabei auch sparen, ist - soweit ich weiss - eh Standard.
 
Nimms mir nicht krumm, aber ich werde nicht anfangen zu Raten wie Du das macvlan Netzwerk in Docker konfiguriert hast. Die Antworten auf Deine Fragen hängen davon ab.
Nein das erwarte ich nicht ... sorry, aber die Anlage erfolgte eigentlich genau wie blurrr das oben geschrieben hat :
Code:
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=enp2s0.50 macvlan50

ich habe das hier mit anderen IP Bereichen versucht, sonst aber alles gleich gelassen
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
5.688
Beiträge
55.677
Mitglieder
5.566
Neuestes Mitglied
TheEagle
Zurück
Oben