Docker mit Firewalld verwenden

Docker mit Firewalld verwenden

TL;DR Ich versuche, alles manuell zu Dockermaskieren firewalld.

Ich habe gerade angefangen, es auf meiner Debian 10-Maschine zu verwenden, firewalldda ich lernen möchte, wie es funktioniert.

Ich habe Dockeres auf dem Host installiert und möchte die Firewall selbst verwalten, um mehr darüber zu erfahren, was Docker macht, welche Regeln usw. es beim Erstellen von Containern anwendet und wie Firewalld funktioniert.

Da Debian 10 nftablesstandardmäßig eine Art Wrapper verwendet, um Befehle zum Erstellen von Firewall-Regeln iptablesnutzen zu können , läuft es einwandfrei, wenn es aktiviert ist.iptablesDocker--iptables

firewalldIch möchte es jedoch mit dem Backend verwenden nftablesund alles überspringen, was damit zu tun hat, iptablesda es einfach verwirrend ist. Also habe /etc/systemd/system/multi-user.target.wants/docker.serviceich hinzugefügt --iptables=false, dass Docker nicht mit der Firewall in Konflikt gerät. Ich habe alle iptables-Regeln usw. gelöscht und bisher ist alles gut.

Nun zu meinem Problem.

Alle Container können auf den Host und untereinander zugreifen, aber nicht auf das Internet. Da sie alle auf 172.17.0.0/16 laufen und mein Host auf 192.168.9.0/24 ist, muss ich den Datenverkehr der Container maskieren.

Ich kann nicht viele Informationen zur manuellen Verwaltung der Firewall bei Verwendung von Docker finden und da ich mit Firewalld noch nicht vertraut bin, sind das nur Vermutungen.

Meine Schnittstellen sind wie folgt:

eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)

alle vethSchnittstellen befinden sich in der docker0Brücke.

Also dachte ich, ich könnte eine neue Zone erstellen dockerund alles von der docker0Brücke aus maskieren.

~# firewall-cmd --permanent --new-zone=docker
~# firewall-cmd --permanent --zone=docker --change-interface=docker0
~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'
~# firewall-cmd --reload

Die Auflistung der aktiven Zonen ergibt folgendes:

~# firewall-cmd --get-active-zones
docker
  interfaces: docker0
public
  interfaces: eno1

Ich kann von den Containern aus immer noch nicht auf das Internet zugreifen. Ich habe keine Ahnung, ob das der richtige Weg ist oder was mir entgeht. Für jede Hilfe bin ich dankbar.

Antwort1

In Firewalld muss Masquerading auf die Zone eingestellt werden, die zum Internet führt. In Ihrem Fall scheint das die publicZone zu sein.

verwandte Informationen