ประสิทธิภาพของ OpenVPN: มีลูกค้าที่ใช้งานพร้อมกันกี่คน?


36

ฉันกำลังประเมินระบบสำหรับไคลเอนต์ที่ไคลเอนต์ OpenVPN จำนวนมากเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN "หลายคน" หมายถึง 50000 - 1000000

ทำไมฉันถึงทำอย่างนั้น? ไคลเอนต์มีการกระจายระบบฝังตัวแต่ละหลังนั่งอยู่ด้านหลังเจ้าของระบบเราเตอร์ dsl เซิร์ฟเวอร์ต้องสามารถส่งคำสั่งไปยังลูกค้าได้ วิธีการที่ไร้เดียงสาครั้งแรกของฉันคือการทำให้ลูกค้าเชื่อมต่อกับเซิร์ฟเวอร์ผ่านเครือข่าย openvpn ด้วยวิธีนี้อุโมงค์การสื่อสารที่ปลอดภัยสามารถใช้ได้ทั้งสองทิศทาง

ซึ่งหมายความว่าไคลเอนต์ทั้งหมดเชื่อมต่อกับเซิร์ฟเวอร์เสมอ มีลูกค้าจำนวนมากสรุปในช่วงหลายปีที่ผ่านมา

คำถามคือเซิร์ฟเวอร์ OpenVPN ไม่ระเบิดเมื่อถึงจำนวนลูกค้า? ฉันรับรู้ถึงการ จำกัด จำนวนการเชื่อมต่อ TCP สูงสุดแล้ว (และด้วยเหตุผลอื่น ๆ ) VPN จะต้องใช้การขนส่ง UDP

ผู้เชี่ยวชาญด้าน OpenVPN ความคิดเห็นของคุณคืออะไร?


คุณช่วยแบ่งปันข้อสรุปสุดท้ายเกี่ยวกับเรื่องนี้กับเราได้ไหม คุณสามารถทำการทดสอบกับผู้ใช้มากกว่า 5,000 คนได้หรือไม่?
ฟิลิปป์

สวัสดีฟิลิปป์เราวางแผน OpenVPN เนื่องจากเห็นได้ชัดว่าเราจะแตะพื้นดินไม่มีใครเคยสัมผัสมาก่อน เราเลือกใช้การเชื่อมต่อ TCP Socket ปกติตาม SSL กับเซิร์ฟเวอร์การจัดการการเชื่อมต่อ Node.js
Steffen Müller

คำตอบ:


25

ฉันสงสัยว่ามีการตั้งค่าขนาดใหญ่ที่เคยลองมาก่อนดังนั้นคุณมีแนวโน้มที่จะเพิ่มขีด จำกัด เมื่อลอง ฉันสามารถหาบทความเกี่ยวกับการปรับใช้ VPN สำหรับลูกค้า 400 คนแต่พิจารณาจากข้อความผู้เขียนพึ่งอาศัยการประมาณการคร่าวๆเกี่ยวกับจำนวนลูกค้าที่สามารถเรียกใช้งานต่อ CPU และขาดความเข้าใจเกี่ยวกับวิธีการตั้งค่าของเขา

คุณจะต้องพิจารณาประเด็นเหล่านี้เป็นหลัก:

  1. แบนด์วิดท์ที่คุณใช้ในการถ่ายโอนข้อมูลจะต้องมีการเข้ารหัส / ถอดรหัสที่ฝั่งเซิร์ฟเวอร์ VPN ซึ่งใช้ทรัพยากร CPU มาก

  2. การเชื่อมต่อไคลเอนต์ OpenVPN ใช้ทั้งทรัพยากรหน่วยความจำและ CPU บนเซิร์ฟเวอร์แม้ว่าจะไม่มีการถ่ายโอนข้อมูล

ฮาร์ดแวร์พีซีใด ๆ ที่มีอยู่ในปัจจุบันควรเชื่อมโยง Gigabit กับ Blowfish หรือ AES-128 อย่างง่ายดายแม้กระทั่งอุปกรณ์ฝัง $ 100 ที่สามารถรับอัตราได้ใกล้ 100 Mbpsดังนั้นคอขวดของ CPU เนื่องจากความหนาแน่นของแบนด์วิดท์ไม่น่าเป็นห่วง

