Le seguenti modifiche alla configurazione dovrebbero garantire il flusso del traffico tra Docker e l'host Shorewall. Testato su Shorewall 4.5.21.9 ma dovrebbe applicarsi alle versioni più recenti:
/etc/shorewall/shorewall.conf
Assicurati che l'IP forwarding sia abilitato (la maggior parte degli elementi di configurazione sono Sì / No, ma questo è "On"):
IP_FORWARDING=On
/ Etc / shorewall / masq
Abilita il mascheramento (NAT) per la tua rete Docker privata (se usi una rete diversa, ovvero avvii la finestra mobile con --bip=#.#.#.#/#
, quindi cambi di conseguenza). Passare eth0
a qualsiasi interfaccia sul computer host con connettività esterna:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ Etc / shorewall / interfacce
Aggiungi una voce di interfaccia in modo che Shorewall sappia a quale interfaccia dock
si riferisce la zona:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zone
Crea una nuova zona; nota, docker
è troppo lungo e causerà un errore "nome zona non valida".
#ZONE INTERFACE
dock ipv4
/ Etc / shorewall / Politica
Probabilmente vuoi consentire ai container Docker di comunicare con la macchina host e Internet, quindi questo è un buon punto di partenza:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Potresti anche aver bisogno di una ACCEPT
politica simile per il traffico da fw
a dock
, se non l'hai già aperto con fw
a all
.
Si può stringere questo ulteriormente nelle politiche o regole file, se necessario. Ad esempio, quanto sopra non consente esplicitamente al traffico esterno di raggiungere i container Docker; controlla le tue altre zone / politiche / regole per questo.
IP_FORWARDING=Yes
eIP_FORWARDING=True
funziona pure. Ce l'ho su diversi router di produzione, ma la tua risposta è molto più chiara della mia. Ottimo lavoro.