Die folgenden Konfigurationsänderungen sollten den Datenverkehr zwischen Docker und dem Shorewall-Host sicherstellen. Getestet auf Shorewall 4.5.21.9, sollte aber für die neuesten Versionen gelten:
/etc/shorewall/shorewall.conf
Stellen Sie sicher, dass die IP-Weiterleitung aktiviert ist (die meisten Konfigurationselemente sind Ja / Nein, aber dieses ist "Ein"):
IP_FORWARDING=On
/ etc / shorewall / masq
Aktivieren Sie Masquerading (NAT) für Ihr privates Docker-Netzwerk (wenn Sie ein anderes Netzwerk verwenden, dh Docker mit starten --bip=#.#.#.#/#
, ändern Sie dies entsprechend). Wechseln Sie eth0
zu einer beliebigen Schnittstelle auf dem Hostcomputer mit externer Konnektivität:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Fügen Sie einen Schnittstelleneintrag hinzu, damit Shorewall weiß, zu welcher Schnittstelle die dock
Zone gehört:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / areas
Erstellen Sie eine neue Zone. Hinweis: docker
Ist zu lang und verursacht den Fehler "Ungültiger Zonenname".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / policy
Möglicherweise möchten Sie Docker-Containern ermöglichen, mit dem Hostcomputer und dem Internet zu kommunizieren. Dies ist also ein guter Ausgangspunkt:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Möglicherweise benötigen Sie auch eine ähnliche ACCEPT
Richtlinie für den Datenverkehr von fw
bis dock
, wenn Sie sie nicht bereits mit fw
bis geöffnet haben all
.
Sie können dies auch in den straffen Politik oder Regeln Dateien nach Bedarf. Zum Beispiel lässt das oben Gesagte nicht ausdrücklich zu, dass der Außenverkehr Ihre Docker-Container erreicht. Überprüfen Sie Ihre anderen Zonen / Richtlinien / Regeln dafür.
IP_FORWARDING=Yes
und auchIP_FORWARDING=True
arbeiten. Ich habe es auf mehreren Produktionsroutern, aber Ihre Antwort ist viel klarer als meine. Gute Arbeit.