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.0–10.255.255.255(16 milhões de endereços; comum em redes corporativas maiores).172.16.0.0–172.31.255.255(cerca de um milhão de endereços; menos comum na prática).192.168.0.0–192.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.
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
registra o endereço privado + porta da câmera e o associa a uma porta de saída temporária própria;
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);
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”.