Як перевірити, чи сервер OpenVPN прослуховує на віддаленому порту без використання клієнта OpenVPN?


39

Мені потрібно перевірити, чи сервер OpenVPN (UDP) працює та доступний на заданому порту хосту:

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

Якщо я тестував щось на зразок сервера SMTP або POP3, я би використовував telnet і бачив, чи відповідає він, але як це зробити з OpenVPN (UDP)?


якщо openvpn працює через tcp, ви можете також telnet
rvs

OpenVPN працює через UDP
Іван

2
Чи можете ви детальніше пояснити, чому ви хочете вирішити це із застарілої системи Windows, а не з реальної системи моніторингу?
Алекс Холст

2
Якщо сервер UDP openvpn використовує (рекомендований) tls-authпараметр конфігурації, це НЕМОЖЛИВО (Якщо у вас немає принаймні зовнішнього ключа обгортки)! Будь-який пакет з неправильним підписом HMAC буде відкинутий без відповіді сервером.
Alex Stragies

Відповіді:


51

Ось одношаровий корпус:

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.


2
Я отримую щось трохи інше, але я щось отримую. Спасибі.
artfulrobot

7
Просто констатуючи очевидне, це для Linux / Unix, а не для Windows. І для цього потрібна netcat (не встановлена ​​за замовчуванням у деяких дистрибутивах). Крім того, якщо ваш дистрибутив Linux не має команди "timeout", просто використовуйте параметр netcat "-w", наприклад "nc -w 10 -u openvpnserver.com 1194".
МВ.

1
Це дивовижно.
dmourati

2
Це не буде працювати в сценарії OP, якщо сервер використовує параметр tls-authconfig для скидання пакетів з неправильним знаком HMAC.
Alex Stragies

2
Я вважаю, що трубопровід є, od -x -N 14а не cat -vнабагато кориснішим, тому що ви можете: а) бачити фактичний бінарний вміст, а не ASCII сміття, і b) миттєво отримувати кожен рядок виводу, оскільки сервер надсилає кожен пакет рукостискання і зупиняє його відразу після першого. -N 14тому що пакет рукостискання становить 14 байт і просто повторюється.
BaseZen

5

Вибачте, якщо я трохи запізнююся зі своєю відповіддю;)
Надішліть пакет udp із таким вмістом:
$ 38 $ 01 $ 00 $ 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()

1
як говорить відповідь Лоїка, це не працює tls-auth.
tedder42

1
Для Python 3 рядок 10 спричинить проблему. Замініть "sock.send (senddata)" на "sock.send (senddata.encode ())" і воно запрацює.
НДБ

2

Ви можете спробувати виконати наступне в CLI

#netstat -ltnup

Тут слід перелічити всі процеси, які слухаються на вашому сервері / системі. Хлопчик за потрібним номером порту

#netstat -ltnup | grep 1194

У OP є лише інструменти для Windows XP.
user9517 підтримує GoFundMonica

1
@Iain: ОП мав PuTTY, тому може бути SSH на сервері. У цьому випадку ця дуже проста перевірка є корисним першим кроком.
mivk

2

Для тих, хто працює над цим, хто намагається стежити за 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.


0

Якщо ви можете отримати pcap дійсного клієнта OpenVPN для взаємодії з сервером OpenVPN, ви можете змоделювати початковий набір пакетів з чимось на зразок netcat, як це запропонував TiZon.

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

Я спробував перейти на http://pcapr.net , але там не побачив приклад OpenVPN. Можливо, якщо хтось інший заявляє, що послуга закінчилася, ви можете змусити цю людину забрати пакет угоди.


-5

якщо у вас є налаштування openvpn на tcp, слухайте його так просто

telnet vpnserver 1194

припускаючи, що 1194 - це порт, який ви слухаєте

це повинно дати вам якусь відповідь, щоб показати, що сервер openvpn слухає


Ви на 100% впевнені? Коли я це роблю, після деякого очікування я отримую "Не вдалося відкрити з'єднання з хостом, на порту 1194: Підключення не вдалося". Хіба клієнт не мав на увазі спочатку щось сказати, перш ніж сервер OpenVPN відповість?
Іван

6
Зауважте, що OpenVPN за замовчуванням є лише UDP, а telnet призначений для використання TCP.
Іван
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.