Les modifications de configuration suivantes doivent garantir le flux de trafic entre Docker et l'hôte Shorewall. Testé sur Shorewall 4.5.21.9 mais devrait s'appliquer aux versions les plus récentes:
/etc/shorewall/shorewall.conf
Assurez-vous que le transfert IP est activé (la plupart des éléments de configuration sont Oui / Non, mais celui-ci est "On"):
IP_FORWARDING=On
/ etc / shorewall / masq
Activez le masquage (NAT) pour votre réseau Docker privé (si vous utilisez un réseau différent, c'est-à-dire que vous lancez Docker avec --bip=#.#.#.#/#
, puis modifiez en conséquence). Passez eth0
à n'importe quelle interface sur la machine hôte avec une connectivité externe:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Ajoutez une entrée d'interface pour que Shorewall sache à quelle interface la dock
zone se rapporte:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zones
Créez une nouvelle zone; note, docker
est trop long et provoquera une erreur "nom de zone non valide".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / policy
Vous voulez probablement autoriser les conteneurs Docker à parler à la machine hôte et à Internet, c'est donc un bon point de départ:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Vous pouvez également avoir besoin d'une ACCEPT
stratégie similaire pour le trafic de fw
à dock
, si vous ne l'avez pas déjà ouvert avec fw
à all
.
Vous pouvez affinez ceci plus loin dans les politiques ou les règles des fichiers au besoin. Par exemple, ce qui précède ne permet pas explicitement au trafic extérieur d'atteindre vos conteneurs Docker; vérifiez vos autres zones / politiques / règles pour cela.
IP_FORWARDING=Yes
etIP_FORWARDING=True
travailler aussi. Je l'ai sur plusieurs routeurs de production, mais votre réponse est beaucoup plus claire que la mienne. Bon travail.