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


39

Je dois vérifier qu'un serveur OpenVPN (UDP) est opérationnel et accessible sur un hôte donné: port.

Je n'ai qu'un ordinateur Windows XP standard sans client OpenVPN (et aucune chance de l'installer) et aucune clé n'est nécessaire pour se connecter au serveur. Seuls 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)?


Si openvpn est lancé via tcp, vous pouvez aussi telnet
rvs le

OpenVPN fonctionne sous UDP
Ivan

2
Pouvez-vous expliquer pourquoi vous souhaitez résoudre ce problème à partir d'un système Windows obsolète et non à partir d'un véritable système de surveillance?
Alex Holst

2
Si le serveur UDP OpenVPN utilise l' tls-authoption de configuration (recommandée) , il est alors IMPOSSIBLE (Si vous n'avez pas au moins la clé enveloppe extérieure)! Tout paquet avec une signature HMAC incorrecte sera supprimé sans réponse du serveur.
Alex Stragies

Réponses:


51

Voici un shell one-liner:

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 bout la sortie sera

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

sinon, le son sera muet et expirera au bout de 10 secondes ou affichera quelque chose de différent.

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


2
J'ai quelque chose de différent, mais j'ai quelque chose. Merci.
artfulrobot

7
Juste pour énoncer l'évidence, c'est pour Linux / Unix, pas pour Windows. Et cela nécessite netcat (non installé par défaut dans certaines distributions). De plus, si votre distribution Linux ne dispose pas de la commande "timeout", utilisez simplement le paramètre netcat "-w", comme "nc -w 10 -u openvpnserver.com 1194".
MV.

1
C'est génial.
Demourati

2
Cela ne fonctionnera pas dans le scénario OP si le serveur utilise l' tls-authoption config pour supprimer les paquets contenant un signal HMAC incorrect.
Alex Stragies

2
Je trouve que la tuyauterie od -x -N 14plutôt que ce qui cat -vest beaucoup plus utile car vous pouvez a) voir le contenu binaire actuel plutôt que les ordures ASCII et b) recevoir instantanément chaque ligne de sortie lorsque le serveur envoie chaque paquet de négociation et l'arrête immédiatement après la première. -N 14parce que le paquet de négociation a une longueur de 14 octets et se répète.
BaseZen

5

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

1
comme le dit la réponse de Loic, cela ne fonctionne pas tls-auth.
tedder42

1
Pour Python 3, la ligne 10 causera un problème. Remplacez "sock.send (senddata)" par "sock.send (senddata.encode ())" et cela fonctionnera.
NDB

2

Vous pouvez essayer de lancer ce qui suit sur la CLI

#netstat -ltnup

Cela devrait lister tous les processus en cours d'écoute sur votre serveur / système. Grep pour le numéro de port que vous voulez

#netstat -ltnup | grep 1194

OP n'a que des outils Windows XP.
user9517 prend en charge GoFundMonica le

1
@Iain: L'OP avait PuTTY, donc peut être capable de SSH dans le serveur. Dans ce cas, cette vérification très simple est une première étape utile.
mardi

2

Pour tous ceux qui essaient de contrôler un serveur tls-authactivé, 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 tout le monde, à condition que vous ayez le fichier python et le fichier de clés tls disponible.

Par exemple, si vous utilisez SHA256comme 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 en --tls-auth-inversefonction de la key-directionvaleur du serveur .


0

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

Fondamentalement, vous voulez avoir suffisamment d’un premier paquet valide pour que le serveur réponde avec au moins un message d’erreur, afin qu’il ne soit pas nécessairement parfait, mais suffisant.

J'ai essayé d'aller sur http://pcapr.net , mais je n'ai pas vu d'exemple OpenVPN. Peut-être que si quelqu'un prétend que le service est en service, vous pourriez le faire saisir par un tiers de la transaction.


-5

si vous avez installé OpenVPN sur un TCP écouter alors c'est aussi simple que

telnet vpnserver 1194

en supposant que 1194 est le port sur lequel vous l'écoutez

cela devrait vous donner une réponse pour montrer que le serveur openvpn est à l'écoute


Êtes-vous sûr à 100%? Lorsque je fais cela, je reçois le message "Impossible d'ouvrir la connexion à l'hôte, sur le port 1194: échec de la connexion" après une attente. Un client n'est-il pas censé dire quelque chose avant qu'un serveur OpenVPN ne réponde?
Ivan

6
Notez que par défaut, OpenVPN est uniquement UDP et que Telnet est conçu pour utiliser TCP.
Ivan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.