Como verificar se um servidor OpenVPN está escutando em uma porta remota sem usar o cliente OpenVPN?

39

Eu preciso verificar se um servidor OpenVPN (UDP) está ativo e acessível em um determinado host: porta.

Eu só tenho um computador Windows XP simples sem cliente OpenVPN (e nenhuma chance de instalá-lo) e nenhuma chave necessária para se conectar ao servidor - apenas ferramentas comuns de linha de comando WinXP, um navegador e PuTTY estão à minha disposição. / p>

Se eu estivesse testando algo como um servidor SMTP ou POP3, eu usaria o telnet e verificaria se ele responde, mas como fazer isso com o OpenVPN (UDP)?

    
por Ivan 22.04.2011 / 11:01

6 respostas

49

Aqui está uma linha de concha:

echo -e "\x38\x01\x00\x00\x00\x00\x00\x00\x00" | 
   timeout 10 nc -u openvpnserver.com 1194 | cat -v

se houver um openvpn no outro lado, a saída será

@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X...

caso contrário, será apenas mute e timeout após 10 segundos ou exibirá algo diferente.

NOTA: isso funciona somente se a opção tls-auth config não estiver ativa, caso contrário, o servidor rejeitará mensagens com HMAC incorreto.

    
por 17.01.2013 / 17:26
5

Desculpe se estou um pouco atrasado com a minha resposta;)
Envie um pacote udp com o seguinte conteúdo:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00

O servidor deve responder algo.
Você pode forjar pacotes udp com python assim:

import socket
senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00"

def checkserver(ip,port):
   print('Checking %s:%s' %(ip,port)) 
   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   sock.settimeout(5) # in seconds
   sock.connect((ip, port))
   print("Sending request...")
   sock.send(senddata)
   try:
      dta=sock.recv(100)
      print("Server reply: %s" %(dta))
   except:
      print("Server not responding")
   sock.close()
   print("###########################################################")

def main():
   checkserver("addr.of.server1",1194)
   checkserver("addr.of.server2",1195)

if __name__ == "__main__":
   main()
    
por 30.10.2012 / 08:56
2

Você pode tentar executar o seguinte no CLI

#netstat -ltnup

Isso deve listar todos os processos que estão escutando em seu servidor / sistema. Grep para o número da porta que você quer

#netstat -ltnup | grep 1194
    
por 22.04.2011 / 14:49
1

Para qualquer pessoa que esteja executando esse processo que esteja tentando monitorar um servidor que tenha tls-auth ativado, você pode usar o script python aqui: link

A saída é formatada para uso no Nagios ou Icinga, mas pode ser executada por qualquer coisa / qualquer pessoa, desde que você tenha python e o arquivo-chave tls disponível.

Por exemplo, se você estiver usando SHA256 como seu resumo, use algo como:

python check-openvpn.py -p 1194 --tls-auth ta.key --digest SHA256 vpn-server.example.com

Nota: talvez você precise adicionar --tls-auth-inverse dependendo do valor key-direction do servidor.

    
por 31.01.2018 / 22:14
0

Se você puder obter um pcap de uma interação válida do servidor OpenVPN com o OpenVPN, você pode modelar o conjunto inicial de pacotes com algo como netcat, como sugerido pela TiZon.

Basicamente, você quer o suficiente de um primeiro pacote válido para fazer com que o servidor responda com pelo menos uma mensagem de erro, para que não seja perfeito, apenas o suficiente.

Eu tentei acessar o link , mas não vi um exemplo do OpenVPN. Talvez, se outra pessoa estiver alegando que o serviço está funcionando, você pode fazer com que outra pessoa pegue um pcap da transação.

    
por 22.04.2011 / 21:02
-5

se você tiver configurado o openvpn em um tcp, então é tão simples quanto

telnet vpnserver 1194

assumindo que 1194 é a porta em que você está ouvindo

isto deve dar uma resposta de algum tipo para mostrar que o servidor openvpn está escutando

    
por 22.04.2011 / 11:25