ปัญหา OpenVPN - การเจรจาคีย์ TLS ล้มเหลวที่จะเกิดขึ้นภายใน 60 วินาที


14

ฉันกำลังกำหนดค่าเซิร์ฟเวอร์ OpenVPN (รุ่น 2.3.10) บนเซิร์ฟเวอร์ Windows 2012 แต่ฉันไม่สามารถใช้งานได้

เซิร์ฟเวอร์อยู่หลังเราเตอร์และฉันเปิดพอร์ต 1194 และสร้างกฎเพื่อส่งต่อปริมาณข้อมูลบนพอร์ตนี้ไปยังเซิร์ฟเวอร์

นี่คือบันทึกที่ฉันเห็นบนเซิร์ฟเวอร์เมื่อฉันพยายามเชื่อมต่อจากลูกค้า:

Mon Mar 21 11:11:47 2016 XX.XX.XX.XX:57804 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:57804, sid=fdf7a7ac 0264c7f3
Mon Mar 21 11:12:38 2016 XX.XX.XX.XX:55938 TLS: Initial packet from [AF_INET]XX.XX.XX.XX:55938, sid=1f242a3f e454a525
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 TLS Error: TLS handshake failed
Mon Mar 21 11:12:48 2016 XX.XX.XX.XX:57804 SIGUSR1[soft,tls-error] received, client-instance restarting

โดยที่ XX.XX.XX.XX คือ ip ของลูกค้า ดังนั้นฉันจึงเข้าใจว่าลูกค้าอย่างน้อยก็สามารถมาถึงเซิร์ฟเวอร์ได้ดังนั้นจึงไม่มีปัญหาเรื่องการกำหนดเส้นทางหรือไฟร์วอลล์

ฉันทำตามคำอธิบายที่ให้ไว้ที่นี่ Easy Windows Guide แนวคิดใด?


1
สมมติว่ามีสองล็อตที่XX.XX.XX.XXเป็นตัวแทนอยู่เดียวกัน (โปรดพิจารณาอย่าทำให้งงงวยเช่นนั้น ) ฉันสนใจโดยการเปลี่ยนหมายเลขพอร์ตต้นทาง (57804, 55938) ที่แนะนำให้ฉันรู้ว่ามี NAT ที่ไม่น่าเชื่อถือซึ่งเป็นกรณีของ UDP บ่อยที่สุด คุณใช้การขนส่ง UDP หรือ TCP และหากเป็นแบบเดิมคุณสามารถลองใช้รุ่นหลังและดูว่าปัญหาหายไปหรือไม่
MadHatter

ให้ฉันเห็นข้อความนี้บนเซิร์ฟเวอร์คอนโซลฉันยอมรับว่าอย่างน้อยลูกค้าสามารถไปถึงที่นั่นได้ดังนั้นฉันจึงคิดว่า NAT ไม่ใช่ปัญหา ฉันผิดที่นี่
vmasanas

1
ไม่ได้สร้าง NAT ทั้งหมดเท่ากัน บางคนมีรายการตารางสถานะอายุสั้นมากโดยเฉพาะอย่างยิ่งสำหรับ UDP และ OpenVPN จะไม่สามารถปรับเปลี่ยนได้ในพอร์ตต้นทาง โปรดตอบคำถามที่ฉันถามและลองทำตามที่ฉันแนะนำ
MadHatter

ฉันไม่ได้มีประสบการณ์ที่นี่คุณสามารถบอกวิธีการตรวจสอบว่าฉันใช้ UDP หรือ TCP ได้ไหม
vmasanas

คุณสามารถลองman openvpnค้นหาสิ่งที่ควบคุมโปรโตคอลได้ อย่าลืมเปลี่ยนทั้งบนไคลเอนต์และเซิร์ฟเวอร์หากคุณตัดสินใจที่จะทำการทดสอบ
MadHatter

คำตอบ:


21

สิ่งที่น่าสนใจคือวิธีที่หมายเลขพอร์ตเปลี่ยนแปลงมิดสตรีม:

จ. 21 มี.ค. 11:11:47 2016 XX.XX.XX.XX: 57804 TLS: แพ็กเก็ตเริ่มต้นจาก [AF_INET] XX.XX.XX.XX: 57804, sid = fdf7a7ac 0264c7f3

จันทร์ Mar 21 11:12:38 2016 XX.XX.XX.XX: 55938 TLS: แพ็กเก็ตเริ่มต้นจาก [AF_INET] XX.XX.XX.XX: 55938, sid = 1f242a3f e454a525

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

อุปกรณ์ดังกล่าวโดยทั่วไปจะทำเช่นนี้กับ UDP เท่านั้นดังนั้นฉันขอแนะนำให้คุณยืนยันว่าคุณใช้ UDP และลองใช้ TCP แทน สิ่งนี้คุณได้ทำไปแล้วและพบว่าสามารถแก้ไขปัญหาได้ ขั้นตอนต่อไปคือการระบุอุปกรณ์ NAT ที่ใช้งานไม่ได้ตีมันด้วยค้อนสโมสรและแทนที่ด้วยอุปกรณ์ที่ไม่ได้ทำผิดที่สำคัญในการสันนิษฐานว่าการสื่อสาร UDP ทั้งหมดนั้นเป็นเพียงชั่วคราว แต่คุณได้ระบุว่าคุณพอใจที่จะเปลี่ยนเป็น TCP เพื่อแก้ไขปัญหาและดังนั้นจึงสรุปได้


2
+1 สำหรับดวงตาอินทรีของคุณ!
Diamond

@bangal ทำไมขอบคุณ! ปีศาจส่วนใหญ่อยู่ในรายละเอียดในธุรกิจนี้
MadHatter

ใช่ฉันรู้ แต่ฉันพลาดและเห็นมันหลังจากที่คุณชี้ ค่อนข้างแน่ใจว่าเป็นปัญหาไฟร์วอลล์
ไดมอนด์

เป็นอย่างนั้นคุณก็พูดถูก และอย่าเอาชนะตัวเองคุณจะดูหนักขึ้นในครั้งต่อไป!
MadHatter

มีประโยชน์ในการใช้ UDP แทน TCP หรือไม่ TCP ทำงานให้ฉันแล้วตอนนี้เว้นแต่จะมีข้อเสียใด ๆ ที่ฉันใช้ได้
vmasanas

3

นี่เป็นหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดในการตั้งค่า Openvpn และมีรายการคำถามที่พบบ่อยสำหรับสิ่งนี้ ฉันจะพูดสิ่งนี้ที่นี่:

ข้อผิดพลาด TLS: การเจรจาคีย์ TLS ล้มเหลวที่จะเกิดขึ้นภายใน 60 วินาที (ตรวจสอบการเชื่อมต่อเครือข่ายของคุณ)

หนึ่งในปัญหาที่พบบ่อยที่สุดในการตั้งค่า OpenVPN คือ OpenVPN daemons สองตัวที่ด้านใดด้านหนึ่งของการเชื่อมต่อไม่สามารถสร้างการเชื่อมต่อ TCP หรือ UDP ด้วยกันได้

นี่เป็นผลมาจาก:

  • ไฟร์วอลล์ในขอบเขตบนเครือข่ายของเซิร์ฟเวอร์กำลังกรองแพ็กเก็ต OpenVPN ขาเข้า (โดยค่าเริ่มต้น OpenVPN จะใช้ UDP หรือหมายเลขพอร์ต TCP 1194)
  • ซอฟต์แวร์ไฟร์วอลล์ที่ทำงานบนเครื่องเซิร์ฟเวอร์ OpenVPN นั้นกำลังทำการกรองการเชื่อมต่อขาเข้าที่พอร์ต 1194 โปรดทราบว่าระบบปฏิบัติการจำนวนมากจะปิดกั้นการเชื่อมต่อขาเข้าเป็นค่าเริ่มต้นเว้นแต่จะกำหนดค่าไว้เป็นอย่างอื่น
  • เกตเวย์ NAT บนเครือข่ายของเซิร์ฟเวอร์ไม่มีกฎการส่งต่อพอร์ตสำหรับ TCP / UDP 1194 ไปยังที่อยู่ภายในของเครื่องเซิร์ฟเวอร์ OpenVPN
  • การกำหนดค่าไคลเอนต์ OpenVPN ไม่มีที่อยู่เซิร์ฟเวอร์ที่ถูกต้องในไฟล์กำหนดค่า รีโมตไดเรกทีฟในไฟล์ปรับแต่งไคลเอ็นต์ต้องชี้ไปที่เซิร์ฟเวอร์เองหรือที่อยู่ IP สาธารณะของเกตเวย์เครือข่ายเซิร์ฟเวอร์
  • อีกสาเหตุที่เป็นไปได้คือไฟร์วอลล์ windows กำลังบล็อกการเข้าถึงสำหรับไบนารี openvpn.exe คุณอาจต้องรายการที่อนุญาต (เพิ่มลงในรายการ "ข้อยกเว้น") เพื่อให้ OpenVPN ทำงานได้

