WireGuard เป็น VPN ที่ยอดเยี่ยมแห่งอนาคตหรือไม่?

WireGuard เป็น VPN ที่ยอดเยี่ยมแห่งอนาคตหรือไม่?

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

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

เมื่อหลายปีก่อน Jason A. Donenfeld ผู้เชี่ยวชาญด้านความปลอดภัยข้อมูลของแคนาดาตัดสินใจว่าเขาพอแล้วและเริ่มดำเนินการต่อไป WireGuard. ขณะนี้ WireGuard กำลังเตรียมพร้อมสำหรับการรวมไว้ในเคอร์เนล Linux และยังได้รับการยกย่องอีกด้วย Linus Torvalds และ วุฒิสภาสหรัฐอเมริกา.

ข้อได้เปรียบที่อ้างสิทธิ์ของ WireGuard เหนือโซลูชัน VPN อื่น ๆ:

  • ง่ายต่อการใช้.
  • ใช้การเข้ารหัสที่ทันสมัย: กรอบโปรโตคอลเสียงรบกวน, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF ฯลฯ
  • โค้ดขนาดกะทัดรัด อ่านง่าย ตรวจสอบช่องโหว่ได้ง่ายขึ้น
  • ประสิทธิภาพสูง
  • ชัดเจนและซับซ้อน สเปค.

พบกระสุนเงินแล้วหรือยัง? ถึงเวลาที่จะฝัง OpenVPN และ IPSec แล้วหรือยัง? ฉันตัดสินใจที่จะจัดการกับเรื่องนี้ และในขณะเดียวกันฉันก็ทำ สคริปต์สำหรับการติดตั้งเซิร์ฟเวอร์ VPN ส่วนตัวโดยอัตโนมัติ.

หลักการทำงาน

หลักการทำงานสามารถอธิบายได้ดังนี้:

  • มีการสร้างอินเทอร์เฟซ WireGuard และกำหนดคีย์ส่วนตัวและที่อยู่ IP ให้กับอินเทอร์เฟซดังกล่าว โหลดการตั้งค่าของเพียร์อื่น ๆ แล้ว: กุญแจสาธารณะ, ที่อยู่ IP ฯลฯ
  • แพ็กเก็ต IP ทั้งหมดที่มาถึงอินเทอร์เฟซ WireGuard ถูกห่อหุ้มไว้ใน UDP และ ส่งมอบอย่างปลอดภัย เพื่อนคนอื่น ๆ
  • ลูกค้าระบุที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ในการตั้งค่า เซิร์ฟเวอร์จะจดจำที่อยู่ภายนอกของไคลเอ็นต์โดยอัตโนมัติเมื่อได้รับข้อมูลที่มีการรับรองความถูกต้องอย่างถูกต้องจากที่อยู่เหล่านั้น
  • เซิร์ฟเวอร์สามารถเปลี่ยนที่อยู่ IP สาธารณะได้โดยไม่รบกวนการทำงาน ในขณะเดียวกัน จะส่งการแจ้งเตือนไปยังไคลเอนต์ที่เชื่อมต่อ และพวกเขาจะอัปเดตการกำหนดค่าได้ทันที
  • มีการใช้แนวคิดการกำหนดเส้นทาง การกำหนดเส้นทาง Cryptokey. WireGuard ยอมรับและส่งแพ็กเก็ตตามคีย์สาธารณะของเพียร์ เมื่อเซิร์ฟเวอร์ถอดรหัสแพ็คเก็ตที่ได้รับการตรวจสอบความถูกต้องอย่างถูกต้อง ฟิลด์ src จะถูกตรวจสอบ ถ้ามันตรงกับการกำหนดค่า allowed-ips เพียร์ที่ได้รับการรับรองความถูกต้องแพ็คเก็ตจะได้รับโดยอินเทอร์เฟซ WireGuard เมื่อส่งแพ็กเก็ตขาออก กระบวนการที่เกี่ยวข้องจะเกิดขึ้น: ฟิลด์ dst ของแพ็กเก็ตจะถูกนำไปใช้และเลือกเพียร์ที่เกี่ยวข้อง แพ็กเก็ตจะถูกเซ็นชื่อด้วยคีย์ของมัน เข้ารหัสด้วยคีย์ของเพียร์ และส่งไปยังจุดสิ้นสุดระยะไกล .

