Docker Macvlan + Port 53 erreichbar machen?

whazza83

New member
Hallo, Ich habe da ein Problem mit macvlan.

Ich habe Adguard Home installiert (nicht im Docker am laufen! Da Docker keine Internetverbindung dann mehr hatte).

Jetzt habe ich noch Technitium im Docker installiert.
Das Problem ist das beide den Port 53 nutzen, deswegen wollte ich für Technitium die macvlan verbindung einrichten!

Das erste Problem war das die Ip die ich bei macvlan eingerichtet hatte nicht erreichbar war im Browser was ich aber nach langen Google dann mit diesen Befehl beheben konnte
Code:
sudo ip link set enp0s3 promisc on

Dann gab es ein weiteres Problem, Ich konnte in Putty die angelegte Ip nicht anpingen was Ich dann auch beheben konnte mit.
Code:
sudo ip link add mvl-brg link enp0s3 type macvlan mode bridge
sudo ip addr add 192.168.178.xxx/32 dev mvl-brg

Technitium benutzt für das AdminPanel den Port :5380 was Ich auch im Browser aufrufen kann.

Aber leider Funktioniert der Port 53 nicht. Adguard Home Spuckt immer diese Meldung aus.

Server „192.168.178.xxx:53“: konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise

Ich komme da einfach nicht weiter. Gibt es jemanden der dafür eine Lösung hat?
 
Das Problem ist das beide den Port 53 nutzen
Willst Du die "beide" gleichzeitig ansprechen, oder werden die ggf. in Reihe geschaltet? Falls letzteres, kannst Du bei dem - der nicht direkt von den Clients konsultiert wird - den Port einfach auf z.B. 5353 ändern. Client fragt den ersten via 53, der erste fragt den zweiten auf Port 5353, welcher wiederum im Internet irgendwo wieder auf Port 53 nachfragt.
 
Also Adguard Home soll in den Router eigetragen werden und Technitium dann in Adguard Home unter Upstream-DNS-Server.
Die Sachen oben Teste Ich momentan in VirtualBox.

Es funktionieren auch alles soweit. Nur nicht der Port 53.

Ich habe das alles auch auf meinen Raspberry Pi5 am laufen ohne Macvlan, dort habe ich es so gemacht das Technitium auf den Port 5354:53 lauscht.
In Adguard Home kann man ja zum glück Dns Ip mit Port eintragen. Das Funktioniert auch alles Prima.

Aber ich wollte es gerne so haben das Ich nur die Ip eingeben kann ohne Port Angabe :5354.
 
Hab mir schon gedacht das nur eins davon als Container mit macvlan Interface läuft.

Kernel Sicherheitsfeatures verhindern, dass macvlan Eltern- und Kind-Interfaces miteinander kommunizieren können - und natürlich auch anders herum.

Das Eltern-Interface ist hierbei die Netzwerkschnittstelle vom Host, die Kind-Interfaces die, die von den von Containern mit macvlan Interface verwenden werden.

Wenn man dem Host auch ein zusätzliches macvlan Kind-Interface verpasst, ist zumindest die Richtung Eltern- zu Kind-Interface möglich.

Hier ein Snippet, dass die Sachen richtige konfigurieren würde:
Code:
NETWORK_CIDR=192.168.199.0/24
IP_RANGE_CIDR=192.168.199.32/27
GATEWAY_IP=192.168.199.1
PARENT_INTERFACE_NAME=eth1

docker network create -d macvlan \
  --subnet=${NETWORK_CIDR} \
  --ip-range=${IP_RANGE_CIDR} \
  --gateway=${GATEWAY_IP} \
  --aux-address="${HOSTNAME}=${IP_RANGE_CIDR%/*}" \
  -o parent=${PARENT_INTERFACE_NAME} mymacvlan

ip link add macvlan-shim link ${PARENT_INTERFACE_NAME} type macvlan mode bridge

ip addr add "${IP_RANGE_CIDR%/*}/32" dev macvlan-shim
ip link set macvlan-shim up

ip route add ${IP_RANGE_CIDR} dev macvlan-shim

Wichtig:
1. die für das macvlan verwendete IP-Range, muss innerhalb des Subnets liegen, und muss außerhalb der Range liegen, die vom dhcp-server mit IP-Adressen versorgt wird.

2. Die ip Befehle sind flüchtig und müssen nach jedem Rechner Neustart erneut ausgeführt werden. VIelleicht hat hier jemand anderes einen Tipp, wie man das Dauerhaft konfiguriert bekommt.

Wenn man vom Container auf den Host zugreifen will, greift die oben genannte Einschränkung nach wie vor. Was aber funktioniert ist den Host über die neue macvlan ip vom Host anzusprechen.

Ich kenne niemanden der macvlan langfristig verwendet, weil es am Ende des Tages mehr nervt, als es Vorteile bringt.
 
Sobald Ich Adguard Home im Container laufen hatte, hatten Portainer, Docker und die Container kein zugriff aufs Internet. Ist aber auch nicht so schlimm das es nicht im Container läuft.

