ดาวน์โหลด
เทคนิค··11 นาที

WireGuard กับ OpenVPN: เปรียบเทียบโปรโตคอล

ภาษา: EnglishالعربيةDeutschEspañolفارسیFrançaisहिन्दीBahasa IndonesiaItaliano日本語한국어PolskiPortuguêsРусскийTürkçeУкраїнськаTiếng Việt简体中文繁體中文

WireGuard และ OpenVPN เป็นสองโปรโตคอลที่บริการ VPN สำหรับผู้บริโภค นำเสนอกันมากที่สุด บทความนี้เปรียบเทียบทั้งสองในด้านการออกแบบการเข้ารหัส ประสิทธิภาพ ขนาดโค้ด ความเข้ากันได้กับแพลตฟอร์ม และคุณสมบัติด้านการใช้งาน — มิติต่าง ๆ ที่ส่งผลต่อพฤติกรรมจริงของบริการเมื่อใช้งานในสภาพแวดล้อมจริง

ความเป็นมาของทั้งสองโปรโตคอล

OpenVPN เปิดตัวในปี 2001 และกลายมาเป็นมาตรฐานโดยพฤตินัยในการใช้งาน VPN เชิงพาณิชย์ มันเป็นโครงการโอเพนซอร์สที่เขียนด้วยภาษา C ทำงานในพื้นที่ ผู้ใช้ (user space) และใช้ไลบรารี OpenSSL หรือ mbedTLS สำหรับการดำเนินการ ด้านการเข้ารหัส ความเก่าแก่และความยืดหยุ่นของมันได้สร้างชุดคุณสมบัติที่ กว้างขวางและการตั้งค่าที่รองรับได้หลากหลาย

WireGuard ใหม่กว่ามาก โปรโตคอลนี้เผยแพร่ครั้งแรกในปี 2016 และถูกผนวก เข้ากับเคอร์เนล Linux ในปี 2020 มันถูกออกแบบมาอย่างชัดเจนให้เรียบง่าย กว่ารุ่นก่อนหน้า ด้วยรอยเท้าโค้ดที่เล็กกว่า ชุดดั้งเดิมของการเข้ารหัส สมัยใหม่ที่จำกัด และการนำไปใช้ที่อยู่ในเคอร์เนลบนแพลตฟอร์มที่รองรับ Jason A. Donenfeld ผู้สร้างโปรโตคอลนี้ วางเป้าหมายการออกแบบไว้รอบ ๆ ความสามารถในการตรวจสอบและประสิทธิภาพ มากกว่าความสามารถในการปรับแต่ง

การออกแบบการเข้ารหัส

ทั้งสองโปรโตคอลต่างกันอย่างมากในแนวทางการเข้ารหัส WireGuard มาพร้อมกับ ชุดอัลกอริทึมที่ตายตัว ส่วน OpenVPN เปิดให้ผู้ดูแลเลือกได้จากหลายตัวเลือก

ชุดการเข้ารหัสตายตัวของ WireGuard

WireGuard ใช้ชุดการเข้ารหัสเพียงชุดเดียวที่อิงกับดั้งเดิมสมัยใหม่ องค์ประกอบประกอบด้วย ChaCha20 สำหรับการเข้ารหัส, Poly1305 สำหรับการ ยืนยันตัวตน, Curve25519 สำหรับการแลกเปลี่ยนกุญแจ, BLAKE2s สำหรับการ แฮช และ SipHash24 สำหรับการกระจายโหลด โดยมี Noise Protocol Framework เป็นตัวจัดการแฮนด์เชค

การกำหนดชุดให้ตายตัวมีผลสองประการ ประการแรก มันขจัดการต่อรองโปรโตคอล ซึ่งในอดีตเคยเป็นที่มาของการโจมตีแบบลดระดับ (downgrade) ในโปรโตคอลที่ อิงกับ TLS ประการที่สอง มันหมายความว่าการยกระดับการเข้ารหัสต้องอาศัย การเลื่อนเวอร์ชันของโปรโตคอล ไม่ใช่การเปลี่ยนการตั้งค่า

ความยืดหยุ่นในการตั้งค่าของ OpenVPN

OpenVPN รองรับการเลือกการเข้ารหัสได้หลายแบบผ่านไลบรารี TLS ที่อยู่ เบื้องหลัง การตั้งค่าทั่วไปได้แก่ AES-256-GCM สำหรับการเข้ารหัส, SHA256 สำหรับการยืนยันตัวตน และ ECDH สำหรับการแลกเปลี่ยนกุญแจ การใช้งาน OpenVPN รุ่นเก่าอาจใช้ BF-CBC หรือ AES-CBC ร่วมกับ HMAC ซึ่งอ่อนแอกว่า มากตามมาตรฐานสมัยใหม่

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

คุณลักษณะด้านประสิทธิภาพ

โดยทั่วไป WireGuard ให้ประสิทธิภาพเหนือกว่า OpenVPN บนฮาร์ดแวร์เดียวกัน มีสองปัจจัยที่อธิบายความแตกต่างส่วนใหญ่นี้

ประการแรก WireGuard ทำงานในเคอร์เนลบน Linux, macOS และ Windows ซึ่งหลีกเลี่ยงภาระในการย้ายทุกแพ็กเก็ตไปมาระหว่างเคอร์เนลกับพื้นที่ผู้ใช้ การนำไปใช้ในพื้นที่ผู้ใช้ของ OpenVPN นั้นพกพาได้ แต่ก็มีต้นทุนการสลับ คอนเท็กซ์ (context switch) ต่อแพ็กเก็ต