มีโอกาสสูงที่สิ่งเหล่านี้จะทำให้เกิดปัญหาเดียวกันในกรณีของคุณเช่นกัน ดังนั้นเพียงแค่ผ่านรายการทีละรายการเพื่อแก้ไข

Ref: ข้อผิดพลาด TLS: การเจรจาคีย์ TLS ล้มเหลวที่จะเกิดขึ้นภายใน 60 วินาที (ตรวจสอบการเชื่อมต่อเครือข่ายของคุณ)


ฉันได้ผ่านจุดเหล่านี้แล้ว แต่ไม่แน่ใจว่าฉันขาดอะไรไป: 1. สำหรับช่วงเวลาที่ไฟร์วอลล์ปิดตัวลงในไคลเอนต์และเซิร์ฟเวอร์ 2. เหมือนกัน 3. เราเตอร์มีกฎการส่งต่อไปยังเซิร์ฟเวอร์และฉันเห็น ปริมาณข้อมูลที่ปรากฏบนเซิร์ฟเวอร์คอนโซล 4.client มีที่อยู่ IP ที่ถูกต้อง 5. ไม่มีไฟร์วอลล์ที่ฉันสามารถบอกได้
vmasanas

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

หากใครรู้สึกว่าอยากยืมมือฉันได้โพสต์คำถามที่ล้มเหลวของการจับมือกันของ TLS ที่นี่: serverfault.com/questions/867599/…
Ola Tuvesson

สิ่งหนึ่งที่ต้องระวังคือเวลาแฝงที่สูงระหว่างสองครอบครัว ฉันเพิ่งเกาหัวของฉันเกี่ยวกับเรื่องนี้อย่างกว้างขวางและด้วยเหตุผลบางอย่างที่ทำให้ฉันหลงไหลฉันได้รับ 6000ms + ping ไปกลับในทิศทางเดียว (ลูกค้าไปยังเซิร์ฟเวอร์) แต่ไม่ใช่วิธีอื่น ๆ นี่เป็นสาเหตุที่ทำให้การเจรจาสำคัญใช้เวลานานกว่า 60 ปี การรีบูตเราเตอร์ที่ ISP ของฉันจัดหาให้แก้ไขปัญหาได้ อาจเป็นกรณีที่หายาก แต่หวังว่าจะช่วยให้ใครบางคนออกมา
s.co.tt

3

ฉันได้รับการหมดเวลาการเจรจาคีย์ TLS เช่นนี้ แต่ในกรณีของฉันฉันรู้ว่าลิงก์ระยะไกลเป็นที่อยู่ IP ในเครื่อง

VPN ในไฟร์วอลล์ pfSense ของเราถูกใส่ผิดที่อินเทอร์เฟซ LAN แทนที่จะเป็นอินเทอร์เฟซ WAN และดังนั้นการกำหนดค่าที่ส่งออกถูกตั้งค่าให้ลองและเชื่อมต่อกับที่อยู่ LAN ของไฟร์วอลล์ - ซึ่งไม่เคยทำงานกับไคลเอนต์ LAN อื่น

ฉันคิดว่าประเด็นหลักจากนี้คือ:

  • การได้รับการหมดเวลาการเจรจาสำคัญไม่ได้หมายความว่าคุณจะสามารถเชื่อมต่อกับอะไรก็ได้

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

    โปรดทราบว่าการรับพรอมต์เข้าสู่ระบบไม่ได้หมายความว่าคุณเชื่อมต่ออยู่เนื่องจาก OpenVPN จะขอข้อมูลประจำตัวของคุณก่อนที่จะพยายามเชื่อมต่อ

  • ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ VPN ของคุณกำลังฟังบนอินเทอร์เฟซที่ถูกต้อง

    (แน่นอนว่านี่เป็นหนึ่งในจำนวนการกำหนดค่าผิดพลาดด้านเซิร์ฟเวอร์ที่อาจเกิดขึ้นเช่นกฎไฟร์วอลล์ใส่หมายเลขพอร์ตที่ไม่ถูกต้อง intermixing TCP และ UDP ฯลฯ )