เมื่อกำหนดช่วงเวลาการ rekeying เริ่มต้นที่ 3600 วินาทีลูกค้าจำนวน 1,000,000 รายจะหมายความว่าเซิร์ฟเวอร์จะต้องสามารถแลกเปลี่ยนคีย์ได้ 278 ครั้งต่อวินาทีโดยเฉลี่ย ในขณะที่การแลกเปลี่ยนคีย์นั้นเป็นงานที่ใช้ CPU ค่อนข้างมากคุณสามารถถ่ายโอนมันไปยังฮาร์ดแวร์เฉพาะถ้าจำเป็น - การ์ดเร่งความเร็วการเข้ารหัสที่พร้อมใช้งานสามารถตอบสนองได้อย่างง่ายดายและเกินจำนวน TLS handshakes นี้ และข้อ จำกัด ของหน่วยความจำไม่ควรรบกวนมากเกินไปเช่นกันไบนารี 64 บิตควรดูแลข้อ จำกัด หน่วยความจำเสมือนใด ๆ ที่คุณมีแนวโน้มที่จะถูกโจมตีเป็นอย่างอื่น

แต่ความสวยงามที่แท้จริงของ OpenVPN ก็คือคุณสามารถปรับขนาดได้อย่างง่ายดายเพียงตั้งค่าเซิร์ฟเวอร์ OpenVPN ตามอำเภอใจจำนวนหนึ่งและตรวจสอบให้แน่ใจว่าลูกค้าของคุณใช้งานพวกเขา (เช่นผ่านทาง DNS round-robin) กำหนดค่าโปรโตคอลเส้นทางแบบไดนามิกที่คุณเลือก (โดยทั่วไปจะเป็น RIP เนื่องจากความเรียบง่าย) และโครงสร้างพื้นฐานของคุณจะสามารถรองรับจำนวนลูกค้าได้ตราบใดที่คุณมีฮาร์ดแวร์เพียงพอ


ขอบคุณสำหรับคำตอบที่กระชับ คุณเห็นทางเลือกอื่นในการใช้ openvpn หรือไม่? เป้าหมายหลักคือการสื่อสารแบบสองทิศทางผ่านเราเตอร์
Steffen Müller

2
@ SteffenMüllerหากคุณไม่ต้องการสแต็กสมบูรณ์ แต่เป็นเพียงช่องทางควบคุมทำไมไม่ใช้บางอย่างที่คล้ายกับbotnets ? มีการติดตั้งใช้งานและ SANS นำเสนอเอกสารเกี่ยวกับวิธีการติดตั้ง
the-wabbit

ขอบคุณสำหรับลิงค์ที่น่าสนใจ น่าเสียดายที่บอทใช้การสำรวจแบบง่าย ๆ เพื่อสอบถามว่าเซิร์ฟเวอร์มีข้อมูลหรือไม่ แม้ว่านี่อาจเป็นวิธีที่จะไป แต่ฉันกำลังค้นหาวิธีในการสร้างและรักษาการเชื่อมต่อแบบสองทิศทาง การทำโพลแบบคงที่อาจทำให้เกิดความล่าช้าในการดำเนินการคำสั่งหรือปริมาณข้อมูลสูงสำหรับการร้องขอการโพลที่ไม่มีประโยชน์ บางทีการเชื่อมต่อ TCP แบบถาวรเป็นวิธีที่จะไปไหม
Steffen Müller

1
@ SteffenMüller Botnets ได้รับการพิสูจน์แล้วว่าสามารถรองรับลูกค้านับพันรายได้เป็นอย่างดี คุณไม่จำเป็นต้องดำเนินการตามที่ระบุโดย SANS - มีผู้อื่นมากมาย นอกเหนือจากนั้นโดยไม่ทราบข้อกำหนดที่แน่นอนของคุณมันเป็นเรื่องยากที่จะบอก การเชื่อมต่อ TCP ส่ง keepalives แน่นอนจะสามารถทำให้แน่ใจว่าความสัมพันธ์ของสถานะที่เกตเวย์ NAT ไม่อายุ แต่คุณจะต้องดูแลทุกอย่างด้วยตัวคุณเอง (การพิสูจน์ตัวตนการเข้ารหัสการจัดการข้อผิดพลาด)
the-wabbit

