Container Manager Netzwerkkonfiguration: Individuelle IP für Container

Benjamin83

Benutzer
Mitglied seit
09. Nov 2018
Beiträge
15
Punkte für Reaktionen
8
Punkte
53
Hallo,


Ich verzweifel langsam aber sicher an der Konfiguration des Netzwerks für meine Docker-Container. 😬

Ausgangslage:
Ich habe ein Heimnetzwerk mit einer DS718 mit DSM 7.2. Als Router ins Internet dient eine IPcop-Firewall, die auch als DHCP-Server (DHCP-Range 192.168.0.65 - 192.168.0.250) dient. Bisher habe ich nur ein IP-Netz( 192.168.0.0 ; 255.255.255.0). Die interne Adresse der Firewall ist 192.168.0.11, Die DS hat die 192.168.0.10 als SLB Bond auf beiden LAN-Ports. Die FW auf der DS ist deaktiviert. Die Funktion "Mehrere Gateways aktivieren" in den Netzwerkeinstellungen (Allgemein -> Erweitert) habe ich aktiviert, aber keine manuelle statische Route gesetzt.) Auf dem Switch dazwischen ist nichts konfiguriert.

Worum geht es:
Ich will auf der DS eine Reihe von Container (so 5-6) betreiben, die über eine eigene IP erreichbar sein sollen.

Allerdings bekomme ich den Netzwerkzugriff für die Container einfach nicht hin. Nachdem was ich gelesen habe geht das nur mit einem mcVLAN. Ich hab schon ein paar Stunden damit verbracht.

Was ich versucht habe:
(Die Interessantesten Versuche durchnummeriert von A-D)

A) ein MCVLAN innerhalb der iprange des normalen Lan mit Gateway innerhalb des MCVLAN:

Bash:
docker network rm direktLan
sudo docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.32 --ip-range=192.168.0.32/27 -o parent=ovs_bond0 direktLan


Und einen Container darin gestartet:
Bash:
docker stop pihole
docker rm pihole
docker pull pihole/pihole
docker run -d --name=pihole \
-e WEBPASSWORD=XXXXXXXX \
-e DNSMASQ_USER=root \
-m 512m \
-v /volume2/docker/pihole/dnsmasq.d:/etc/dnsmasq.d \
-v /volume2/docker/pihole/pihole:/etc/pihole \
--net=direktLan \
--ip 192.168.0.33 \
--restart always \
pihole/pihole:latest

Der hat verhält sich jetzt aber sehr eigenartig.
Von der FW aus ist er erreichbar:

Bash:
ben@Ben-PC:~$ ssh root@192.168.0.11
Last login: Thu Nov 16 21:07:54 2023 from 192.168.0.85
[root@ipfire ~]# ping 192.168.0.33
PING 192.168.0.33 (192.168.0.33) 56(84) bytes of data.
64 bytes from 192.168.0.33: icmp_seq=1 ttl=64 time=0.839 ms
64 bytes from 192.168.0.33: icmp_seq=2 ttl=64 time=1.73 ms


Von der DS nicht:
Bash:
ben@Ben-PC:~$ ssh admin@192.168.0.10
admin@Synalogy:~$ sudo ping 192.168.0.33
PING 192.168.0.33 (192.168.0.33) 56(84) bytes of data.
From 192.168.0.10 icmp_seq=1 Destination Host Unreachable
From 192.168.0.10 icmp_seq=2 Destination Host Unreachable

Von anderen Geräten klappt es ebenfalls, meistens. Aber nicht immer. Keine Ahnung wann und warum.

Der Container selbst kann die Firewall erreichen, aber nicht die DS oder ein Ziel im Internet.
IP Konfiguration und Routing im Container sieht für mich ok aus:

a
Bash:
dmin@Synalogy:~$ sudo docker exec -it pihole bash
root@93d37c5f2ad0:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
25: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
    link/ether 02:42:c0:a8:00:21 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.33/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever

root@93d37c5f2ad0:/# ip route
default via 192.168.0.32 dev eth0 
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.33 

root@93d37c5f2ad0:/# ping 192.168.0.10
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
From 192.168.0.33 icmp_seq=1 Destination Host Unreachable

root@93d37c5f2ad0:/# ping 192.168.0.11
PING 192.168.0.11 (192.168.0.11) 56(84) bytes of data.
64 bytes from 192.168.0.11: icmp_seq=1 ttl=64 time=1.10 ms
64 bytes from 192.168.0.11: icmp_seq=2 ttl=64 time=0.552 ms

root@93d37c5f2ad0:/# ping 8.8.8.8     
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.0.33 icmp_seq=1 Destination Host Unreachable

root@93d37c5f2ad0:/# ping [URL='http://web.de']web.de[/URL] 
ping: web.de: Temporary failure in name resolution

(Ich habe auch noch einen anderen Container (mit anderem Base-Image) ausprobiert, am Container liegt es nicht.)

Auf der DS und der FW habe ich testweise verschiedene statische Routen eingetragen, aber alles wieder gelöscht. zumindest auf der DS gibt ers aber routen, die mir nichts sagen:
Bash:
admin@Synalogy:~$ ip route
default via 192.168.0.11 dev ovs_bond0  src 192.168.0.10
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown
192.168.0.0/24 dev ovs_bond0  proto kernel  scope link  src 192.168.0.10

FW:
Bash:
ben@Ben-PC:~$ ssh root@192.168.0.11
Last login: Fri Nov 17 15:11:27 2023 from 192.168.0.16
[root@ipfire ~]# ip route
default via 62.155.245.91 dev ppp0
62.155.245.91 dev ppp0 proto kernel scope link src 79.251.37.230
192.168.0.0/24 dev green0 proto kernel scope link src 192.168.0.11


