9.7. Redes privadas y NAT

IPv4 se diseñó con cuatro mil millones de direcciones, lo que en su momento parecía suficiente. No lo es. Cada hogar, oficina y fábrica conectados a internet necesita su propio bloque de direcciones para sus dispositivos internos, y al sumar todas las cámaras, teléfonos y electrodomésticos del mundo no quedan cuatro mil millones para repartir.

La solución que adoptó internet son las redes privadas: la mayoría de los dispositivos de una red local usan direcciones que no son únicas a nivel global, sino solo dentro de esa red, y un único dispositivo situado en el borde traduce entre ambos mundos. La cámara, casi siempre, se encuentra en una de estas redes privadas.

9.7.1. Los rangos de direcciones privadas

Tres rangos de IPv4 están reservados como no enrutables en la internet pública. Cualquier red local puede usar libremente direcciones de dentro de estos rangos sin necesidad de coordinarse con nadie, porque ningún router fuera de la red local intentará jamás entregar paquetes a esas direcciones:

  • 10.0.0.010.255.255.255 (16 millones de direcciones; habitual en redes corporativas grandes).

  • 172.16.0.0172.31.255.255 (alrededor de un millón de direcciones; menos común en la práctica).

  • 192.168.0.0192.168.255.255 (65 mil direcciones; el valor predeterminado de casi todos los routers domésticos).

En una red doméstica típica, tanto la cámara como el portátil que se comunica con ella se encuentran en direcciones 192.168.x.x, porque ese es el rango que elige el router doméstico para la red que aloja.

9.7.1.1. Cómo se utiliza la máscara de red

La página Direcciones IP presentó la notación /24. La razón por la que importa aquí es que la máscara de red es lo que cada dispositivo usa para decidir adónde debe ir un paquete a continuación. Cada vez que la cámara envía un paquete, aplica su propia máscara de red a la dirección de destino y observa el resultado:

  • Si el destino comparte los bits de red con la propia dirección de la cámara, el destino está en la misma red local. La cámara le envía el paquete directamente.

  • Si el destino no comparte los bits de red, debe estar en alguna otra red. La cámara envía el paquete a su puerta de enlace predeterminada (el router configurado automáticamente al establecerse el enlace) y deja que la puerta de enlace se encargue del resto.

Esa única comprobación – «¿compartimos los bits de red?» – es para lo que sirve la máscara de red. También es la razón por la que las redes domésticas usan /24 por defecto: un límite de 254 dispositivos encaja con holgura en un hogar y mantiene la red simple.

9.7.2. Traducción de direcciones de red (NAT)

Una cámara en 192.168.1.50 no puede simplemente enviar un paquete a un servidor de la internet pública – la internet pública no enruta hacia 192.168.x.x. El router doméstico resuelve esto con la traducción de direcciones de red, o NAT, y lo hace de forma transparente.

Un diagrama con tres bloques. A la izquierda, dos dispositivos en una red privada etiquetados como "cámara 192.168.1.50" y "portátil 192.168.1.51", ambos conectados a una caja central etiquetada como "router". El router tiene dos caras -- una cara privada etiquetada como "192.168.1.1" hacia los dispositivos, y una cara pública etiquetada como "203.0.113.5" hacia internet. La internet se dibuja como una nube a la derecha. Las flechas que salen de los dispositivos atraviesan el router y emergen como si provinieran de la dirección pública.

NAT reescribe la dirección de origen de los paquetes salientes con la dirección pública del router, e invierte la reescritura en las respuestas entrantes, de modo que los dispositivos privados aparentan compartir una única dirección pública.

El router tiene dos direcciones: una privada en la red local (habitualmente 192.168.1.1) y una pública asignada por el proveedor de internet. Cuando la cámara envía un paquete a una dirección pública, el router

  1. registra la dirección privada + puerto de la cámara y la empareja con un puerto saliente temporal propio;

  2. reescribe la dirección de origen del paquete con su propia dirección pública (y el puerto de origen con el puerto saliente elegido);

  3. envía el paquete reescrito por el lado público.

Cuando la respuesta regresa dirigida a la dirección pública + puerto del router, el router consulta el emparejamiento, reescribe el destino de vuelta a la dirección privada + puerto de la cámara y la entrega por el lado local. La cámara nunca sabe que ocurrió la reescritura; el servidor nunca conoce el origen original.

NAT es lo que hace prácticas a las redes domésticas. También tiene dos consecuencias que conviene conocer.

9.7.3. Qué cambia NAT

Lo saliente es fácil. Una cámara en una red privada puede comunicarse hacia fuera libremente. Cada vez que abre una conexión TCP o envía un paquete UDP a un servidor remoto, NAT configura el emparejamiento automáticamente. La mayoría de las aplicaciones de cámara funcionan en esta dirección: capturar una imagen, enviarla a algún servidor y recibir la respuesta.

Lo entrante es difícil. Un dispositivo de la internet pública no puede conectarse directamente a una cámara en una red privada. No hay ningún emparejamiento que el router pueda consultar cuando un paquete no solicitado llega a su dirección pública, así que el paquete no tiene adónde ir. El router o bien lo descarta o bien lo entrega a un servicio que se ejecuta en el propio router.

Para el caso entrante son comunes tres soluciones, aproximadamente en orden creciente de practicidad:

  • Reenvío de puertos. Configurar el router para que dirija todos los paquetes entrantes en un puerto público elegido hacia un dispositivo privado concreto. Requiere acceso de administrador al router; es frágil cuando la dirección pública del router cambia.

  • VPN. Ejecutar una red privada virtual que coloque a la cámara en la misma red lógica que quien necesite alcanzarla. Es pesado; queda fuera del alcance de la mayoría de los despliegues de cámaras.

  • Conexión iniciada hacia fuera. La cámara se conecta hacia fuera a un servidor conocido en algún lugar de la internet pública y mantiene esa conexión abierta; el servidor usa la conexión existente para enviar mensajes de vuelta. Así funcionan las notificaciones push y la mayoría de los protocolos de dispositivos conectados a la nube, y es el patrón que terminan usando la mayoría de las aplicaciones de cámara.

NAT es invisible para el código Python de la cámara. El script simplemente se comunica con cualquier destino que necesite; el router se encarga de la traducción entre bastidores. Pero la dirección de la conexión sí importa, y NAT es la razón por la que «la cámara contacta hacia fuera con un servidor en la nube» es una forma mucho más sencilla que «un servidor en la nube contacta hacia dentro con la cámara».