Estou desenvolvendo um aplicativo para minha família que utiliza soquetes para comunicação entre dispositivos em LAN ou WAN. Como os endereços IP mudam constantemente, estou planejando um servidor FTP para catálogo de endereços e TCP/IP para comunicação.
Meu problema:
Conectando de WAN para LAN. Acho que o roteador deve ser configurado para permitir uma conexão externa a uma porta da LAN. Como isso é feito?
Responder1
Sim, a maioria dos roteadores de gateway NA[P]T domésticos permitem especificar uma regra de "mapeamento de porta", "encaminhamento de porta" ou, às vezes, até mesmo chamado de "servidor virtual", onde as conexões da WAN para uma determinada porta TCP ou UDP no endereço IP WAN do roteador, são encaminhados para um endereço IP privado da LAN e uma porta onde o serviço realmente reside.
No exemplo do FTP, a porta 21/TCP geralmente é usada para conexões de controle de entrada, então você deseja inserir um mapeamento de porta em seu roteador para encaminhar a porta 21/TCP do endereço WAN do seu roteador para o endereço IP privado da LAN e porta onde você está executando um servidor FTP (por exemplo, 192.168.1.2:21).
Então, quando estiver na WAN, você diria ao seu cliente FTP para se conectar ao endereço IP da WAN do seu roteador e acabaria se conectando ao seu servidor FTP, que na verdade está em um endereço diferente atrás do NAT.
Esteja ciente de que o FTP é um protocolo extremamente complicado para funcionar por trás de um NAT. Ajuda se o seu gateway NAT tiver um código FTP "ALG" (Application-Layer Gateway) que saiba como lidar com um servidor FTP por trás do NAT. Veja bem, quando um cliente FTP está atrás de um NAT, usar o modo FTP Passivo (PASV) pode fazer o FTP funcionar através do NAT. Mas quando o FTPservidorestá por trás do NAT, mesmo com o mapeamento de porta necessário para 21/TCP, quebras de modo passivo, enquanto o modo ativo teria funcionado. Se o cliente FTP estiver atrás de um NAT e o servidor FTP estiver atrás de outro NAT, você definitivamente precisará de um FTP ALG em um ou ambos os NATs.