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