Jak sprawdzić, czy serwer OpenVPN nasłuchuje na zdalnym porcie bez użycia klienta OpenVPN?

39

Muszę sprawdzić, czy serwer OpenVPN (UDP) jest włączony i dostępny na danym hoście: porcie.

Mam tylko zwykły komputer z systemem Windows XP bez klienta OpenVPN (i bez szansy na jego zainstalowanie) i bez kluczy potrzebnych do połączenia z serwerem - po prostu wspólne narzędzia wiersza poleceń WinXP, przeglądarka i PuTTY.

Gdybym testował coś w rodzaju serwera SMTP lub POP3, użyłbym telnetu i sprawdziłby, czy odpowiada, ale jak to zrobić z OpenVPN (UDP)?

Ivan
źródło
jeśli openvpn działa przez tcp, możesz również telnet
rvs
OpenVPN działa przez UDP
Ivan
2
Czy możesz wyjaśnić, dlaczego chcesz rozwiązać ten problem z przestarzałego systemu Windows, a nie z prawdziwego systemu monitorowania?
Alex Holst
2
Jeśli serwer openvpn UDP korzysta z (zalecanej) tls-authopcji konfiguracji, to jest NIEMOŻLIWE (jeśli nie masz przynajmniej zewnętrznego klucza opakowania)! Każdy pakiet z niepoprawnym podpisem HMAC zostanie odrzucony bez odpowiedzi przez serwer.
Alex Stragies

Odpowiedzi:

51

Oto skorupa jednowarstwowa:

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

jeśli na drugim końcu jest openvpn, wyjście będzie

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

w przeciwnym razie nastąpi wyciszenie i przekroczenie limitu czasu po 10 sekundach lub wyświetlenie czegoś innego.

UWAGA: działa to tylko wtedy, gdy tls-authopcja konfiguracji nie jest aktywna, w przeciwnym razie serwer odrzuca wiadomości z niepoprawnym HMAC.

Loic Dachary
źródło
2
Dostaję coś innego, ale coś dostaję. Dzięki.
artfulrobot
7
Mówiąc oczywiste, dotyczy to systemu Linux / Unix, a nie systemu Windows. I wymaga netcat (domyślnie nie instalowany w niektórych dystrybucjach). Ponadto, jeśli dystrybucja Linuksa nie ma polecenia „limit czasu”, po prostu użyj parametru netcat „-w”, na przykład „nc -w 10 -u openvpnserver.com 1194”.
MV.
1
To jest niesamowite.
dmourati
2
Nie zadziała to w scenariuszu OP, jeśli serwer użyje tls-authopcji konfiguracji, aby upuścić pakiety z niepoprawnym sygnałem HMAC.
Alex Stragies
2
Uważam, że przesyłanie strumieniowe do od -x -N 14zamiast cat -vjest o wiele bardziej przydatne, ponieważ możesz a) zobaczyć rzeczywistą zawartość binarną zamiast śmieci ASCII oraz b) natychmiast otrzymać każdy wiersz wyniku, gdy serwer wysyła każdy pakiet uzgadniania i zatrzymuje go od razu po pierwszym. -N 14ponieważ pakiet uzgadniania ma 14 bajtów i po prostu się powtarza.
BaseZen
5

Przepraszam, jeśli spóźniłem się z odpowiedzią;)
Wyślij pakiet udp o następującej treści:
38 $ 01 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Serwer musi coś odpowiedzieć.
Możesz fałszować pakiety udp za pomocą Pythona w następujący sposób:

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()
gaduła
źródło
1
jak mówi Loic, nie działa tls-auth.
tedder42
1
W przypadku Python 3 wiersz 10 spowoduje problem. Zamień „sock.send (senddata)” na „sock.send (senddata.encode ())” i będzie działać.
NDB
2

Możesz spróbować uruchomić następujące w CLI

#netstat -ltnup

Powinno to zawierać listę wszystkich procesów nasłuchujących na serwerze / systemie. Grep dla żądanego numeru portu

#netstat -ltnup | grep 1194
Mister IT Guru
źródło
OP ma tylko narzędzia Windows XP.
user9517 obsługuje GoFundMonica
1
@Iain: OP miał PuTTY, więc może być w stanie SSH na serwerze. W takim przypadku ta bardzo prosta kontrola jest przydatnym pierwszym krokiem.
mivk
2

Dla każdego, kto zetknie się z tym, który próbuje monitorować tls-authwłączony serwer , możesz użyć skryptu python tutaj: https://github.com/liquidat/nagios-icinga-openvpn

Dane wyjściowe są sformatowane do użycia w Nagios lub Icinga, ale mogą być uruchamiane przez cokolwiek / każdego, pod warunkiem, że masz Python i plik kluczy tls.

Na przykład, jeśli używasz SHA256jako skrótu, użyłbyś czegoś takiego:

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

Uwaga: może być konieczne dodanie w --tls-auth-inversezależności od wartości serwera key-direction.

spokojny
źródło
0

Jeśli możesz uzyskać pakiet poprawnego klienta OpenVPN do interakcji z serwerem OpenVPN, możesz modelować początkowy zestaw pakietów za pomocą czegoś takiego jak netcat, jak sugeruje TiZon.

Zasadniczo potrzebujesz wystarczającej ilości pierwszego pakietu, aby serwer mógł odpowiedzieć przynajmniej komunikatem o błędzie, więc nie musi być idealny, wystarczy.

Próbowałem wejść na http://pcapr.net , ale nie widziałem tam przykładu OpenVPN. Być może, jeśli ktoś twierdzi, że usługa jest aktywna, możesz poprosić tę osobę o pobranie transakcji.

pcapademic
źródło
-5

jeśli masz skonfigurowane openvpn na nasłuchiwaniu tcp, to jest tak proste jak

telnet vpnserver 1194

zakładając, że 1194 jest portem, na którym nasłuchujesz

powinno to dać ci jakąś odpowiedź, aby pokazać, że serwer openvpn nasłuchuje

anthonysomerset
źródło
Czy jesteś w 100% pewien? Gdy to zrobię, po pewnym czasie pojawia się komunikat „Nie można otworzyć połączenia z hostem na porcie 1194: Połączenie nie powiodło się”. Czy klient nie powinien najpierw coś powiedzieć, zanim odpowie serwer OpenVPN?
Ivan
6
Zauważ, że domyślnie OpenVPN obsługuje tylko UDP, a telnet ma używać TCP.
Ivan