Come verificare che un server OpenVPN sia in ascolto su una porta remota senza utilizzare il client OpenVPN?


39

Devo verificare che un server OpenVPN (UDP) sia attivo e accessibile su un determinato host: porta.

Ho solo un semplice computer Windows XP senza client OpenVPN (e nessuna possibilità di installarlo) e nessuna chiave necessaria per connettermi al server: sono a mia disposizione solo i comuni strumenti della riga di comando WinXP, un browser e PuTTY.

Se stavo testando qualcosa come un servert SMTP o POP3, userei telnet e vedrei se rispondeva, ma come fare con OpenVPN (UDP)?


se openvpn è in esecuzione tramite tcp, potresti anche telnet
rvs

OpenVPN funziona tramite UDP
Ivan

2
Puoi approfondire il motivo per cui vorresti risolverlo da un sistema Windows obsoleto e non da un vero sistema di monitoraggio?
Alex Holst,

2
Se il server openvpn UDP utilizza l' tls-authopzione di configurazione (consigliata) , è IMPOSSIBILE (se non si dispone almeno della chiave del wrapper esterno)! Qualsiasi pacchetto con firma HMAC errata verrà scartato senza risposta dal server.
Alex Stragies,

Risposte:


51

Ecco una shell one-liner:

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

se c'è un openvpn sull'altra estremità l'output sarà

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

altrimenti sarà solo muto e timeout dopo 10 secondi o visualizzerà qualcosa di diverso.

NOTA: funziona solo se l' tls-authopzione di configurazione non è attiva, altrimenti il ​​server rifiuta i messaggi con HMAC errato.


2
Ottengo qualcosa di leggermente diverso, ma ottengo qualcosa. Grazie.
artfulrobot,

7
Giusto per affermare l'ovvio, questo è per Linux / Unix, non per Windows. E richiede netcat (non installato di default in alcune distro). Inoltre, se la tua distribuzione Linux non ha il comando "timeout", usa semplicemente il parametro netcat "-w", come "nc -w 10 -u openvpnserver.com 1194".
MV.

1
Questo è fantastico.
dmourati,

2
Questo non funzionerà nello scenario OP, se il server utilizza l' tls-authopzione di configurazione per eliminare i pacchetti con sig. HMAC errato.
Alex Stragies,

2
Trovo che il piping od -x -N 14piuttosto che cat -vsia molto più utile perché puoi a) vedere il contenuto binario effettivo piuttosto che immondizia ASCII eb) ricevere istantaneamente ogni riga di output mentre il server invia ogni pacchetto di handshake e lo interrompe subito dopo il primo. -N 14perché il pacchetto di handshake è lungo 14 byte e si ripete.
BaseZen,

5

Scusate se sono in ritardo con la mia risposta;)
Invia un pacchetto udp con il seguente contenuto:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Il server deve rispondere a qualcosa.
Puoi creare pacchetti udp con Python in questo modo:

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()

1
come dice la risposta di Loic, questo non funziona tls-auth.
Tedder42,

1
Per Python 3 la riga 10 causerà un problema. Sostituisci "sock.send (senddata)" con "sock.send (senddata.encode ())" e funzionerà.
NDB,

2

Puoi provare a eseguire quanto segue nella CLI

#netstat -ltnup

Questo dovrebbe elencare tutti i processi in ascolto sul tuo server / sistema. Grep per il numero di porta desiderato

#netstat -ltnup | grep 1194

OP ha solo strumenti di Windows XP.
user9517 supporta GoFundMonica il

1
@Iain: l'OP aveva PuTTY, quindi potrebbe essere in grado di SSH nel server. In tal caso, questo controllo molto semplice è un utile primo passo.
marzo

2

Per tutti coloro che si imbattono in questo e sta cercando di monitorare un server tls-authabilitato, è possibile utilizzare lo script python qui: https://github.com/liquidat/nagios-icinga-openvpn

L'output è formattato per l'uso in Nagios o Icinga, ma può essere eseguito da qualsiasi cosa / chiunque, a condizione che tu abbia python e il file di chiavi tls disponibili.

Ad esempio, se utilizzi SHA256come digest, utilizzeresti qualcosa del tipo:

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

Nota: potrebbe essere necessario aggiungere a --tls-auth-inverseseconda del key-directionvalore del server .


0

Se riesci a ottenere un pcap di interazione valida tra il client OpenVPN e il server OpenVPN, puoi modellare il set iniziale di pacchetti con qualcosa come netcat, come suggerito da TiZon.

Fondamentalmente, vuoi abbastanza di un primo pacchetto valido per far sì che il server risponda con almeno un messaggio di errore, quindi non deve essere perfetto, ma abbastanza buono.

Ho provato ad andare su http://pcapr.net , ma non ho visto un esempio OpenVPN lì. Forse, se qualcun altro sostiene che il servizio è attivo, potresti convincere l'altra persona a prendere un tappo della transazione.


-5

se hai installato openvpn su un ascolto tcp, allora è semplice come

telnet vpnserver 1194

supponendo che 1194 sia la porta su cui è in ascolto

questo dovrebbe darti una risposta di qualche tipo per mostrare che il server openvpn è in ascolto


Sei sicuro al 100%? Quando lo faccio, ricevo "Impossibile aprire la connessione all'host sulla porta 1194: Connessione non riuscita" dopo qualche attesa. Un client non è destinato a dire qualcosa prima, prima che un server OpenVPN risponda?
Ivan,

6
Si noti che per impostazione predefinita OpenVPN è solo UDP e telnet è progettato per utilizzare TCP.
Ivan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.