2
BTW ไม่มีเหตุผลใด ๆ ที่คุณไม่สามารถลดช่วงเวลาการ rekeying (มีการแลกเปลี่ยนความปลอดภัยในกรณีที่คีย์ที่ถูกบุกรุกจะเปิดเผยข้อความธรรมดากลับไปสู่การ rekeying ครั้งล่าสุด) นอกจากนี้ฉันจะกังวลมากขึ้นเกี่ยวกับการกำหนดเส้นทางหรือการค้นหาการเชื่อมต่ออื่น ๆ ที่ล้มเหลวก่อน ฉันหมายถึงถ้า OpenVPN ตั้งใจให้มีการเชื่อมต่อ <100 การเชื่อมต่อโอกาสที่จะมีการค้นหา O (n) ของการเชื่อมต่ออยู่ที่ไหน?
Derobert

26

ฉันได้ทำสิ่งนี้จริง ๆ แล้วแม้ว่าจะมีการเชื่อมต่อระยะไกล "เพียง" สองสามร้อยที่คล้ายกันกับเราเตอร์ DSL ฉันไม่สามารถแสดงความคิดเห็นมากเกินไปเกี่ยวกับปัญหาการ rekeying แต่สิ่งที่ปฏิบัติได้สองสามอย่างที่ฉันได้เรียนรู้ระหว่างทาง:

1) เมื่อปรับใช้ไคลเอนต์ตรวจสอบให้แน่ใจว่าคุณระบุเซิร์ฟเวอร์ VPN หลายตัวในไคลเอนต์ conf, vpn1.example.com, vpn2.example.com, vpn3 ..... แม้ว่าคุณจะให้หนึ่งหรือสองเหล่านี้ตอนนี้คุณให้ ตัวคุณเองเฮดรูม กำหนดค่าอย่างถูกต้องไคลเอนต์จะทำการลองใหม่โดยสุ่มจนกว่าพวกเขาจะพบที่ทำงาน

2) เราใช้อิมเมจเซิร์ฟเวอร์ AWS VPN ที่กำหนดเองและสามารถเพิ่มกำลังการผลิตได้ตามต้องการและ Amazon DNS (R53) จัดการด้าน DNS ของสิ่งต่าง ๆ มันแยกออกจากโครงสร้างพื้นฐานส่วนที่เหลือทั้งหมดของเราอย่างสมบูรณ์

3) ที่เซิร์ฟเวอร์ให้ใช้ netmask อย่างระมัดระวังเพื่อ จำกัด จำนวนผู้มีโอกาสเป็นลูกค้า ที่ควรบังคับให้ลูกค้าเข้าสู่เซิร์ฟเวอร์ทางเลือกเพื่อลดปัญหา CPU ฉันคิดว่าเรา จำกัด เซิร์ฟเวอร์ของเราไว้ที่ 300 คนหรือมากกว่านั้น ตัวเลือกนี้ค่อนข้างจะมีข้อ จำกัด ในส่วนของเรา - "ความรู้สึกไส้ใน" ถ้าคุณต้องการ

4) นอกจากนี้ที่จุดสิ้นสุดของเซิร์ฟเวอร์คุณควรใช้ไฟร์วอลล์อย่างระมัดระวัง ในแง่ง่ายเรามีการกำหนดค่าของเราเพื่อให้ลูกค้าสามารถเชื่อมต่อ VPN แต่เซิร์ฟเวอร์ไม่อนุญาตการเชื่อมต่อ ssh ทั้งหมดขาเข้ายกเว้นจากที่อยู่ IP ที่รู้จักกันอย่างเคร่งครัด เราสามารถ SSH ให้กับลูกค้าหากเราต้องการเป็นครั้งคราวพวกเขาไม่สามารถ SSH ให้เรา

5) อย่าพึ่ง OpenVPN ทำการเชื่อมต่อใหม่ให้คุณตอนท้ายไคลเอนต์ มันจะ 9 เท่าจาก 10 แต่บางครั้งมันก็ติด มีกระบวนการแยกต่างหากเพื่อรีเซ็ต / รีสตาร์ท openVPN ที่จุดสิ้นสุดไคลเอ็นต์เป็นประจำ

