Habilita el acceso al exterior a tus contenedores Docker

Si no puedes acceder al exterior desde tus contenedores Docker, quizá el cortafuegos esté haciendo de las suyas...

En una entrada anterior vimos cómo configurar UFW para que funcionara con nuestra VPN. Hace poco me puse a levantar un contenedor Docker que requería acceder a Internet, y me encontré con que no era capaz pero, sin embargo, sí que podía acceder a él desde el exterior, con lo que el problema debía estar en el cortafuegos... Y no me equivoqué.

Por defecto, mi política de cortafuegos es denegar las entradas y autorizar las salidas. Pero cuando manejamos contenedores Docker, y tenemos varias interfaces, debemos hacer una redirección entre Docker y nuestra interfaz por defecto. Para ello, en el fichero /etc/ufw/before.rules hay que añadir las siguientes líneas al principio del mismo (cambiando la red 172.19.0.0/16 por la que tengamos configurada en nuestro contenedor, claro):

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Docker
-I POSTROUTING -s 172.19.0.0/16 -o eth0 -j MASQUERADE

# Forward traffic from eth1 through eth0.
# Docker
-A POSTROUTING -s 172.19.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
Rutas para habilitar el acceso entre Docker y la red eth0

Obviamente, si ya teníamos configurado UFW para la VPN, bastará con añadir las líneas que están debajo del comentario de Docker a las ya existentes 😊.

Reiniciamos nuestro cortafuegos, ¡y ya deberíamos tener acceso al exterior!