2 votes

Comment le VPN SSL (openvpn) se connecte-t-il via UDP ?

J'ai besoin de tester si un service OpenVPN (ssl-vpn) écoute sur une adresse IP et un port spécifiques à partir d'une boîte linux. J'aimerais faire cela avec un bash script ou du code en Python ou c/c++ mais ce n'est pas le problème - je peux l'implémenter dès que je sais comment fonctionne UDP ici.

Mon problème est le suivant : le service VPN sur la machine distante est configuré pour utiliser UDP et comme UDP n'est pas un protocole qui supporte les connexions comme TCP, je suppose que toute réponse à un message/paquet que j'ai envoyé à la machine distante est répondue à un autre port sur ma machine locale.

Je connais netcat mais il est évident que je ne recevrai pas de réponse en utilisant le protocole UDP sans connexion. nc -u ip port ne fonctionnera pas.

Alors, comment puis-je vérifier si le VPN est réellement en place et fonctionne derrière une adresse IP et un port.

編集する。
Est-il possible d'émuler le VPN avec un bash script ? Quelque chose comme se connecter avec un HELO comme dans SMTP et vérifier si le serveur VPN a envoyé une réponse en retour ? Je saurais comment cela fonctionne avec tcp mais je n'ai aucune idée de comment faire cela avec UDP.

Edit2 :
Je viens de trouver cette réponse . Donc, comment puis-je écouter les paquets ICMP qui doivent être répondues lorsque le serveur distant n'est pas disponible ? Est-ce possible avec bash/Python/c/c++ ou netcat ? Comment puis-je savoir si le serveur est là, écoutant les demandes (il ne devrait pas y avoir de réponse ICMP alors, n'est-ce pas ?) ?

0voto

jammus Points 1796

La seule façon de tester cela de manière fiable serait d'établir une connexion avec le VPN.

Comme vous l'avez dit, l'OpenVPN qui utilise TCP ne peut pas être testé en utilisant une simple connexion TCP. Je pense que la seule façon de tester est de parler le protocole OpenVPN.

Je pense qu'il serait possible de modifier le client pour qu'il puisse tester sans se connecter complètement.

0 votes

J'ai également pensé à envoyer une sorte de HELO comme dans SMTP et vérifier si je reçois une réponse. Mais comme la réponse ne semble pas revenir à la même connexion (faute de connexion), je ne sais pas comment faire.

0 votes

Je pense que vous devriez examiner la source de l'OpenVPN. Je ne suis pas sûr qu'il y ait des méthodes disponibles dans le cadre du protocole. Je doute que vous puissiez tester avec bash, et il vous faudrait apprendre le C.

0 votes

La partie programmation n'est pas le problème. Je ne sais simplement pas comment gérer la "connexion" UDP (qui n'est pas une connexion comme dans TCP).

0voto

babbler Points 61

Ceci est tiré de ma réponse précédente à une question similaire.
Comment vérifier qu'un serveur OpenVPN écoute sur un port distant sans utiliser le client OpenVPN ?
Si vous utilisez l'authentification tls (ligne de configuration tls-auth), cela ne fonctionne pas, mais vous pouvez avoir une idée de la conversation UDP.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X