thor2605
Goto Top

Mikrotik - Ubuntu Server VLAN - Docker mit macvlan

Hallo zusammen,

Ich bin gerade etwas ratlos wie ich mein Vorhaben umsetzen kann.

Auf dem Mikrotik habe ich zwei VLANs angelegt mit ID 20 (Adresse 172.16.20.1) und 30 (Adresse 172.16.30.1).
Diese beiden IPs leite ich an einen Ubuntu Server weiter, der dort ebenfalls die beiden VLANs konfiguriert hat.
ID20: 172.16.20.2
ID30: 172.16.30.2

Im Docker auf dem Ubuntu-Server habe ich jetzt macvlans angelegt:
VLAN20: Network 172.16.20.0/24 Gateway 172.16.20.1
VLAN30: Network 172.16.30.0/24 Gateway 172.16.30.1

und zwei Test-Container hinzugefügt:
Container 1: VLAN 20 IP: 172.16.20.100
Container 2: VLAN 30 IP: 172.16.30.100

Allerdings kommen jetzt logischerweise alle Anfragen an den Mikrotik-Router mit "Unknown" rein, weil dieser ja nicht weiß was mit den IP-Adressen anzufangen ist.

Wie muss ich das konfigurieren, dass der Router die IP-Adressen der Container kennt?
Geht das überhaupt?

Content-ID: 667847

Url: https://administrator.de/contentid/667847

Ausgedruckt am: 23.11.2024 um 09:11 Uhr

aqui
aqui 03.09.2024 aktualisiert um 12:04:01 Uhr
Goto Top
alle Anfragen an den Mikrotik-Router mit "Unknown" rein, weil dieser ja nicht weiß was mit den IP-Adressen anzufangen ist.
Das ist unsinnig. Warum sollte, er deiner Meinung, nicht wissen was er damit anfangen soll??
Beides sind doch IP Adressen aus Netzen die direkt an ihm selber angeschlossen sind. Er weiss also durch diese direkt Verbindung sehr wohl was er damit anfangen soll!

Um eine Kommunikation im gleichen L2 Netz aufbauen zu können muss der Mikrotik, wie auch alle anderen Router auf der Welt, die Mac Adresse des Endgeräts kennen das mit ihm im gleichen Netz ist. Dazu ARPt der Mikrotik ins Netz mit einem Broadcast an alle und damit auch an deine beiden Containerhosts 172.16.20.100 und 172.16.30.100. Diese empfangen den ARP Request Broadcast, erkennen ihre IP und antwortem dem Mikrotik mit einem ARP Reply und ihren Mac Adressen. Daraufhin startet der Mikrotik dann den Datentransfer im Netz zum Endgerät.
Ein klassisches Verhalten im Layer 2 wie bei Milliarden anderen Endgeräten auch.
Wie kommst du also zu deiner o.a. Behauptung bei direkt am MT angeschlossenen IP Netzen?? 🤔

Man kann hier nur vermuten das deine interne Layer 2 Kommunikation also das Bridging zw. Host und Containern etc. falsch oder fehlerhaft ist so das die Container keine L2 Kommunikation zum entsprechenden VLAN haben. Hier solltest du also sinnvollerweise mal ansetzen statt unnötigerweise am Mikrotik zu suchen.
Das dann eine Netz Verbindung scheitert muss einen dann nicht groß wundern!

Ob deine VLAN Setups generell korrekt sind kannst du im Mikrotik VLAN Tutorial und auch im Host VLAN Tutorial nachkontrollieren. Da entsprechende Hostkonfigs und Router Setups hier fehlen kann man nur frei raten. face-sad
Thor2605
Thor2605 03.09.2024 um 12:11:40 Uhr
Goto Top
Danke dir für deine Antwort!

Ja ich gehe jetzt auch eher davon aus, dass die Konfiguration innerhalb des Ubuntu-Servers nicht stimmt.

Kannst du mir sagen wie ich das korrekt auf Ubuntu-Seite konfiguriere?
Die VLANs werden auf jeden Fall richtig vom Mikrotik an den Port des Ubuntu-Servers weitergereicht.
Habe mich akribisch genau an die Tutorials gehalten. Echt super Anleitungen!
14260433693
14260433693 03.09.2024 aktualisiert um 12:16:01 Uhr
Goto Top
docker network create -d macvlan \
    --subnet=172.16.20.0/24 \
    --gateway=172.16.20.1 \
    -o parent=eth0.20 macvlan20
docker network create -d macvlan \
    --subnet=172.16.30.0/24 \
    --gateway=172.16.30.1 \
    -o parent=eth0.30 macvlan30
802.1Q trunk bridge mode

Gruß
Thor2605
Thor2605 03.09.2024 um 12:33:49 Uhr
Goto Top
Genau das hab ich jetzt auch so gemacht.
Allerdings landen so alle Anfragen von einem Docker-Container im VLAN 1 im Mikrotik als input...
14260433693
14260433693 03.09.2024 aktualisiert um 12:36:14 Uhr
Goto Top
Dann ist deine Config fehlerhaft. Wir kennen weder deine Ubuntu Config noch die deines Mikrotik.