Ich habe jetzt schon etliche Stunden damit verbracht, aber es klappt einfach nicht. Was ich (unter anderem) auch schon probiert habe:

B) Ein mcVlan im Bereich des lan (wie bei a)) aber als Gateway in dem Containern direkt die IP der FW. Hat auch nicht wirklich funktioniert. (Die genauen Infos hab ich nicht mehr, kann ich aber natürlich nochmal probieren, wenn es hilft.)

C) Ein Mcvlan aus nur einer IP Adresse (ohne Gateway) aus dem ganze normalen LAN (192.168.0.x) einem Container zuweisen.

Bash:
#docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.11 --ip-range=192.168.0.2/32 -o parent=ovs_bond0 PiholeLan

Das klappt, und der Container ist sauber erreichbar. Aber ich kann halt nur einen Container so versorgen, und ich kann auch nur ein mcVlan an den Bond der DS hängen. Ich brauche aber mindestens 3 von der DS unabhängige Adressen.

D) Ein mcvlan aus einem anderen IP-Bereich (192.168.1.0): Die Container kamen zur Firewall aber nicht weiter. Von der Firewall oder der DS waren die Container nicht zu erreichen, die FW hat versucht die andressen über die externe Schnittstelle (Internet) zu erreichen. Eine funktionierende statische Route auf der Firewall habe ich nicht hinbekommen.

Ich bin mir fast sicher, das ich irgend einen gewaltigen Denkfehler mache. Die Frage ist nur welchen!

Hat jemand eine Idee?
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Von der DS nicht:
klar nicht: https://www.synology-forum.de/threa...-fehler-500-im-portainer.129067/#post-1107193 (verwendeter Suchbegriff "macvlan host").
Von anderen Geräten klappt es ebenfalls, meistens. Aber nicht immer. Keine Ahnung wann und warum.
Es sollte immer klappen. Ein Docker macvlan Netzwerk ist im Grunde ein logisches Switch.der am Netzwerk des Parent-Intefaces hängt, mit eigenemDHCP-Server hat, der dann ips aus der definierten ip-range im Subnet ausgibt. Wichtig: die ip-range darf nicht von deinem LAN-DHCP Server zusätzlich(!) mit DHCP-Adressen bedient werden.
 

Benjamin83

Benutzer
Mitglied seit
09. Nov 2018
Beiträge
15
Punkte für Reaktionen
8
Punkte
53
Ok. Das erklärt es. Das klingt so, als wäre mcVlan tatsächlich nicht für alle Einsatzzweck das optimum. Wahrscheinlich ist es das einfachste den Pihole als Bridge laufen zu lassen und über die IP der DS anzusprechen. Für mache container ist führt aber mMn kein Weg an einer eigenen IP vorbei.

Es sollte immer klappen
Das mit der Erreichbarkeit der container von anderen Systemen aus dem LAN beobachte ich nochmal. Vieleichr war das ja ein anderes Problem. Gezielte reproduzieren könnte ich es heute, jedenfalls nicht mehr. Weder jetzt noch vorhin, als ich den Beitrag vorbereitet habe.

Aber das ist tatsächlich noch nicht das schlimmste. Das bei größte Problem ist, dass die Container nur die FW erreichen können. Sie kommen ihrerseits weder ins Internet noch ins LAN. Und das aus dem selben IP-Bereich, in dem auch alle anderen Geräte liegen. (Der DHCP-Berech liegt weiter hinten.)
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Macvlan brückt sich ins LAN rein. Ein Netzwerkpakete sollte auf dem Draht nicht mehr von einem Paket eines anderen Hosts unterscheidbar sein. Man muss auch eigentlich nichts weiter tun, als da Gateway des Netwerks beim Anlegen des macvlan Netzwerks anzugeben.

--gateway=192.168.0.32
Da muss die IP vom LAN-Gateway Richtung Internet rein. Bei dir ist 192.168.0.32 die erst ip der ip-range innerhalb deines Konfigurierten macvlan Netzwerks. Im Gegensatz zu einem Subnet sind die erst und letzte ip der Range auch nutzbar.

Wenn Dein Router die 192.168.0.1 haben sollte, dann gehört die dort auch eingetragen.
 
  • Like
Reaktionen: Benjamin83

Benjamin83

Benutzer
Mitglied seit
09. Nov 2018
Beiträge
15
Punkte für Reaktionen
8
Punkte
53
Das war der Fehler. Vielen Dank!

Inzwischen laufen die Container problemlos und zahlreich. :)


Falls jemand vor allem inem ähnlichen Problem steht hier meine beispielhafte Lösung für Pihole:


McVlan einrichten
Reicht einmalig, macht trotzdem Sinn es über den Aufgabenplaner zu starten, damit hat man den Befehl parat, falls man es nochmal ändern will:

Bash:
docker network rm direktLan
sudo docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=IP-AdresseDesROUTERS --ip-range=192.168.0.32/27 -o parent=NAMEDERSYNOLOGYNETZWERKSCHNITTSTELLE direktLan

Container mit eigener (statischer) IP starten
Starte ich regelmäßig über den Aufgabenplaner damit ich die Container Update.
Bash:
docker stop pihole

docker rm pihole sudo

docker pull pihole/pihole

docker docker run -d --name=pihole \
 -e WEBPASSWORD=PASSWORT \
 -e DNSMASQ_USER=root \
 -m 512m \
 -v /volumeX/docker/pihole/dnsmasq.d:/etc/dnsmasq.d \
 -v /volumeX/docker/pihole/pihole:/etc/pihole \
 --net=direktLan \
 --ip IPAUSDERMCVLANRANGE \
 --restart always 
  pihole/pihole:latest
 
Zuletzt bearbeitet:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat