วิธีการตรวจสอบว่าเซิร์ฟเวอร์ OpenVPN กำลังฟังบนพอร์ตระยะไกลโดยไม่ใช้ไคลเอนต์ OpenVPN


39

ฉันต้องตรวจสอบว่าเซิร์ฟเวอร์ OpenVPN (UDP) เปิดใช้งานและสามารถเข้าถึงได้บนโฮสต์ที่ระบุ: พอร์ต

ฉันมีคอมพิวเตอร์ Windows XP ธรรมดาที่ไม่มีไคลเอนต์ OpenVPN (และไม่มีโอกาสติดตั้ง) และไม่จำเป็นต้องใช้กุญแจในการเชื่อมต่อกับเซิร์ฟเวอร์ - เพียงแค่เครื่องมือบรรทัดคำสั่ง WinXP ทั่วไปเบราว์เซอร์และ PuTTY อยู่ในการจัดการของฉัน

ถ้าฉันกำลังทดสอบบางอย่างเช่น SMTP หรือ POP3 Servert ฉันจะใช้ telnet และดูว่ามันตอบสนองหรือไม่ แต่จะทำอย่างไรกับ OpenVPN (UDP)


หาก openvpn ทำงานผ่าน tcp คุณสามารถ telnet ได้เช่นกัน
rvs

OpenVPN ทำงานผ่าน UDP
Ivan

2
คุณสามารถอธิบายอย่างละเอียดว่าทำไมคุณถึงต้องการแก้ปัญหานี้จากระบบ Windows ที่ล้าสมัยและไม่ใช่จากระบบตรวจสอบจริง
Alex Holst

2
หากเซิร์ฟเวอร์ UDP openvpn ใช้tls-authตัวเลือกการกำหนดค่า(แนะนำ) แสดงว่าเป็นไปไม่ได้ (ถ้าคุณไม่มีคีย์ตัวหุ้มด้านนอกอย่างน้อย)! แพ็คเก็ตที่มีลายเซ็น HMAC ไม่ถูกต้องจะถูกทิ้งโดยไม่ตอบสนองจากเซิร์ฟเวอร์
Alex Stragies

คำตอบ:


50

นี่คือเปลือกหนึ่งซับ:

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ตัวเลือกการกำหนดค่าไม่ทำงานมิฉะนั้นเซิร์ฟเวอร์ปฏิเสธข้อความด้วย HMAC ที่ไม่ถูกต้อง


1
ฉันได้สิ่งที่แตกต่างออกไปเล็กน้อย แต่ฉันจะได้รับบางสิ่งบางอย่าง ขอบคุณ
artfulrobot

7
เพียงเพื่อระบุชัดเจนนี่คือสำหรับ Linux / Unix ไม่ใช่สำหรับ Windows และมันต้องใช้ netcat (ไม่ได้ติดตั้งโดยค่าเริ่มต้นใน distros) นอกจากนี้หาก Linux distro ของคุณไม่มีคำสั่ง "timeout" ให้ใช้พารามิเตอร์ netcat "-w" เช่น "nc -w 10 -u openvpnserver.com 1194"
MV

1
นี่มันยอดเยี่ยมมาก
dmourati

2
สิ่งนี้จะไม่ทำงานในสถานการณ์จำลอง OP หากเซิร์ฟเวอร์ใช้tls-authตัวเลือกการกำหนดค่าเพื่อวางแพ็กเก็ตที่มี HMAC sig ไม่ถูกต้อง
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 packets ด้วย 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
เป็นคำตอบ Loic tls-authกล่าวนี้ไม่ได้ทำงานให้กับ
tedder42

1
สำหรับ Python 3 บรรทัด 10 จะทำให้เกิดปัญหา แทนที่ "sock.send (senddata)" โดย "sock.send (senddata.encode ())" และมันจะทำงาน
NDB

2

คุณสามารถลองเรียกใช้สิ่งต่อไปนี้ได้ที่ CLI

#netstat -ltnup

นี่ควรจะแสดงรายการกระบวนการทั้งหมดที่กำลังฟังบนเซิร์ฟเวอร์ / ระบบของคุณ Grep สำหรับหมายเลขพอร์ตที่คุณต้องการ

#netstat -ltnup | grep 1194

OP มีเครื่องมือ windows XP เท่านั้น
user9517 รองรับ GoFundMonica

1
@Iain: OP มี PuTTY ดังนั้นอาจสามารถ SSH เข้าสู่เซิร์ฟเวอร์ได้ ในกรณีนี้การตรวจสอบที่ง่ายมากนี้เป็นขั้นตอนแรกที่มีประโยชน์
mivk

2

สำหรับใครก็ตามที่พยายามติดตามเซิร์ฟเวอร์ที่tls-authเปิดใช้งานคุณสามารถใช้สคริปต์ python ได้ที่นี่: https://github.com/liquidat/nagios-icinga-openvpn

เอาต์พุตถูกจัดรูปแบบเพื่อใช้ใน Nagios หรือ Icinga แต่สามารถเรียกใช้โดยอะไรก็ได้ / ทุกคนหากคุณมี python และ tls keyfile ให้ใช้งาน

ตัวอย่างเช่นหากคุณใช้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 Client ที่ถูกต้องไปยังเซิร์ฟเวอร์ OpenVPN คุณสามารถสร้างโมเดลชุดเริ่มต้นด้วยแพ็กเก็ตเช่น netcat ตามที่ TiZon แนะนำ

โดยทั่วไปคุณต้องการแพ็คเก็ตแรกที่ถูกต้องเพียงพอที่จะให้เซิร์ฟเวอร์ตอบกลับด้วยข้อความแสดงข้อผิดพลาดอย่างน้อยที่สุดดังนั้นจึงไม่จำเป็นต้องสมบูรณ์แบบดีพอ

ฉันพยายามไปที่http://pcapr.netแต่ฉันไม่เห็นตัวอย่าง OpenVPN ที่นั่น บางทีถ้ามีคนอื่นอ้างว่าบริการนี้เกิดขึ้นคุณอาจทำให้คน ๆ นั้นได้รับการทำธุรกรรม


-5

หากคุณมีการติดตั้ง openvpn ในฟังก์ชั่น TCP แล้วมันง่ายเหมือน

telnet vpnserver 1194

สมมติว่า 1194 เป็นพอร์ตที่คุณฟังอยู่

สิ่งนี้ควรให้การตอบสนองของคุณเพื่อแสดงว่าเซิร์ฟเวอร์ openvpn กำลังรับฟัง


คุณแน่ใจ 100% เมื่อฉันทำสิ่งนี้ฉันจะได้รับ "ไม่สามารถเปิดการเชื่อมต่อกับโฮสต์บนพอร์ต 1194: การเชื่อมต่อล้มเหลว" หลังจากรอสักครู่ ลูกค้าหมายถึงพูดอะไรบางอย่างก่อนหรือไม่ก่อนที่เซิร์ฟเวอร์ OpenVPN จะตอบกลับ
อีวาน

6
โปรดทราบว่าโดยค่าเริ่มต้น OpenVPN เป็น UDP-only และ telnet นั้นหมายถึงการใช้ TCP
Ivan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.