9.7. Redes privadas e NAT

O IPv4 foi projetado com quatro bilhões de endereços, o que parecia suficiente na época. Não é. Cada residência, escritório e fábrica conectados à internet precisa de seu próprio bloco de endereços para seus dispositivos internos, e somar todas as câmeras, telefones e eletrodomésticos do mundo não deixa quatro bilhões para distribuir.

A solução que a internet adotou são as redes privadas: a maioria dos dispositivos em uma rede local usa endereços que não são únicos globalmente, mas apenas dentro daquela rede, e um único dispositivo na borda faz a tradução entre os dois mundos. A câmera, quase sempre, fica em uma dessas redes privadas.

9.7.1. As faixas de endereços privados

Três faixas de IPv4 são reservadas como não roteáveis na internet pública. Qualquer rede local é livre para usar endereços dentro dessas faixas sem coordenar com ninguém, porque nenhum roteador fora da rede local jamais tentará entregar pacotes a eles:

  • 10.0.0.010.255.255.255 (16 milhões de endereços; comum em redes corporativas maiores).

  • 172.16.0.0172.31.255.255 (cerca de um milhão de endereços; menos comum na prática).

  • 192.168.0.0192.168.255.255 (65 mil endereços; o padrão para quase todo roteador doméstico).

Em uma rede doméstica típica, tanto a câmera quanto o laptop que conversa com ela ficam em endereços 192.168.x.x, porque essa é a faixa que o roteador doméstico escolhe para a rede que ele hospeda.

9.7.1.1. Como a máscara de rede é usada

A página Endereços IP apresentou a notação /24. A razão de ela importar aqui é que a máscara de rede é o que cada dispositivo usa para decidir para onde um pacote deve ir em seguida. Toda vez que a câmera envia um pacote, ela aplica sua própria máscara de rede ao endereço de destino e observa o resultado:

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

  • Se o destino não compartilha os bits de rede, ele deve estar em alguma outra rede. A câmera envia o pacote para seu gateway padrão (o roteador configurado automaticamente na ativação do link) e deixa que o gateway cuide do resto.

Esse único teste – “compartilhamos os bits de rede?” – é para o que serve a máscara de rede. É também por isso que as redes domésticas usam /24 por padrão: um limite de 254 dispositivos comporta uma residência com folga e mantém a rede simples.

9.7.2. Network Address Translation

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

Um diagrama com três blocos. À esquerda, dois dispositivos em uma rede privada rotulados como "camera 192.168.1.50" e "laptop 192.168.1.51", ambos conectados a uma caixa central rotulada como "router". O roteador tem duas faces -- uma face privada rotulada "192.168.1.1" voltada para os dispositivos, e uma face pública rotulada "203.0.113.5" voltada para a internet. A internet é desenhada como uma nuvem à direita. Setas dos dispositivos passam pelo roteador e emergem como se viessem do endereço público.

O NAT reescreve o endereço de origem dos pacotes de saída com o endereço público do roteador e reverte a reescrita nas respostas de entrada, de modo que os dispositivos privados aparentam compartilhar um único endereço público.

O roteador tem dois endereços: um privado na rede local (comumente 192.168.1.1) e um público atribuído pelo provedor de internet. Quando a câmera envia um pacote para um endereço público, o roteador

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

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

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

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

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

9.7.3. O que o NAT muda

A saída é fácil. Uma câmera em uma rede privada pode conversar para fora livremente. Sempre que ela abre uma conexã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âmera funciona nesse sentido: capturar uma imagem, enviá-la para algum servidor, receber a resposta.

A entrada é difícil. Um dispositivo na internet pública não pode se conectar diretamente a uma câmera em uma rede privada. Não há associação para o roteador consultar quando um pacote não solicitado chega ao seu endereço público, então o pacote não tem para onde ir. O roteador ou o descarta ou o entrega a um serviço que roda no próprio roteador.

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

  • Encaminhamento de portas (port forwarding). Configure o roteador para direcionar todos os pacotes de entrada em uma porta pública escolhida para um dispositivo privado específico. Requer acesso administrativo ao roteador; frágil quando o endereço público do roteador muda.

  • VPN. Execute uma rede privada virtual que coloca a câmera na mesma rede lógica de quem precisa alcançá-la. Pesada; fora do escopo da maioria das implantações de câmeras.

  • Conexão iniciada de saída. A câmera se conecta para fora a um servidor conhecido em algum lugar da internet pública e mantém essa conexão aberta; o servidor usa a conexão existente para enviar mensagens de volta. É assim que funcionam as notificações push e a maioria dos protocolos de dispositivos conectados à nuvem, e é o padrão que a maioria das aplicações de câmera acaba usando.

O NAT é invisível para o código Python na câmera. O script simplesmente conversa com qualquer destino de que precise; o roteador cuida da tradução nos bastidores. Mas a direção da conexão importa, e o NAT é a razão pela qual “a câmera alcança um servidor na nuvem” é uma forma muito mais fácil do que “um servidor na nuvem alcança a câmera”.