1

ฉันมีข้อผิดพลาดเดียวกันและไม่มีคำแนะนำช่วยทุกอย่างดูเหมือนจะดี: IP, พอร์ต, ไฟร์วอลล์, ทุกอย่าง หายไปเป็นเวลา 2 ชั่วโมง

วิธีแก้ไขคือเปลี่ยนโปรโตคอลจาก UDP เป็น TCP ในการกำหนดค่าไคลเอนต์ (เห็นได้ชัดว่าฉันปิดการใช้งาน UDP เมื่อนานมาแล้ว)

หวังว่าจะช่วยให้ใครบางคน :)

LE:นี่เป็นการแก้ไขปัญหาของฉัน แต่มันไม่ใช่วิธีที่ดีที่สุดตามความคิดเห็นด้านล่าง คุณควรใช้ UDP แทน TCP มันช่วยฉันเพราะฉันมีการตั้งค่าที่แตกต่างกันระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่กำหนดค่า


คุณควรรู้ว่าการห่อหุ้ม TCP ภายใน TCP มีแนวโน้มที่จะก่อให้เกิดปัญหาประสิทธิภาพการทำงานที่แย่มากเนื่องจากทั้งสองกอง TCP พยายามที่จะแข่งขันกันเอง
EEAA

แน่นอนมันทำงานเหมือนอึ แม้ว่าฉันจะไม่เข้าใจสิ่งที่คุณพูด แต่การแสดงก็แย่มาก ฉันควรเปลี่ยนมาใช้ UDP หรือไม่
bosch

2
ใช่. UDP เป็นมาตรฐานสำหรับการใช้งาน VPN ด้วยเหตุผลที่ดี TCP มีฟังก์ชั่นการแก้ไขข้อผิดพลาด - ความสามารถในการส่งแพ็คเก็ตที่หายไปอีกครั้งหากคุณแค็ปซูล TCP ภายใน TCP และคุณต้องสูญเสียแพ็กเก็ตทั้ง TCP สแต็ค (การจราจร "ข้างใน" ลองและแก้ไขสำหรับแพ็คเก็ตที่หายไป เมื่อคุณแค็ปซูล TCP ใน UDP นี่ไม่ใช่ปัญหา - เฉพาะทราฟฟิกภายในเท่านั้นที่จะลองอีกครั้ง
EEAA

ขอบคุณสำหรับคำใบ้และคำอธิบาย ฉันเปลี่ยนมาใช้ UDP และจับตาดูการเชื่อมต่อ นอกจากนี้ผมต้องอ่านเพิ่มเติมเกี่ยวกับกอง ...
บ๊อช

หน้าเว็บที่มีประโยชน์อธิบายว่าทำไม TCP บน TCP เป็นความคิดที่ไม่ดี: sites.inka.de/bigred/devel/tcp-tcp.html
mwfearnley

1

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

ฉันแก้ไขการกำหนดค่า VPN เพื่อเชื่อมต่อกับ localhost บนพอร์ตที่ไม่ได้ฟังอะไร:

OpenVPN 2.4.6 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [PKCS11] [AEAD] สร้างเมื่อวันที่ 26 เมษายน 2018
Windows เวอร์ชัน 6.2 (Windows 8 หรือสูงกว่า) 64 บิต
รุ่นไลบรารี่: OpenSSL 1.1.0h 27 มี.ค. 2018, LZO 2.10
TCP / UDP: การเก็บรักษาที่อยู่ระยะไกลที่ใช้ล่าสุด: [AF_INET] 127.0.0.1:12345
UDP ลิงก์ภายใน (ถูกผูกไว้): [AF_INET] [undef]: 0
UDP ลิงก์ระยะไกล: [AF_INET] 127.0.0.1:12345 
ข้อผิดพลาด TLS: การเจรจาคีย์ TLS ล้มเหลวที่จะเกิดขึ้นภายใน 60 วินาที (ตรวจสอบการเชื่อมต่อเครือข่ายของคุณ)
ข้อผิดพลาด TLS: การจับมือ TLS ล้มเหลว
SIGUSR1 ได้รับ [soft, tls-error] แล้วกระบวนการเริ่มต้นใหม่
...

ข้อผิดพลาดสามารถทำให้คุณหลงผิดว่าคุณกำลังพูดคุยกับเซิร์ฟเวอร์ VPN

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


1

ไม่มีวิธีการแก้ปัญหาที่กล่าวถึงก่อนหน้านี้ทำงาน ในกรณีของฉันแม้ว่าบันทึกลูกค้าพบข้อผิดพลาดเดียวกันTLS Error: TLS key negotiation failed to occur within 60 seconds, VERIFY ERROR: depth=0, error=CRL has expiredบันทึกเซิร์ฟเวอร์แสดงให้เห็นว่า

บนเซิร์ฟเวอร์ขั้นตอนต่อไปนี้แก้ไขปัญหาการเชื่อมต่อ:

# cd <easyrsa folder>
# ./easyrsa gen-crl
above command generates new crl.pem file (in my case in pki folder)
using chown/chmod make sure 'pki/crl.pem' is readable by openvpn server (for example: chmod 640 pki/crl.pem)
# systemctl restart openvpn

0

ฉันพบข้อผิดพลาดนี้ใน AWS ที่ติดตั้ง OpenVPN บนเซิร์ฟเวอร์ที่มี IP สาธารณะ แต่ในกรณีที่อยู่ในเครือข่ายส่วนตัวเช่นเครือข่ายย่อยที่ไม่มีเส้นทางไปยังอินเทอร์เน็ตเกตเวย์

เมื่อฉันปรับใช้ OpenVPN บนเซิร์ฟเวอร์ภายในซับเน็ตสาธารณะมันทำงานได้ดี :)