Habe mal dein Code getestet, Adguard Home kann auf jeden fall wenn Ich nur die Ip eintrage auf den Port :53 zugreifen.

Aber leider kann Ich von Technitium nicht mehr das Admin-Panel was mit den Port :5380 läuft öffnen im Browser.

Edit: Ich musste mein geposteten Code auch nutzen :)
So wie es aussieht funktioniert jetzt alles.
Vielen Lieben dank


Habe mir eine adguard_dns.sh Datei erstellt und die im /home/scripte abgelegt.
Mit folgenden Inhalt:
Code:
NETWORK_CIDR=192.168.178.0/24
IP_RANGE_CIDR=192.168.178.224/27
GATEWAY_IP=192.168.178.1
PARENT_INTERFACE_NAME=enp0s3

ip link add macvlan-shim link ${PARENT_INTERFACE_NAME} type macvlan mode bridge

ip addr add "${IP_RANGE_CIDR%/*}/32" dev macvlan-shim

ip link set macvlan-shim up

ip route add ${IP_RANGE_CIDR} dev macvlan-shim

ip link set enp0s3 promisc on

Und cronjob führt nach jeden Restart dann die Datei aus.
Code:
@reboot /home/scripte/adguard_dns.sh

Anmerkung: Falls das jemand auch in Virtual-Box Testet.
Sollte bei der Virtuellen Maschine unter Einstellungen/Netzwerk Erweitert bei Promiscuous-Modus: "verweigern(deny)" auf "erlauben für allen VMs und den Host" umstellen.
 
Zuletzt bearbeitet:
Gut das es jetzt läuft :)

Aber wie schon geschrieben, ein macvlan Container müsste um mit dem Host zu kommunizieren die ip von "macvlan-shim" oder "mvl-brg" verwenden. Mit der Ip von enp0s3 kann es nach wie vor nicht kommunizieren.

Kleine Rückfrage zu Deiner Lösung:
- Der Befehl ip link add {name} link {Parent-Intercace} type amcvlan mode bridge legt eine Netzwerkbrücke an. Brauchst Du wirklich beide?
- Brauchen die unteren drei Befehle wirklich sudo als Präfix? Wenn der Cronjob als root ausgeführt wird, dann ist das nicht notwendig.

Magst Du aus deinem Code Block am Ende der Zeilen noch das "\" entfernen, nicht das sonst jemand das übernimmt und sich wundert, warum es dann bei ihm nicht funktioniert. In meinem Beispiel sind die beim docker network create enthalten, da der Befehl zwecks Lesbarkeit über mehrere Zeilen geht.

Insgesamt würde ich dir empfehlen das Skript auf das zu reduzieren, was wirklich notwendig ist. Sonst führt das in einigen Monate (oder wenn Du es jemanden andern zeigst) zur unnötigen Verwirrung.
 
Habe das jetzt noch mal in Ruhe getestet und nein die zweite Netzwerkbrücke braucht man nicht, habe es oben entfernt.

Die \ Striche hatte ich gemacht da sonst ein Fehler kam, aber komischerweise funktioniert es jetzt auch ohne die Striche :) und Sudo habe ich auch entfernt.

Die IPs habe ich jetzt mal nicht mit xxx versehen so erkennt man es besser.

Habe noch am ende eine Anmerkung beigefügt für VirtualBox!

Und noch mal vielen Lieben dank an Confluencer, ohne dich hätte ich das nie hinbekommen!

Ab und zu kommt diese Meldung bei der Login-Zeile. Allerdings funktioniert trotzdem alles.
Screenshot 2024-08-12 124308.png
 
Zuletzt bearbeitet:
Gerne!

Jetzt sieht es doch schick aus. Die Idee mit dem Crontab finde ich auch gut, das ist so naheliegend, dass ich da natürlich überhaupt nicht dran gedacht habe... Ich selbst nutze aber auch kein macvlan. Ich hab damit vor Jahren mal herumexperimentiert und hab es dann wieder beiseite gelegt... Zu Docker 17.05 Zeiten stand das mit der Eltern-Kind Einschränkung übrigens noch in der offizellen Aneleitung bei Docker - da es aber ein geerbtes Verhalten ist, hat man es wohl wieder aus der eigenen Doku entfernt.

Es würde mich wundern, wenn die Ausgabe in der Login-Maske etwas mit dem macvlan zu tun hat.

Scheinbar sind bei dir die Ephemeral-Portranges Start und Ende gerade Zahlen. Die Meldung sagt, dass es vorziehen würde, wenn eins von beiden gerade, und das andere ungerade wäre. Was auch immer das bringen soll :D

Kann man wie folgt konfigurieren: https://docs.brekeke.com/pbx/increase-ip_local_port_range-tcp-port-range
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
5.268
Beiträge
52.459
Mitglieder
5.019
Neuestes Mitglied
Jeff888
Zurück
Oben