ประการที่สอง ChaCha20-Poly1305 เหมาะอย่างยิ่งกับหน่วยประมวลผลที่ไม่มี ชุดคำสั่ง AES โดยเฉพาะ ซึ่งพบได้ทั่วไปในอุปกรณ์มือถือที่ใช้สถาปัตยกรรม ARM ส่วน OpenVPN มักใช้ AES ซึ่งเร็วกว่าบนฮาร์ดแวร์ที่มี AES-NI แต่ช้า กว่าในที่อื่น

ในทางปฏิบัติ WireGuard มักให้ปริมาณงานที่สูงกว่า เวลาแฝงที่ต่ำกว่า และ การใช้งาน CPU ที่ลดลงเมื่อเทียบกับ OpenVPN บนอุปกรณ์ระดับผู้บริโภค ผลกระทบต่อแบตเตอรี่บนอุปกรณ์มือถือก็มักจะต่ำกว่าด้วยเช่นกัน

ขนาดโค้ดและขอบเขตการตรวจสอบ

ขนาดของฐานโค้ดสัมพันธ์อย่างหลวม ๆ กับความพยายามที่ต้องใช้ในการตรวจสอบ หาช่องโหว่ การนำไปใช้อ้างอิงของ WireGuard ประกอบด้วยโค้ดประมาณสี่พัน บรรทัด การนำไปใช้ในเคอร์เนล Linux ก็มีขนาดใกล้เคียงกัน

ในทางตรงกันข้าม OpenVPN ประกอบด้วยโค้ดราวเจ็ดหมื่นบรรทัด และต้องพึ่งพา ไลบรารี TLS — OpenSSL หรือ mbedTLS — ที่เพิ่มโค้ดอีกหลายแสนบรรทัดเข้าไป ในขอบเขตความเชื่อถือ ความแตกต่างของขนาดเพียงอย่างเดียวไม่ได้บ่งชี้ว่า WireGuard ปลอดภัยกว่า แต่มันส่งผลต่อความละเอียดถี่ถ้วนที่จะตรวจสอบการ นำไปใช้ได้

ความเข้ากันได้กับแพลตฟอร์ม

ทั้งสองโปรโตคอลได้รับการรองรับอย่างกว้างขวาง WireGuard มีการนำไปใช้ อย่างเป็นทางการสำหรับ Linux (ทั้งเคอร์เนลและพื้นที่ผู้ใช้), Windows, macOS, iOS, Android, FreeBSD และ OpenBSD โดยเฉพาะการรองรับ iOS นั้น ผสานรวมได้ดีผ่านเฟรมเวิร์ก iOS Network Extension

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

สำหรับการใช้งานใหม่บนระบบปฏิบัติการสมัยใหม่ WireGuard เป็นตัวเลือกที่ ตรงไปตรงมากว่า สำหรับสภาพแวดล้อมที่ต้องการความเข้ากันได้ในวงกว้าง — รวมถึงระบบรุ่นเก่า อุปกรณ์ฝังตัว หรือผลิตภัณฑ์องค์กรบางอย่าง — OpenVPN ยังคงมีความสำคัญอยู่

รูปแบบการตั้งค่า

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

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

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

ควรใช้ตัวไหนเมื่อใด

การเลือกระหว่างโปรโตคอลขึ้นอยู่กับข้อจำกัดของการใช้งาน

  • WireGuard เหมาะกว่าเมื่อ ประสิทธิภาพ ความเรียบง่าย ของโค้ด และการเข้ารหัสสมัยใหม่เป็นสิ่งสำคัญลำดับต้น เมื่อแพลตฟอร์ม เป้าหมายมีการรองรับในตัว และเมื่อการใช้งานสามารถยอมรับชุดการเข้ารหัส ที่ตายตัวได้
  • OpenVPN เหมาะกว่าเมื่อ จำเป็นต้องเข้ากันได้กับระบบ รุ่นเก่า เมื่อต้องการการผสานรวมกับการยืนยันตัวตนขององค์กร หรือเมื่อ การใช้งานต้องผ่านเครือข่ายที่จำกัดการรับส่งข้อมูล UDP (OpenVPN รองรับ การถอยกลับไปใช้ TCP แต่ WireGuard ไม่รองรับ)

บริการ VPN สำหรับผู้บริโภคสมัยใหม่จำนวนมากนำเสนอทั้งสองโปรโตคอลและเปิด ให้ผู้ใช้เลือกได้ ในทางตรงกันข้าม Snap VPN ใช้ WireGuard เพียงอย่างเดียว โดยผสานรวมผ่านเฟรมเวิร์ก iOS Network Extension การตัดสินใจนี้สะท้อนหลักการออกแบบที่ลดขอบเขตการนำ ไปใช้ให้เหลือเท่าที่จำเป็นสำหรับแพลตฟอร์มเป้าหมาย

หากต้องการภาพรวมว่า VPN ทำงานอย่างไรโดยทั่วไป โปรดดู บทแนะนำเกี่ยวกับ VPN ของเรา สำหรับการตั้งค่าจริงบน iPhone โปรดดู คู่มือการตั้งค่าบน iOS