tempo de leitura:

Estava precisando disponibilizar acesso remoto contínuo a um computador windows via RDP (Terminal Services), mas tinham algumas "pedras" nesse caminho:

  1. O Link da máquina remota é via rádio, logo tive que pedir à provedora para desviar as portas;
  2. O rádio da provedora me oferece um IP interno, que é entregue ao meu roteador que distribui a conexão via cabo ou WiFi (com outra classe de Rede);
  3. O IP muda constantemente, logo tenho que partir para DNS Dinâmico;
  4. Não posso usar o DNS dinâmico do meu roteador, pois o IP WAN dele é sempre o mesmo (recebido do Rádio);
  5. A máquina windows está ligada direto, mas das provedoras grátis de DNS dinâmico que testei, nenhuma me oferecia um programa que rodasse no windows para atualizar o DNS;

Munido destes fatos e como sempre, procurando uma forma "tecnologicamente complexa" de resolver problemas, decidi inventar algo diferente:

Primeiro Passo: Atualizar o endereço IP da máquina remota em algum lugar acessível

O objetivo é que a máquina Windows envie o seu IP para algum lugar acessível das duas pontas periodicamente.Com isso, basta eu acessar uma URL para conseguir o IP atualizado da máquina remota. Fiz da seguinte forma:

  1. Criei um script em PHP, com o único objetivo de salvar em um .txt o IP de quem o acessou;

    <?php
    
    $ip = $_SERVER['REMOTE_ADDR'];
    
    $hdl = fopen('ip.txt', 'w');
    fwrite($hdl, $ip);
    fclose($hdl);
    ?>
    
  2. Publiquei este script em uma URL que, obviamente, só eu saiba (para evitar que algum engraçadinho acesse-a e prejudique meu acesso);

  3. Na máquina Windows, Instalei o wget pra windows e criei um agendamento (Iniciar -> Painel de Controle -> Tarefas Agendadas) que roda a cada 10 minutos o seguinte batch file (update.cmd):

        @Echo off
        curl http://minha.url/secreta/ip.php
    

Segundo passo: Capturar este endereço da máquina de origem e acessar a máquina

Para ter acesso ao endereço IP é fácil, basta acessar a http://minha.url/secreta/ip.txt e pronto! ip visível! detalhe para a extensão de acesso: txt. Quando acessamos o ip.php ele atualiza o endereço IP; quando acessamos o ip.txt temos acesso ao endereço salvo:

Mas ai vem a parte difícil, como explicar pro usuário que ele tem que acessar um endereço, pegar uns números, abrir o Iniciar -> Executar -> mstsc (ou um ícone com o RDP); colar o número e ai sim abrir a sessão remota?!

Mais um script!

Criei um arquivo em VisualBasic Script chamado remoto.vbs com o seguinte conteúdo:

Dim oXMLHTTP
Dim oStream
Dim oFSO, oShell, strFileName, strComputerName

strFileName = "Rdp.rdp"

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.3.0")

oXMLHTTP.Open "GET", "http://minha.url/secreta/ip.txt", False
oXMLHTTP.Send

If oXMLHTTP.Status = 200 Then

    strComputerName = oXMLHTTP.responseText + ":3390"

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oStream = oFSO.CreateTextFile(strFileName, True)
    oStream.WriteLine "full address:s:" + strComputerName
    oStream.WriteLine "username:s:USUARIO"
    oStream.WriteLine "promptcredentialonce:i:1"
    oStream.WriteLine "gatewaycredentialssource:i:4"
    oStream.WriteLine "prompt for credentials:i:0"
    oStream.WriteLine "autoreconnection enabled:i:1"
    oStream.WriteLine "authentication level:i:2"

    oStream.Close

    Set oShell = CreateObject("WScript.Shell")
    oShell.Run "mstsc """ + strFileName + """"

End If

O script é bem simples:

  1. Pega o endereço IP da URL (que você deve corrigir para suas necessidades);
  2. Concatena com a porta (no meu caso 3390 - o padrão seria 3389);
  3. Cria o arquivo Rdp.rdp com o endereço, nome de usuário e outros parâmetros que habilitei para permitir salvar a senha do usuário;
  4. Salva e executa o RDP.

Desta forma, o usuário só tem que executar o script VBS, que se encarrega de busar o IP correto e conectar remotamente a máquina.

Blog Logo

José Morelli Neto


Publicado em

Image

Notas do Neto

De tudo um pouco...

Ir para início