As seguintes alterações na configuração devem garantir o fluxo de tráfego entre o Docker e o host Shorewall. Testado no Shorewall 4.5.21.9, mas deve ser aplicado às versões mais recentes:
/etc/shorewall/shorewall.conf
Verifique se o encaminhamento de IP está ativado (a maioria dos itens de configuração é Sim / Não, mas esse é "Ativado"):
IP_FORWARDING=On
/ etc / shorewall / masq
Habilite o mascaramento (NAT) para sua rede privada do Docker (se você usar uma rede diferente, por exemplo, você iniciar o docker com e --bip=#.#.#.#/#
, em seguida, alterar). Mude eth0
para qualquer interface na máquina host com conectividade externa:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Adicione uma entrada de interface para que o Shorewall saiba a qual interface a dock
zona se relaciona:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / areas
Crie uma nova zona; note, docker
é muito longo e causará um erro "nome de zona inválido".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / policy
Você provavelmente deseja permitir que os contêineres do Docker conversem com a máquina host e a Internet, portanto, este é um bom ponto de partida:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
Você também pode precisar de um semelhante ACCEPT
política para o tráfego a partir fw
de dock
, se você já não abri-lo com fw
a all
.
Você pode reforçar isso ainda mais nos arquivos de políticas ou regras, conforme necessário. Por exemplo, o acima exposto não permite explicitamente que o tráfego externo alcance seus contêineres do Docker; verifique suas outras zonas / políticas / regras para isso.
IP_FORWARDING=Yes
eIP_FORWARDING=True
trabalhar também. Eu o tenho em vários roteadores de produção, mas sua resposta é muito mais clara que a minha. Ótimo trabalho.