6) คุณต้องการวิธีสร้างคีย์เฉพาะสำหรับลูกค้าเพื่อให้คุณสามารถปฏิเสธพวกเขาบางครั้ง เราสร้างสิ่งเหล่านี้ภายในด้วยกระบวนการสร้างเซิร์ฟเวอร์ (PXEboot) ของเรา ไม่เคยเกิดขึ้นกับเรา แต่เรารู้ว่าเราสามารถทำได้

7) คุณจะต้องมีเครื่องมือการจัดการสคริปต์เพื่อตรวจสอบการเชื่อมต่อเซิร์ฟเวอร์ VPN ของคุณอย่างมีประสิทธิภาพ

มีเนื้อหาไม่มากเกี่ยวกับวิธีการทำสิ่งนี้โชคไม่ดี แต่เป็นไปได้ด้วยการกำหนดค่าอย่างระมัดระวัง


ขอบคุณมากสำหรับข้อมูลเชิงลึก ฉันประหลาดใจที่ปัญหาการ rekeying ส่งผลให้คุณมีลูกค้ากว่า 300 รายแล้ว ...
Steffen Müller

เพื่ออธิบาย - พวกเขายังไม่ได้ แต่ฉันไม่ได้ติดตามมันอย่างใดอย่างหนึ่ง .... : - / หมายเลข "300" ดูเหมือนสมเหตุสมผล หากเรามีปัญหาเราก็จะชนภาพ AWS ให้ใหญ่ขึ้น ฉันไม่เคยใกล้กับการเชื่อมต่อจำนวนมากบนเซิร์ฟเวอร์มาก่อนอาจจะประมาณ 100 สูงสุด แต่เราใช้เซิร์ฟเวอร์หลายเครื่องและพวกเขาประมาณยอดที่สอดคล้องกับ openvpn สุ่มเลือกปลายทางจากรายการที่รู้จัก
Aitch

คุณสามารถแบ่งปันรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้: "5) อย่าพึ่ง OpenVPN ทำการเชื่อมต่อใหม่ให้คุณที่ส่วนท้ายของลูกค้า 9 ครั้งจากทั้งหมด 10 ครั้ง แต่บางครั้งมันก็ติดอยู่แยกกระบวนการเพื่อ รีเซ็ต / รีสตาร์ท openVPN ที่จุดสิ้นสุดไคลเอ็นต์อย่างสม่ำเสมอ "
ดั๊ก

ขออภัยที่งานนั้น 4.5 ปีที่ผ่านมา (!) จำไม่ได้ แต่เกือบจะแน่นอนรายการกระบวนการบางอย่างฆ่าแล้วเริ่มบริการ
Aitch

(ฉันทำการตั้งค่าที่คุ้นเคยกับปัจจุบันมีอุปกรณ์ประมาณ 400 เครื่องบนเซิร์ฟเวอร์ VPN หนึ่งเครื่อง) คุณต้องตัดสินใจว่าจะทำอย่างไรเมื่อไม่สามารถเข้าถึง vpn หมดเวลาหรือถูกปฏิเสธ ช่วงเวลาลองส่งแบบสุ่มจะไม่ช่วยคุณตลอดไปและจะสร้างการรับส่งข้อมูลเท่านั้น ขึ้นอยู่กับปัญหาที่คุณต้องทำบางสิ่งบางอย่างบนไคลเอนต์บนไฟร์วอลล์ / DSL ซึ่งคุณมักจะไม่สามารถและเพื่อส่งระบบไปยังโหมดสลีป "meh, ถ่ายโอนข้อมูลในภายหลัง" หรือหากปัญหาคือเซิร์ฟเวอร์ VPN เอง . คุณสามารถประเมินสิ่งนั้นผ่านบันทึกและตัดสินใจตามนั้น การป้อนซ้ำยังไม่เป็นปัญหาสำหรับเรา
Dennis Nolte

3

อัปเดต 2018

