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 eth0zu 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 dockZone gehört:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / areas
Erstellen Sie eine neue Zone. Hinweis: dockerIst 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 ACCEPTRichtlinie für den Datenverkehr von fwbis dock, wenn Sie sie nicht bereits mit fwbis 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=Yesund auchIP_FORWARDING=Truearbeiten. Ich habe es auf mehreren Produktionsroutern, aber Ihre Antwort ist viel klarer als meine. Gute Arbeit.