ตรรกะหลักทั้งหมดของ WireGuard ใช้โค้ดน้อยกว่า 4 บรรทัด ในขณะที่ OpenVPN และ IPSec มีจำนวนบรรทัดนับแสนบรรทัด เพื่อรองรับอัลกอริธึมการเข้ารหัสที่ทันสมัย ​​จึงเสนอให้รวม API การเข้ารหัสใหม่ในเคอร์เนล Linux สังกะสี. ขณะนี้มีการถกเถียงกันว่านี่เป็นความคิดที่ดีหรือไม่

การปฏิบัติ

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

ผลลัพธ์มาตรฐานด้วย เว็บไซต์อย่างเป็นทางการ:

WireGuard เป็น VPN ที่ยอดเยี่ยมแห่งอนาคตหรือไม่?

ประสบการณ์การใช้งานของฉัน

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

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

ขั้นตอนการติดตั้ง อธิบายโดยละเอียด บนเว็บไซต์อย่างเป็นทางการ ฉันต้องการแยกหมายเหตุที่ยอดเยี่ยมออกจากกัน รองรับ OpenWRT.

คีย์การเข้ารหัสถูกสร้างขึ้นโดยยูทิลิตี้ wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

ถัดไป คุณต้องสร้างการกำหนดค่าเซิร์ฟเวอร์ /etc/wireguard/wg0.conf โดยมีเนื้อหาดังต่อไปนี้:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

และยกอุโมงค์ด้วยสคริปต์ wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

บนระบบที่มี systemd คุณสามารถใช้สิ่งนี้แทนได้ sudo systemctl start [email protected].

บนเครื่องไคลเอ็นต์ ให้สร้างการกำหนดค่า /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

และยกอุโมงค์ขึ้นในลักษณะเดียวกัน:

sudo wg-quick up /etc/wireguard/wg0.conf

สิ่งที่เหลืออยู่คือการกำหนดค่า NAT บนเซิร์ฟเวอร์เพื่อให้ไคลเอนต์สามารถเข้าถึงอินเทอร์เน็ตได้ เท่านี้ก็เสร็จเรียบร้อย!

ความสะดวกในการใช้งานและความกะทัดรัดของฐานโค้ดนี้เกิดขึ้นได้โดยการกำจัดฟังก์ชันการกระจายคีย์ ไม่มีระบบใบรับรองที่ซับซ้อนและเรื่องสยองขวัญขององค์กรทั้งหมดนี้ คีย์เข้ารหัสแบบสั้นมีการกระจายเหมือนกับคีย์ SSH แต่สิ่งนี้ทำให้เกิดปัญหา: WireGuard จะไม่ง่ายนักที่จะนำไปใช้กับเครือข่ายที่มีอยู่บางส่วน

ในบรรดาข้อเสียเป็นที่น่าสังเกตว่า WireGuard จะไม่ทำงานผ่านพร็อกซี HTTP เนื่องจากมีเพียงโปรโตคอล UDP เท่านั้นที่พร้อมใช้งานในการขนส่ง คำถามเกิดขึ้น: เป็นไปได้ไหมที่จะทำให้โปรโตคอลสับสน? แน่นอนว่านี่ไม่ใช่งานโดยตรงของ VPN แต่สำหรับ OpenVPN มีวิธีปลอมตัวเป็น HTTPS ซึ่งช่วยให้ผู้อยู่อาศัยในประเทศเผด็จการใช้อินเทอร์เน็ตได้อย่างเต็มที่

ผลการวิจัย

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

เพื่อประหยัดเวลาของฉัน (และของคุณ) ฉันจึงพัฒนา โปรแกรมติดตั้ง WireGuard อัตโนมัติ. ด้วยความช่วยเหลือนี้ คุณสามารถตั้งค่า VPN ส่วนตัวสำหรับตัวคุณเองและเพื่อนของคุณโดยไม่ต้องเข้าใจอะไรเกี่ยวกับมันเลย

ที่มา: will.com

เพิ่มความคิดเห็น