Habilita el acceso al exterior a tus contenedores Docker

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!