Problema de encaminhamento de porta (eu acho)

0

Eu criei um servidor KryoNet muito básico e um programa cliente. Se eu conectar o cliente através de localhost, ele funcionará como esperado. Agora eu quero me conectar a ele de fora, então eu configurei um DNS para mim mesmo com a ferramenta de DNS dinâmico do noip.com. Quando me conecto através do DNS, o IP correto é mostrado pelo KryoNet, mas ele não se conecta.

Servidor:

public class ServerTester {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        Server server = new Server();
        server.start();
        server.bind(TCP, UDP);

        server.getKryo().register(Packet.class);
        server.getKryo().register(TestPackage.class);

        server.addListener(new Listener() {
            public void received (Connection connection, Object object)
            {
                if (object instanceof Packet)
                {
                    if (object instanceof TestPacket)
                    {
                        TestPacket p1 = (TestPacket) object;
                        System.out.println("server received: " + p1.name);
                    }
                }
            }
        });
    }
}

Cliente:

public class ClientTester {

    public static void main(String[] args) {
        Client client = new Client();
        client.start();
        try {
            client.connect(5000, "my.dynamic.dns", TCP, UDP);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Could not connect to server");
        }

        client.getKryo().register(Packet.class);
        client.getKryo().register(TestPacket.class);

        TestPacketp1 = new TestPacket();
        p1.name = "Menno Gouw";     
        client.sendTCP(p1);
    }
}

Eu encaminhei as portas que usei para TCP e UDP no meu roteador. Não tenho certeza se há um risco de segurança em mostrar as portas, então apenas faço algumas perguntas para essa questão. Encaminhei as portas para o meu endereço IPv4 que recebo do ipconfig e meu endereço de internet real.

TCP = 8001
UDP = 8002

Public-Port-Range |  Target IP   | Target Port Range | Protocol
    8001-8002     | IPv4 Address |    8001-8002      |   Both
    8001-8002     | real Address |    8001-8002      |   Both

Então, por que o cliente não está se conectando? É o meu encaminhamento de porta ou meu ISP poderia estar bloqueando isso de alguma forma?

Como eu disse, se eu usar o host local (127.0.0.1) para meu cliente se conectar ao servidor, tudo funcionará como esperado. Quando tento me conectar com meu DNS dinâmico, recebo uma mensagem do KryoNet que está se conectando ao meu endereço IP "real" no console:

00:00  INFO: Connecting: my.dynamic.dns/XXX.XXX.XXX.XXX:8001/8002

Mas após o tempo limite de 5000 ms, ele não consegue se conectar.

    
por Madmenyo 03.09.2015 / 12:48

2 respostas

3

Se você estiver tentando se conectar na mesma rede, não funcionará. Você não pode acessar seu próprio IP externo.

Você pode usar um site de testador de encaminhamento de porta, há cargas ao redor, para verificar se as portas estão abertas e aceitando tráfego, mas para um teste real você precisará tentar se conectar de outra conexão de internet.

    
por 03.09.2015 / 13:35
2

Como apontado por Deadly-Bagel, seu modem / roteador pode não permitir loopback de NAT, ou seja, a capacidade de seus clientes de LAN acessarem serviços (como um servidor da web) através de seu próprio IP público.

Recurso: link

O que provavelmente está acontecendo é

  1. Seu cliente Kryo está se conectando ao seu servidor DDNS (por seu URL)
  2. O serviço DDNS (DynDNS, por exemplo) informa ao seu Cliente Kryo qual é o IP do domínio (que é seu próprio IP público).
  3. Seu cliente Kryo tenta se conectar ao seu próprio IP público e falha porque o seu modem / roteador não pode fazer o loopback (e depois encaminhar) a solicitação de volta ao seu servidor Kryo.

Existem algumas soluções possíveis para isso:

  1. Altere seu modem / roteador para um que tenha loopback de NAT
  2. Edite o computador em que você está usando o arquivo hosts para direcionar seu URL de DDNS para 127.0.0.1 para que o efeito dele converse com seu serviço DDNS.
  3. Se o seu Kryo Server estiver em um computador diferente do seu cliente Kryo, você poderá conectar o Kryo Client PC ao seu telefone celular, por exemplo, e usar sua conexão 3G para testar a conexão do seu cliente ao servidor.

Em outra nota, você não deve fazer o encaminhamento de porta e colocar seu IP público como o IP da LAN - não funciona assim. O ponto principal do encaminhamento de porta é que as solicitações do lado da WAN sejam direcionadas para um dispositivo do lado da LAN.

    
por 03.09.2015 / 13:56