
TL;DR Ich versuche, alles manuell zu Docker
maskieren firewalld
.
Ich habe gerade angefangen, es auf meiner Debian 10-Maschine zu verwenden, firewalld
da ich lernen möchte, wie es funktioniert.
Ich habe Docker
es 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 nftables
standardmäßig eine Art Wrapper verwendet, um Befehle zum Erstellen von Firewall-Regeln iptables
nutzen zu können , läuft es einwandfrei, wenn es aktiviert ist.iptables
Docker
--iptables
firewalld
Ich möchte es jedoch mit dem Backend verwenden nftables
und alles überspringen, was damit zu tun hat, iptables
da es einfach verwirrend ist. Also habe /etc/systemd/system/multi-user.target.wants/docker.service
ich 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 veth
Schnittstellen befinden sich in der docker0
Brücke.
Also dachte ich, ich könnte eine neue Zone erstellen docker
und alles von der docker0
Brü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 public
Zone zu sein.