ไม่แน่ใจว่าสิ่งที่มีการเปลี่ยนแปลงตั้งแต่ปี 2012 เพียงแค่ต้องการให้การปรับปรุงเป็นประสบการณ์ของฉันในปี 2018 เราได้ปรับใช้เครือข่าย openvpn คล้ายกับการตั้งค่า OP จุดสิ้นสุดของเราคือชิ้นส่วนลินุกซ์ที่เป่าเต็มแทนที่จะใช้อุปกรณ์ฝังตัว แต่ละจุดปลายมีมอนิเตอร์ที่ใช้แสดงข้อมูลและการเตือนภัยสำหรับไซต์นั้นและเซิร์ฟเวอร์ของเราช่วยให้เราสามารถชี้ไปที่ระยะไกลในจุดปลายทั้งหมดได้ เครือข่ายไม่ทำงานมากเกินไป แต่บางครั้งก็มีเซสชันระยะไกล 5-10 ครั้งพร้อมกัน

การใช้ openvpn รุ่นปัจจุบันที่ไคลเอนต์ประมาณ 100 บนรูปภาพสีฟ้ากับแกนเดียวและ 2gb ของ ram เราใช้หน่วยความจำประมาณ 0.7% โดยเฉลี่ยและการใช้ cpu เกือบตลอด 0% จากสิ่งที่ฉันพบสำหรับการทดสอบที่เล็กกว่านี้ฉันคิดว่าเซิร์ฟเวอร์ตัวเดียวที่มีสเปคที่เหมาะสมจะจัดการพร้อมกันได้ 50000 ถ้ามันมี RAM เพื่อรองรับ หากการใช้งาน ram ปรับขนาดเป็นเส้นตรงจากนั้น 16gb จะสามารถรองรับผู้ใช้ได้ 50,000 คนด้วยจำนวนที่มากพอบนเครื่อง openvpn เฉพาะ

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

ที่ 1000000 คุณจะต้องใช้ RAM 200 GB ในเครื่องเดียว (หากปรับขนาดเชิงเส้นเป็นพิเศษ) ในขณะที่เป็นไปได้ฉันคิดว่า ณ จุดนี้คุณจะต้องมี 5 เครื่องแต่ละตัวที่มี 64GB ของ RAM ดังนั้นคุณจึงไม่มีจุดเดียว ของความล้มเหลว การดำเนินการนี้ควรอนุญาตให้มีการบำรุงรักษารีสตาร์ทและทดแทนเครื่อง 1 หรือ 2 เครื่องโดยไม่มีปัญหาที่สำคัญ

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

เราได้เพิ่มจุดสิ้นสุด 74 จุดในหนึ่งปีนับตั้งแต่เริ่มใช้งาน ฉันหวังว่าจะยังคงเติบโตจำนวนนั้นอย่างมีนัยสำคัญและจะทำให้การปรับปรุงต่อไปถ้าเราได้ในระดับที่เหมาะสม


คุณสามารถแชร์รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้ได้: "5) อย่าพึ่งมันจะไม่ให้ความคิดเห็นในหัวข้อด้านบน แต่ฉันต้องการตอบคำถามนี้: OpenVPN ทำการเชื่อมต่อใหม่ให้คุณที่จุดสิ้นสุดของไคลเอ็นต์ 9 จะหมดเวลา 10 แต่บางครั้งก็ติดขัดมีกระบวนการแยกต่างหากเพื่อรีเซ็ต / รีสตาร์ท openVPN ที่ส่วนท้ายไคลเอ็นต์เป็นประจำ " - Doug 18 พฤษภาคม '17 เวลา 17:12
CraigZ

ขีด จำกัด จำนวนอักขระ ใช้หัวหน้างานเพื่อทำสิ่งนี้ ทำให้รีสตาร์ทโดยอัตโนมัติทุก ๆ 6-12 ชม.
CraigZ

1

ฉันกำลังมองหาปัญหาที่คล้ายกันถึงแม้ว่าจำนวนลูกค้าอาจจะกลายเป็นหลายร้อยอาจเป็นสองสามพัน

ฉันคิดว่าฉันไม่สามารถเชื่อมต่อลูกค้าทั้งหมดได้ตลอดเวลา

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

หากไม่มีทราฟฟิกในบางเวลา daemon ก็จะหยุดทำงาน

ปัญหาที่ฉันเผชิญอยู่ในขณะนี้ดูเหมือนจะเป็นไปไม่ได้ที่จะได้รับรายชื่อไคลเอนต์ VPN ที่เชื่อมต่อในปัจจุบัน ...


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