Uso de Docker con firewalld

TL; DR Tratando de enmascarar todo, desde Docker con firewalld manualmente.

Acabo de empezar a usar firewalld en mi máquina Debian 10, ya que quiero aprender cómo funciona.

Tengo Docker instalado en el host y quiero administrar el firewall por mí mismo para aprender más sobre lo que hace Docker, qué reglas, etc. se aplica cuando se crean contenedores y cómo funciona firewalld.

Desde Debian 10 usos nftables por defecto y utilizar algún tipo de iptables envoltura para poder usar iptables comandos para crear reglas de firewall. Docker funciona bien cuando --iptables está habilitado.

Sin embargo quiero usar firewalld con nftables backend y omita todo lo que tiene que ver con iptables ya que es confuso. Así que en /etc/systemd/system/multi-user.target.wants/docker.service He añadido --iptables=false para que Docker no se meta con el firewall.Eliminé todas las reglas de Iptables, etc. y todo está bien hasta ahora.

Ahora a mi problema.

Todos los contenedores pueden acceder al host y entre sí, pero no a Internet.Como todos se ejecutan en 172.17.0.0/16 y mi host está en 192.168.9.0 / 24, necesito enmascarar el tráfico de los contenedores.

No puedo encontrar mucha información sobre la administración manual del firewall cuando uso Docker y, como soy nuevo en firewalld, estoy adivinando.

Mis interfaces son las siguientes:

eno1 (main interface)docker0 (docker bridge)veth******* (one for each container)

todos los veth las interfaces están en el docker0 puente.

Así que pensé que podría crear una nueva zona llamada docker y disfrazar todo, desde el docker0 puente.

~# firewall-cmd --permanent --new-zone=docker~# firewall-cmd --permanent --zone=docker --change-interface=docker0~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'~# firewall-cmd --reload

Enumerar las zonas activas me da esto:

~# firewall-cmd --get-active-zonesdocker  interfaces: docker0public  interfaces: eno1

Todavía no puedo acceder a Internet desde los contenedores.No tengo idea de si este es el camino correcto o lo que me estoy perdiendo.Cualquier ayuda es apreciada.

En Firewalld, el enmascaramiento debe establecerse en la zona que conduce a Internet. En su caso, ese parece ser el public huso.