Klappt hier im Test einwandfrei, Config folgt.
aqui
aqui 03.09.2024 aktualisiert um 12:37:45 Uhr
Goto Top
von einem Docker-Container im VLAN 1 im Mikrotik als input...
Zeigt dann ja klar das dein VLAN Tagging am Host nicht greift und diese Frames UNgetaggt gesendet werden und sie somit im PVID VLAN 1 am MT landen!
Ohne die Konfig zu kennen in der Tat dann Raterei. face-sad
14260433693
14260433693 03.09.2024 aktualisiert um 13:01:35 Uhr
Goto Top
back-to-topMikrotik Setup (nur der relevante Teil für die VLANs, ohne Bridge)
# vlan ifs erstellen
/interface vlan add name=vlan20 vlan-id=20 interface=ether2
/interface vlan add name=vlan30 vlan-id=30 interface=ether2
# IP-Adressen zuweisen
/ip address add address=172.16.20.1/24 interface=vlan20
/ip address add address=172.16.30.1/24 interface=vlan30

back-to-topMikrotik Setup falls auf dem Mikrotik eine VLAN-Bridge aktiv ist dann so
# vlan ifs erstellen
/interface vlan add name=vlan20 vlan-id=20 interface=bridge-local
/interface vlan add name=vlan30 vlan-id=30 interface=bridge-local
# IP-Adressen zuweisen
/ip address add address=172.16.20.1/24 interface=vlan20
/ip address add address=172.16.30.1/24 interface=vlan30
# Port zur Bridge hinzufügen
/interface bridge port add bridge=bridge-local interface=ether2
# VLANs auf dem Port in der bridge taggen
/interface bridge vlan add bridge=bridge-local tagged=bridge-local,ether2 vlan-ids=20
/interface bridge vlan add bridge=bridge-local tagged=bridge-local,ether2 vlan-ids=30

back-to-topGeneric Linux Setup
# vlans anlegen
ip link add link eth0 name eth0.20 type vlan id 20
ip link add link eth0 name eth0.30 type vlan id 30
ip link set eth0.20 up
ip link set eth0.30 up

# Docker networks anlegen
docker network create -d macvlan \
    --subnet=172.16.20.0/24 \
    --gateway=172.16.20.1 \
    -o parent=eth0.20 macvlan20

docker network create -d macvlan \
    --subnet=172.16.30.0/24 \
    --gateway=172.16.30.1 \
    -o parent=eth0.30 macvlan30

# test container im Network macvlan20 mit IP 172.16.20.10 starten, darin kannst du dann das entsprechende Gateway erfolgreich pingen, anderes Netzwerk dito ...
docker run --rm --name macvlantest -ti --network macvlan20 --ip 172.16.20.10 alpine /bin/sh
Läuft hier einwandfrei.
Thor2605
Thor2605 03.09.2024 um 13:00:16 Uhr
Goto Top
Danke schön dann probiere ich das mal.
Hatte mich im netplan versucht, aber das scheint irgendwie nicht so ganz zu klappen.
Bzw. mach ich da was falsch und weiß nicht was...
14260433693
14260433693 03.09.2024 aktualisiert um 13:19:48 Uhr
Goto Top
Zitat von @Thor2605:

Danke schön dann probiere ich das mal.
Hatte mich im netplan versucht, aber das scheint irgendwie nicht so ganz zu klappen.
Bzw. mach ich da was falsch und weiß nicht was...
Das ist auch nicht schwer dort mehrere VLANs auf ein Interface zu packen ...
network:
    version: 2
    ethernets:
        ens33:
            dhcp4: true
    vlans:
        vlan.20:
            id: 20
            link: ens33
        vlan.30:
            id: 30
            link: ens33
Adressen in den VLANs braucht der Host ja selbst nicht, die kann man also weg lassen wenn man sie nicht zwingend benötigt.
aqui
aqui 03.09.2024 um 13:26:47 Uhr
Goto Top
Typo in der VLAN 30 ID?! 🤔
14260433693
14260433693 03.09.2024 aktualisiert um 13:30:32 Uhr
Goto Top
Korrigiert. Danke.
Thor2605
Thor2605 03.09.2024 um 13:58:29 Uhr
Goto Top
Ich glaube mein Fehler war den vlans im netplan noch eigene IP Adressen zu geben und auf das gateway zu routen?
Zumindest hatte ich das so drin bisher...
14260433693
14260433693 03.09.2024 aktualisiert um 15:28:16 Uhr
Goto Top
Zitat von @Thor2605:

Ich glaube mein Fehler war den vlans im netplan noch eigene IP Adressen zu geben und auf das gateway zu routen?
Das ist irrelevant ob du da eine IP drauf bindest oder nicht, nötig sind sie nicht. Das MACVLAN wird ja quasi physisch auf das VLAN-Interface gemappt und kommuniziert direkt auf Layer-2 des VLAN-Interfaces, der Host ist so also nicht in die IP-Kommmunikation der Container involviert, der Container nutzt eine eigene MAC.
Thor2605
Thor2605 03.09.2024 um 16:20:58 Uhr
Goto Top
Hab es gerade nochmal neu aufgesetzt.

Leider kommen immer noch alle Anfragen generell auf VLAN-1 rein.
firewall

