Bagaimana memeriksa apakah server OpenVPN mendengarkan pada port jarak jauh tanpa menggunakan klien OpenVPN?

39

Saya perlu memeriksa bahwa server OpenVPN (UDP) sudah habis dan dapat diakses pada host host: port.

Saya hanya memiliki komputer Windows XP biasa tanpa klien OpenVPN (dan tidak ada kesempatan untuk menginstalnya) dan tidak ada kunci yang diperlukan untuk terhubung ke server - hanya alat baris perintah WinXP yang umum, browser dan Putty ada dalam disposisi saya.

Jika saya menguji sesuatu seperti SMTP atau POP3 servert saya akan menggunakan telnet dan lihat apakah ia merespons, tetapi bagaimana caranya dengan OpenVPN (UDP)?

Ivan
sumber
jika openvpn berjalan melalui tcp, Anda bisa telnet juga
rvs
OpenVPN berjalan melalui UDP
Ivan
2
Bisakah Anda menguraikan mengapa Anda ingin menyelesaikan ini dari sistem Windows yang usang dan bukan dari sistem pemantauan nyata?
Alex Holst
2
Jika server openvpn UDP menggunakan tls-authopsi konfigurasi (disarankan) , maka itu TIDAK MUNGKIN (Jika Anda tidak memiliki setidaknya kunci pembungkus luar)! Paket apa pun dengan tanda tangan HMAC yang salah akan dibuang tanpa respons oleh server.
Alex Stragies

Jawaban:

51

Berikut ini adalah shell-liner:

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

jika ada openvpn di ujung yang lain hasilnya akan

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

kalau tidak, itu hanya akan bisu dan batas waktu setelah 10 detik atau menampilkan sesuatu yang berbeda.

CATATAN: ini hanya berfungsi jika tls-authopsi konfigurasi tidak aktif, jika tidak server menolak pesan dengan HMAC yang salah.

Loic Dachary
sumber
2
Saya mendapatkan sesuatu yang sedikit berbeda, tetapi saya memang mendapatkan sesuatu. Terima kasih.
artfulrobot
7
Hanya untuk menyatakan yang sudah jelas, ini untuk Linux / Unix, bukan untuk Windows. Dan itu membutuhkan netcat (tidak diinstal secara default di beberapa distro). Juga, jika distro Linux Anda tidak memiliki perintah "timeout", cukup gunakan parameter netcat "-w", seperti "nc -w 10 -u openvpnserver.com 1194".
MV.
1
Ini sangat mengagumkan.
dmourati
2
Ini tidak akan berfungsi dalam skenario OP, jika server menggunakan tls-authopsi konfigurasi untuk menjatuhkan paket dengan sig HMAC yang salah.
Alex Stragies
2
Saya menemukan perpipaan od -x -N 14daripada cat -vjauh lebih berguna karena Anda dapat a) melihat konten biner yang sebenarnya daripada sampah ASCII dan b) langsung menerima setiap baris output ketika server mengirim setiap paket jabat tangan dan menghentikannya segera setelah yang pertama. -N 14karena paket handshake panjangnya 14 byte dan hanya berulang.
BaseZen
5

Maaf jika saya sedikit terlambat dengan jawaban saya;)
Kirim paket udp dengan konten berikut:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Server harus merespon sesuatu.
Anda dapat memalsukan paket udp dengan python seperti ini:

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()
pengicau
sumber
1
seperti jawaban loic mengatakan, ini tidak berhasil tls-auth.
tedder42
1
Untuk Python 3 baris 10 akan menyebabkan masalah. Ganti "sock.send (senddata)" oleh "sock.send (senddata.encode ())" dan itu akan berhasil.
NDB
2

Anda dapat mencoba menjalankan yang berikut di CLI

#netstat -ltnup

Ini harus mencantumkan semua proses yang mendengarkan pada server / sistem Anda. Grep untuk nomor port yang Anda inginkan

#netstat -ltnup | grep 1194
Tuan IT Guru
sumber
OP hanya memiliki alat windows XP.
user9517 mendukung GoFundMonica
1
@ Iain: OP punya Putty, jadi mungkin bisa SSH ke server. Dalam hal ini, pemeriksaan yang sangat sederhana ini merupakan langkah pertama yang berguna.
mivk
2

Bagi siapa pun yang menjalankan ini, yang mencoba memonitor server yang memilikinya tls-auth diaktifkan, Anda dapat menggunakan skrip python di sini: https://github.com/liquidat/nagios-icinga-openvpn

Output diformat untuk digunakan dalam Nagios atau Icinga, tetapi dapat dijalankan oleh apa saja / siapa saja, asalkan Anda memiliki python dan tf keyfile yang tersedia.

Misalnya, jika Anda menggunakan SHA256sebagai intisari Anda, Anda akan menggunakan sesuatu seperti:

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

Catatan: Anda mungkin perlu menambahkan --tls-auth-inversetergantung pada nilai server key-direction.

seren
sumber
0

Jika Anda bisa mendapatkan pcap interaksi OpenVPN Client ke OpenVPN server yang valid, Anda bisa memodelkan set paket awal dengan sesuatu seperti netcat, seperti yang disarankan oleh TiZon.

Pada dasarnya, Anda ingin cukup paket pertama yang valid untuk membuat server merespons dengan setidaknya pesan kesalahan, sehingga tidak harus sempurna, cukup baik.

Saya mencoba mengunjungi http://pcapr.net , tetapi saya tidak melihat contoh OpenVPN di sana. Mungkin, jika orang lain mengklaim layanannya sudah habis, Anda bisa membuat orang lain itu mengambil pcap transaksi.

pcapademic
sumber
-5

jika Anda memiliki setup openvpn pada tcp, dengarkan maka sesederhana itu

telnet vpnserver 1194

dengan asumsi 1194 adalah port yang Anda dengarkan

ini akan memberi Anda semacam tanggapan untuk menunjukkan bahwa server openvpn mendengarkan

anthonysomerset
sumber
Apakah Anda 100% yakin? Ketika saya melakukan ini, saya mendapatkan "Tidak dapat membuka koneksi ke host, pada port 1194: Koneksi gagal" setelah beberapa menunggu. Bukankah klien bermaksud mengatakan sesuatu terlebih dahulu, sebelum server OpenVPN merespons?
Ivan
6
Perhatikan bahwa secara default OpenVPN hanya untuk UDP dan telnet dimaksudkan untuk menggunakan TCP.
Ivan