9.7. Redes privadas e NAT

O IPv4 foi concebido com quatro mil milhões de endereços, o que parecia suficiente na altura. Não é. Cada habitação, escritório e fábrica ligados à internet precisam do seu próprio bloco de endereços para os dispositivos internos, e ao somar todas as câmaras, telemóveis e eletrodomésticos do mundo, os quatro mil milhões não chegam para todos.

A solução que a internet adotou são as redes privadas: a maioria dos dispositivos numa rede local utiliza endereços que não são únicos a nível global, mas apenas dentro dessa rede, e um único dispositivo na fronteira faz a tradução entre os dois mundos. A câmara está quase sempre numa destas redes privadas.

9.7.1. Os intervalos de endereços privados

Três intervalos IPv4 estão reservados como não encaminháveis na internet pública. Qualquer rede local pode utilizar endereços desses intervalos sem necessitar de coordenação com ninguém, pois nenhum router fora da rede local tentará entregar pacotes nesses endereços:

  • 10.0.0.010.255.255.255 (16 milhões de endereços; comum em redes empresariais de maior dimensão).

  • 172.16.0.0172.31.255.255 (cerca de um milhão de endereços; menos frequente).

  • 192.168.0.0192.168.255.255 (65 mil endereços; predefinição de quase todos os routers domésticos).

Numa rede doméstica típica, a câmara e o computador portátil que comunica com ela utilizam ambos endereços 192.168.x.x, pois é o intervalo que o router doméstico atribui à rede que aloja.

9.7.1.1. Como a máscara de rede é utilizada

A página Endereços IP apresentou a notação /24. A razão pela qual esta notação é relevante aqui é que a máscara de rede é o que cada dispositivo utiliza para decidir para onde um pacote deve ser enviado a seguir. Cada vez que a câmara envia um pacote, aplica a sua própria máscara de rede ao endereço de destino e analisa o resultado:

  • Se o destino partilha os bits de rede com o próprio endereço da câmara, o destino está na mesma rede local. A câmara envia o pacote diretamente.

  • Se o destino não partilha os bits de rede, deve estar noutra rede. A câmara envia o pacote para o seu gateway predefinido (o router configurado automaticamente no momento da ligação) e deixa o gateway tratar do resto.

Esse único teste – «partilhamos os bits de rede?» – é para o que serve a máscara de rede. É também o motivo pelo qual as redes domésticas utilizam /24 por predefinição: um limite de 254 dispositivos é adequado para uma habitação e mantém a rede simples.

9.7.2. Tradução de Endereços de Rede

Uma câmara em 192.168.1.50 não pode simplesmente enviar um pacote para um servidor na internet pública – a internet pública não encaminha para 192.168.x.x. O router doméstico resolve isto com Network Address Translation, ou NAT, de forma transparente.

A diagram with three blocks. On the left, two devices on a private network labelled "camera 192.168.1.50" and "laptop 192.168.1.51", both connected to a central box labelled "router". The router has two faces -- a private face labelled "192.168.1.1" toward the devices, and a public face labelled "203.0.113.5" toward the internet. The internet is drawn as a cloud on the right. Arrows from the devices pass through the router and emerge as if from the public address.

O NAT reescreve o endereço de origem dos pacotes de saída para o endereço público do router, e inverte a reescrita nas respostas recebidas, fazendo com que os dispositivos privados aparentem partilhar um único endereço público.

O router possui dois endereços: um privado na rede local (normalmente 192.168.1.1) e um público atribuído pelo fornecedor de internet. Quando a câmara envia um pacote para um endereço público, o router

  1. regista o endereço privado + porta da câmara e associa-o a uma porta de saída temporária própria;

  2. reescreve o endereço de origem do pacote para o seu próprio endereço público (e a porta de origem para a porta de saída escolhida);

  3. envia o pacote reescrito pelo lado público.

Quando a resposta chega endereçada ao endereço público + porta do router, o router consulta a associação, reescreve o destino de volta para o endereço privado + porta da câmara, e entrega-a pelo lado local. A câmara nunca sabe que a reescrita aconteceu; o servidor nunca conhece a origem original.

O NAT é o que torna as redes domésticas práticas. Tem também duas consequências que vale a pena conhecer.

9.7.3. O que o NAT muda

Saída é fácil. Uma câmara numa rede privada pode comunicar para fora livremente. Sempre que abre uma ligação TCP ou envia um pacote UDP para um servidor remoto, o NAT configura a associação automaticamente. A maioria das aplicações de câmara funciona nesta direção: capturar uma imagem, enviá-la para um servidor, receber a resposta.

Entrada é difícil. Um dispositivo na internet pública não consegue ligar-se diretamente a uma câmara numa rede privada. Não existe associação para o router consultar quando um pacote não solicitado chega ao seu endereço público, pelo que o pacote não tem para onde ir. O router descarta-o ou entrega-o a um serviço a correr no próprio router.

Três soluções para o caso de entrada são comuns, em ordem aproximada de praticidade crescente:

  • Reencaminhamento de portas. Configurar o router para dirigir todos os pacotes de entrada numa porta pública escolhida para um dispositivo privado específico. Requer acesso de administrador ao router; frágil quando o endereço público do router muda.

  • VPN. Executar uma rede privada virtual que coloca a câmara na mesma rede lógica que quem precisa de aceder a ela. Pesado; fora do âmbito da maioria das implementações de câmara.

  • Ligação iniciada de saída. A câmara liga-se para um servidor conhecido em algum lugar na internet pública e mantém essa ligação aberta; o servidor usa a ligação existente para enviar mensagens de volta. É assim que funcionam as notificações push e a maioria dos protocolos de dispositivos ligados à nuvem, e é o padrão que a maioria das aplicações de câmara acaba por utilizar.

O NAT é invisível para o código Python na câmara. O script simplesmente comunica com o destino que necessita; o router trata da tradução nos bastidores. Mas a direção da ligação é importante, e o NAT é a razão pela qual «a câmara contacta um servidor na nuvem» é um padrão muito mais simples do que «um servidor na nuvem contacta a câmara».