
TL;DR Intentando enmascarar todo Docker
manualmente firewalld
.
Recién comencé a usarlo firewalld
en mi máquina Debian 10 porque quiero aprender cómo funciona.
Lo instalé Docker
en el host y quiero administrar el firewall yo mismo para aprender más sobre qué hace Docker, qué reglas, etc., se aplica cuando se crean contenedores y cómo funciona firewalld.
Ya que Debian 10 usa nftables
por defecto y usa algún tipo de iptables
contenedor para poder usar iptables
comandos para crear reglas de firewall. Docker
funciona bien cuando --iptables
está habilitado.
Sin embargo, quiero usarlo firewalld
con nftables
el backend y omitir todo lo que tenga que ver, iptables
ya que es confuso. Así que /etc/systemd/system/multi-user.target.wants/docker.service
agregué --iptables=false
para que Docker no afecte el firewall. Eliminé todas las reglas de iptables, etc. y hasta ahora todo está bien.
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 cómo administrar el firewall manualmente cuando uso Docker y, como soy nuevo en firewalld, solo estoy adivinando.
Mis interfaces son las siguientes:
eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)
Todas las veth
interfaces están en el docker0
puente.
Entonces pensé que podría crear una nueva zona llamada docker
y enmascarar 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-zones
docker
interfaces: docker0
public
interfaces: eno1
Todavía no puedo acceder a Internet desde los contenedores. No tengo idea si este es el camino correcto a seguir o lo que me estoy perdiendo. Se agradece cualquier ayuda.
Respuesta1
En firewalld, el enmascaramiento debe configurarse en la zona que conduce a Internet. En tu caso, esa parece ser la public
zona.