ถึงเวลาแล้วที่ VPN ไม่ใช่เครื่องมือแปลกใหม่สำหรับผู้ดูแลระบบที่มีหนวดมีเคราอีกต่อไป ผู้ใช้มีงานที่แตกต่างกัน แต่ความจริงก็คือทุกคนต้องการ VPN
ปัญหาของโซลูชั่น VPN ในปัจจุบันคือ กำหนดค่าให้ถูกต้องได้ยาก มีราคาแพงในการบำรุงรักษา และเต็มไปด้วยโค้ดเดิมที่มีคุณภาพที่น่าสงสัย
เมื่อหลายปีก่อน Jason A. Donenfeld ผู้เชี่ยวชาญด้านความปลอดภัยข้อมูลของแคนาดาตัดสินใจว่าเขาพอแล้วและเริ่มดำเนินการต่อไป
ข้อได้เปรียบที่อ้างสิทธิ์ของ WireGuard เหนือโซลูชัน VPN อื่น ๆ:
- ง่ายต่อการใช้.
- ใช้การเข้ารหัสที่ทันสมัย: กรอบโปรโตคอลเสียงรบกวน, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF ฯลฯ
- โค้ดขนาดกะทัดรัด อ่านง่าย ตรวจสอบช่องโหว่ได้ง่ายขึ้น
- ประสิทธิภาพสูง
- ชัดเจนและซับซ้อน
สเปค .
พบกระสุนเงินแล้วหรือยัง? ถึงเวลาที่จะฝัง OpenVPN และ IPSec แล้วหรือยัง? ฉันตัดสินใจที่จะจัดการกับเรื่องนี้ และในขณะเดียวกันฉันก็ทำ
หลักการทำงาน
หลักการทำงานสามารถอธิบายได้ดังนี้:
- มีการสร้างอินเทอร์เฟซ 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 ในอนาคตอันใกล้นี้
ผลลัพธ์มาตรฐานด้วย
ประสบการณ์การใช้งานของฉัน
ฉันไม่ใช่ผู้เชี่ยวชาญด้าน VPN ฉันเคยตั้งค่า OpenVPN ด้วยตนเองและมันก็น่าเบื่อมาก และฉันไม่ได้ลองใช้ IPSec ด้วยซ้ำ มีการตัดสินใจมากเกินไป เป็นเรื่องง่ายมากที่จะยิงตัวเองด้วยเท้า ดังนั้นฉันจึงใช้สคริปต์สำเร็จรูปเพื่อกำหนดค่าเซิร์ฟเวอร์เสมอ
ดังนั้นจากมุมมองของฉัน WireGuard โดยทั่วไปแล้วจึงเหมาะสำหรับผู้ใช้ การตัดสินใจระดับต่ำทั้งหมดนั้นกำหนดไว้ในข้อกำหนด ดังนั้นกระบวนการเตรียมโครงสร้างพื้นฐาน VPN ทั่วไปจึงใช้เวลาเพียงไม่กี่นาที แทบจะเป็นไปไม่ได้เลยที่จะโกงการกำหนดค่า
ขั้นตอนการติดตั้ง
คีย์การเข้ารหัสถูกสร้างขึ้นโดยยูทิลิตี้ 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
เพื่อประหยัดเวลาของฉัน (และของคุณ) ฉันจึงพัฒนา
ที่มา: will.com