52 votes

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 ligne et accessible sur un hôte:port donné.

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

Si je testais quelque chose comme un serveur SMTP ou POP3 je utiliserais telnet et vérifier si le serveur répond, mais comment faire cela avec OpenVPN (UDP)?

64voto

Jörg Points 581

Voici une ligne de commande shell :

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

si un openvpn est connecté de l'autre côté, la sortie sera

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

sinon, il n'y aura aucun affichage et cela se terminera après 10 secondes ou affichera quelque chose de différent.

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

9voto

babbler Points 61

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
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('Vérification de %s:%s' %(ip,port)) 
   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   sock.settimeout(5) # en secondes
   sock.connect((ip, port))
   print("Envoi de la requête...")
   sock.send(senddata)
   try:
      dta=sock.recv(100)
      print("Réponse du serveur : %s" %(dta))
   except:
      print("Serveur ne répond pas")
   sock.close()
   print("###########################################################")

def main():
   checkserver("adresse.du.serveur1",1194)
   checkserver("adresse.du.serveur2",1195)

if __name__ == "__main__":
   main()

7voto

seren Points 273

Pour toute personne qui cherche à surveiller un serveur sur lequel tls-auth est activé, vous pouvez utiliser le script python ici : https://github.com/liquidat/nagios-icinga-openvpn

La sortie est formatée pour une utilisation dans Nagios ou Icinga, mais elle peut être exécutée par n'importe quoi/n'importe qui, à condition d'avoir python et le fichier de clé tls disponible.

Par exemple, si vous utilisez SHA256 comme digest, vous utiliserez quelque chose comme :

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

Note : vous pourriez avoir besoin d'ajouter --tls-auth-inverse selon la valeur de key-direction du serveur.

6voto

Mister IT Guru Points 1148

Vous pouvez essayer d'exécuter la commande suivante dans l'interface de ligne de commande

#netstat -ltnup

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

#netstat -ltnup | grep 1194

2voto

Emeeus Points 121

Pour savoir si vous pouvez atteindre le serveur OpenVPN et le port en utilisant UDP (pas TCP), vous pourriez utiliser "netcat" (sous Linux) comme ceci :

nc -vu openvpnserver 1195

si le résultat est quelque chose comme :

La connexion au serveur OpenVPN sur le port 1195 [udp/*] a réussi !

vous pouvez faire des requêtes UDP vers openvpnserver:port.

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