สำหรับเครือข่ายสาธารณะ / ส่วนตัวใน AWS: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html


0

ฉันยังเจอTLS key negotiation failed to occur within 60 secondsปัญหา

จากข้อเสนอแนะอย่างเป็นทางการเช่นโพสต์ Diamant จะต้องมีสิ่งผิดปกติในการเชื่อมต่อเครือข่าย อย่างไรก็ตามทั้งไฟร์วอลล์และ NAT ไม่ทำให้เกิดปัญหา

nc -uvz xxx.xxx.xxx.xxx 1194ในกรณีของผมครั้งแรกที่ผมตรวจสอบการเชื่อมต่อโดย ลิงค์ก็โอเค

นอกจากนี้ยังมีไคลเอนต์ VPN หลายรายที่อยู่ใน LAN เดียวกันทำงานได้ดี

จากที่อื่นฉันสังเกตเห็นว่าการเชื่อมต่อ udp มีปัญหาบางอย่างในการตอบสนองหรือพอร์ตไปข้างหน้า

ดังนั้นฉันจะหยุดการทำงานลูกค้า VPN จาก IP ที่ใหญ่ที่สุดไปยังไคลเอนต์ที่แขวนอยู่เช่นจาก "10.8.0.100" ถึง "10.8.0.50"

จากนั้นเริ่มไคลเอนต์ VPN ที่หยุดทำงานในสิ่งที่ตรงกันข้าม

ปัง ไคลเอนต์ VPN ทั้งหมดทำงานอย่างถูกต้อง

โดยสรุปมีโอกาสนำไปสู่TLS key negotiation failed to occur within 60 secondsปัญหาที่ลูกค้า VPN หลายรายภายใน LAN เริ่มต้นในลำดับที่ไม่ถูกต้อง


1
มันไม่ชัดเจนว่าสิ่งนี้เกี่ยวข้องกับปัญหาในคำถามเดิมได้อย่างไร
Ward - Reinstate Monica

0

เหตุผลหนึ่งที่เป็นไปได้คือถ้าเซิร์ฟเวอร์ต้องการ TLS เวอร์ชันที่ใหม่กว่า TLS ที่ไคลเอ็นต์สนับสนุน เช่น 1.2 กับ 1.0

สิ่งที่ชัดเจนที่ต้องลองคือการอัพเดทไคลเอนต์ OpenVPN หรือแก้ไขฝั่งเซิร์ฟเวอร์เพื่อยอมรับ TLS 1.0

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