Problemas de NAT Loopback

Note

Esta explicação envolve conhecimentos complexos de redes, precisamos da sua assistência para melhorar sua legibilidade.

Para mais detalhes sobre NAT Loopback, verifique a página da Wikipedia.

Quando você está implantando o servidor RustDesk em sua rede doméstica ou qualquer outro ambiente de rede que esteja atrás de um firewall NAT, o servidor RustDesk e seus clientes DEVEM ou: A: Usar o endereço IP local para acessar uns aos outros OU: B: Ter um firewall que suporte e tenha habilitado o NAT Loopback.

Você pode notar que não consegue se conectar ao seu servidor através do seu IP Público ou Domínio (que em teoria aponta para seu IP público).

Problema

Neste exemplo seguiremos o que acontece quando dispositivos LAN tentam se conectar a rustdesk.example.com. Assuma que o IP público do seu roteador será 172.16.16.1, o IP LAN do seu servidor é 192.168.11.20 e o domínio que você deseja é rustdesk.example.com, e você tem um cliente usando ‘192.168.11.2’.

Quando você configura um servidor atrás do NAT do roteador, pode adicionar um encaminhamento de porta no roteador para alterar qualquer mensagem de entrada para o IP PÚBLICO 172.16.16.1 para ir ao servidor em 192.168.11.20

Quando um dispositivo LAN quer acessar a internet, digamos um servidor web em 8.8.8.8, ele envia a solicitação como vindo de 192.168.11.2, e a envia para o roteador. O roteador interceptará essa solicitação e reescreverá essa solicitação para 8.8.8.8 como vindo de 172.16.16.1. Quando 8.8.8.8 responde para 172.16.16.1, o roteador verificará uma conexão anterior e reencaminhará essa resposta de volta para 192.168.11.2.

Se o usuário em 8.8.8.8 enviar uma mensagem para nossa rede usando 172.16.16.1, a regra de encaminhamento de porta reescreverá o destino de 172.16.16.1 para o servidor em 192.168.11.20 deixando a origem da solicitação como 8.8.8.8 para que o servidor possa responder (mais ou menos) diretamente para 8.8.8.8.

Se o usuário em 8.8.8.8 decidir tentar hackear nossa rede e afirmar estar enviando suas mensagens de 192.168.11.2, o roteador sabe que o tráfego vindo de 192.168.11.2 só é válido dos dispositivos LAN e tipicamente bloqueará esse tráfego.

O problema ocorre quando você tenta fazer um loop de volta na LAN. Se o dispositivo LAN tentar se conectar a rustdesk.example.com, que será 172.16.16.1. Neste ponto o roteador tem muitas escolhas a fazer. Ele acabou de enviar uma mensagem de sua porta LAN para sua porta WAN vindo DE 192.168.11.2 indo para 172.16.16.1. Uma vez que atinge a porta WAN, esta mensagem é indistinguível por si só do exemplo acima onde alguém na internet estava tentando hackear nossa rede.

O recurso NAT Loopback efetivamente mudará a parte de origem “De 192.168.11.2” do endereço mais cedo no processo para que saiba que tem que usar a tabela NAT para passar mensagens de ida e volta entre o servidor e o cliente.

Se há um problema com conexões apenas enquanto você está dentro da LAN, mas funciona bem de fora do local, este pode ser o problema que você está tendo.

Soluções

Há três maneiras de resolver este problema.

1. Configurar NAT Loopback no seu roteador

Você poderia configurar NAT Loopback no seu roteador se souber como, mas configurar isso requer conhecimento de redes. Alguns roteadores não têm a capacidade de ajustar esta configuração, então esta não é a melhor opção para todos.

Note

Um artigo da MikroTik explica isso muito bem. Você poderia começar a aprender a partir daqui.

2. Implantar um servidor DNS na sua LAN

Primeiro, escolha qual você prefere, AdGuard Home ou Pi-hole. Você poderia implantá-lo via docker, ou poderia implantá-lo no mesmo servidor que seu Servidor RustDesk. O exemplo abaixo mostrará alguns passos para este exemplo.

Ambos são bloqueadores de anúncios baseados em DNS, mas você poderia desabilitar esta funcionalidade se não quiser bloquear anúncios.

Primeiro, aponte seu domínio para o IP LAN do seu servidor RustDesk (por exemplo 192.168.11.20). Depois vá para a configuração DHCP do seu roteador (Cuidado: NÃO WAN) e defina seu Primeiro IP DNS para o servidor onde você implantou AdGuard Home ou Pi-hole. O DNS Secundário poderia ser o DNS do seu ISP ou outro DNS público, ex. 1.1.1.1 para Cloudflare ou 8.8.8.8 para Google, e está pronto!

Aqui está um exemplo:

AdGuard Home

Bloquear anúncios pode causar problemas, se você não quer descobrir a solução e quer desabilitar esta funcionalidade, clique no botão “Desabilitar proteção”.


Vá para a configuração “Reescritas DNS”.


Clique em “Adicionar reescrita DNS”, depois digite seu domínio e o IP LAN do servidor no campo.

Aqui está como fica o resultado final.

Não esqueça de atribuir seu AdGuard Home ao DHCP LAN do seu roteador!


Pi-hole

Bloquear anúncios pode causar problemas, se você não quer descobrir a solução e quer desabilitar esta funcionalidade, clique no botão “Indefinidamente” dentro do submenu “Desabilitar Bloqueio”.

Vá para “DNS Local → Registros DNS”. Digite seu domínio e IP na caixa, depois clique em “Adicionar”.

Para verificar os resultados finais, verifique as linhas amarelas nesta imagem.

Não esqueça de atribuir seu Pi-hole ao DHCP LAN do seu roteador!

3. Adicionar regras ao seu arquivo hosts

Este método só é recomendado se você tem um pequeno número de dispositivos. Se você tem muitos dispositivos, o método DNS é preferido. Caso contrário você teria que fazer isso manualmente em cada dispositivo que precisa de acesso ao servidor.

Warning

Se este método for usado em um dispositivo portátil como um laptop, ele não conseguirá se conectar ao servidor quando estiver fora da sua LAN.

Caminho para diferentes OS:

Windows

C:\Windows\system32\drivers\etc\hosts

Você pode editar com privilégios elevados ou pode copiar este arquivo para a Área de Trabalho e editá-lo. Depois de editá-lo, copie de volta para o caminho original.

macOS

/etc/hosts

Você poderia usar vim, ele vem pré-instalado.

sudo vim /etc/hosts

Linux

/etc/hosts

Você poderia usar vim ou nano.

sudo vim /etc/hosts

O formato é o mesmo nos três sistemas operacionais. IP primeiro seguido do domínio. Uma entrada por linha.

Por exemplo:

192.168.11.20   rustdesk.example.com