iptables y NAT. Salir a Internet con una sola IP pública.

Buenas tardes a todos.

Disculpad el rollo, pero necesito avanzar en una práctica universitaria y me he quedado atascado.
O cuento el escenario :

* Tengo que crear un clúster de kubernetes y utilizar Rancher v2.X para desplegar una aplicación, como puede ser Wordpress.
* Estoy utilizando infraestructura en un OpenNebula montado por mi universidad.
* Sólo dispongo de una IP pública para salir a Internet, por lo que tengo que hacer NAT y crear reglas de iptables.
* Todas las máquinas me contecto mediante SSH desde mi ordenador.
* A las máquinas de la red privada, accedo con ssh -j IP pública IP privada.
* La máquina gateway tiene dos interfaces de red, una con la IP 192.168.0.19 y otra con una IP pública.
* En el gateway, la eth0 corresponde a la red privada, la eth1 a la pública.

Necesito que que cualquier IP privada de la LAN salga a Internet mediante la IP pública utilizando NAT pero no puedo. No hay manera de hacerlo, os pongo los pasos que he realizado en el gateway:

* echo 1 > /proc/sys/net/ipv4/ip_forward (activar el redireccionamiento)
* iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

En los ordenadores de la red privada, he modificado el /etc/network/interfaces y he puesto como puerta de enlace, la dirección IP del gateway (192.168.0.19).

No sé que me falta o que estoy haciendo mal, pero no hay manera que las máquinas de la red LAN puedan salir a Internet, por lo que no puedo avanzar en la creación de un cluster de K8s. ¿Me podéis ayudar?

Gracias

Un saludo a todos

Adjuntos

Creo, ojo hablo de memoria, que también necesitas una regla para la respuesta, es decir la contraria a la iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE, para los paquetes que vienen de vuelta.

Tienes otro firewall funcionando que haya creado reglas por su cuenta? Como el UFW o el firewallcmd de Red Hat.

Haz un traceroute desde los equipos de la red, a ver dónde se queda, si llegan a salir, y si obtienen respuesta.
Desgraciadamente, aún no he podido avanzar. Te hago un pequeño resumen de donde me encuentro :

Máquina gateway
    echo 1 > /proc/sys/net/ipv4/ip_forward
    aptitude install iptables-persistent
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE
    iptables-save > /etc/iptables/rules.v4 // iptables-save > /root/iptables.fw
    /sbin/iptables-restore < /root/iptables.fw (si se reinicia el servidor que cargue las reglas)
    iptables -S (listar las reglas)

Imagen

Cuando hago un iptables -S, no me aparece la regla. No śe a que se debe esto, porque la guardo con un iptables-save.
Aunque si que es cierto que si hago un iptables -L -t nat me aparece al final de todo:

Imagen

Máquina LAN 1

Edito el etc/network/interfaces/ añadiendo la IP como puerta de enlace de la VM gateway :

Imagen

Con todo esto, no consigo salir a Internet con ninguna máquina virtual
He instalado tcpdump, lo ejecuto en un terminal con esta orden : tcpdump -n -i eth1 -c 5

Imagen

Y ahora con la eth0 abriendo otro terminal y conectandome a la 192.168.0.20 :

Imagen

Hay conexión de la 192.168.0.19 a la 20 y al revés, por lo que llego a la conclusión que no se está haciendo bien el puente entre las dos interfaces.He desactivado el ufw y tampoco, siguen las VM sin salir a Internet :

Imagen
Mira cual es la política por defecto de las cadenas. Si no están en ACCEPT, puede que esté cortando los paquetes, ya que aunque sean redireccionados, si no hay regla por ejemplo para paquetes DNS, y la política es DROP/REJECT, pues no pasará.
Ponlas todas en ACCEPT antes de ir metiendo restricciones.
usa ufw, te va ser mas sencillo. Lo correcto es denegar todo e ir abriendo lo que necesites, en un principio no necesitas crear ninguna regla de salida, únicamente de entrada (desde fuera)

Vete por pasos, llegas a la ip privada del gateway? en ese caso el problema es del enrutamiento
He usado ufw y me ha ido a la primera, no sé porque será, ya que editando iptables directamente no habia manera.
Ahora me toca que cuando conecte a la IP pública me cargue la plataforma alojada en 192.168.0.20.
Siempre puedes echar un vistazo a las reglas que ha creado para ver lo que te faltaba. Aquí una guía de Red Hat:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/4/html/security_guide/s1-firewall-ipt-fwd
Me queda el último paso... he levantado la plataforma y he desplegado con Rancher un Wordpress en la máquina worker 192.168.0.23 con una url que te genera la interfaz. Tengo que redirigir el tráfico para que cuando ponga la IP pública y un puerto me cargue Wordpress como lo hace con la plataforma de Ranger :)
Para la ultima parte desplega un ingress controler en un nodo con una label y afinidad.
Redirect puerto 80 y 443 si quieres de la publica a ese nodo a los puertos del service del ingress.

con esto vas a llegar al ingress controler.

ahora necesitas un service y un ingres controler para el deployment del wp
8 respuestas