Назад | Перейти на главную страницу

Как проверить, что сервер OpenVPN прослушивает удаленный порт без использования клиента OpenVPN?

Мне нужно проверить, что сервер OpenVPN (UDP) включен и доступен на заданном хосте: порт.

У меня есть только обычный компьютер с Windows XP без клиента OpenVPN (и без возможности его установить) и без ключей, необходимых для подключения к серверу - в моем распоряжении только обычные инструменты командной строки WinXP, браузер и PuTTY.

Если бы я тестировал что-то вроде сервера SMTP или POP3, я бы использовал telnet и посмотрел, отвечает ли он, но как это сделать с OpenVPN (UDP)?

Вот однострочник оболочки:

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

если на другом конце есть openvpn, вывод будет

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

в противном случае он будет просто отключен и отключен через 10 секунд или отобразит что-то другое.

ПРИМЕЧАНИЕ: это работает, только если tls-auth опция config неактивна, иначе сервер отклонит сообщения с неверным HMAC.

Извините, если я немного опоздал с ответом;)
Отправьте udp-пакет со следующим содержимым:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Сервер должен что-то ответить.
Вы можете создавать udp-пакеты с помощью python следующим образом:

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

Для тех, кто сталкивается с этим, кто пытается контролировать сервер, на котором tls-auth включен, вы можете использовать скрипт python здесь: https://github.com/liquidat/nagios-icinga-openvpn

Вывод отформатирован для использования в Nagios или Icinga, но может запускаться кем угодно / кем угодно, при условии, что у вас есть python и ключевой файл tls.

Например, если вы используете SHA256 в качестве дайджеста вы должны использовать что-то вроде:

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

Примечание: вам может потребоваться добавить --tls-auth-inverse в зависимости от сервера key-direction стоимость.

Вы можете попробовать запустить следующее в CLI

#netstat -ltnup

В нем должны быть перечислены все процессы, которые прослушивают ваш сервер / систему. Grep для нужного номера порта

#netstat -ltnup | grep 1194

Если вы можете получить pcap действующего взаимодействия клиента OpenVPN с сервером OpenVPN, вы можете смоделировать начальный набор пакетов с помощью чего-то вроде netcat, как это предлагает TiZon.

По сути, вам нужно достаточно действительного первого пакета, чтобы сервер ответил, по крайней мере, сообщением об ошибке, поэтому он не должен быть идеальным, просто достаточно хорошим.

Я пытался пойти http://pcapr.net, но я не видел там примера OpenVPN. Возможно, если кто-то другой заявляет, что услуга запущена, вы можете заставить этого человека получить компьютерную карту транзакции.

если вы настроили openvpn на прослушивание TCP, то это так же просто, как

telnet vpnserver 1194

предполагая, что 1194 - это порт, который вы слушаете

это должно дать вам какой-то ответ, чтобы показать, что сервер openvpn прослушивает