web-dev-qa-db-fra.com

Comment vérifier qu'un serveur OpenVPN écoute sur un port distant sans utiliser le client OpenVPN?

Je dois vérifier qu'un serveur OpenVPN (UDP) est en place et accessible sur un port Host: donné.

Je n'ai qu'un simple ordinateur Windows XP sans client OpenVPN (et aucune chance de l'installer) et aucune clé nécessaire pour se connecter au serveur - juste des outils de ligne de commande WinXP courants, un navigateur et PuTTY sont à ma disposition.

Si je testais quelque chose comme un serveur SMTP ou POP3, j'utiliserais telnet pour voir s'il répond, mais comment faire cela avec OpenVPN (UDP)?

41
Ivan

Voici une doublure Shell:

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

s'il y a un openvpn à l'autre extrémité, la sortie sera

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

sinon, il sera simplement mis en sourdine et expirera après 10 secondes ou affichera quelque chose de différent.

REMARQUE: cela ne fonctionne que si l'option de configuration tls-auth N'est pas active, sinon le serveur rejette les messages avec un HMAC incorrect.

53
Loic Dachary

Désolé si je suis un peu en retard avec ma réponse;)
Envoyez un paquet udp avec le contenu suivant:
38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Le serveur doit répondre à quelque chose.
Vous pouvez forger des paquets udp avec python comme ceci:

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
babbler

Pour toute personne qui traverse ce système et qui essaie de surveiller un serveur qui a tls-auth activé, vous pouvez utiliser le script python ici: https://github.com/liquidat/nagios-icinga-openvpn

La sortie est formatée pour être utilisée dans Nagios ou Icinga, mais elle peut être exécutée par n'importe quoi/n'importe qui, à condition que vous ayez python et le fichier clé tls disponibles.

Par exemple, si vous utilisez SHA256 comme résumé, vous utiliseriez quelque chose comme:

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

Remarque: vous devrez peut-être ajouter --tls-auth-inverse selon le serveur key-direction valeur.

4
seren

Vous pouvez essayer d'exécuter ce qui suit à la CLI

#netstat -ltnup

Cela devrait répertorier tous les processus qui écoutent sur votre serveur/système. Grep pour le numéro de port que vous voulez

#netstat -ltnup | grep 1194
2
Mister IT Guru

Si vous pouvez obtenir un pcap d'interaction valide entre le client OpenVPN et le serveur OpenVPN, vous pouvez modéliser l'ensemble initial de paquets avec quelque chose comme netcat, comme suggéré par TiZon.

Fondamentalement, vous voulez suffisamment d'un premier paquet valide pour que le serveur réponde avec au moins un message d'erreur, il ne doit donc pas être parfait, juste assez bon.

J'ai essayé d'aller à http://pcapr.net , mais je n'y ai pas vu d'exemple OpenVPN. Peut-être que si quelqu'un d'autre prétend que le service est en hausse, vous pouvez demander à cette autre personne de récupérer une capture d'écran de la transaction.

0
pcapademic