Los siguientes cambios de configuración deberían garantizar el flujo de tráfico entre Docker y el host Shorewall. Probado en Shorewall 4.5.21.9 pero debería aplicarse a las versiones más recientes:
/etc/shorewall/shorewall.conf
Asegúrese de que el reenvío de IP esté habilitado (la mayoría de los elementos de configuración son Sí / No, pero este está "Encendido"):
IP_FORWARDING=On
/ etc / shorewall / masq
Habilite el enmascaramiento (NAT) para su red privada de Docker (si usa una red diferente, es decir, inicia Docker con --bip=#.#.#.#/#, luego cambie en consecuencia). Cambie eth0a cualquier interfaz en la máquina host con conectividad externa:
#INTERFACE:DEST SOURCE
eth0 172.17.0.0/16
/ etc / shorewall / interfaces
Agregue una entrada de interfaz para que Shorewall sepa con qué interfaz dockse relaciona la zona:
#ZONE INTERFACE OPTIONS
dock docker0
/ etc / shorewall / zonas
Crea una nueva zona; tenga en cuenta que dockeres demasiado largo y provocará un error de "nombre de zona no válido".
#ZONE INTERFACE
dock ipv4
/ etc / shorewall / policy
Probablemente desee permitir que los contenedores Docker se comuniquen con la máquina host e Internet, por lo que este es un buen punto de partida:
#SOURCE DEST POLICY
# ...(other policies)...
dock all ACCEPT
# ...(other policies, catch-all)...
También puede ser necesario un semejante ACCEPTpolítica de tráfico desde fwque dock, si no ya lo abre con fwaall .
Puede ajustar esto aún más en los archivos de políticas o reglas según sea necesario. Por ejemplo, lo anterior no permite explícitamente que el tráfico externo llegue a sus contenedores Docker; revisa tus otras zonas / políticas / reglas para eso.
IP_FORWARDING=YesyIP_FORWARDING=Truetrabajar también Lo tengo en varios enrutadores de producción, pero su respuesta es mucho más clara que la mía. Buen trabajo./etc/shorewall/interfaces.Desde que Docker introdujo su función de aislamiento de red, las otras soluciones mencionadas aquí ya no son suficientes si desea utilizar redes personalizadas. Shorewall 5.0.6 presenta soporte para Docker, incluidas las redes de Docker. Esta:
fuente
Lo descubrí en mi caja. Asegúrese de que /etc/shorewall.conf tenga:
IP_FORWARDING=YesDocker se basa en el reenvío, y separé que 'puppet' lo establece en 'No' en todos mis servidores.
Actualización: Probablemente también necesite enmascarar el tráfico proveniente de la ventana acoplable de su interfaz WAN.
Edite
/etc/shorewall/masqy necesitará una línea similar a:br0 172.17.0.0/12En este caso, mi interfaz WAN es en realidad br0 (un puente), pero la suya probablemente será algo así como eth0. (Use
ifconfigpara ver sus interfaces y sus direcciones IP). En mi máquina, la ventana acoplable utiliza 172.17.0.0/24, que es un rango de direcciones privadas RFC1918. Esto puede diferir en otros sistemas, pero puede ver el rango utilizandoifconfiguna vez más para buscar la interfazdocker0.fuente
Puede asegurarse de que el conjunto de reglas de Docker sobreviva a un reinicio del muro costero creando scripts de extensión que guarden la
DOCKERcadena antes del reinicio y luego la restauren nuevamente. Acabo de publicar una publicación con un ejemplo de cómo hacer esto , aunque estoy seguro de que está lejos de ser el único método posible.fuente
El servicio de Docker se puede reiniciar sin afectar los contenedores en ejecución, y se puede ejecutar después de un reinicio de Shorewall para volver a cargar las reglas específicas de Docker. Obviamente, habrá un corto tiempo en el que se interrumpe la conexión en red a los contenedores.
Esto es cierto al menos en mis pocas instalaciones de Archlinux.
fuente
La acción de actualización no purga el iptable, por lo que si solo desea actualizar las reglas o políticas, puede ejecutar la actualización en lugar de reiniciar:
Obviamente, el problema aún persiste si realmente necesita reiniciar el muro de contención. Luego, debe reiniciar la ventana acoplable y volver a cargar sus contenedores.
fuente
Una opción posible es ejecutar Docker con la opción --net = host, para permitir que la aplicación en contenedores acceda a la red de host sin reenvío de IP y NAT.
fuente