Frage Wie kann überprüft werden, dass ein OpenVPN-Server einen Remote-Port überwacht, ohne den OpenVPN-Client zu verwenden?


Ich muss überprüfen, ob ein OpenVPN (UDP) -Server auf einem bestimmten Host: Port verfügbar ist.

Ich habe nur einen einfachen Windows XP-Computer ohne OpenVPN-Client (und keine Chance, es zu installieren) und keine Schlüssel zum Herstellen einer Verbindung zum Server - nur gemeinsame WinXP-Befehlszeilenprogramme, ein Browser und PuTTY stehen mir zur Verfügung.

Wenn ich etwas wie einen SMTP- oder POP3-Server testen würde, würde ich Telnet verwenden und sehen, ob es antwortet, aber wie macht man das mit OpenVPN (UDP)?


36
2018-04-22 09:01


Ursprung


Wenn openvpn über tcp läuft, können Sie auch telnet verwenden - rvs
OpenVPN läuft über UDP - Ivan
Können Sie näher erläutern, warum Sie dies von einem veralteten Windows-System und nicht von einem echten Überwachungssystem lösen möchten? - Alex Holst
Wenn der openvpn-Server von UDP den (empfohlenen) tls-auth Konfigurationsoption, dann ist es UNMÖGLICH (Wenn Sie nicht mindestens den äußeren Wrapper-Schlüssel haben)! Jedes Paket mit falscher HMAC-Signatur wird ohne Antwort vom Server verworfen. - Alex Stragies


Antworten:


Hier ist ein Shell-One-Liner:

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

Wenn am anderen Ende ein openvpn ist, wird die Ausgabe sein

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

ansonsten wird es nur nach 10 Sekunden stummgeschaltet und ablaufen oder etwas anderes anzeigen.

Hinweis: Dies funktioniert nur, wenn tls-auth Die Option config ist nicht aktiv, da der Server sonst Nachrichten mit falschem HMAC ablehnt.


44
2018-01-17 16:26



Ich bekomme etwas anderes, aber ich bekomme etwas. Vielen Dank. - artfulrobot
Nur um das Offensichtliche zu sagen, dies ist für Linux / Unix, nicht für Windows. Und es erfordert netcat (nicht standardmäßig in einigen Distributionen installiert). Wenn Ihre Linux Distribution nicht den "timeout" Befehl hat, verwenden Sie einfach den netcat "-w" Parameter, wie "nc -w 10 -u openvpnserver.com 1194". - MV.
Das ist fantastisch. - dmourati
Dies funktioniert nicht im OP-Szenario, wenn der Server das verwendet tls-auth Konfigurationsoption, um Pakete mit falschem HMAC sig zu löschen. - Alex Stragies
Ich finde Rohrleitungen zu od -x -N 14 eher, als cat -v ist viel nützlicher, weil Sie a) den tatsächlichen binären Inhalt statt ASCII-Müll sehen können und b) sofort jede Zeile der Ausgabe erhalten, wenn der Server jedes Handshake-Paket sendet und sofort nach dem ersten aufhört. -N 14 weil das Handshake-Paket 14 Bytes lang ist und nur wiederholt wird. - BaseZen


Entschuldigung, wenn ich mit meiner Antwort etwas spät dran bin;)
Senden Sie ein UDP-Paket mit folgendem Inhalt:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Der Server muss etwas antworten.
Sie können UDP-Pakete mit Python wie folgt fälschen:

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

5
2017-10-30 07:56



Wie Loic's Antwort sagt, funktioniert das nicht tls-auth. - tedder42
Für Python 3 wird Zeile 10 ein Problem verursachen. Ersetzen Sie "sock.send (senddata)" durch "sock.send (senddata.encode ())" und es wird funktionieren. - NDB


Für jeden, der über diesen Server läuft, der versucht, einen Server zu überwachen, der tls-auth aktiviert, können Sie das Python-Skript hier verwenden: https://github.com/liquidat/nagios-icinga-openvpn

Die Ausgabe ist für die Verwendung in einem Nagios oder Icinga formatiert, aber sie kann von jedem / jedem ausgeführt werden, vorausgesetzt, Sie haben Python und die TLS-Schlüsseldatei verfügbar.

Zum Beispiel, wenn Sie verwenden SHA256 Als dein Digest verwendest du etwas wie:

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

Hinweis: Möglicherweise müssen Sie hinzufügen --tls-auth-inverse abhängig vom Server key-direction Wert.


1
2018-01-31 21:14





Sie können versuchen, Folgendes am CLI auszuführen

#netstat -ltnup

Dies sollte alle Prozesse auflisten, die auf Ihrem Server / System überwacht werden. Grep für die gewünschte Portnummer

#netstat -ltnup | grep 1194

0
2018-04-22 12:49



OP hat nur Windows XP Tools. - Iain


Wenn Sie eine gültige OpenVPN-Client-OpenVPN-Server-Interaktion erhalten, können Sie den initialen Paketsatz mit Netcat modellieren, wie von TiZon vorgeschlagen.

Grundsätzlich wollen Sie genug von einem gültigen ersten Paket, um den Server mit mindestens einer Fehlermeldung zu antworten, so dass es nicht perfekt sein muss, nur gut genug.

Ich habe es versucht http://pcapr.net, aber ich habe dort kein OpenVPN-Beispiel gesehen. Vielleicht, wenn jemand anderes behauptet, der Dienst sei abgelaufen, könnten Sie diese andere Person dazu bringen, einen Teil der Transaktion abzuholen.


0
2018-04-22 19:02





wenn du openvpn auf einem tcp eingerichtet hast, dann ist es so einfach wie

telnet vpnserver 1194

angenommen, 1194 ist der Port, an dem Sie es hören

Dies sollte Ihnen eine Antwort geben, die zeigt, dass der openvpn-Server zuhört


-4
2018-04-22 09:25



Bist du 100% sicher? Wenn ich dies tue, bekomme ich nach einigem Warten "Verbindung zum Host nicht öffnen, auf Port 1194: Verbindung fehlgeschlagen". Soll ein Client nicht zuerst etwas sagen, bevor ein OpenVPN-Server antwortet? - Ivan
Beachten Sie, dass OpenVPN standardmäßig nur UDP und Telnet TCP verwendet. - Ivan