Làm cách nào để kiểm tra xem máy chủ OpenVPN có nghe trên một cổng từ xa mà không sử dụng máy khách OpenVPN không?


39

Tôi cần kiểm tra xem máy chủ OpenVPN (UDP) có hoạt động và truy cập được trên một máy chủ nhất định không: cổng.

Tôi chỉ có một máy tính Windows XP đơn giản không có máy khách OpenVPN (và không có cơ hội cài đặt nó) và không có khóa nào cần thiết để kết nối với máy chủ - chỉ có các công cụ dòng lệnh WinXP phổ biến, trình duyệt và PuTTY nằm trong khả năng của tôi.

Nếu tôi đang thử nghiệm một cái gì đó giống như một servert SMTP hoặc POP3, tôi sẽ sử dụng telnet và xem nó có phản hồi không, nhưng làm thế nào để làm điều này với OpenVPN (UDP)?


nếu openvpn đang chạy qua tcp, bạn cũng có thể telnet
rvs

OpenVPN đang chạy qua UDP
Ivan

2
Bạn có thể giải thích lý do tại sao bạn muốn giải quyết vấn đề này từ một hệ thống Windows lỗi thời chứ không phải từ một hệ thống giám sát thực sự?
Alex Holst

2
Nếu máy chủ openvpn UDP sử dụng tls-authtùy chọn cấu hình (được khuyến nghị) , thì đó là TÁC ĐỘNG (Nếu bạn không có ít nhất khóa trình bao bọc bên ngoài)! Bất kỳ gói tin nào có chữ ký HMAC không chính xác sẽ bị loại bỏ mà không có phản hồi của máy chủ.
Alex Stragies

Câu trả lời:


51

Đây là một lớp vỏ một lớp:

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

nếu có một openvpn ở đầu bên kia thì đầu ra sẽ là

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

nếu không, nó sẽ chỉ bị tắt tiếng và hết thời gian sau 10 giây hoặc hiển thị một cái gì đó khác nhau.

LƯU Ý: điều này chỉ hoạt động nếu tls-authtùy chọn cấu hình không hoạt động, nếu không máy chủ sẽ từ chối các tin nhắn có HMAC không chính xác.


2
Tôi nhận được một chút gì đó khác nhau, nhưng tôi nhận được một cái gì đó. Cảm ơn.
artfulrobot

7
Nói một cách rõ ràng, điều này là dành cho Linux / Unix, không phải cho Windows. Và nó yêu cầu netcat (không được cài đặt theo mặc định trong một số distro). Ngoài ra, nếu bản phân phối Linux của bạn không có lệnh "hết thời gian", chỉ cần sử dụng tham số "-w" của netcat, như "nc -w 10 -u openvpnserver.com 1194".
MV.

1
Đây là fscking tuyệt vời.
dmourati

2
Điều này sẽ không hoạt động trong kịch bản OP, nếu máy chủ sử dụng tls-authtùy chọn cấu hình để thả các gói với sig HMAC không chính xác.
Alex Stragies

2
Tôi thấy đường ống od -x -N 14thay vì cat -vhữu ích hơn nhiều vì bạn có thể a) xem nội dung nhị phân thực tế chứ không phải rác ASCII và b) ngay lập tức nhận từng dòng đầu ra khi máy chủ gửi từng gói bắt tay và dừng ngay sau lần đầu tiên. -N 14bởi vì gói bắt tay dài 14 byte và chỉ lặp lại.
BaseZen

5

Xin lỗi nếu tôi hơi trễ với câu trả lời của mình;)
Gửi gói udp với nội dung sau:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Máy chủ phải trả lời một cái gì đó.
Bạn có thể giả mạo các gói udp với python như thế này:

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
như câu trả lời của loic nói, điều này không hiệu quả tls-auth.
tedder42

1
Đối với Python 3 dòng 10 sẽ gây ra sự cố. Thay thế "sock.send (senddata)" bằng "sock.send (senddata.encode ())" và nó sẽ hoạt động.
NDB

2

Bạn có thể thử chạy như sau tại CLI

#netstat -ltnup

Điều này sẽ liệt kê tất cả các quy trình đang lắng nghe trên máy chủ / hệ thống của bạn. Grep cho số cổng bạn muốn

#netstat -ltnup | grep 1194

OP chỉ có các công cụ Windows XP.
user9517 hỗ trợ GoFundMonica

1
@Iain: OP có PuTTY, vì vậy có thể SSH vào máy chủ. Trong trường hợp đó, kiểm tra rất đơn giản này là bước đầu tiên hữu ích.
mivk

2

Đối với bất kỳ ai đang chạy trên mạng này, những người đang cố gắng theo dõi một máy chủ đã tls-authkích hoạt, bạn có thể sử dụng tập lệnh python tại đây: https://github.com/l Liquidat / nagios-ratinga-openvpn

Đầu ra được định dạng để sử dụng trong Nagios hoặc Icinga, nhưng nó có thể được chạy bởi bất cứ ai / bất cứ ai, miễn là bạn có python và keyfile tls có sẵn.

Ví dụ: nếu bạn đang sử dụng SHA256như thông báo của mình, bạn sẽ sử dụng một cái gì đó như:

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

Lưu ý: bạn có thể cần thêm --tls-auth-inversetùy thuộc vào key-directiongiá trị của máy chủ .


0

Nếu bạn có thể nhận được một pcap của OpenVPN Client hợp lệ để tương tác với máy chủ OpenVPN, bạn có thể mô hình hóa bộ gói ban đầu với một cái gì đó như netcat, như đề xuất của TiZon.

Về cơ bản, bạn muốn có đủ gói đầu tiên hợp lệ để máy chủ phản hồi với ít nhất một thông báo lỗi, vì vậy nó không phải là hoàn hảo, chỉ cần đủ tốt.

Tôi đã thử truy cập http://pcapr.net , nhưng tôi không thấy ví dụ OpenVPN ở đó. Có lẽ, nếu người khác yêu cầu dịch vụ kết thúc, bạn có thể khiến người khác lấy một bản pcap của giao dịch.


-5

nếu bạn đã thiết lập openvpn trên một tcp lắng nghe thì nó đơn giản như

telnet vpnserver 1194

giả sử 1194 là cổng bạn nghe nó

điều này sẽ cung cấp cho bạn một phản hồi nào đó để cho thấy rằng máy chủ openvpn đang lắng nghe


Bạn có chắc chắn 100% không? Khi tôi thực hiện việc này, tôi nhận được "Không thể mở kết nối với máy chủ, trên cổng 1194: Kết nối không thành công" sau một số chờ đợi. Không phải khách hàng muốn nói điều gì đó trước, trước khi máy chủ OpenVPN phản hồi?
Ivan

6
Lưu ý rằng theo mặc định OpenVPN là chỉ UDP và telnet có nghĩa là sử dụng TCP.
Ivan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.