Die ifconfig von Ubuntu:
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.100  netmask 255.255.255.0  broadcast 172.16.1.255
        inet6 fe80::eaff:1eff:fed2:d95f  prefixlen 64  scopeid 0x20<link>
        ether e8:ff:1e:d2:d9:5f  txqueuelen 1000  (Ethernet)
        RX packets 524916  bytes 180144838 (180.1 MB)
        RX errors 0  dropped 13246  overruns 0  frame 0
        TX packets 457670  bytes 83319785 (83.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0.20: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::eaff:1eff:fed2:d95f  prefixlen 64  scopeid 0x20<link>
        ether e8:ff:1e:d2:d9:5f  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0.30: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::eaff:1eff:fed2:d95f  prefixlen 64  scopeid 0x20<link>
        ether e8:ff:1e:d2:d9:5f  txqueuelen 1000  (Ethernet)
        RX packets 7  bytes 294 (294.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0.40: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::eaff:1eff:fed2:d95f  prefixlen 64  scopeid 0x20<link>
        ether e8:ff:1e:d2:d9:5f  txqueuelen 1000  (Ethernet)
        RX packets 7  bytes 294 (294.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7  bytes 586 (586.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0.80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::eaff:1eff:fed2:d95f  prefixlen 64  scopeid 0x20<link>
        ether e8:ff:1e:d2:d9:5f  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 516 (516.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Netzwerke dann entsprechend per Docker angelegt und in VLAN20, VLAN30, VLAN40 und VLAN80 benannt.

mcvlan

Hier noch der Export aus meinem Mikrotik
# 2024-09-03 16:14:42 by RouterOS 7.15.3
# software id = UF8Y-C8SH
#
# model = C53UiG+5HPaxD2HPaxD
# serial number = HGH09S3FPPC
/interface bridge
add name=bridge1 vlan-filtering=yes
/interface ethernet
set [ find default-name=ether1 ] name=P1-Uplink
set [ find default-name=ether2 ] name=P2-TP-Link-SG108E
set [ find default-name=ether3 ] name=P3-Synology
set [ find default-name=ether4 ] name=P4-VLAN50
set [ find default-name=ether5 ] name=P5-Docker
/interface vlan
add interface=bridge1 name=vlan-01-Default vlan-id=1
add interface=bridge1 name=vlan-10-NAS vlan-id=10
add interface=bridge1 name=vlan-20-Docker-Infrastruktur vlan-id=20
add interface=bridge1 name=vlan-30-Docker-Security vlan-id=30
add interface=bridge1 name=vlan-40-Docker-HomeAutomation vlan-id=40
add interface=bridge1 name=vlan-50-Home vlan-id=50
add interface=bridge1 name=vlan-55-Sonos vlan-id=55
add interface=bridge1 name=vlan-60-Gast vlan-id=60
add interface=bridge1 name=vlan-70-Entertainment vlan-id=70
add interface=bridge1 name=vlan-80-Docker-Apps vlan-id=80
add interface=bridge1 name=vlan-90-IoT vlan-id=90
add interface=bridge1 name=vlan-91-IoT-Web vlan-id=91
/interface list
add comment="Alle Interfaces mit WAN-Zugang" name=WAN  
/interface wifi aaa
add disabled=no name=WIFI password-format=AA:AA:AA:AA:AA:AA username-format=\
    AA:AA:AA:AA:AA:AA
/interface wifi channel
add band=2ghz-ax disabled=no frequency=2412,2437,2462 name=ch2G width=20mhz
add band=5ghz-ax disabled=no name=ch5G skip-dfs-channels=all width=\
    20/40/80mhz
/interface wifi datapath
add bridge=bridge1 disabled=no name=data-main
/interface wifi security
add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \
    group-key-update=30m name=secWIFI
/interface wifi configuration
add aaa=WIFI antenna-gain=3 channel=ch2G country=Germany datapath=data-main \
    disabled=no mode=ap name=cfg2G-AX security=secWIFI ssid=Greenpoint
add aaa=WIFI antenna-gain=6 channel=ch5G country=Germany datapath=data-main \
    disabled=no mode=ap name=cfg5G-AX security=secWIFI ssid=Greenpoint_5G
/ip pool
add name=dhcp_pool_01-Default ranges=172.16.1.100-172.16.1.200
add name=dhcp_pool_10-NAS ranges=172.16.10.100-172.16.10.200
add name=dhcp_pool_20-Docker-Infrastruktur ranges=172.16.20.130-172.16.20.200
add name=dhcp_pool_30-Docker-Security ranges=172.16.30.130-172.16.30.200
add name=dhcp_pool_40-Docker-HomeAutomation ranges=\
    172.16.40.130-172.16.40.200
add name=dhcp_pool_50-Home ranges=172.16.50.100-172.16.50.200
add name=dhcp_pool_60-Gast ranges=172.16.60.100-172.16.60.200
add name=dhcp_pool_70-Entertainment ranges=172.16.70.100-172.16.70.200
add name=dhcp_pool_80-Docker-Apps ranges=172.16.80.130-172.16.80.200
add name=dhcp_pool_90-IoT ranges=172.16.90.100-172.16.90.200
add name=dhcp_pool_91-IoT-Web ranges=172.16.91.100-172.16.91.200
add name=dhcp_pool_55-Sonos ranges=172.16.55.100-172.16.55.200
/ip dhcp-server
add address-pool=dhcp_pool_01-Default interface=vlan-01-Default name=\
    dhcp-01-Default
add address-pool=dhcp_pool_10-NAS interface=vlan-10-NAS name=dhcp-10-NAS
add address-pool=dhcp_pool_20-Docker-Infrastruktur interface=\
    vlan-20-Docker-Infrastruktur name=dhcp-20-Docker-Infrastruktur
add address-pool=dhcp_pool_30-Docker-Security interface=\
    vlan-30-Docker-Security name=dhcp-30-Docker-Security
add address-pool=dhcp_pool_40-Docker-HomeAutomation interface=\
    vlan-40-Docker-HomeAutomation name=dhcp-40-Docker-HomeAutomation
add address-pool=dhcp_pool_50-Home interface=vlan-50-Home name=dhcp-50-Home
add address-pool=dhcp_pool_60-Gast interface=vlan-60-Gast name=dhcp-60-Gast
add address-pool=dhcp_pool_70-Entertainment interface=vlan-70-Entertainment \
    name=dhcp-70-Entertainment
add address-pool=dhcp_pool_80-Docker-Apps interface=vlan-80-Docker-Apps name=\
    dhcp-80-Docker-Apps
add address-pool=dhcp_pool_90-IoT interface=vlan-90-IoT name=dhcp-90-IoT
add address-pool=dhcp_pool_91-IoT-Web interface=vlan-91-IoT-Web name=\
    dhcp-91-IoT-Web
add address-pool=dhcp_pool_55-Sonos interface=vlan-55-Sonos name=\
    dhcp-55-Sonos
/routing pimsm instance
add afi=ipv4 disabled=no name=pimsm-instance1 vrf=main
/interface bridge port
add bridge=bridge1 ingress-filtering=no interface=P2-TP-Link-SG108E
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged \
    interface=P3-Synology pvid=10
add bridge=bridge1 interface=P5-Docker
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged \
    interface=P4-VLAN50 pvid=50
/ipv6 settings
set disable-ipv6=yes
/interface bridge vlan
add bridge=bridge1 tagged=bridge1 untagged=P2-TP-Link-SG108E vlan-ids=1
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17 vlan-ids=10
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,P5-Docker,*16,*17 \
    vlan-ids=20
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,P5-Docker,*16,*17 \
    vlan-ids=30
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,P5-Docker,*16,*17 \
    vlan-ids=40
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17,P5-Docker \
    vlan-ids=50
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17 vlan-ids=60
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17 vlan-ids=70
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,P5-Docker,*16,*17 \
    vlan-ids=80
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17 vlan-ids=90
add bridge=bridge1 tagged=bridge1,P2-TP-Link-SG108E,*16,*17 vlan-ids=91
add bridge=bridge1 tagged=bridge1,*16,*17,P2-TP-Link-SG108E,P5-Docker \
    vlan-ids=55
/interface list member
add interface=vlan-10-NAS list=WAN
add interface=vlan-50-Home list=WAN
add interface=vlan-60-Gast list=WAN
add interface=vlan-70-Entertainment list=WAN
add interface=vlan-91-IoT-Web list=WAN
add interface=vlan-20-Docker-Infrastruktur list=WAN
add interface=vlan-30-Docker-Security list=WAN
add interface=vlan-40-Docker-HomeAutomation list=WAN
add interface=vlan-55-Sonos list=WAN
add interface=vlan-80-Docker-Apps list=WAN
/interface wifi access-list
add action=query-radius disabled=no radius-accounting=no
/interface wifi cap
set caps-man-addresses=127.0.0.1 certificate=request enabled=yes
/interface wifi capsman
set ca-certificate=auto certificate=auto enabled=yes package-path="" \  
    require-peer-certificate=no upgrade-policy=none
/interface wifi provisioning
add action=create-dynamic-enabled disabled=no master-configuration=cfg2G-AX \
    name-format=WIFI2G supported-bands=2ghz-ax
add action=create-dynamic-enabled disabled=no master-configuration=cfg5G-AX \
    name-format=WIFI5G supported-bands=5ghz-ax
/ip address
add address=192.168.178.200/24 interface=P1-Uplink network=192.168.178.0
add address=172.16.1.1/24 interface=vlan-01-Default network=172.16.1.0
add address=172.16.10.1/24 interface=vlan-10-NAS network=172.16.10.0
add address=172.16.20.1/24 interface=vlan-20-Docker-Infrastruktur network=\
    172.16.20.0
add address=172.16.30.1/24 interface=vlan-30-Docker-Security network=\
    172.16.30.0
add address=172.16.40.1/24 interface=vlan-40-Docker-HomeAutomation network=\
    172.16.40.0
add address=172.16.50.1/24 interface=vlan-50-Home network=172.16.50.0
add address=172.16.60.1/24 interface=vlan-60-Gast network=172.16.60.0
add address=172.16.70.1/24 interface=vlan-70-Entertainment network=\
    172.16.70.0
add address=172.16.80.1/24 interface=vlan-80-Docker-Apps network=172.16.80.0
add address=172.16.90.1/24 interface=vlan-90-IoT network=172.16.90.0
add address=172.16.91.1/24 interface=vlan-91-IoT-Web network=172.16.91.0
add address=172.16.55.1/24 interface=vlan-55-Sonos network=172.16.55.0
/ip dhcp-server network
add address=172.16.1.0/24 gateway=172.16.1.1
add address=172.16.10.0/24 dns-server=172.16.30.110 gateway=172.16.10.1 \
    ntp-server=172.16.10.1 wins-server=172.16.30.110
add address=172.16.20.0/24 dns-server=172.16.30.110 gateway=172.16.20.1 \
    ntp-server=172.16.20.1 wins-server=172.16.30.110
add address=172.16.30.0/24 dns-server=172.16.30.110 gateway=172.16.30.1 \
    ntp-server=172.16.30.1 wins-server=172.16.30.110
add address=172.16.40.0/24 dns-server=172.16.30.110 gateway=172.16.40.1 \
    ntp-server=172.16.40.1 wins-server=172.16.30.110
add address=172.16.50.0/24 dns-server=172.16.30.110 gateway=172.16.50.1 \
    ntp-server=172.16.50.1 wins-server=172.16.30.110
add address=172.16.55.0/24 dns-server=172.16.30.110 gateway=172.16.55.1
add address=172.16.60.0/24 dns-server=172.16.30.110 gateway=172.16.60.1 \
    ntp-server=172.16.60.1 wins-server=172.16.30.110
add address=172.16.70.0/24 dns-server=172.16.30.110 gateway=172.16.70.1 \
    ntp-server=172.16.70.1 wins-server=172.16.30.110
add address=172.16.80.0/24 dns-server=172.16.30.110 gateway=172.16.80.1 \
    ntp-server=172.16.80.1 wins-server=172.16.30.110
add address=172.16.90.0/24 dns-server=172.16.30.110 gateway=172.16.90.1 \
    ntp-server=172.16.90.1 wins-server=172.16.30.110
add address=172.16.91.0/24 dns-server=172.16.30.110 gateway=172.16.91.1 \
    ntp-server=172.16.91.1 wins-server=172.16.30.110
/ip dns
set allow-remote-requests=yes servers=172.16.30.110,192.168.178.1
/ip firewall address-list
add address=172.16.1.0/24 list=VLAN1
add address=172.16.10.0/24 list=VLAN10
add address=172.16.20.0/24 list=VLAN20
add address=172.16.30.0/24 list=VLAN30
add address=172.16.40.0/24 list=VLAN40
add address=172.16.50.0/24 list=VLAN50
add address=172.16.60.0/24 list=VLAN60
add address=172.16.70.0/24 list=VLAN70
add address=172.16.80.0/24 list=VLAN80
add address=172.16.90.0/24 list=VLAN90
add address=172.16.100.0/24 list=VLAN100
/ip firewall filter
add action=accept chain=input comment=\
    "ALLG | Aufgebaute Verbindungen erlauben" connection-state=\  
    established,related
add action=accept chain=forward comment=\
    "ALLG | Aufgebaute Verbindungen weiterleiten" connection-state=\  
    established,related
add action=drop chain=input comment="ALLG | Alle Ung\FCltigen verwerfen" \  
    connection-state=invalid
add action=drop chain=forward comment=\
    "ALLG | Alle ung\FCltigen Weiterleitungen verwerfen" connection-state=\  
    invalid
add action=accept chain=forward comment="LWAN --> VLAN30 | DNS Zugriff UDP" \  
    dst-port=53 in-interface-list=WAN out-interface=vlan-30-Docker-Security \
    protocol=udp
add action=accept chain=forward comment="LWAN --> VLAN30 | DNS Zugriff TCP" \  
    dst-port=53 in-interface-list=WAN out-interface=vlan-30-Docker-Security \
    protocol=tcp
add action=drop chain=forward comment="!LWAN --> VLAN30 | DNS drop UDP" \  
    dst-port=53 in-interface-list=!WAN out-interface=vlan-30-Docker-Security \
    protocol=udp
add action=drop chain=forward comment="!LWAN --> VLAN30 | DNS drop TCP" \  
    dst-port=53 in-interface-list=!WAN out-interface=vlan-30-Docker-Security \
    protocol=tcp
add action=accept chain=input comment="VLAN30 -> FW | DNS Zugriff TCP" \  
    dst-port=53 in-interface=vlan-30-Docker-Security protocol=tcp
add action=accept chain=input comment="VLAN30 -> FW | DNS Zugriff UDP" \  
    dst-port=53 in-interface=vlan-30-Docker-Security protocol=udp
add action=accept chain=input comment="Home -> FW | Zugriff erlauben" \  
    in-interface=vlan-50-Home
add action=accept chain=forward comment="ALLG | LAN-WAN Internetzugriff" \  
    in-interface-list=WAN out-interface=P1-Uplink
add action=accept chain=forward comment="Home -> ALL | Alles zulassen" \  
    in-interface=vlan-50-Home
add action=accept chain=forward comment="VLAN40 -> Sonos | Zugriff erlauben" \  
    in-interface=vlan-40-Docker-HomeAutomation out-interface=vlan-55-Sonos
add action=accept chain=forward comment="SONOS -> HA | Zugriff erlauben" \  
    in-interface=vlan-55-Sonos out-interface=vlan-40-Docker-HomeAutomation
add action=accept chain=forward comment="SONOS -> HOME | Sonos Controller" \  
    dst-port=1900,1901,1902 in-interface=vlan-55-Sonos out-interface=\
    vlan-50-Home protocol=tcp
add action=accept chain=forward comment=\
    "VLAN90 -> VLAN40 : Shelly CoIoT auf HA" dst-address=172.16.40.100 \  
    dst-port=5683 in-interface=vlan-90-IoT protocol=udp
add action=accept chain=forward comment="ALL -> VLAN40 : MQTT" dst-address=\  
    172.16.40.110 dst-port=1883,8883 protocol=tcp
add action=accept chain=forward comment="VLAN40 -> ALL : MQTT" dst-port=\  
    1883,8883 protocol=tcp src-address=172.16.40.110
add action=accept chain=forward comment="ALL -> VLAN40 : ICMP" dst-address=\  
    172.16.40.110 protocol=icmp
add action=accept chain=input comment="LOG | Input drop alles andere" \  
    disabled=yes in-interface=vlan-20-Docker-Infrastruktur log=yes \
    log-prefix=Input
add action=accept chain=forward comment="LOG | Forward drop alles andere" \  
    disabled=yes in-interface=vlan-20-Docker-Infrastruktur log=yes \
    log-prefix=forward
add action=drop chain=input comment="ALLG | Input drop alles andere" \  
    disabled=yes log=yes log-prefix="drop in"  
add action=drop chain=forward comment="ALLG | Forward drop alles andere" \  
    disabled=yes log=yes log-prefix="drop fw"  
/ip firewall nat
add action=masquerade chain=srcnat out-interface=P1-Uplink
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.178.1 \
    routing-table=main scope=30 suppress-hw-offload=no target-scope=10
/radius
add address=172.16.30.102 service=wireless
/radius incoming
set accept=yes
/routing igmp-proxy
set quick-leave=yes
/routing pimsm interface-template
add disabled=no instance=pimsm-instance1 interfaces=\
    vlan-50-Home,vlan-55-Sonos
/system clock
set time-zone-name=Europe/Berlin
/system identity
set name=Mikrotik
/system note
set show-at-login=no
/system ntp client
set enabled=yes
/system ntp server
set enabled=yes multicast=yes
/system ntp client servers
add address=0.pool.ntp.org
add address=1.pool.ntp.org
add address=2.pool.ntp.org
add address=3.pool.ntp.org
/user-manager
set certificate=*0
/user-manager router
add address=172.16.30.102 name=freeradius
14260433693
14260433693 03.09.2024 aktualisiert um 16:30:39 Uhr
Goto Top
Da der Traffic schon von der falschen Absender-IP kommt liegt das Problem schon auf dem Ubuntu. Du hast vermutlich eine fehlerhafte SRC NAT Regel auf dem Ubuntu welche sämtlichen Traffic auf die 172.16.1.100 ausgehend NATed
Thor2605
Thor2605 03.09.2024 um 16:40:06 Uhr
Goto Top
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    3   160 DOCKER     0    --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER     0    --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  0    --  *      !docker0  172.17.0.0/16        0.0.0.0/0         
64733 3884K MASQUERADE  0    --  *      !br-89b5a5f7bf4e  172.18.0.0/16        0.0.0.0/0 
    0     0 MASQUERADE  6    --  *      *       172.18.0.6           172.18.0.6           tcp dpt:8080
    0     0 MASQUERADE  6    --  *      *       172.18.0.6           172.18.0.6           tcp dpt:444
    0     0 MASQUERADE  6    --  *      *       172.18.0.6           172.18.0.6           tcp dpt:443
    0     0 MASQUERADE  6    --  *      *       172.18.0.6           172.18.0.6           tcp dpt:81
    0     0 MASQUERADE  6    --  *      *       172.18.0.6           172.18.0.6           tcp dpt:80

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     0    --  docker0 *       0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     0    --  br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0   
    0     0 DNAT       6    --  !br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.18.0.6:8080
    0     0 DNAT       6    --  !br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0            tcp dpt:444 to:172.18.0.6:444
    0     0 DNAT       6    --  !br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:172.18.0.6:443
    0     0 DNAT       6    --  !br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0            tcp dpt:81 to:172.18.0.6:81
    0     0 DNAT       6    --  !br-89b5a5f7bf4e *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.18.0.6:80

Zumindest sehe ich hier keine NAT-Regel die so wäre...
14260433693
14260433693 03.09.2024 aktualisiert um 16:48:55 Uhr
Goto Top
Btw. hier stimmt die Zuweisung zu den Zonen nicht, alles WAN ...
/interface list member
add interface=vlan-10-NAS list=WAN
add interface=vlan-50-Home list=WAN
add interface=vlan-60-Gast list=WAN
add interface=vlan-70-Entertainment list=WAN
add interface=vlan-91-IoT-Web list=WAN
add interface=vlan-20-Docker-Infrastruktur list=WAN
add interface=vlan-30-Docker-Security list=WAN
add interface=vlan-40-Docker-HomeAutomation list=WAN
add interface=vlan-55-Sonos list=WAN
add interface=vlan-80-Docker-Apps list=WAN
Thor2605
Thor2605 03.09.2024 um 16:50:42 Uhr
Goto Top
Das sind die VLANs die erst mal auf den Uplink ins Internet dürfen... Oder hab ich da was falsch verstanden?

Dachte damit kann ich Listen definieren, die dann als Firewall Input-List verwendet werden können...
14260433693
14260433693 03.09.2024 aktualisiert um 16:54:05 Uhr
Goto Top
Zitat von @Thor2605:

Das sind die VLANs die erst mal auf den Uplink ins Internet dürfen... Oder hab ich da was falsch verstanden?
Wenn du die Default-Listen nutzt ja, dann ist "WAN" nur für echte WAN-Ports und "LAN" für LAN-Ports gedacht.
Dachte damit kann ich Listen definieren, die dann als Firewall Input-List verwendet werden können...
So ist es ja auch.
Thor2605
Thor2605 03.09.2024 um 16:54:03 Uhr
Goto Top
Wollt erst mal alle VLANs ins Internet lassen und langsam dann alles zu machen...

Hast du noch einen Rat wegen dem falschen Routing?
14260433693
14260433693 03.09.2024 aktualisiert um 16:55:44 Uhr
Goto Top
Schau dir die IPs der Container auf der Konsole an indem du dich direkt per interaktivem Terminal in die Container schaltest ...
14260433693
14260433693 03.09.2024 aktualisiert um 17:03:09 Uhr
Goto Top
Vergleiche auch mal die MAC Adressen aus dem Mikrotik LOG mit denen auf dem Ubuntu Server. Die Container sollten eigene MAC Adressen nutzen (auch per Terminal direkt in die Container schauen und per ip a zeigen lassen)!

Hast du die macvlan Netzwerke überhaupt den Containern korrekt zugewiesen?

Strategisch vorgehen dann findest du den Übeltäter.

Firewalls sollte man bei der Fehlersuche immer erst mal auf Durchzug schalten um diese ausschließen zu können.
Thor2605
Thor2605 03.09.2024 um 17:12:24 Uhr
Goto Top
Das passt alles, zumindest sind alle Docker-Container mit deren IPs, die ich statisch vergeben habe ohne Firewall-Regeln erreichbar.

default via 172.16.1.1 dev enp1s0 proto dhcp src 172.16.1.100 metric 100
172.16.1.0/24 dev enp1s0 proto kernel scope link src 172.16.1.100 metric 100
172.16.1.1 dev enp1s0 proto dhcp scope link src 172.16.1.100 metric 100
172.16.30.110 via 172.16.1.1 dev enp1s0 proto dhcp src 172.16.1.100 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.18.0.0/16 dev br-89b5a5f7bf4e proto kernel scope link src 172.18.0.1
192.168.178.1 via 172.16.1.1 dev enp1s0 proto dhcp src 172.16.1.100 metric 100

Ist eventuell die default Route schuld?
Hab testweise die Routen zu den einzelnen VLAN Interfaces in Ubuntu zugewiesen aber das hat leider nichts gebracht...
14260433693
14260433693 03.09.2024 aktualisiert um 17:27:41 Uhr
Goto Top
Ist eventuell die default Route schuld?
Nein, innerhalb von den Containern wird automatisch das GW gesetzt das im jeweiligen Docker-Netzwerk angegeben ist. Du scheinst das MACVLAN-Prinzip noch nicht ganz verstanden zu haben wenn du das fragst. Bei einem MACVLAN bekommt der Container eine eigene MAC-Adresse mit der er direkt am physischen parent Interface des HOSTs eingehängt wird somit hat der HOST selbst nichts mehr mit dem IP-Forwarding des Containers zu tun, das macht der Container dann direkt über Layer-2.

Wie gesagt per Terminal direkt in den Container verbinden und nachschauen ...

Und vor allem erst mal das Prinzip und die Voraussetzungen von MACVLAN verstehen
https://docs.docker.com/engine/network/drivers/macvlan/

Hab testweise die Routen zu den einzelnen VLAN Interfaces in Ubuntu zugewiesen
Never ever do this, der Host kennt auf im angelegte VLANs selbst somit Bullshit hier Routen zu erstellen ...
aqui
aqui 03.09.2024 aktualisiert um 17:26:34 Uhr
Goto Top
Ist eventuell die default Route schuld?
Du meinst die von Ubuntu und seinen Containern?
Nein, die kann es nicht sein. Zumal es dort ja auch keinerlei "Routen" in dem Sinne gibt, denn der Server hängt ja direkt am MT und seinen Netzen. Geroutet werden muss da also nix! Wenn überhaupt gibts da nur nur Default Gateways bzw. eine Default Route.
Und auch nur DIE sind relevant!
Bei den Containern zeigen die immer auf die MT IP Adresse im jeweiligen VLAN in dem sie betrieben werden. Das sollte dann logischerweise auch immer anpingbar sein!
Hab testweise die Routen zu den einzelnen VLAN Interfaces in Ubuntu zugewiesen
Das ist falsch und kontraproduktiv, also besser wieder löschen. Es gibt keine spezifischen Routen dort sondern einzig nur die Default Route.
Die Container und auch der Server sind ja im Layer 2 direkt am MT und seinen Netzen dran folglich müssen die Container auch immer vom MT und vice versa pingbar sein.
Thor2605
Thor2605 03.09.2024 um 17:41:40 Uhr
Goto Top
Tatsächlich dachte ich, ich hätte macvlan verstanden nach etlichen Youtube-Erklärungen, eingerichtete Systeme auf Synology Basis und Literatur im Netz.
Aber scheinbar scheitert mein Wissen dann doch mit VLANs und in den VLANs dann die macvlans zu erzeugen...

Hab jetzt mal die Konsole eines Docker-Containers im VLAN40 offen.
IP-Adresse 172.16.40.100

Eine traceroute zum Gateway des Containers geht auch ordnungsgemäß über das Gateway 172.16.40.1.
Eine tracerout zu einem anderen Gateway geht allerdings über eine Adresse 172.18.0.1 mit Namen docker.local und von dort dann erst zum Gateway 172.16.50.1.

Im Docker-Container selbst habe ich logischerweise nur das network VLAN40 definiert.
Thor2605
Thor2605 03.09.2024 um 17:55:57 Uhr
Goto Top
Das Proxy-Netzwerk zu meinem traefik ist schuld daran.
Wenn ich das raus nehme kommt ein Ping aus dem Container auch richtig in der Firewall an.

Allerdings bekomme ich nichts zurück.

Folgende Testeinträge habe ich in der Firewall angelegt:
add action=accept chain=forward in-interface=vlan-40-Docker-HomeAutomation log=yes
add action=accept chain=forward in-interface=vlan-50-Home

Und folgendes wird in der Firewall geloggt:
forward: in:vlan-40-Docker-HomeAutomation out:vlan-50-Home, connection-state:new src-mac 02:42:ac:10:28:64, proto ICMP (type 8, code 0), 172.16.40.100->172.16.50.193, len 84
aqui
aqui 03.09.2024 aktualisiert um 18:28:06 Uhr
Goto Top
Allerdings bekomme ich nichts zurück.
Firewall ist was?? Dein Mikrotik?
Wenn ja ist das nicht weiter verwunderlich, denn da gibts laut deiner Schilderung ja nur die 2 IP VLANs .20.0 und .30.0. 🤔
Aber auch wenn solltest du den goldenen Rat von oben befolgen: "Firewalls sollte man bei der Fehlersuche immer erst mal auf Durchzug schalten um diese ausschließen zu können!!"
Thor2605
Thor2605 03.09.2024 um 18:33:10 Uhr
Goto Top
Ich glaube jetzt bin ich total durch für heute.

Ja die Mikrotik-Firewall meine ich.
Wenn die leer ist und keine Regel hat, dann ist die doch auf Durchzug oder nicht?
aqui
aqui 03.09.2024 um 18:36:45 Uhr
Goto Top
Wenn die leer ist und keine Regel hat, dann ist die doch auf Durchzug oder nicht?
Ja, richtig!
Thor2605
Thor2605 03.09.2024 um 18:40:10 Uhr
Goto Top
Dann sollte ich doch eigentlich den Ping von meinem Docker-Container an meinen Laptop durch bekommen oder warum bekomme ich da keine Antwort?
14260433693
14260433693 03.09.2024 aktualisiert um 20:25:15 Uhr
Goto Top
Zitat von @Thor2605:

Dann sollte ich doch eigentlich den Ping von meinem Docker-Container an meinen Laptop durch bekommen oder warum bekomme ich da keine Antwort?

Klassiker, die Windows Firewall blockt per Default ICMP aus fremden Subnetzen, also das erst mal freischalten...
Thor2605
Thor2605 03.09.2024 um 20:31:29 Uhr
Goto Top
Danke das muss man wissen....
Vielen Dank läuft jetzt alles, aber leider ohne traefik.

Sobald ich das proxy-netzwerk (Bridge, 172.18.0.0/16) zu meinem Home-Assistant-Docker Container hinzufüge läuft alles unter VLAN ID 1.

Aber ehrlich gesagt verstehe ich nicht warum das passiert.
Hast mir da auch eine Idee?
14260433693
14260433693 03.09.2024 aktualisiert um 20:48:16 Uhr
Goto Top
Zitat von @Thor2605:

Danke das muss man wissen....
Vielen Dank läuft jetzt alles, aber leider ohne traefik.

Sobald ich das proxy-netzwerk (Bridge, 172.18.0.0/16) zu meinem Home-Assistant-Docker Container hinzufüge läuft alles unter VLAN ID 1.

Aber ehrlich gesagt verstehe ich nicht warum das passiert.
Hast mir da auch eine Idee?

RTFM ist da wie immer dein bester Ratgeber
Restrict the Scope of Service Discovery

Restrict the Scope of Service Discovery¶
By default, Traefik creates routes for all detected containers.

If you want to limit the scope of the Traefik service discovery, i.e. disallow route creation for some containers, you can do so in two different ways:

the generic configuration option exposedByDefault,
a finer granularity mechanism based on constraints.
Thor2605
Thor2605 03.09.2024 aktualisiert um 20:58:06 Uhr
Goto Top
Das hatte ich schon gesetzt.

services:
  traefik:
    container_name: traefik
    image: traefik:v3.1.2
    ports:
      - 80:80
      - 81:81
      - 443:443
      - 444:444
      - 8080:8080
    command:
      - "--providers.docker.exposedbydefault=false"  
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /home/tkrauss/docker/traefik/traefik.yaml:/etc/traefik/traefik.yaml:ro
      - /home/tkrauss/docker/traefik/conf/:/etc/traefik/conf/
      - /home/tkrauss/docker/traefik/certs/:/etc/traefik/certs/
      - /home/tkrauss/docker/traefik/users/:/etc/traefik/users/
      - /home/tkrauss/docker/traefik/logs/:/var/log/traefik
    environment:
      - CF_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXX
    restart: unless-stopped
    networks:
      vlan30:
        ipv4_address: 172.16.30.100
      proxy:

networks:
  vlan30:
    external: true
  proxy:
    external: true


Das passiert auch bei dem Container, wenn ich ein komplett neues bridge-Netzwerk anlege. Denke also nicht dass das mit dem Traefik zu tun hat...
Thor2605
Lösung Thor2605 04.09.2024 um 16:00:12 Uhr
Goto Top
Neuer Tag neues Glück...

Docker erstellt die Default-Route in einen Container über die alphabetische Reihenfolge.
Da mein proxy-Netzwerk zu traefik "proxy" hieß und meine VLANs "vlanXY" wurde die default route immer auf das proxy-Netzwerk gelegt und nicht auf das VLAN.

Habe jetzt das proxy-Netzwerk in "zproxy" umbenannt und alle Anfragen an die FW von Mikrotik kommen sauber rein und auf dem VLAN 1 ist Ruhe.

Ich hoffe ich konnte damit auch anderen dann helfen und die Suche ersparen.

@14260433693 und @aqui:
Vielen Dank für eure Hilfe und vor allem vielen Dank für eure Geduld mit mir!